Checkpoint-ek Safe-Linking babesteko teknika proposatu zuen, zailduz ahultasunak ustiatzea

Checkpoint konpainia aurkeztu Safe-Linking babes-mekanismoa, malloc dei bat exekutatzen denean esleitutako buffer-erakusleen definizioa edo aldaketa manipulatzen duten ustiapenak sortzea zaila egiten duena. Safe-Linking-ek ez du erabat blokeatzen ahuleziak ustiatzeko aukera, baina gainkostu minimoarekin ustiapen-kategoria jakin batzuen sorrera nabarmen zailtzen du, izan ere, ustiagarri den buffer gainezkatzeaz gain, beharrezkoa da beste ahultasun bat aurkitzeari buruzko informazioa isurtzea eragiten duena. memorian pila jartzea.

Safe-Linking inplementatzen duten adabakiak prestatu dira Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) eta Google TCMalloc-entzat, eta Chromium-en babesa berritzeko ere proposatzen dira.
2012az geroztik, Chromium-ek MaskPtr babes-teknika eraiki du dagoeneko arazo bera konpontzera zuzenduta, baina Checkpoint-en irtenbideak errendimendu handiagoa erakusten du).
Iradokitako adabakiak dagoeneko onartu dira abuztuko bertsioan entregatzeko Glibc 3.32 eta Safe-Linking gaituta egongo da lehenespenez. uClibc-NG-k Safe-Linking onartzen du Idatzitako 1.0.33 bertsioan sartuta dago eta lehenespenez gaituta dago. gperftools-en aldaketak (tcmalloc zaharra) onartua, baina etorkizuneko bertsio batean aukera gisa eskainiko da.

Garatzaileak TCMalloc (tcmalloc berria) onartzeari uko egin zion aldaketaren, errendimenduaren degradazio larria eta proba zabalak gehitzeko beharra aipatuz, dena espero bezala funtzionatzen duela aldian-aldian egiaztatzeko. Checkpoint-eko ingeniariek egindako probak erakutsi zuten Safe-Linking metodoak ez duela memoria-kontsumo gehigarririk ekartzen, eta heap eragiketak egitean errendimendua % 0.02 baino ez dela murrizten batez beste, eta kasurik txarrenean % 1.5 (konparazio baterako, gainkostua). Chromium-en erabiltzen den metodoa "% 2 baino gutxiago" dela kalkulatzen da). Inklusioa
Safe-Linking-ek free() deitzen den bakoitzean 2-3 muntaketa instrukzio gehigarri exekutatuko dituzte eta 3-4 instrukzio malloc() deitzen den bakoitzean. Hasierako eta ausazko balioak sortzeko etapak exekutatzen ez dira beharrezkoak.

Checkpoint-ek Safe-Linking babesteko teknika proposatu zuen, zailduz ahultasunak ustiatzea

Safe-Linking erabil daiteke hainbat heap inplementazioen segurtasuna hobetzeko ez ezik, bufferen ondoan jarritako erakusle-zerrenda bakarrean estekatutako zerrendak erabiltzen dituzten datu-egituretan osotasun-kontrolak gehitzeko ere. Metodoa ezartzeko oso erraza da eta makro bat gehitzea eta kodeko hurrengo blokeko erakusleei aplikatzea eskatzen du (adibidez, Glibc-erako aldaketak kode lerro batzuk besterik ez). Metodoa aldaketetan oinarritzen da:

+#defini PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((tamain_t) pos) >> 12) ^ ((tamain_t) ptr)))

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

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

Metodoaren funtsa ASLR helbideak aleatorizatzeko mekanismoaren (mmap_base) ausazko datuak erabiltzea da, estekatutako zerrendak banaka babesteko, hala nola Fast-Bins eta TCache. Balioa zerrendako hurrengo elementurako erakusle bati aplikatu aurretik, maskara bihurketa bat egiten du eta orrialdeen lerrokatzea egiaztatzen du. Erakuslea "(L >> PAGE_SHIFT) XOR (P)" eragiketaren emaitzarekin ordezkatzen da, non P erakuslearen balioa den eta L erakuslea gordetzen duen memoria-kokapena den.

Checkpoint-ek Safe-Linking babesteko teknika proposatu zuen, zailduz ahultasunak ustiatzea

Sisteman erabiltzen denean ASLR (Helbide-espazio-diseinuaren ausazkotasuna) piloaren oinarri-helbidea duten L biten zatiak P kodetzeko gako gisa erabiltzen diren ausazko balioak ditu (12 byte-ko orrialdeetarako 4096 biteko desplazamendu-eragiketaz aterata). Manipulazio honek ustiapen batean erakuslea bahitzeko arriskua murrizten du, erakuslea ez baita jatorrizko forman gordetzen eta hura ordezkatzeak pilaren esleipena ezagutzea eskatzen du. Horrez gain, adabaki-kodeak blokeen lerrokatzearen egiaztapen gehigarri bat ere badu, erasotzaileak ez dion erakuslea lerrokatu gabeko balio batekin ordezkatzea ahalbidetzen eta lerrokatuta dauden bit-kopuruaren ezagutza eskatzen duena, 64 biteko sistemetan blokeatzea ahalbidetzen duena. Lerrokatzea kontuan hartzen ez duten 15 eraso saiakeretatik 16 .

Metodoa eraginkorra da erakusleen berridazketa partziala (byte baxuak aldatzea), erakusleen berridazketa osoa (erasotzailearen kodera birbideratzea) eta zerrendaren posizioa lerrokatu gabeko helbide batean aldatzeko erabiltzen duten erasoetatik babesteko. Adibide gisa, erakusten da Malloc-en Safe-Linking erabiltzeak duela gutxi ustiapena blokeatzea ahalbidetuko luke. identifikatu ahultasun ikertzaile berdinek CVE-2020-6007 Philips Hue Bridge argi adimendunean, buffer gainezka batek eragindakoa eta gailua kontrolatzeko aukera ematen duena.

Iturria: opennet.ru

Gehitu iruzkin berria