A Checkpoint Safe-Linking védelmi technikát javasolt, ami megnehezíti a sérülékenységek kihasználását

Checkpoint Company bemutatott Safe-Linking védelmi mechanizmus, amely megnehezíti olyan kihasználások létrehozását, amelyek manipulálják a malloc hívás végrehajtásakor lefoglalt pufferek mutatóinak meghatározását vagy módosítását. A Safe-Linking nem zárja ki teljesen a sebezhetőségek kihasználásának lehetőségét, de minimális ráfordítással jelentősen megnehezíti bizonyos kategóriájú exploitok létrehozását, mivel a kihasználható puffer túlcsorduláson kívül egy másik sebezhetőséget kell találni, amely információszivárgást okoz. a kupac elhelyezése a memóriában.

A biztonságos linkelést megvalósító javításokat készítettek a Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) és Google TCMalloc számára, és javasolták a védelem frissítésére a Chromiumban (in
2012 óta a Chromium már beépítette a MaskPtr védelmi technikát ugyanazon probléma megoldására, de a Checkpoint megoldása nagyobb teljesítményt mutat).
A javasolt javítások szállítását az augusztusi kiadásban már jóváhagyták Glibc 3.32 és a Safe-Linking alapértelmezés szerint engedélyezve lesz. Az uClibc-NG támogatja a biztonságos összekapcsolást belépett Az 1.0.33-as kiadás tartalmazza, és alapértelmezés szerint engedélyezve van. Változások a gperftoolsban (régi tcmalloc) elfogadott, de egy későbbi kiadásban opcióként felajánljuk.

Fejlesztők TCMalloc (új tcmalloc) nem volt hajlandó elfogadni változás, hivatkozva a teljesítmény súlyos romlására és arra, hogy kiterjedt teszteket kell hozzáadni annak érdekében, hogy rendszeresen ellenőrizzék, minden a várt módon működik-e. A Checkpoint mérnökei által végzett tesztelés kimutatta, hogy a Safe-Linking módszer nem vezet többlet memóriafelhasználáshoz, és a kupacműveletek végrehajtása során a teljesítmény átlagosan csak 0.02%-kal, a legrosszabb esetben pedig 1.5%-kal csökken (összehasonlításképpen: a Chromiumban használt módszer a becslések szerint „kevesebb, mint 2%”). Befogadás
A Safe-Linking azt eredményezi, hogy a free() meghívásakor 2-3 további összeállítási utasítás, a malloc() meghívásakor pedig 3-4 utasítás kerül végrehajtásra. Az inicializálási és a véletlenszerű érték generálási szakaszok futtatása nem szükséges.

A Checkpoint Safe-Linking védelmi technikát javasolt, ami megnehezíti a sérülékenységek kihasználását

A Safe-Linking nem csak a különféle kupacmegvalósítások biztonságának javítására használható, hanem integritásvezérlők hozzáadására is minden olyan adatstruktúrához, amely a pufferek mellett elhelyezett, egyedileg összekapcsolt mutatólistákat használ. A módszer nagyon egyszerűen megvalósítható, és csak egy makrót kell hozzáadni, és alkalmazni kell a kód következő blokkjára mutató mutatókra (például Glibc esetén változtatások csak néhány sornyi kód). A módszer a következő változtatásokra vezethető vissza:

+#define PROTECT_PTR(poz, ptr) \
+ ((__típus (ptr)) (((((méret_t) poz.) >> 12) ^ (((méret_t) ptr)))

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

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

A módszer lényege, hogy az ASLR-cím véletlenszerűsítési mechanizmusából (mmap_base) származó véletlenszerű adatokat használunk az egyedileg összekapcsolt listák, például a Fast-Bins és a TCache védelmére. Mielőtt az értéket a lista következő elemére mutató mutatóra alkalmazná, maszkkonverziót hajt végre, és ellenőrzi az oldaligazítást. A mutatót az "(L >> PAGE_SHIFT) XOR (P)" művelet eredménye váltja fel, ahol P a mutató értéke, L pedig a memóriahely, ahol a mutató tárolva van.

A Checkpoint Safe-Linking védelmi technikát javasolt, ami megnehezíti a sérülékenységek kihasználását

Amikor a rendszerben használják ASLR (Address Space Layout Randomization) a kupac alapcímmel rendelkező L bitek egy része véletlenszerű értékeket tartalmaz, amelyeket kulcsként használnak a P kódolásához (12 bites shift művelettel 4096 bájtos oldalak esetén). Ez a manipuláció csökkenti a mutató eltérítésének kockázatát egy kihasználás során, mivel a mutató nem az eredeti formájában van tárolva, és a cseréhez a kupackiosztás ismerete szükséges. Ezen túlmenően a patch kód egy további ellenőrzést is tartalmaz a blokk igazítására, amely nem teszi lehetővé a támadó számára, hogy egy mutatót nem igazított értékre cseréljen, és megköveteli az igazított bitek számának ismeretét, ami a 64 bites rendszereken emellett lehetővé teszi a blokkolást. 15-ból 16 olyan támadási kísérlet, amely nem veszi figyelembe az igazítást.

A módszer hatékony a mutató részleges átírását (alacsony bájtok megváltoztatása), a mutató teljes átírását (átirányítás a támadó kódjára) és a lista pozíciójának módosítását alkalmazó támadások ellen. Példaként bemutatjuk, hogy a Safe-Linking használata malloc-ban lehetővé teszi a kihasználás blokkolását a közelmúltban azonosított ugyanazok a sebezhetőség-kutatók CVE-2020 6007- a Philips Hue Bridge intelligens lámpában, amelyet a puffer túlcsordulása okoz, és lehetővé teszi, hogy átvegye az irányítást az eszköz felett.

Forrás: opennet.ru

Hozzászólás