Checkpoint pakkus välja Safe-Linkingi kaitsetehnika, mis muudab haavatavuste ärakasutamise keerulisemaks

Kontrollpunkti ettevõte esitatakse Ohutu linkimise kaitsemehhanism, mis raskendab ärakasutamiste loomist, mis manipuleerivad malloc-kutse täitmisel eraldatud puhvrite osutajate määratlemise või muutmisega. Turvaline linkimine ei blokeeri täielikult turvaaukude ärakasutamise võimalust, kuid minimaalse lisakuluga raskendab oluliselt teatud kategooriate ärakasutamiste loomist, kuna lisaks ekspluateeritava puhvri ületäitumisele on vaja leida veel üks haavatavus, mis põhjustab teabe leket kuhja paigutus mällu.

Turvalist linkimist rakendavad paigad on ette valmistatud Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) ja Google TCMalloc jaoks ning neid pakutakse ka Chromiumi kaitse uuendamiseks (in
Alates 2012. aastast on Chromium juba sisse ehitanud MaskPtr kaitsetehnika, mille eesmärk on sama probleem lahendada, kuid Checkpointi lahendus näitab suuremat jõudlust).
Soovitatud plaastrid on juba augustikuu väljalaskega tarnimiseks heaks kiidetud Glibc 3.32 ja Safe-Linking on vaikimisi lubatud. uClibc-NG toetab turvalist linkimist sisenes sisaldub versioonis 1.0.33 ja on vaikimisi lubatud. Muudatused gperftoolsis (vana tcmalloc) vastu võetud, kuid seda pakutakse valikuna tulevases versioonis.

Arendajad TCMalloc (uus tcmalloc) keeldus vastu võtmast muutma, viidates tugevale jõudluse halvenemisele ja vajadusele lisada ulatuslikke teste, et regulaarselt kontrollida, kas kõik toimib ootuspäraselt. Checkpointi inseneride testimine näitas, et Safe-Linking meetod ei too kaasa täiendavat mälutarbimist ning jõudlus kuhjaoperatsioonide sooritamisel väheneb keskmiselt vaid 0.02% ja halvimal juhul 1.5% (võrdluseks, üldkulud Chromiumis kasutatav meetod on hinnanguliselt "alla 2%"). Kaasamine
Turvalise linkimise tulemusel täidetakse 2–3 täiendavat koostekäsku iga kord, kui kutsutakse free() ja 3–4 käsku iga kord, kui malloc() kutsutakse. Initsialiseerimise ja juhusliku väärtuse genereerimise etappide käivitamine pole vajalik.

Checkpoint pakkus välja Safe-Linkingi kaitsetehnika, mis muudab haavatavuste ärakasutamise keerulisemaks

Turvalist linkimist saab kasutada mitte ainult erinevate hunnikute rakenduste turvalisuse parandamiseks, vaid ka terviklikkuse juhtelementide lisamiseks mis tahes andmestruktuuridele, mis kasutavad puhvrite endi kõrvale paigutatud osutite üksikult lingitud loendeid. Meetodit on väga lihtne rakendada ja see nõuab ainult ühe makro lisamist ja selle rakendamist koodi järgmise ploki osutitele (näiteks Glibc jaoks muudatused vaid paar koodirida). Meetod taandub järgmistele muudatustele:

+#define PROTECT_PTR(pos, ptr) \
+ ((__tüüp (ptr)) ((((suurus_t) pos) >> 12) ^ ((suurus_t) ptr)))

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

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

Meetodi põhiolemus on kasutada ASLR-i aadresside randomiseerimismehhanismi (mmap_base) juhuslikke andmeid, et kaitsta üksikult lingitud loendeid, nagu Fast-Bins ja TCache. Enne väärtuse rakendamist loendi järgmisele elemendile osutavale kursorile teostab see maski teisenduse ja kontrollib lehe joondamist. Kursor asendatakse operatsiooni "(L >> PAGE_SHIFT) XOR (P)" tulemusega, kus P on kursori väärtus ja L on mälukoht, kuhu kursor on salvestatud.

Checkpoint pakkus välja Safe-Linkingi kaitsetehnika, mis muudab haavatavuste ärakasutamise keerulisemaks

Kui seda kasutatakse süsteemis ASLR (Address Space Layout Randomization) osa L-bitist koos kuhja baasaadressiga sisaldab juhuslikke väärtusi, mida kasutatakse võtmena P kodeerimiseks (eraldatakse 12-bitise nihkeoperatsiooniga 4096-baidiste lehtede jaoks). See manipuleerimine vähendab kursori kaaperdamise ohtu ärakasutamisel, kuna kursorit ei salvestata algsel kujul ja selle asendamine nõuab teadmisi kuhja jaotusest. Lisaks sisaldab paigakood ka täiendavat ploki joonduse kontrolli, mis ei võimalda ründajal asendada kursorit joondamata väärtusega ning eeldab joondatud bittide arvu tundmist, mis 64-bitistes süsteemides võimaldab lisaks blokeerida. 15 rünnakukatset 16-st, mis ei võta joondust arvesse.

Meetod on tõhus kaitseks rünnakute eest, mis kasutavad osuti osalist ümberkirjutamist (madalate baitide muutmine), täielikku kursori ümberkirjutamist (ründaja koodile ümbersuunamist) ja loendi positsiooni muutmist joondamata aadressil. Näitena on näidatud, et Safe-Linkingi kasutamine mallocis võimaldaks hiljutist ärakasutamist blokeerida tuvastatud samad haavatavuse uurijad CVE-2020-6007 Philips Hue Bridge'i nutivalguses, mis on põhjustatud puhvri ülevoolust ja võimaldab teil seadme üle kontrolli saada.

Allikas: opennet.ru

Lisa kommentaar