Checkpoint-bedrijf
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
Ontwikkelaars
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.
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
+#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.
Wanneer gebruikt in het systeem
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
Bron: opennet.ru