Checkpoint stelde Safe-Linking-beveiligingstechniek voor, waardoor het moeilijker wordt om kwetsbaarheden te misbruiken

Checkpoint-bedrijf gepresenteerd Safe-Linking-beschermingsmechanisme, dat het moeilijk maakt om exploits te creëren die de definitie of wijziging van verwijzingen naar buffers manipuleren die zijn toegewezen bij het uitvoeren van een malloc-oproep. Safe-Linking blokkeert de mogelijkheid om kwetsbaarheden te misbruiken niet volledig, maar met minimale overhead compliceert het de creatie van bepaalde categorieën van exploits aanzienlijk, omdat het naast de exploiteerbare bufferoverflow noodzakelijk is om een ​​andere kwetsbaarheid te vinden die het lekken van informatie over de kwetsbaarheden veroorzaakt. de plaatsing van de heap in het geheugen.

Patches die Safe-Linking implementeren zijn voorbereid voor Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) en Google TCMalloc, en worden ook voorgesteld voor het upgraden van de bescherming in Chromium (in
Chromium heeft sinds 2012 al de MaskPtr-beveiligingstechniek ingebouwd die gericht is op het oplossen van hetzelfde probleem, maar de oplossing van Checkpoint demonstreert hogere prestaties).
Voorgestelde patches zijn al goedgekeurd voor levering in de release van augustus Glibc 3.32 en Safe-Linking is standaard ingeschakeld. uClibc-NG ondersteunt Safe-Linking ingevoerd opgenomen in release 1.0.33 en is standaard ingeschakeld. Wijzigingen in gperftools (oude tcmalloc) geaccepteerd, maar zal in een toekomstige release als optie worden aangeboden.

Ontwikkelaars TCMalloc (nieuwe tcmalloc) weigerde te accepteren veranderen, daarbij verwijzend naar ernstige prestatievermindering en de noodzaak om uitgebreide tests toe te voegen om regelmatig te controleren of alles werkt zoals verwacht. Uit tests door Checkpoint-technici is gebleken dat de Safe-Linking-methode niet leidt tot extra geheugengebruik, en dat de prestaties bij het uitvoeren van heap-bewerkingen gemiddeld met slechts 0.02% worden verminderd, en in het ergste geval met 1.5% (ter vergelijking: de overhead in de methode die in Chromium wordt gebruikt, wordt geschat op “minder dan 2%”). Inclusie
Safe-Linking resulteert in het uitvoeren van 2-3 extra assemblage-instructies telkens wanneer free() wordt aangeroepen, en 3-4 instructies telkens wanneer malloc() wordt aangeroepen. Het uitvoeren van de fasen initialisatie en het genereren van willekeurige waarden is niet vereist.

Checkpoint stelde Safe-Linking-beveiligingstechniek voor, waardoor het moeilijker wordt om kwetsbaarheden te misbruiken

Safe-Linking kan niet alleen worden gebruikt om de beveiliging van verschillende heap-implementaties te verbeteren, maar ook om integriteitscontroles toe te voegen aan alle datastructuren die gebruikmaken van afzonderlijk gekoppelde lijsten met verwijzingen die naast de buffers zelf zijn geplaatst. De methode is heel eenvoudig te implementeren en vereist slechts het toevoegen van één macro en het toepassen ervan op verwijzingen naar het volgende blok in de code (bijvoorbeeld voor Glibc veranderingen slechts een paar regels code). De methode komt neer op de volgende wijzigingen:

+#define PROTECT_PTR(pos, ptr) \
+ ((__typevan (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

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

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

De essentie van de methode is om willekeurige gegevens van het ASLR-adresrandomisatiemechanisme (mmap_base) te gebruiken om afzonderlijk gekoppelde lijsten zoals Fast-Bins en TCache te beschermen. Voordat de waarde wordt toegepast op een verwijzing naar het volgende element in de lijst, wordt er een maskerconversie uitgevoerd en wordt de uitlijning van de pagina gecontroleerd. De aanwijzer wordt vervangen door het resultaat van de bewerking "(L >> PAGE_SHIFT) XOR (P)", waarbij P de waarde van de aanwijzer is en L de geheugenlocatie is waar de aanwijzer is opgeslagen.

Checkpoint stelde Safe-Linking-beveiligingstechniek voor, waardoor het moeilijker wordt om kwetsbaarheden te misbruiken

Wanneer gebruikt in het systeem ASLR (Address Space Layout Randomization) Een deel van de L-bits met het heap-basisadres bevat willekeurige waarden die worden gebruikt als sleutel om P te coderen (geëxtraheerd door een 12-bits shift-bewerking voor pagina's van 4096 bytes). Deze manipulatie vermindert het risico van pointer-kaping bij een exploit, aangezien de pointer niet in zijn oorspronkelijke vorm wordt opgeslagen en voor het vervangen ervan kennis van de heap-toewijzing vereist. Bovendien bevat de patchcode ook een extra controle op blokuitlijning, waardoor een aanvaller een aanwijzer niet kan vervangen door een niet-uitgelijnde waarde en kennis nodig is van het aantal bits dat is uitgelijnd, wat op 64-bits systemen bovendien blokkering mogelijk maakt. 15 van de 16 aanvalspogingen houden geen rekening met uitlijning.

De methode is effectief voor bescherming tegen aanvallen waarbij gebruik wordt gemaakt van gedeeltelijk herschrijven van de pointer (het wijzigen van lage bytes), het volledig herschrijven van de pointer (omleiden naar de code van de aanvaller) en het wijzigen van de lijstpositie op een niet-uitgelijnd adres. Er wordt bijvoorbeeld aangetoond dat het gebruik van Safe-Linking in malloc het mogelijk zou maken om recentelijk de exploitatie te blokkeren geïdentificeerd door dezelfde kwetsbaarheidsonderzoekers CVE-2020-6007 in de Philips Hue Bridge smart light, veroorzaakt door een bufferoverflow waardoor je controle over het apparaat krijgt.

Bron: opennet.ru

Voeg een reactie