Checkpoint navrhl techniku ​​ochrany Safe-Linking, která ztěžuje zneužití zranitelností

Společnost kontrolních bodů prezentovány Mechanismus ochrany Safe-Linking, který ztěžuje vytváření exploitů, které manipulují s definicí nebo úpravou ukazatelů na buffery alokované při provádění malloc volání. Safe-Linking zcela neblokuje možnost zneužití zranitelností, ale s minimální režií výrazně komplikuje tvorbu určitých kategorií exploitů, jelikož kromě zneužitelného přetečení bufferu je nutné najít další zranitelnost způsobující únik informací o umístění haldy v paměti.

Patche implementující Safe-Linking byly připraveny pro Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) a Google TCMalloc a jsou také navrženy pro upgrade ochrany v Chromiu (v
Od roku 2012 již Chromium zabudoval ochrannou techniku ​​MaskPtr zaměřenou na řešení stejného problému, ale řešení od Checkpoint vykazuje vyšší výkon).
Navrhované opravy již byly schváleny k dodání v srpnové verzi Glibc 3.32 a Bezpečné propojení bude ve výchozím nastavení povoleno. uClibc-NG podporuje Safe-Linking vstoupil zahrnuto ve verzi 1.0.33 a je ve výchozím nastavení povoleno. Změny v gperftools (starý tcmalloc) přijato, ale bude nabízen jako volitelná možnost v budoucí verzi.

Vývojáři TCMalloc (nový tcmalloc) odmítl přijmout změnas odkazem na vážné snížení výkonu a potřebu přidat rozsáhlé testy, které pravidelně kontrolují, zda vše funguje podle očekávání. Testování inženýrů Checkpoint ukázalo, že metoda Safe-Linking nevede k dodatečné spotřebě paměti a výkon při provádění haldových operací je snížen v průměru pouze o 0.02 % a v nejhorším případě o 1.5 % (pro srovnání režie v metoda použitá v Chromu se odhaduje na „méně než 2 %“). Zařazení
Bezpečné propojení má za následek provedení 2-3 dodatečných instrukcí pro sestavení při každém volání free() a 3-4 instrukcí při každém volání malloc(). Spouštění fází inicializace a generování náhodných hodnot není vyžadováno.

Checkpoint navrhl techniku ​​ochrany Safe-Linking, která ztěžuje zneužití zranitelností

Safe-Linking lze použít nejen ke zlepšení zabezpečení různých implementací haldy, ale také k přidání ovládacích prvků integrity do jakýchkoli datových struktur, které používají jednotlivě propojené seznamy ukazatelů umístěných vedle samotných vyrovnávacích pamětí. Metoda je velmi jednoduchá na implementaci a vyžaduje pouze přidání jednoho makra a jeho použití na ukazatele na další blok v kódu (například pro Glibc Změny jen pár řádků kódu). Metoda se scvrkává na následující změny:

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

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

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

Podstatou metody je použití náhodných dat z mechanismu randomizace adres ASLR (mmap_base) k ochraně jednotlivě propojených seznamů, jako jsou Fast-Bins a TCache. Než se hodnota použije na ukazatel na další prvek v seznamu, provede převod masky a zkontroluje zarovnání stránky. Ukazatel je nahrazen výsledkem operace "(L >> PAGE_SHIFT) XOR (P)", kde P je hodnota ukazatele a L je paměťové místo, kde je ukazatel uložen.

Checkpoint navrhl techniku ​​ochrany Safe-Linking, která ztěžuje zneužití zranitelností

Při použití v systému ASLR (Address Space Layout Randomization) část L bitů se základní adresou haldy obsahuje náhodné hodnoty, které se používají jako klíč pro kódování P (extrahované 12bitovou operací posunu pro 4096bajtové stránky). Tato manipulace snižuje riziko únosu ukazatele při exploitu, protože ukazatel není uložen ve své původní podobě a jeho nahrazení vyžaduje znalost alokace haldy. Kromě toho obsahuje patch kód také další kontrolu zarovnání bloků, která útočníkovi neumožňuje nahradit ukazatel nezarovnanou hodnotou a vyžaduje znalost počtu zarovnaných bitů, což na 64bitových systémech navíc umožňuje blokování 15 z 16 pokusů o útok, které neberou v úvahu zarovnání.

Metoda je účinná pro ochranu před útoky, které využívají částečné přepisování ukazatele (změna nízkých bajtů), úplné přepisování ukazatele (přesměrování na kód útočníka) a změnu pozice seznamu na nezarovnané adrese. Jako příklad je ukázáno, že použití Safe-Linking v malloc by nedávno umožnilo blokování zneužití identifikované od stejných výzkumníků zranitelnosti CVE-2020-6007 v chytrém světle Philips Hue Bridge způsobeném přetečením vyrovnávací paměti a umožňuje vám získat kontrolu nad zařízením.

Zdroj: opennet.ru

Přidat komentář