Checkpoint foreslog Safe-Linking-beskyttelsesteknik, hvilket gør det sværere at udnytte sårbarheder

Checkpoint Company fremlagde Safe-Linking-beskyttelsesmekanisme, som gør det vanskeligt at skabe udnyttelser, der manipulerer definitionen eller ændringen af ​​pointere til buffere, der er allokeret, når et malloc-kald udføres. Safe-Linking blokerer ikke fuldstændigt for muligheden for at udnytte sårbarheder, men med minimal overhead komplicerer det betydeligt oprettelsen af ​​visse kategorier af udnyttelser, da det ud over det udnyttelige bufferoverløb er nødvendigt at finde en anden sårbarhed, der forårsager lækage af information om bunkens placering i hukommelsen.

Patches, der implementerer Safe-Linking, er blevet udarbejdet til Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) og Google TCMalloc og foreslås også til opgradering af beskyttelse i Chromium (i
Siden 2012 har Chromium allerede indbygget MaskPtr-beskyttelsesteknikken med det formål at løse det samme problem, men løsningen fra Checkpoint demonstrerer højere ydeevne).
Foreslåede patches er allerede blevet godkendt til levering i augustudgivelsen Glibc 3.32 og Safe-Linking vil være aktiveret som standard. uClibc-NG understøtter Safe-Linking indtastet inkluderet i version 1.0.33 og er aktiveret som standard. Ændringer i gperftools (gamle tcmalloc) accepteret, men vil blive tilbudt som en mulighed i en fremtidig udgivelse.

Udviklere TCMalloc (ny tcmalloc) nægtede at acceptere ændre, med henvisning til alvorlig ydeevneforringelse og behovet for at tilføje omfattende tests for regelmæssigt at kontrollere, at alt fungerer som forventet. Test af Checkpoint-ingeniører viste, at Safe-Linking-metoden ikke fører til yderligere hukommelsesforbrug, og ydeevnen ved udførelse af heap-operationer er i gennemsnit kun reduceret med 0.02 % og i værste fald med 1.5 % (til sammenligning er overheaden i metoden, der anvendes i Chromium, estimeres til "mindre end 2 %)"). Inklusion
Safe-Linking resulterer i, at der udføres 2-3 ekstra monteringsinstruktioner hver gang free() kaldes, og 3-4 instruktioner hver gang malloc() kaldes. Det er ikke nødvendigt at køre initialiserings- og tilfældig værdigenerering.

Checkpoint foreslog Safe-Linking-beskyttelsesteknik, hvilket gør det sværere at udnytte sårbarheder

Safe-Linking kan bruges ikke kun til at forbedre sikkerheden for forskellige heap-implementeringer, men også til at tilføje integritetskontroller til alle datastrukturer, der bruger enkeltforbundne lister med pointere placeret ved siden af ​​selve bufferne. Metoden er meget enkel at implementere og kræver kun at tilføje én makro og anvende den på pointere til den næste blok i koden (f.eks. for Glibc ændringer blot et par linjer kode). Metoden koger ned til følgende ændringer:

+#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 af ​​metoden er at bruge tilfældige data fra ASLR-adresserandomiseringsmekanismen (mmap_base) til at beskytte enkeltforbundne lister såsom Fast-Bins og TCache. Før værdien anvendes på en markør til det næste element på listen, udfører den en maskekonvertering og kontrollerer for sidejustering. Markøren erstattes af resultatet af operationen "(L >> PAGE_SHIFT) XOR (P)", hvor P er værdien af ​​markøren og L er hukommelsesplaceringen, hvor markøren er gemt.

Checkpoint foreslog Safe-Linking-beskyttelsesteknik, hvilket gør det sværere at udnytte sårbarheder

Når det bruges i systemet ASLR (Address Space Layout Randomization) en del af L-bits med heap-baseadressen indeholder tilfældige værdier, der bruges som en nøgle til at kode P (udtrækkes af en 12-bit shift-operation for 4096-byte sider). Denne manipulation reducerer risikoen for pointerkapring i en udnyttelse, da pointeren ikke er gemt i sin oprindelige form, og at erstatte den kræver viden om heap-allokeringen. Derudover indeholder patchkoden også et ekstra tjek for blokjustering, som ikke tillader en angriber at erstatte en pointer med en ujusteret værdi og kræver viden om antallet af bit, der er justeret, hvilket på 64-bit systemer desuden tillader blokering 15 ud af 16 angrebsforsøg, der ikke tager højde for tilpasning.

Metoden er effektiv til at beskytte mod angreb, der bruger delvis pointer-omskrivning (ændring af lave bytes), komplet pointer-omskrivning (omdirigering til angriberens kode) og ændring af listepositionen på en ikke-justeret adresse. Som et eksempel er det vist, at brugen af ​​Safe-Linking i malloc ville tillade blokering af udnyttelse for nylig identificeret af de samme sårbarhedsforskere CVE-2020-6007 i Philips Hue Bridge smart lys, forårsaget af et bufferoverløb og giver dig mulighed for at få kontrol over enheden.

Kilde: opennet.ru

Tilføj en kommentar