Wprowadzono poprawki mające na celu losowe przydzielanie adresów stosu jądra Linuksa dla wywołań systemowych

Kees Cook, były główny administrator systemu kernel.org i lider zespołu ds. bezpieczeństwa Ubuntu, obecnie pracujący w Google nad zabezpieczeniem Androida i ChromeOS, opublikował zestaw poprawek losujących przesunięcia w stosie jądra podczas przetwarzania wywołań systemowych. Poprawki poprawiają bezpieczeństwo jądra, zmieniając położenie stosu, dzięki czemu ataki na stos są znacznie trudniejsze i mniej skuteczne. Początkowa implementacja obsługuje procesory ARM64 i x86/x86_64.

Oryginalny pomysł na patch należy do projektu PaX RANDKSTACK. W 2019 roku Elena Reshetova, inżynier z Intela, próbowała stworzyć implementację tego pomysłu nadającą się do włączenia do głównego jądra Linuksa. Później inicjatywę przejął Kees Cook, który przedstawił implementację odpowiednią dla głównej wersji jądra. Planuje się, że poprawki zostaną dołączone do wersji 5.13. Tryb będzie domyślnie wyłączony. Aby to włączyć, zaproponowano parametr wiersza poleceń jądra „randomize_kstack_offset=on/off” i ustawienie CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT. Koszt włączenia tego trybu szacuje się na około 1% utraty wydajności.

Istotą proponowanego zabezpieczenia jest losowy wybór przesunięcia stosu dla każdego wywołania systemowego, co utrudnia określenie układu stosu w pamięci, nawet po odebraniu danych adresowych, gdyż kolejne wywołanie systemowe zmieni adres bazowy stosu. W przeciwieństwie do implementacji PaX RANDKSTACK, w łatkach proponowanych do włączenia do jądra, randomizacja wykonywana jest nie na etapie początkowym (cpu_current_top_of_stack), ale po ustawieniu struktury pt_regs, co uniemożliwia wykorzystanie metod opartych na ptrace do określenia randomizowanego przesunięcia podczas długotrwałego wywołania systemowego.

Źródło: opennet.ru

Dodaj komentarz