Checkpoint je predložio zaštitnu tehniku ​​Safe-Linking, što otežava iskorištavanje ranjivosti

Checkpoint Company predstavljen Zaštitni mehanizam Safe-Linking, koji otežava kreiranje eksploata koji manipulišu definicijom ili modifikacijom pokazivača na bafere dodeljene prilikom izvršavanja malloc poziva. Safe-Linking ne blokira u potpunosti mogućnost iskorišćavanja ranjivosti, ali uz minimalne troškove značajno komplikuje kreiranje određenih kategorija eksploatacije, jer je pored eksploatibilnog prekoračenja bafera potrebno pronaći još jednu ranjivost koja uzrokuje curenje informacija o postavljanje gomile u memoriju.

Zakrpe koje implementiraju Safe-Linking pripremljene su za Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) i Google TCMalloc, a također su predložene za nadogradnju zaštite u Chromiumu (u
Od 2012. Chromium je već ugradio MaskPtr tehniku ​​zaštite koja ima za cilj rješavanje istog problema, ali rješenje iz Checkpointa pokazuje bolje performanse).
Predložene zakrpe su već odobrene za isporuku u avgustovskom izdanju Glibc 3.32 i Sigurno povezivanje će biti omogućeno po defaultu. uClibc-NG podržava Safe-Linking ušao uključeno u izdanje 1.0.33 i omogućeno je po defaultu. Promjene u gperftools-u (stari tcmalloc) prihvaćeno, ali će biti ponuđen kao opcija u budućem izdanju.

Programeri TCMalloc (novi tcmalloc) odbio je prihvatiti amandman, navodeći ozbiljnu degradaciju performansi i potrebu za dodavanjem opsežnih testova kako bi se redovno provjeravalo da li sve radi kako se očekuje. Testiranje inženjera Checkpointa pokazalo je da metoda Safe-Linking ne dovodi do dodatne potrošnje memorije, a performanse pri izvođenju heap operacija su u prosjeku smanjene za samo 0.02%, au najgorem slučaju za 1.5% (za poređenje, režijski troškovi u metoda koja se koristi u Chromiumu procjenjuje se na „manje od 2%“). Inkluzija
Safe-Linking rezultira 2-3 dodatne asemblerske instrukcije koje se izvršavaju svaki put kada se pozove free(), i 3-4 instrukcije svaki put kada se pozove malloc(). Izvođenje faza inicijalizacije i generiranja slučajnih vrijednosti nije potrebno.

Checkpoint je predložio zaštitnu tehniku ​​Safe-Linking, što otežava iskorištavanje ranjivosti

Sigurno povezivanje se može koristiti ne samo za poboljšanje sigurnosti raznih implementacija hrpe, već i za dodavanje kontrola integriteta svim strukturama podataka koje koriste jednostruko povezane liste pokazivača postavljenih pored samih bafera. Metoda je vrlo jednostavna za implementaciju i zahtijeva samo dodavanje jednog makroa i primjenu na pokazivače na sljedeći blok u kodu (na primjer, za Glibc se mijenja samo nekoliko linija koda). Metoda se svodi na sljedeće promjene:

+#define PROTECT_PTR(poz, 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);
...

Suština metode je korištenje nasumičnih podataka iz ASLR mehanizma randomizacije adresa (mmap_base) za zaštitu jednostruko povezanih lista kao što su Fast-Bins i TCache. Prije nego što se vrijednost primijeni na pokazivač na sljedeći element na listi, vrši konverziju maske i provjerava poravnanje stranice. Pokazivač je zamijenjen rezultatom operacije "(L >> PAGE_SHIFT) XOR (P)", gdje je P vrijednost pokazivača, a L memorijska lokacija na kojoj je pokazivač pohranjen.

Checkpoint je predložio zaštitnu tehniku ​​Safe-Linking, što otežava iskorištavanje ranjivosti

Kada se koristi u sistemu ASLR (Address Space Layout Randomization) dio L bitova sa baznom adresom hrpe sadrži nasumične vrijednosti koje se koriste kao ključ za kodiranje P (izvučene 12-bitnom operacijom pomaka za 4096-bajtne stranice). Ova manipulacija smanjuje rizik od otmice pokazivača u eksploataciji, budući da pokazivač nije pohranjen u svom originalnom obliku i njegova zamjena zahtijeva poznavanje informacija o raspodjeli hrpe. Osim toga, kod zakrpe sadrži i dodatnu provjeru za poravnanje bloka, što ne dozvoljava napadaču da zamijeni pokazivač neusklađenom vrijednošću i zahtijeva poznavanje broja bitova koji su poravnati, što na 64-bitnim sistemima dodatno omogućava blokiranje 15 od 16 pokušaja napada koji ne uzimaju u obzir poravnanje.

Metoda je efikasna za zaštitu od napada koji koriste djelomično prepisivanje pokazivača (promjena niskih bajtova), potpuno ponovno pisanje pokazivača (preusmjeravanje na napadačev kod) i promjenu pozicije liste na neusklađenoj adresi. Kao primjer, pokazano je da bi korištenje Safe-Linkinga u malloc-u omogućilo blokiranje eksploatacije nedavno identifikovan od strane istih istraživača ranjivosti CVE-2020-6007 u pametnom svjetlu Philips Hue Bridge, uzrokovano prelivom bafera i omogućava vam da preuzmete kontrolu nad uređajem.

izvor: opennet.ru

Dodajte komentar