Checkpointi ettevõte Safe-Linking kaitsemehhanism, mis raskendab eksploitide loomist, mis manipuleerivad malloc-i kutsumise käigus eraldatud puhvrite aadresside määratlemise või muutmisega. Safe-Linking ei blokeeri täielikult haavatavuste ekspluateerimise võimalust, kuid minimaalsete käsitsikandmise kuludega muudab teatud kategooriate eksploitide loomise oluliselt keerulisemaks, kuna lisaks eksploateeritavale puhvri ülevoolule tuleb leida veel üks haavatavus, mis põhjustab mälu sirgjoone lekke (heap).
Safe-Linkingut rakendavaid plaastrid on valmistatud Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) ja Google TCMalloc jaoks ning on ette pandud kaitsestrateegia täiustamiseks Chromiumis (
Chromiumis on alates 2012. aastast juba sisse ehitatud sama probleemi lahendamise tehnika MaskPtr, kuid Checkpointi lahendus näitab suuremat jõudlust).
Pakutud plaastrid on juba heaks kiidetud käesoleva aasta augusti väljaandele ja Safe-Linking rakendamine lisatakse vaikeseadetena. Uuendatud toetas uClibc-NG väljaande 1.0.33 koos vaikeseadete aktiveerimisega. gperftools (vana tcmalloc) muudatused , kuid need pakutakse tulevastes väljaannetes valikuna.
Arendajad (uus tcmalloc) ei ole vastu võetud , viidates dramaatsele jõudluse langusele ja vajadusele lisada laiendatud teste, et regulaarselt kontrollida, kas kõik töötab korrektselt. Checkpointi inseneride testid näitasid, et Safe-Linking meetod ei causa täiendavat mälukulu ning jõudlus heaps'iga töötamisel väheneb keskmiselt vaid 0,02%, halvimatel juhtudel aga 1,5% (võrdluseks, Chromiumi meetodite ülejäänud kulud on hinnatud kui „vähema kui 2%“). Safe-Linki aktiveerimine toob kaasa 2-3 täiendava assembleri instruktsiooni igal free() kutsumisel ja 3-4 instruktsiooni malloc() kutsumisel. Algatamise ja juhuslike väärtuste genereerimise etapid ei ole vajalikud.
Safe-Linking приводит к выполнению 2-3 дополнительных ассемблерных инструкций при каждом вызове free() и 3-4 инструкций при вызове malloc(). Запуск стадий инициализации и генерации случайных значений не требуется.
Safe-Linking saab kasutada mitte ainult erinevate kuhjade (heap) turvalisuse suurendamiseks, vaid ka terviklikkuse kontrollimise vahendite lisamiseks mis tahes and structures, kus kasutatakse ühekettalisi osutite loendeid, mis asuvad vahetult buffere kõrval. Meetod on väga lihtne rakendada ja nõuab vaid ühe makro lisamist ja selle rakendamist järgmise ploki osutitele koodis (näiteks Glibci jaoks. vaid mõned read koodis). Meetod põhineb järgmistel muudatustel:
+#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);
…
Meetodi olemus seisneb ASLR (mmap_base) aadresside juhuslikkuse mehhanismist saadud juhuslike andmete rakendamises ühekettaliste loendite, nagu Fast-Bins ja TCache, kaitsmiseks. Enne järgmiseks loendis asuva elemendi osutaja väärtusele rakendatakse maskeerimist ja jälgitakse mälu lehe piiri kohandamist. Osutaja asendatakse operatsiooni tulemusega „(L >> PAGE_SHIFT) XOR (P)”, kus P on osutaja väärtus ja L on asukoht mälus, kus see osutaja hoitakse.
Süsteemis kasutamisel (Address Space Layout Randomization) bitide L põhiväärtuse kuhja aadress sisaldab juhuslikke väärtusi, mida kasutatakse P kodeerimise võtmena (saadakse 12-bitise nihkeoperatsiooni abil 4096-baidiste lehekülgede jaoks). Sarnane manipuleerimine vähendab pointeri haaramise riski ekspluateerimises, kuna pointeri ei salvestata algses vormis ning selle asendamiseks on vajalik teada kuhja paiknemise teavet. Lisaks on plaastrikoodis olemas ka täiendav ploki joondamise kontroll, mis ei luba ründajal asendada pointerit joondamata väärtusega ja nõuab teadmisi selle kohta, kui palju bite on joondamiseks kasutatud, mis 64-bitistel süsteemidel veelgi takistab 15 16-st rünnaku katset, mis ei arvestanud joondamist.
Meetod on tõhus kaitse meetodite vastu, kus kasutatakse pointerite osalist ülekirjutamist (madalamate baitide muutmine), pointerite täielikku ümberkirjutamist (suunamine ründaja koodile) ja positsiooni vahetamist joondamata aadressil. Näiteks on näidatud, et Safe-Linking rakendamine malloc'is võimaldaks blokeerida hiljuti ekspluateerimist. samade uurijate haavatavus Philips Hue Bridge'i nutikas valguses, mis on põhjustatud puhvri ületäitumisest ja võimaldab seadme kontrolli alla saada.
Allikas: opennet.ru
