Checkpoint foreslo Safe-Linking-beskyttelsesteknikk, noe som gjør det vanskeligere å utnytte sårbarheter

Checkpoint Company presentert Sikker koblingsbeskyttelsesmekanisme, som gjør det vanskelig å lage utnyttelser som manipulerer definisjonen eller modifikasjonen av pekere til buffere som er tildelt når du utfører et malloc-anrop. Safe-Linking blokkerer ikke fullstendig muligheten for å utnytte sårbarheter, men med minimal overhead kompliserer det opprettelsen av visse kategorier av utnyttelser betydelig, siden det i tillegg til det utnyttbare bufferoverløpet er nødvendig å finne en annen sårbarhet som forårsaker lekkasje av informasjon om plasseringen av haugen i minnet.

Patcher som implementerer Safe-Linking er utarbeidet for Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) og Google TCMalloc, og er også foreslått for å oppgradere beskyttelsen i Chromium (i
Siden 2012 har Chromium allerede bygget inn MaskPtr-beskyttelsesteknikken rettet mot å løse det samme problemet, men løsningen fra Checkpoint viser høyere ytelse).
Foreslåtte patcher er allerede godkjent for levering i augustutgivelsen Glibc 3.32 og Safe-Linking vil være aktivert som standard. uClibc-NG støtter Safe-Linking inn inkludert i versjon 1.0.33 og er aktivert som standard. Endringer i gperftools (gamle tcmalloc) akseptert, men vil bli tilbudt som et alternativ i en fremtidig utgivelse.

Utviklere TCMalloc (ny tcmalloc) nektet å godta endre, med henvisning til alvorlig ytelsesforringelse og behovet for å legge til omfattende tester for regelmessig å kontrollere at alt fungerer som forventet. Testing av Checkpoint-ingeniører viste at Safe-Linking-metoden ikke fører til ekstra minneforbruk, og ytelsen ved utførelse av heap-operasjoner reduseres i gjennomsnitt med bare 0.02 %, og i verste fall med 1.5 % (til sammenligning er overheaden i metoden som brukes i Chromium er estimert til «mindre enn 2 %)). Inkludering
Sikker kobling resulterer i at 2-3 ekstra monteringsinstruksjoner blir utført hver gang free() kalles, og 3-4 instruksjoner hver gang malloc() kalles. Det er ikke nødvendig å kjøre initialisering og generering av tilfeldig verdi.

Checkpoint foreslo Safe-Linking-beskyttelsesteknikk, noe som gjør det vanskeligere å utnytte sårbarheter

Safe-Linking kan brukes ikke bare til å forbedre sikkerheten til ulike heap-implementeringer, men også for å legge til integritetskontroller til alle datastrukturer som bruker enkeltlenkede lister med pekere plassert ved siden av bufferne selv. Metoden er veldig enkel å implementere og krever bare å legge til én makro og bruke den på pekere til neste blokk i koden (for eksempel for Glibc Endringer bare noen få linjer med kode). Metoden koker ned til følgende endringer:

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

Essensen av metoden er å bruke tilfeldige data fra ASLR-adresserandomiseringsmekanismen (mmap_base) for å beskytte enkeltlenkede lister som Fast-Bins og TCache. Før verdien brukes på en peker til neste element i listen, utfører den en maskekonvertering og sjekker for sidejustering. Pekeren erstattes av resultatet av operasjonen "(L >> PAGE_SHIFT) XOR (P)", der P er verdien til pekeren og L er minnestedet hvor pekeren er lagret.

Checkpoint foreslo Safe-Linking-beskyttelsesteknikk, noe som gjør det vanskeligere å utnytte sårbarheter

Når det brukes i systemet ASLR (Address Space Layout Randomization) en del av L-bitene med heap-baseadressen inneholder tilfeldige verdier som brukes som en nøkkel for å kode P (ekstrahert av en 12-bits skiftoperasjon for 4096-byte sider). Denne manipulasjonen reduserer risikoen for pekerkapring i en utnyttelse, siden pekeren ikke er lagret i sin opprinnelige form og å erstatte den krever kunnskap om heap-allokeringen. I tillegg inneholder oppdateringskoden også en ekstra sjekk for blokkjustering, som ikke tillater en angriper å erstatte en peker med en ujustert verdi og krever kunnskap om antall biter som er justert, som på 64-bits systemer i tillegg tillater blokkering 15 av 16 angrepsforsøk som ikke tar hensyn til justering.

Metoden er effektiv for å beskytte mot angrep som bruker delvis pekeromskriving (endring av lave byte), fullstendig pekeromskriving (omadressering til angriperens kode) og endring av listeposisjon på en ujustert adresse. Som et eksempel er det vist at bruk av Safe-Linking i malloc ville tillate blokkering av utnyttelse nylig identifisert av de samme sårbarhetsforskerne CVE-2020-6007 i Philips Hue Bridge smart lys, forårsaket av bufferoverløp og lar deg få kontroll over enheten.

Kilde: opennet.ru

Legg til en kommentar