Spoločnosť Checkpoint mechanizmus ochrany Safe-Linking, ktorý sťažuje vytváranie exploitov manipulujúcich s definovaním alebo zmenou ukazovateľov na vyhradené pamäťové bloky pri volaní malloc. Safe-Linking síce úplne neblokuje možnosť vykorisťovania zraniteľností, ale pri minimálnych nákladoch výrazne sťažuje vytváranie niektorých kategórií exploitov, pretože okrem vyžadovaného pretečenia bufferu je potrebné nájsť ešte jednu zraniteľnosť, ktorá spôsobuje únik informácií o umiestnení hromady (heap) v pamäti.
Opravy s implementáciou Safe-Linking sú pripravené pre Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) a Google TCMalloc, ako aj sú navrhnuté na modernizáciu ochrany v Chromium (v
Chromium je už od roku 2012 zabudovaná technika ochrany MaskPtr, zameraná na riešenie tej istej problematiky, avšak riešenie od Checkpoint ukazuje vyšší výkon).
Navrhnuté opravy sú už schválené na dodanie v augustom vydaní a zavedenie Safe-Linking bude zahrnuté predvolene. V uClibc-NG podpora Safe-Linking vydanie 1.0.33 a je zahrnuté predvolene. V gperftools (starý tcmalloc) zmeny , ale budú navrhnuté v jednej z budúcich verzií ako volba.
Vývojári (nový tcmalloc) odmietli prijať , odvolávajúc sa na výrazné zníženie výkonu a potrebu pridať rozšírené testy na pravidelnú kontrolu, že všetko funguje správne. Testovanie vykonané inžiniermi Checkpoint ukázalo, že metóda Safe-Linking nezvyšuje spotrebu pamäte, pričom výkon pri vykonávaní operácií s hromadou sa priemerne znižuje len o 0,02 %, a pri najhoršom scenári o 1,5 % (pre porovnanie, náklady v používanom v Chromium spôsobe sú hodnotené ako „menej ako 2 %“). Zahrnutie
Safe-Linking vedie k vykonaniu 2-3 dodatočných assemblerových inštrukcií pri každom volaní free() a 3-4 inštrukcií pri volaní malloc(). Spustenie štádií inicializácie a generovania náhodných hodnôt nie je potrebné.
Safe-Linking sa môže používať nielen na zvyšovanie bezpečnosti rôznych realizácií hromady, ale aj na pridávanie prostriedkov na kontrolu integrity do akýchkoľvek dátových štruktúr, v ktorých sa používajú jednokrúžkové zoznamy ukazovateľov umiestnených vedľa samotných buffrov. Metóda je veľmi jednoduchá na realizáciu a vyžaduje iba pridanie jedného makra a jeho aplikáciu na ukazovatele na nasledujúci blok v kóde (napríklad pre Glibc len niekoľko riadkov v kóde). Metóda spočíva v nasledujúcich zmenách:
+#define PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))
+#define REVEAL_PTR(ptr) PROTECT_PTR (&ptr, ptr)
— nextp = p->fd;
+ nextp = REVEAL_PTR (p->fd);
…
Podstata metódy spočíva v použití náhodných dát z mechanizmu randomizácie adries ASLR (mmap_base) na ochranu jednokrúžkových zoznamov, ako sú Fast-Bins a TCache. Pred aplikovaním na hodnotu ukazovateľa na nasledujúci prvok v zozname sa vykoná transformácia pomocou masky a kontrola zarovnania na hranici pamäťovej stránky. Ukazovateľ sa nahrádza výsledkom operácie „(L >> PAGE_SHIFT) XOR (P)“, kde P je hodnota ukazovateľa a L je umiestnenie v pamäti, kde sa tento ukazovateľ uchováva.
Pri použití v systéme (Address Space Layout Randomization) časť bitov L s základnou adresou hromady obsahuje náhodné hodnoty, ktoré sa používajú ako kľúč na kódovanie P (vyťahujú sa operáciou posunu o 12 bitov pre 4096-bajtové stránky). Takáto manipulácia znižuje riziko zachytenia ukazovateľa v exploite, pretože ukazovateľ sa neuchováva v pôvodnej podobe a na jeho nahradenie je potrebné poznať informácie o umiestnení hromady. Navyše, v kóde záplaty sa nachádza aj dodatočná kontrola zarovnania bloku, ktorá neumožňuje útočníkovi nahradiť ukazovateľ na nezarovnanú hodnotu a vyžaduje vedomosť o počte bitov, o ktoré bolo zarovnanie vykonané, čo na 64-bitových systémoch ďalej umožňuje zablokovať 15 z 16 pokusov o útoky, nezohľadňujúce zarovnanie.
Metóda je účinná na ochranu pred útokmi, v ktorých sa používajú čiastočné prepísania ukazovateľov (zmena nižších bajtov), úplné prepísanie ukazovateľov (presmerovanie na kód útočníka) a zmena pozície zoznamu na nezarovnanú adresu. Ako príklad sa ukazuje, že aplikácia Safe-Linking v malloc by mohla zablokovať exploatáciu nedávno tými istými výskumníkmi zraniteľnosti v inteligentnom osvetlení Philips Hue Bridge, spôsobenú preplnením vyrovnávacej pamäte a umožňujúcou získať kontrolu nad zariadením.
Zdroj: opennet.ru
