Checkpoint va proposar la tècnica de protecció Safe-Linking, cosa que dificultava l'explotació de les vulnerabilitats

Companyia Checkpoint presentat Mecanisme de protecció d'enllaç segur, que dificulta la creació d'explotacions que manipulin la definició o la modificació dels punters als búfers assignats quan s'executa una trucada malloc. Safe-Linking no bloqueja completament la possibilitat d'explotar vulnerabilitats, però amb una sobrecàrrega mínima complica significativament la creació de determinades categories d'explotacions, ja que a més del desbordament del buffer explotable, és necessari trobar una altra vulnerabilitat que provoqui filtracions d'informació sobre la col·locació del munt a la memòria.

S'han preparat pedaços que implementen Safe-Linking per a Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) i Google TCMalloc, i també es proposen per actualitzar la protecció a Chromium (en
Des del 2012, Chromium ja ha incorporat la tècnica de protecció MaskPtr destinada a resoldre el mateix problema, però la solució de Checkpoint demostra un major rendiment).
Els pegats suggerits ja s'han aprovat per al lliurament a la versió d'agost Glibc 3.32 i Safe-Linking s'habilitarà de manera predeterminada. uClibc-NG admet Safe-Linking va entrar inclòs a la versió 1.0.33 i està habilitat per defecte. Canvis en gperftools (antic tcmalloc) acceptat, però s'oferirà com a opció en una versió futura.

Desenvolupadors TCMalloc (nou tcmalloc) es va negar a acceptar canviar, citant una degradació severa del rendiment i la necessitat d'afegir proves exhaustives per comprovar regularment que tot funciona com s'esperava. Les proves realitzades pels enginyers de Checkpoint van demostrar que el mètode Safe-Linking no comporta un consum addicional de memòria i que el rendiment quan es realitzen operacions de pila es redueix de mitjana només un 0.02% i, en el pitjor dels casos, un 1.5% (per comparació, la sobrecàrrega en el mètode utilitzat a Chromium s'estima com "menys del 2%"). Inclusió
L'enllaç segur fa que s'executen 2-3 instruccions de muntatge addicionals cada cop que es crida a free() i 3-4 instruccions cada cop que es crida a malloc(). No cal executar les etapes d'inicialització i generació de valor aleatori.

Checkpoint va proposar la tècnica de protecció Safe-Linking, cosa que dificultava l'explotació de les vulnerabilitats

L'enllaç segur es pot utilitzar no només per millorar la seguretat de diverses implementacions d'emmagatzematge dinàmic, sinó també per afegir controls d'integritat a les estructures de dades que utilitzin llistes de punters enllaçades individualment col·locades al costat dels propis buffers. El mètode és molt senzill d'implementar i només requereix afegir una macro i aplicar-la als punters al següent bloc del codi (per exemple, per a Glibc canvis només unes quantes línies de codi). El mètode es redueix als canvis següents:

+#definir PROTECT_PTR(pos, ptr) \
+ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))

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

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

L'essència del mètode és utilitzar dades aleatòries del mecanisme d'aleatorització d'adreces ASLR (mmap_base) per protegir llistes enllaçades individualment com ara Fast-Bins i TCache. Abans d'aplicar el valor a un punter al següent element de la llista, realitza una conversió de màscara i comprova l'alineació de la pàgina. El punter se substitueix pel resultat de l'operació "(L >> PAGE_SHIFT) XOR (P)", on P és el valor del punter i L és la ubicació de memòria on s'emmagatzema el punter.

Checkpoint va proposar la tècnica de protecció Safe-Linking, cosa que dificultava l'explotació de les vulnerabilitats

Quan s'utilitza en el sistema ASLR (Address Space Layout Randomization) part dels bits L amb l'adreça base del munt conté valors aleatoris que s'utilitzen com a clau per codificar P (extrets mitjançant una operació de desplaçament de 12 bits per a pàgines de 4096 bytes). Aquesta manipulació redueix el risc de segrest del punter en un exploit, ja que el punter no s'emmagatzema en la seva forma original i la seva substitució requereix coneixement de l'assignació de l'emmagatzematge dinàmic. A més, el codi del pedaç també conté una comprovació addicional per a l'alineació de blocs, que no permet que un atacant substitueixi un punter per un valor no alineat i requereix el coneixement del nombre de bits que estan alineats, que en sistemes de 64 bits permet, a més, el bloqueig. 15 de 16 intents d'atac que no tenen en compte l'alineació.

El mètode és eficaç per protegir contra atacs que utilitzen la reescriptura parcial del punter (canviant els bytes baixos), la reescriptura completa del punter (redirigint al codi de l'atacant) i canviant la posició de la llista en una adreça no alineada. Com a exemple, es demostra que l'ús de Safe-Linking a malloc permetria bloquejar l'explotació recentment identificat pels mateixos investigadors de vulnerabilitats CVE-2020-6007 a la llum intel·ligent Philips Hue Bridge, causada per un desbordament de memòria intermèdia i que us permet controlar el dispositiu.

Font: opennet.ru

Afegeix comentari