Záplaty zavedené pro randomizaci adres zásobníku linuxového jádra pro systémová volání

Kees Cook, bývalý hlavní systémový administrátor kernel.org a vedoucí bezpečnostního týmu Ubuntu, který nyní pracuje ve společnosti Google na zabezpečení Androidu a ChromeOS, publikoval sadu záplat, které náhodně rozdělí offsety v zásobníku jádra při zpracování systémových volání. Záplaty zlepšují zabezpečení jádra změnou umístění zásobníku, takže útoky na zásobník jsou mnohem obtížnější a méně úspěšné. Počáteční implementace podporuje procesory ARM64 a x86/x86_64.

Původní nápad na patch patří do projektu PaX RANDKSTACK. V roce 2019 se Elena Reshetova, inženýrka z Intelu, pokusila vytvořit implementaci této myšlenky vhodnou pro zahrnutí do hlavního linuxového jádra. Později se iniciativy chopil Kees Cook, který představil implementaci vhodnou pro hlavní verzi jádra. Opravy jsou plánovány jako součást vydání 5.13. Režim bude ve výchozím nastavení zakázán. Chcete-li to povolit, je navržen parametr příkazového řádku jádra „randomize_kstack_offset=on/off“ a nastavení CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Režie aktivace režimu se odhaduje na přibližně 1% ztrátu výkonu.

Podstatou navrhované ochrany je výběr náhodného posunu zásobníku pro každé systémové volání, což znesnadňuje určení rozložení zásobníku v paměti i po obdržení adresových dat, protože příští systémové volání změní základní adresu zásobníku. Na rozdíl od implementace PaX RANDKSTACK se v patchích navržených pro zahrnutí do jádra randomizace neprovádí v počáteční fázi (cpu_current_top_of_stack), ale po nastavení struktury pt_regs, což znemožňuje použití metod založených na ptrace k určení náhodného offsetu. při dlouhotrvajícím systémovém volání.

Zdroj: opennet.ru

Přidat komentář