Kontrolní bod (globální poskytovatel IT bezpečnostních řešení) vydal před několika dny úvod bezpečnostního mechanismu "Safe-Linking", že ztěžuje vytváření exploitů které manipulují s definicí nebo změnou ukazatelů na přidělené vyrovnávací paměti při volání malloc.
Nový mechanismus «Safe-Linking» zcela neblokuje možnost zneužití zranitelností, ale s minimální režií komplikuje vytváření určitých kategorií exploitůProtože kromě přetečení využívané vyrovnávací paměti je nutné najít další chybu zabezpečení, která způsobuje informace o umístění haldy v paměti.
Byly připraveny implementační opravy Safe-Linking pro Glibc (ptmalloc), uClibc-NG (dlmalloc), gperftools (tcmalloc) a Google TCMalloc, stejně jako návrh na modernizaci ochrany v Chromu (od roku 2012 je již Chromium integrován s řešeními stejný problém) Technika ochrany MaskPtr, ale řešení Checkpoint vykazuje lepší výkon).
Navrhované opravy již byly schváleny k dodání v srpnovém vydání Glibc 3.32 a funkce Safe-Linking bude ve výchozím nastavení povolena. V uClibc-NG byla ve verzi 1.0.33 zahrnuta podpora zabezpečeného odkazu a je ve výchozím nastavení povolena. V gperftools (starý tcmalloc) jsou změny přijaty, ale budou nabízeny jako volba v budoucím vydání.
Vývojáři TCMalloc odmítli změnu přijmout, cse silným výkonovým úspěchem a nutností přidávat pokročilé testy, aby se pravidelně ověřovalo, že vše funguje správně.
Zkoušky provedené Technici kontrolních bodů ukázali, že metoda Safe-Linking nevede k další spotřebě paměti a výkon při provádění haldy klesá v průměru pouze o 0.02% a v nejhorším případě o 1.5%
Povolení funkce Safe-Linking vede k provedení 2–3 dalších instrukcí assembleru při každém volání metody free () a 3–4 pokynů při volání malloc (). Začátek inicializace a generování náhodných hodnot není vyžadováno.
Safe-Linking lze použít nejen ke zvýšení bezpečnosti různých implementací haldy, sino také přidat kontroly integrity do jakékoli datové struktury , který používá seznam jednotlivě propojených ukazatelů umístěných vedle vyrovnávacích pamětí.
Metoda jeho implementace je velmi jednoduchá a vyžaduje pouze přidání makra a aplikujte jej na ukazatele na další blok kódu (například pro Glibc je v kódu změněno pouze několik řádků).
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. Před použitím hodnoty ukazatele na další položku v seznamu se provede převod masky a kontrola zarovnání podél okraje stránky paměti. 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.
Při použití v systému ASLR (Randomizace rozložení adresového prostoru) obsahují některé L bity se základní adresou haldy náhodné hodnoty, které se používají jako klíč pro kódování P (jsou extrahovány operací posunu 12 bitů pro stránky 4096 bajtů).
Taková manipulace snižuje riziko zachycení ukazatele při zneužití, Vzhledem k tomu, že ukazatel není uložen v původní podobě a chcete-li jej nahradit, potřebujete znát informace o umístění haldy.
Metoda je účinná při ochraně před útoky, které používají částečné předefinování ukazatele (nízký posun bytu), kompletní přepis ukazatelů (přesměrování na kód útočníka) a změňte pozici seznamu v nevyrovnaném směru.
Jako příklad se ukazuje, že použití funkce Safe-Linking v malloc by blokovalo zneužití zranitelnosti CVE-2020-6007, kterou nedávno objevili stejní vědci v inteligentním podsvícení Philips Hue Bridge způsobeném přetečením vyrovnávací paměti a umožněním kontroly zařízení.
zdroj: https://research.checkpoint.com