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 toob kaasa 2-3 tÀiendava assembleri kÀsu tÀitmise iga free() vÀljakutse korral ja 3-4 kÀsu malloc() vÀljakutse korral. Algatamise ja juhuslike vÀÀrtuste genereerimise etappide kÀivitamine pole vajalik.
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
