Checkpoint je predlagal zaščitno tehniko Safe-Linking, ki otežuje izkoriščanje ranljivosti

Podjetje Checkpoint predstavljeno Zaščitni mehanizem Safe-Linking, ki otežuje ustvarjanje izkoriščanj, ki manipulirajo z definicijo ali spreminjanjem kazalcev na medpomnilnike, dodeljene pri izvajanju klica malloc. Safe-Linking ne blokira popolnoma možnosti izkoriščanja ranljivosti, vendar z minimalnimi stroški bistveno oteži ustvarjanje določenih kategorij podvigov, saj je poleg izkoriščenega prelivanja medpomnilnika treba najti še kakšno ranljivost, ki povzroča uhajanje informacij o postavitev kopice v pomnilnik.

Popravki, ki izvajajo varno povezovanje, so bili pripravljeni za Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) in Google TCMalloc, predlagani pa so tudi za nadgradnjo zaščite v Chromiumu (v
Od leta 2012 je Chromium že vgradil zaščitno tehniko MaskPtr, namenjeno reševanju istega problema, vendar rešitev iz Checkpointa kaže večjo zmogljivost).
Predlagani popravki so bili že odobreni za dostavo v avgustovski izdaji Glibc 3.32 in Varno povezovanje bo privzeto omogočeno. uClibc-NG podpira varno povezovanje vnesel vključeno v izdajo 1.0.33 in je privzeto omogočeno. Spremembe v gperftools (stari tcmalloc) sprejeto, vendar bo na voljo kot možnost v prihodnji izdaji.

Razvijalci TCMalloc (novo tcmalloc) ni hotel sprejeti spremenite, ki navaja resno poslabšanje zmogljivosti in potrebo po dodajanju obsežnih testov za redno preverjanje, ali vse deluje po pričakovanjih. Testiranje inženirjev Checkpoint je pokazalo, da metoda Safe-Linking ne povzroča dodatne porabe pomnilnika, zmogljivost pri izvajanju kopičnih operacij pa se v povprečju zmanjša le za 0.02 %, v najslabšem primeru pa za 1.5 % (za primerjavo, režijski stroški v metoda, uporabljena v Chromiumu, je ocenjena na »manj kot 2 %«). Vključevanje
Posledica varnega povezovanja je 2-3 dodatna navodila za sestavljanje, ki se izvedejo ob vsakem klicu free(), in 3-4 navodila ob vsakem klicu malloc(). Izvajanje stopenj inicializacije in generiranja naključnih vrednosti ni potrebno.

Checkpoint je predlagal zaščitno tehniko Safe-Linking, ki otežuje izkoriščanje ranljivosti

Varno povezovanje je mogoče uporabiti ne le za izboljšanje varnosti različnih implementacij kopice, ampak tudi za dodajanje kontrol celovitosti vsem podatkovnim strukturam, ki uporabljajo enojno povezane sezname kazalcev, postavljenih poleg samih medpomnilnikov. Metoda je zelo preprosta za implementacijo in zahteva le dodajanje enega makra in njegovo uporabo za kazalce na naslednji blok v kodi (na primer za Glibc spremembe le nekaj vrstic kode). Metoda je sestavljena iz naslednjih sprememb:

+#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);
...

Bistvo metode je uporaba naključnih podatkov iz mehanizma randomizacije naslovov ASLR (mmap_base) za zaščito enojno povezanih seznamov, kot sta Fast-Bins in TCache. Preden se vrednost uporabi za kazalec na naslednji element na seznamu, izvede pretvorbo maske in preveri poravnavo strani. Kazalec se nadomesti z rezultatom operacije "(L >> PAGE_SHIFT) XOR (P)", kjer je P vrednost kazalca, L pa pomnilniška lokacija, kjer je kazalec shranjen.

Checkpoint je predlagal zaščitno tehniko Safe-Linking, ki otežuje izkoriščanje ranljivosti

Pri uporabi v sistemu ASLR (Address Space Layout Randomization) del L bitov z osnovnim naslovom kopice vsebuje naključne vrednosti, ki se uporabljajo kot ključ za kodiranje P (izvlečen z 12-bitno operacijo premika za 4096-bajtne strani). Ta manipulacija zmanjša tveganje ugrabitve kazalca pri izkoriščanju, saj kazalec ni shranjen v izvirni obliki in je za njegovo zamenjavo potrebno poznavanje dodeljevanja kopice. Poleg tega koda popravka vsebuje tudi dodatno preverjanje poravnave blokov, ki napadalcu ne dovoljuje zamenjave kazalca z neporavnano vrednostjo in zahteva poznavanje števila bitov, ki so poravnani, kar v 64-bitnih sistemih dodatno omogoča blokiranje 15 od 16 poskusov napada, ki ne upoštevajo poravnave.

Metoda je učinkovita za zaščito pred napadi, ki uporabljajo delno prepisovanje kazalca (spreminjanje nizkih bajtov), ​​popolno prepisovanje kazalca (preusmerjanje na kodo napadalca) in spreminjanje položaja seznama na neporavnanem naslovu. Kot primer je prikazano, da bi uporaba varnega povezovanja v malloc nedavno omogočila blokiranje izkoriščanja ugotovljeno s strani istih raziskovalcev ranljivosti CVE-2020-6007 v pametni luči Philips Hue Bridge, ki jo povzroči prepolnitev medpomnilnika in vam omogoča nadzor nad napravo.

Vir: opennet.ru

Dodaj komentar