Checkpoint navrhol techniku ​​ochrany Safe-Linking, ktorá sťažuje zneužitie zraniteľností

Spoločnosť Checkpoint Company представила Ochranný mechanizmus Safe-Linking, ktorý sťažuje vytváranie exploitov, ktoré manipulujú s definíciou alebo úpravou ukazovateľov na vyrovnávacie pamäte pridelené pri vykonávaní volania malloc. Safe-Linking úplne neblokuje možnosť zneužitia zraniteľností, no s minimálnou réžiou výrazne komplikuje vytváranie určitých kategórií exploitov, keďže okrem zneužiteľného pretečenia buffera je potrebné nájsť ďalšiu zraniteľnosť, ktorá spôsobí únik informácií o umiestnenie haldy v pamäti.

Opravy implementujúce Safe-Linking boli pripravené pre Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) a Google TCMalloc a sú navrhnuté aj na aktualizáciu ochrany v prehliadači Chromium (v
Od roku 2012 má Chromium už zabudovanú ochrannú techniku ​​MaskPtr zameranú na riešenie rovnakého problému, ale riešenie od Checkpoint vykazuje vyšší výkon).
Navrhované opravy už boli schválené na doručenie v augustovom vydaní Glibc 3.32 a Bezpečné prepojenie bude predvolene povolené. uClibc-NG podporuje Safe-Linking zadané zahrnuté vo vydaní 1.0.33 a je predvolene povolené. Zmeny v gperftools (starý tcmalloc) prijatý, ale bude ponúkaná ako voliteľná možnosť v budúcom vydaní.

Vývojári TCMalloc (nový tcmalloc) odmietol prijať zmena, citujúc vážne zníženie výkonu a potrebu pridať rozsiahle testy na pravidelnú kontrolu, či všetko funguje podľa očakávania. Testovanie inžiniermi Checkpoint ukázalo, že metóda Safe-Linking nevedie k ďalšej spotrebe pamäte a výkon pri vykonávaní haldových operácií sa zníži v priemere len o 0.02 % a v najhoršom prípade o 1.5 % (pre porovnanie, réžia v metóda použitá v Chromium sa odhaduje na „menej ako 2 %“). Začlenenie
Bezpečné prepojenie má za následok, že pri každom volaní free() sa vykonajú 2-3 ďalšie inštrukcie zostavy a pri každom volaní malloc() 3-4 inštrukcie. Spustenie fáz inicializácie a generovania náhodných hodnôt sa nevyžaduje.

Checkpoint navrhol techniku ​​ochrany Safe-Linking, ktorá sťažuje zneužitie zraniteľností

Safe-Linking možno použiť nielen na zlepšenie bezpečnosti rôznych implementácií haldy, ale aj na pridanie kontroly integrity do akýchkoľvek dátových štruktúr, ktoré používajú jednotlivo prepojené zoznamy ukazovateľov umiestnených vedľa samotných vyrovnávacích pamätí. Metóda je veľmi jednoduchá na implementáciu a vyžaduje iba pridanie jedného makra a jeho použitie na ukazovatele na ďalší blok v kóde (napríklad pre Glibc zmeny len pár riadkov kódu). Metóda sa scvrkáva na nasledujúce zmeny:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) poz) >> 12) ^ ((size_t) ptr)))

+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)

- nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);
...

Podstatou metódy je použitie náhodných údajov z mechanizmu randomizácie adries ASLR (mmap_base) na ochranu jednotlivo prepojených zoznamov, ako sú Fast-Bins a TCache. Predtým, ako sa hodnota použije na ukazovateľ na ďalší prvok v zozname, vykoná konverziu masky a skontroluje zarovnanie stránky. Ukazovateľ je nahradený výsledkom operácie "(L >> PAGE_SHIFT) XOR (P)", kde P je hodnota ukazovateľa a L je pamäťové miesto, kde je ukazovateľ uložený.

Checkpoint navrhol techniku ​​ochrany Safe-Linking, ktorá sťažuje zneužitie zraniteľností

Pri použití v systéme ASLR (Náhodnosť rozloženia adresného priestoru) časť L bitov so základnou adresou haldy obsahuje náhodné hodnoty, ktoré sa používajú ako kľúč na kódovanie P (extrahované 12-bitovou operáciou posunu pre 4096-bajtové stránky). Táto manipulácia znižuje riziko únosu ukazovateľa pri exploite, pretože ukazovateľ nie je uložený v pôvodnej podobe a jeho nahradenie vyžaduje znalosť alokácie haldy. Okrem toho opravný kód obsahuje aj dodatočnú kontrolu zarovnania bloku, ktorá útočníkovi neumožňuje nahradiť ukazovateľ nezarovnanou hodnotou a vyžaduje znalosť počtu zarovnaných bitov, čo na 64-bitových systémoch navyše umožňuje blokovanie. 15 zo 16 pokusov o útok, ktoré nezohľadňujú zarovnanie.

Metóda je účinná na ochranu pred útokmi, ktoré využívajú čiastočné prepisovanie ukazovateľa (zmena nízkych bajtov), ​​úplné prepisovanie ukazovateľa (presmerovanie na kód útočníka) a zmenu pozície zoznamu na nezarovnanej adrese. Ako príklad sa ukazuje, že použitie funkcie Safe-Linking v malloc by v poslednej dobe umožnilo blokovanie využívania identifikované od tých istých výskumníkov v oblasti zraniteľnosti CVE-2020 6007, v inteligentnom svetle Philips Hue Bridge, ktoré je spôsobené pretečením vyrovnávacej pamäte a umožňuje vám získať kontrolu nad zariadením.

Zdroj: opennet.ru

Pridať komentár