Plány na posilnenie bezpečnostného mechanizmu W^X OpenBSD

Theo De Raadt zdieľané plánuje posilniť mechanizmus ochrany pamäte W^X (Write XOR Execute). Podstatou mechanizmu je, že stránky pamäte procesov nemôžu byť súčasne prístupné na zápis a vykonávanie. Kód je teda možné spustiť až po zakázaní zápisu a zápis na pamäťovú stránku je možný až po zakázaní vykonávania. Mechanizmus W^X pomáha chrániť aplikácie v používateľskom priestore pred bežnými útokmi pretečenia vyrovnávacej pamäte, vrátane pretečenia zásobníka, a je aktívny v OpenBSD v predvolenom nastavení.

Od začiatku prác na W^X bolo jasné, že toto je dlhá cesta, keďže JIT využívalo značné množstvo aplikácií. Implementácie JIT možno rozdeliť do troch kategórií:

  • Prepínanie pamäte medzi stavmi W a X, akceptovanie „ceny“ systémového volania mprotect.
  • Vytváranie aliasov medzi dvojicou mapovaní W a X rovnakej pamäte.
  • Najviac „špinavá“ možnosť vyžaduje pamäťový model W|X, ktorý umožňuje simultánne nahrávanie a spúšťanie.

V súčasnosti výrazne menej programov využíva tretiu možnosť a viac využíva prvú a druhú možnosť. Keďže však bolo potrebné spúšťať programy s W|X JIT (hlavne Chromium a Iridum), bola pridaná možnosť pripojenia súborového systému „wxallowed“, ktorá umožňovala súčasné využitie pamäte na zápis aj spustenie v prípade, ak by spustiteľný ELF súbor je označený značkou „wxneeded“ a samotné aplikácie boli dodatočne chránené pomocou mechanizmov zástava и odhaliť obmedziť zoznam použitých systémových volaní a častí súborového systému, ktoré má aplikácia k dispozícii, resp.

Aby sa ešte viac skomplikovalo využívanie zraniteľností v takýchto aplikáciách, navrhuje sa doplnenie mechanizmu MAP_STACK, ktorý kontroluje, či sa systémové volanie vykonáva zo stránky zapisovateľnej pamäte. Ak je stránka zapisovateľná, proces je nútený ukončiť. Útočník tak nebude môcť zneužiť systémové volania a bude nútený pokúsiť sa nájsť potrebné miniaplikácie v implementácii JIT alebo dokonca vykonať náročnejšiu prácu s detekciou stupov systémových hovorov priamo vo vnútri. omylom prepojený libc.

Procesy Chrome/Iridium sú už celkom spoľahlivo chránené pomocou zástavy a odhalenia, ale odstránenie možnosti používať napríklad systémové volanie write(2) má samozrejme určitú výhodu, pretože útočníkovi spôsobuje ďalšie ťažkosti. Problémy však môžu nastať aj vtedy, ak implementácia JIT využíva natívne systémové volania z pamäte W|X. Je však dôvod dúfať, že to tak nebude, keďže ABI bolo niekoľkokrát menené, no nikto nikdy nehlásil problémy.

Zmeny sú už dostupné v bežných snímkach vetvy OpenBSD-Current, každý záujemca je pozvaný na testovanie.

Súvisiace novinky o vzhľade režimu v Chrome/Iridium si zaslúžia samostatný komentár Thea JITless. Z jeho pohľadu je to akceptovateľné pre niektoré modely použitia, ale asi nie pre všetky, keďže v tomto režime sa evidentne zvýši záťaž procesora. V súčasnosti bude Chrome väčšinou fungovať, ak zakážete „wxallowed“ pre /usr/local, aj keď sa môžu vyskytnúť problémy s niektorými rozšíreniami (príkladom je gostery). Tak či onak, Theo dúfa, že plnohodnotná práca v režime JITless bude v blízkej budúcnosti uvedená do plne funkčného stavu.

Zdroj: opennet.ru

Pridať komentár