Checkpoint představil ochrannou techniku Safe-Linking, která komplikuje využívání zranitelností

Společnost Checkpoint představila ochranný mechanismus Safe-Linking, který komplikuje vytváření exploitů manipulujících s definicí nebo změnou ukazatelů na paměťové buffery alokované při volání malloc. Safe-Linking zcela neblokuje možnost využití zranitelností, ale s minimálními náklady výrazně ztěžuje vytváření některých kategorií exploitů, protože kromě exploatovaného přetečení bufferu je třeba najít ještě jednu zranitelnost, která způsobuje únik informací o umístění haldy (heap) v paměti.

Záplaty s implementací Safe-Linking byly připraveny pro Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) a Google TCMalloc, a také jsou navrženy pro modernizaci ochrany v Chromiu (v
Chromiu je od roku 2012 již integrovaná technika ochrany MaskPtr, zaměřená na řešení stejného problému, ale řešení od Checkpoint vykazuje vyšší výkon).
Navrhované záplaty již byly schváleny pro dodání v srpnovém vydání Glibc 3.32 a použití Safe-Linking bude zahrnuto jako standardní. Podpora Safe-Linking v uClibc-NG byla zahrnuta do vydání 1.0.33 a je zahrnuta jako standardní. V gperftools (starý tcmalloc) změny byly přijaty, ale budou nabídnuty v některém z budoucích vydání jako volba.

Vývojáři TCMalloc nový tcmalloc změnabyl odmítnut, s odkazem na výrazné snížení výkonu a potřebu přidání rozšířených testů pro pravidelné ověřování, že vše funguje správně. Testování inženýry Checkpoint ukázalo, že metoda Safe-Linking nezpůsobuje dodatečné náklady na paměť, a výkon při manipulaci s haldou se v průměru snižuje pouze o 0,02 % a v nejhorším případě o 1,5 % (pro srovnání náklady v metodě použitou v Chromiu jsou odhadovány na „méně než 2 %“). Zapnutí
Safe-Linking vede k vykonání 2-3 dodatečných assemblerových instrukcí při každém volání free() a 3-4 instrukcí při volání malloc(). Není nutné spouštět fáze inicializace a generování náhodných hodnot.

Checkpoint představil ochrannou techniku Safe-Linking, která komplikuje využívání zranitelností

Safe-Linking může být použit nejen k zvýšení bezpečnosti různých implementací haldy (heap), ale také k přidání prostředků pro kontrolu integrity do jakýchkoli datových struktur, v nichž se používají jednosměrné seznamy ukazatelů umístěné poblíž samotných bufferů. 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 mění pouze několik řádků kódu). Metoda spočívá v následujících změnách:

+#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 náhodného rozložení adres ASLR (mmap_base) k ochraně jednosměrných seznamů, jako jsou Fast-Bins a TCache. Před použitím na hodnotu ukazatele na další prvek v seznamu se provádí transformace pomocí masky a kontrola zarovnání na hranici paměťové stránky. Ukazatel je nahrazen výsledkem operace „(L >> PAGE_SHIFT) XOR (P)“, kde P je hodnota ukazatele a L je umístění v paměti, kde je tento ukazatel uložen.

Checkpoint představil ochrannou techniku Safe-Linking, která komplikuje využívání zranitelností

Při použití v systému ASLR (Náhodné rozložení adresového prostoru) část bitů L s základní adresou haldy obsahuje náhodné hodnoty, které se používají jako klíč k zakódování P (extrahovány operací posunu o 12 bitů pro 4096-bajtové stránky). Taková manipulace snižuje riziko zachycení ukazatele v exploitu, protože ukazatel není uchováván v původní podobě a pro jeho nahrazení je třeba znát informace o umístění haldy. Kromě toho v patch kódu rovněž existuje další kontrola zarovnání bloku, která útočníkovi neumožňuje nahradit ukazatel nezarovnanou hodnotou a vyžaduje znalost počtu bitů, o které bylo provedeno zarovnání, což na 64bitových systémech navíc umožňuje zablokovat 15 z 16 pokusů o útoky, které neberou v úvahu zarovnání.

Metoda je účinná při ochraně proti útokům, které využívají částečné přepakování ukazatelů (změna nejnižších bytů), úplné přepsání ukazatelů (přesměrování na kód útočníka) a změnu polohy seznamu na nezarovnanou adresu. Jako příklad je uvedeno, že použití Safe-Linking v malloc by zablokovalo exploataci nedávno odhalené týmiž výzkumníky zranitelnosti CVE-2020-6007 v inteligentním osvětlení Philips Hue Bridge, způsobenou přetečením zásobníku a umožňující převzít kontrolu nad zařízení.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster