Kees Cook, bývalý hlavní systémový administrátor kernel.org a vedoucí Ubuntu Security Team, nyní pracující ve společnosti Google na zabezpečení Android a ChromeOS, zveřejnil sadu patchů s implementací randomizace posunutí ve stohu jádra při zpracování systémových volání. Patche zvyšují bezpečnost jádra změnou umístění stohu, což činí útoky na stoh výrazně složitějšími a méně úspěšnými. Počáteční implementace podporuje procesory ARM64 a x86/x86_64.
Původní myšlenka patchu pochází z projektu PaX RANDKSTACK. V roce 2019 se Elena Rešetova, inženýrka ze společnosti Intel, pokusila vytvořit implementaci této myšlenky vhodnou pro zařazení do základního jádra Linux. Později iniciativu převzal Kees Cook, který představil implementaci vhodnou pro hlavní verzi jádra. Patche se plánují zařadit do vydání 5.13. Režim bude ve výchozím stavu vypnutý. Pro zapnutí byly navrženy parametry příkazového řádku jádra „randomize_kstack_offset=on/off“ a nastavení CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Náklady při zapnutí režimu jsou odhadovány přibližně na 1% ztráty výkonu.
Podstata navrhované ochrany spočívá ve výběru náhodného posunutí stohu při každém systémovém volání, což ztěžuje určení rozložení stohu v paměti, i když získáme údaje o adresách, protože při dalším systémovém volání se základní adresa stohu změní. Na rozdíl od implementace PaX RANDKSTACK v navrhovaných patchech pro zařazení do jádra se randomizace provádí ne na počáteční fázi (cpu_current_top_of_stack), ale po nastavení struktury pt_regs, což znemožňuje použití metod na základě ptrace pro určení randomizovaného posunu v procesu práce dlouho běžícího systémového volání.
Zdroj: opennet.ru
