Checkpoint pakkus välja Safe-Linking kaitsetehnika, mis raskendab haavatavuste ärakasutamist

Checkpointi ettevõte esituse 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 Glibc 3.32 ja Safe-Linking rakendamine lisatakse vaikeseadetena. Uuendatud toetas uClibc-NG on väljaande 1.0.33 koos vaikeseadete aktiveerimisega. gperftools (vana tcmalloc) muudatused on vastu võetud, kuid need pakutakse tulevastes väljaannetes valikuna.

Arendajad TCMalloc (uus tcmalloc) ei ole vastu võetud muudatus, 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(). Запуск стадий инициализации и генерации случайных значений не требуется.

Checkpoint pakkus välja Safe-Linking kaitsetehnika, mis raskendab haavatavuste ärakasutamist

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. muudetakse 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.

Checkpoint pakkus välja Safe-Linking kaitsetehnika, mis raskendab haavatavuste ärakasutamist

Süsteemis kasutamisel ASLR (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. mis tuvastati samade uurijate haavatavus CVE-2020-6007 Philips Hue Bridge'i nutikas valguses, mis on põhjustatud puhvri ületäitumisest ja võimaldab seadme kontrolli alla saada.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster