Checkpoint het Veilige-skakel-beskermingstegniek voorgestel, wat dit moeiliker maak om kwesbaarhede te ontgin

Kontrolepunt Maatskappy aangebied Veilige koppelbeskermingsmeganisme, wat dit moeilik maak om uitbuitings te skep wat die definisie of wysiging van aanwysers na buffers wat toegeken word wanneer 'n malloc-oproep uitgevoer word, manipuleer. Veilige skakeling blokkeer nie die moontlikheid om kwesbaarhede te ontgin heeltemal nie, maar met minimale oorhoofse koste bemoeilik dit die skepping van sekere kategorieë van uitbuiting aansienlik, aangesien dit benewens die ontginbare buffer-oorloop nodig is om 'n ander kwesbaarheid te vind wat lekkasie van inligting oor veroorsaak die plasing van die hoop in die geheue.

Pleister wat Veilige koppeling implementeer, is voorberei vir Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) en Google TCMalloc, en word ook voorgestel vir die opgradering van beskerming in Chromium (in
Sedert 2012 het Chromium reeds die MaskPtr-beskermingstegniek ingebou wat daarop gemik is om dieselfde probleem op te los, maar die oplossing van Checkpoint toon hoër werkverrigting).
Voorgestelde pleisters is reeds goedgekeur vir aflewering in die Augustus-vrystelling glibc 3.32 en Veilige skakeling sal by verstek geaktiveer word. uClibc-NG ondersteun Safe-Linking ingevoer ingesluit in vrystelling 1.0.33 en is by verstek geaktiveer. Veranderinge in gperftools (ou tcmalloc) aanvaar, maar sal as 'n opsie in 'n toekomstige vrystelling aangebied word.

Developers TCMalloc (nuwe tcmalloc) het geweier om te aanvaar verander, met verwysing na ernstige prestasie-agteruitgang en die behoefte om uitgebreide toetse by te voeg om gereeld te kontroleer dat alles werk soos verwag. Toetsing deur Checkpoint-ingenieurs het getoon dat die veilige skakelmetode nie tot bykomende geheueverbruik lei nie, en werkverrigting tydens die uitvoer van hoopbewerkings word gemiddeld met slegs 0.02% verminder, en in die ergste geval met 1.5% (ter vergelyking, die bokoste in die metode wat in Chromium gebruik word, word geskat as "minder as 2%)"). Insluiting
Veilige koppeling lei daartoe dat 2-3 bykomende samestelling-instruksies uitgevoer word elke keer as free() geroep word, en 3-4 instruksies elke keer as malloc() geroep word. Dit is nie nodig om die inisialisering en ewekansige waardegenereringstadiums uit te voer nie.

Checkpoint het Veilige-skakel-beskermingstegniek voorgestel, wat dit moeiliker maak om kwesbaarhede te ontgin

Veilige-skakeling kan nie net gebruik word om die sekuriteit van verskeie hoop-implementerings te verbeter nie, maar ook om integriteitkontroles by enige datastrukture te voeg wat enkelgekoppelde lyste van wysers wat langs die buffers self geplaas word, gebruik. Die metode is baie eenvoudig om te implementeer en vereis slegs die byvoeging van een makro en die toepassing daarvan op wysers na die volgende blok in die kode (byvoorbeeld vir Glibc veranderinge net 'n paar reëls kode). Die metode kom neer op die volgende veranderinge:

+#definieer PROTECT_PTR(pos, ptr) \
+ ((__tipe (ptr)) (((((grootte_t) pos) >> 12) ^ ((grootte_t) ptr)))

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

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

Die essensie van die metode is om ewekansige data van die ASLR-adres-randomiseringsmeganisme (mmap_base) te gebruik om enkelgekoppelde lyste soos Fast-Bins en TCache te beskerm. Voordat die waarde op 'n wyser na die volgende element in die lys toegepas word, voer dit 'n maskeromskakeling uit en kyk vir bladsybelyning. Die wyser word vervang deur die resultaat van die bewerking "(L >> PAGE_SHIFT) XOR (P)", waar P die waarde van die wyser is en L die geheueplek is waar die wyser gestoor is.

Checkpoint het Veilige-skakel-beskermingstegniek voorgestel, wat dit moeiliker maak om kwesbaarhede te ontgin

Wanneer dit in die stelsel gebruik word ASLR (Address Space Layout Randomization) deel van die L bisse met die hoop basisadres bevat ewekansige waardes wat gebruik word as 'n sleutel om P te enkodeer (onttrek deur 'n 12-bis skuifbewerking vir 4096-grepe bladsye). Hierdie manipulasie verminder die risiko van kaping van wyser in 'n uitbuiting, aangesien die wyser nie in sy oorspronklike vorm gestoor word nie en om dit te vervang, kennis van die hooptoewysing vereis. Daarbenewens bevat die pleisterkode ook 'n addisionele kontrole vir blokbelyning, wat nie 'n aanvaller toelaat om 'n wyser met 'n ongelynde waarde te vervang nie en vereis kennis van die aantal bisse wat belyn is, wat op 64-bis stelsels addisioneel blokkering moontlik maak 15 uit 16 aanvalpogings wat nie belyning in ag neem nie.

Die metode is effektief om teen aanvalle te beskerm wat gedeeltelike wyserherskryf gebruik (verandering van lae grepe), volledige wyserherskryf (herlei na die aanvaller se kode) en die lysposisie by 'n ongelynde adres verander. As 'n voorbeeld, word getoon dat die gebruik van veilige skakeling in malloc die onlangse blokkering van uitbuiting moontlik maak geïdentifiseer deur dieselfde kwesbaarheidsnavorsers CVE-2020-6007 in die Philips Hue Bridge-slimlig, wat veroorsaak word deur 'n buffer-oorloop en jou toelaat om beheer oor die toestel te kry.

Bron: opennet.ru

Voeg 'n opmerking