Checkpoint proponis Safe-Linking-protektoteknikon, malfaciligante ekspluati vundeblecojn

Kontrolpunkto Kompanio prezentita Mekanismo de protekto de Safe-Linking, kiu malfaciligas krei ekspluataĵojn kiuj manipulas la difinon aŭ modifon de montriloj al bufroj asignitaj dum efektivigo de malloc-voko. Safe-Linking ne tute blokas la eblecon ekspluati vundeblecojn, sed kun minimuma superkosto ĝi signife malfaciligas la kreadon de certaj kategorioj da ekspluataĵoj, ĉar krom la ekspluatebla bufro-trofluo, necesas trovi alian vundeblecon, kiu kaŭzas elfluon de informoj pri la lokigo de la amaso en memoron.

Flikaĵoj efektivigantaj Safe-Linking estis preparitaj por Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) kaj Google TCMalloc, kaj ankaŭ estas proponitaj por ĝisdatigi protekton en Chromium (en
Ekde 2012, Chromium jam konstruis la MaskPtr-protektan teknikon celantan solvi la saman problemon, sed la solvo de Checkpoint montras pli altan rendimenton).
Proponitaj flikoj jam estis aprobitaj por livero en la aŭgusta eldono Glibc 3.32 kaj Safe-Linking estos ebligita defaŭlte. uClibc-NG subtenas Safe-Linking eniris inkluzivita en eldono 1.0.33 kaj estas ebligita defaŭlte. Ŝanĝoj en gperftools (malnova tcmalloc) akceptis, sed estos ofertita kiel opcio en estonta eldono.

Programistoj TCMalloc (nova tcmalloc) rifuzis akcepti la ŝanĝo, citante severan rendimentan degeneron kaj la bezonon aldoni ampleksajn testojn por regule kontroli, ke ĉio funkcias kiel atendite. Testado de Checkpoint-inĝenieroj montris, ke la metodo de Safe-Linking ne kondukas al plia konsumo de memoro, kaj rendimento dum farado de amasaj operacioj estas reduktita averaĝe nur je 0.02%, kaj en la plej malbona kazo je 1.5% (por komparo, la supra kosto en la metodo uzata en Chromium estas taksita kiel "malpli ol 2%"). Inkludo
Safe-Linking rezultas en 2-3 pliaj kunig-instrukcioj ekzekutitaj ĉiufoje kiam free() estas vokita, kaj 3-4 instrukcioj ĉiufoje kiam malloc() estas vokita. Ruli la komencajn kaj hazardajn valorgeneradajn stadiojn ne estas bezonata.

Checkpoint proponis Safe-Linking-protektoteknikon, malfaciligante ekspluati vundeblecojn

Safe-Linking povas esti uzata ne nur por plibonigi la sekurecon de diversaj amasefektivigoj, sed ankaŭ por aldoni integreckontrolojn al iuj datumstrukturoj kiuj uzas unuope ligitajn listojn de montriloj metitaj apud la bufroj mem. La metodo estas tre simpla por efektivigi kaj nur postulas aldoni unu makroon kaj apliki ĝin al montriloj al la sekva bloko en la kodo (ekzemple, por Glibc ŝanĝoj nur kelkaj linioj de kodo). La metodo resumas al la sekvaj ŝanĝoj:

+#difini PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

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

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

La esenco de la metodo estas uzi hazardajn datumojn de la ASLR-adresa randomigmekanismo (mmap_base) por protekti unuope ligitajn listojn kiel Fast-Bins kaj TCache. Antaŭ ol la valoro estas aplikita al montrilo al la sekva elemento en la listo, ĝi faras maskan konvertiĝon kaj kontrolas paĝan vicigon. La montrilo estas anstataŭigita per la rezulto de la operacio "(L >> PAGE_SHIFT) XOR (P)", kie P estas la valoro de la montrilo kaj L estas la memorloko kie la montrilo estas stokita.

Checkpoint proponis Safe-Linking-protektoteknikon, malfaciligante ekspluati vundeblecojn

Kiam uzata en la sistemo ASLR (Hazardigo de Adresspaco) parto de la L-bitoj kun la heap-baza adreso enhavas hazardajn valorojn, kiuj estas uzataj kiel ŝlosilo por kodi P (eltiritan per 12-bita movoperacio por 4096-bajtaj paĝoj). Tiu manipulado reduktas la riskon de montrilo-kaperado en ekspluato, ĉar la montrilo ne estas stokita en sia praformo kaj anstataŭigi ĝin postulas scion pri amasaj asignoinformoj. Krome, la flikkodo ankaŭ enhavas aldonan kontrolon por bloka vicigo, kiu ne permesas al atakanto anstataŭigi montrilon kun nealignita valoro kaj postulas scion pri la nombro da bitoj kiuj estas vicigitaj, kiu ĉe 64-bitaj sistemoj aldone permesas blokadon. 15 el 16 provoj de atakoj kiuj ne konsideras la vicigon.

La metodo estas efika por protekti kontraŭ atakoj kiuj uzas partan montrilon reverkadon (ŝanĝante malaltajn bajtojn), kompletan montrilon reverkadon (redirektante al la kodo de la atakanto) kaj ŝanĝanta la listpozicion ĉe nevicigita adreso. Ekzemple, estas montrite, ke la uzo de Safe-Linking en malloc permesus bloki ekspluaton lastatempe identigita de la samaj vundeblaj esploristoj CVE-2020-6007 en la inteligenta lumo de Philips Hue Bridge, kaŭzita de bufra superfluo kaj permesanta vin akiri kontrolon de la aparato.

fonto: opennet.ru

Aldoni komenton