Tvrtka Checkpoint mehanizam zaštite Safe-Linking, koji otežava stvaranje eksploita koji manipuliraju definicijom ili izmjenom pokazivača na memorijske bufre dodijeljene prilikom poziva malloc. Safe-Linking ne blokira potpuno mogućnost eksploatacije ranjivosti, ali uz minimalne troškove značajno otežava stvaranje određenih kategorija eksploita, budući da pored iskorištenog prelivanja bafera treba pronaći još jednu ranjivost koja uzrokuje curenje podataka o položaju hrpe u memoriji.
Zakrpane verzije s implementacijom Safe-Linkinga pripremljene su za Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) i Google TCMalloc, a također su ponuđene za modernizaciju zaštite u Chromiumu (za
Chromium od 2012. godine već ima ugrađenu tehniku zaštite MaskPtr usmjerenu na rješavanje iste problematike, ali rješenje Checkpointa pokazuje višu izvedbu).
Predložene zakrpe već su odobrene za isporuku u kolovozskom izdanju i primjena Safe-Linkinga bit će uključena prema zadanim postavkama. U uClibc-NG podrška za Safe-Linking bit će uključena u izdanju 1.0.33 prema zadanim postavkama. U gperftools (stari tcmalloc) promjene , ali bit će ponuđene u nekom od budućih izdanja kao opcija.
Razvijači novi tcmalloc odbijen je, pozivajući se na značajno smanjenje performansi i potrebu za dodavanjem proširenih testova za redovno provjeravanje da sve radi ispravno. Testiranje inženjera Checkpoint pokazalo je da metoda Safe-Linking ne dovodi do dodatnih troškova memorije, a izvedba pri radu s hrpom prosječno se smanjuje samo za 0,02%, a u najgorim okolnostima za 1,5% (za usporedbu, troškovi primijenjenog u Chromiumu metode procjenjuju se kao „manje od 2%“). Uključivanje
Safe-Linkinga dovodi do izvršavanja 2-3 dodatne asemberske instrukcije pri svakom pozivu free() i 3-4 instrukcije pri pozivu malloc(). Pokretanje faza inicijalizacije i generiranja nasumičnih vrijednosti nije potrebno.
Safe-Linking se može koristiti ne samo za povećanje sigurnosti raznih implementacija hrpa (heap), već i za dodavanje sredstava kontrole integriteta u sve strukture podataka u kojima se koriste jednostruki povezani popisi pokazatelja, smješteni pored samih bafera. Metoda je vrlo jednostavna za implementaciju i zahtijeva samo dodatak jedne makronaredbe i njeno primjenjivanje na pokazatelje na sljedeći blok u kodu (na primjer, za Glibc samo nekoliko redaka u kodu). Metoda se svodi na sljedeće izmjene:
#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);
…
Bit metode je u primjeni slučajnih podataka iz mehanizma randomizacije adresa ASLR (mmap_base) za zaštitu jednostruko povezanih popisa, poput Fast-Bins i TCache. Prije primjene na vrijednost pokazatelja na sljedeći element u popisu, vrši se transformacija prema masci i provjera poravnanja prema granici stranice memorije. Pokazatelj se zamjenjuje rezultatom operacije „(L >> PAGE_SHIFT) XOR (P)”, gdje je P vrijednost pokazatelja, a L lokacija u memoriji gdje se čuva taj pokazatelj.
Kada se koristi u sustavu (Address Space Layout Randomization) dio bitova L s osnovnom adresom hrpe sadrži slučajne vrijednosti, koje se koriste kao ključ za kodiranje P (izvlače se operacijom pomaka za 12 bitova za 4096-bajtne stranice). Slična manipulacija smanjuje rizik od hvatanja pokazatelja u eksploataciji, budući da se pokazatelj ne čuva u originalnom obliku i za njegovu zamjenu potrebno je znati informacije o položaju hrpe. Osim toga, u kodu zakrpe postoji i dodatna provjera poravnanja bloka, koja ne dozvoljava napadaču da zamijeni pokazatelj na neporavnatu vrijednost i zahtijeva znanje broja bitova na koje je izvršeno poravnanje, što na 64-bitnim sustavima dodatno omogućava blokiranje 15 od 16 pokušaja napada, koji ne uzimaju u obzir poravnanje.
Metoda je učinkovita za zaštitu od napada koji koriste djelomično prepisivanje pokazatelja (izmjena nižih bajtova), potpuno prepisivanje pokazatelja (preusmjeravanje na kod napadača) i promjenu pozicije popisa na neporavnatom adresu. Kao primjer je pokazano da bi primjena Safe-Linkinga u malloc-u mogla blokirati eksploataciju nedavno istej istraživači ranjivosti u pametnom osvjetljenju Philips Hue Bridge, uzrokovanom prelivanjem bafera i omogućava preuzimanje kontrole nad uređajem.
Izvor: opennet.ru
