Checkpoint ettevĂ”te Safe-Linking kaitsemehhanism, mis muudab eksploitide loomise keerukamaks, mĂ”jutades mĂ€lu eraldamist malloc'i kutsumisel. Safe-Linking ei takista tĂ€ielikult haavatavuste kasutamist, kuid minimaalse lisakulu korral muudab see mĂ€rkimisvÀÀrselt keerulisemaks teatud tĂŒĂŒpi eksploitide loomise, kuna lisaks ekspluateeritud mĂ€lu ĂŒletĂ€itumisele tuleb leida veel ĂŒks haavatavus, mis paljastab kuhja (heap) asukoha andmed mĂ€lus.
Safe-Linking'i rakendamiseks ettevalmistatud plaastrid on saadaval Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) ja Google TCMalloc jaoks, samuti pakutakse neid Chrome'i kaitseuuendamiseks.
Chromiumis on alates 2012. aastast juba olemas lahendus sarnase probleemi jaoks MaskPtr kaitsetehnika, kuid Checkpointi lahendus nÀitab paremat jÔudlust.
Pakutud plaastrid on juba kinnitatud ja need avaldatakse augustikuu vĂ€ljaandes ning Safe-Linking'i rakendamine on vaikimisi sisse lĂŒlitatud. uClibc-NG-s on Safe-Linking kaasa arvatud versioonis 1.0.33 ja sisaldub vaikesĂ€tetes. gperftools (vana tcmalloc) muudatused , kuid need pakutakse ĂŒhe jĂ€rgmise vĂ€ljaande valikuna.
Arendajad (uus tcmalloc) on keeldunud nende vastuvĂ”tmisest, , viidates oluliselt halvenenud jĂ”udlusele ja vajadusele lisada ulatuslikud testid, et regulaarselt kontrollida, kas kĂ”ik töötab korralikult. Checkpointi inseneride testid nĂ€itasid, et Safe-Linking meetod ei pĂ”hjusta tĂ€iendavat mĂ€lu kulu, ja mĂ€lu operatsioonide jĂ”udlus vĂ€heneb keskmiselt vaid 0.02%, kĂ”ige halvematel juhtudel 1.5% (vĂ”rdluseks, Chrome'is kasutatava meetodi kulu hinnatakse «alla 2%»). Safe-Linking'i sisselĂŒlitamine
tÀhendab 2-3 tÀiendava assembleri kÀsu tÀitmist iga free() kutsumise korral ja 3-4 kÀsu tÀitmist malloc() kutsumise korral. Algusfaaside kÀivitamine ja juhuslike vÀÀrtuste genereerimine ei ole vajalik.
Safe-Linking ei ole mĂ”eldud ainult erinevate heap'i realizatsioonide turvalisuse parandamiseks, vaid ka andmestruktuuride terviklikkuse kontrollimiseks, kus kasutatakse ĂŒhel linksed viiteid, mis asuvad vahetult ise buffer'ite kĂ”rval. Meetod on rakendamisel vĂ€ga lihtne ja nĂ”uab vaid ĂŒhe makro lisamist ja selle rakendamist jĂ€rgmise ploki viidete koodis (nĂ€iteks Glibci jaoks aitab vaid mĂ”nda rida koodis). Meetod koosneb jĂ€rgmistest muudatustest:
+#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 pĂ”hisisu on ASLR (mmap_base) randomiseerimise mehhanismi juhuslike andmete rakendamine ĂŒhel linksede loendite, nagu Fast-Bins ja TCache, kaitsmiseks. Enne, kui rakendatakse viit jĂ€rgmisel loendi elemendil, tehakse maskeerimise konversioon ja kontrollitakse mĂ€lulehe piiri jĂ€rgi. Viide asendatakse operatsiooni tulemusega â(L >> PAGE_SHIFT) XOR (P)â, kus P on viite vÀÀrtus ja L on mĂ€lu asukoht, kus seda viidet hoitakse.
SĂŒsteemi kasutamisel (Address Space Layout Randomization) mĂ”ned L bitid heap'i pĂ”hiaadressiga sisaldavad juhuslikke vÀÀrtusi, mida kasutatakse P kodeerimise vĂ”tmena (eraldatakse 12-bitise nihke abil 4096-baidiste lehtede jaoks). Selline manipuleerimine vĂ€hendab viidete haaramise riski exploite, kuna viidet ei hoita algses vormis ja selle asendamiseks on vajalik teada heap'i asetust. Lisaks sisaldab patĆĄi koodis ka tĂ€iendavat blooki joondamise kontrolli, mis ei vĂ”imalda rĂŒndajal viidet asendada joondamata vÀÀrtusega ja nĂ”uab teadmisi selle joondamise kohta, mille tĂ”ttu 64-bitistes sĂŒsteemides saab blokeerida 15 16-st rĂŒnnakust, mis ei arvestanud joondamist.
Meetod on efektiivne rĂŒnnakute kaitsmiseks, kus kasutatakse viidete osalist ĂŒmberkirjutamist (madalamate baitide muutmine), tĂ€ielikku viidete ĂŒmberkirjutamist (suunamine rĂŒndaja koodi) ja loendi asukoha muutmist joondamata aadressil. NĂ€iteks on nĂ€idatud, et Safe-Linking rakendamine malloc'is oleks vĂ”imaldanud hiljutise ekspluateeringu blokeerida. sama uurijate haavatavused Philips Hue Bridge'i nutika valgustuse puhul, mille pĂ”hjustas puhverdusĂŒlekanne ja mis vĂ”imaldab seadme ĂŒle kontrolli saada.
Allikas: opennet.ru
