Wydanie LKRG 1.0.0 w celu ochrony przed wykorzystaniem luk w jądrze Linuxa

Projekt Openwall opublikował moduł jądra LKRG 1.0.0 (Linux Kernel Runtime Guard), który ma na celu weryfikację integralności struktur jądra oraz wykrywanie prób wykorzystania luk w jądrze. Zauważono, że nadanie numeru wersji 1.0.0 oznacza osiągnięcie dojrzałego stanu projektu. Kod projektu jest dostępny na licencji GPLv2.

Moduł nadaje się zarówno do ochrony przed atakami, manipulującymi już znanymi lukami w jądrze Linux, jak i do przeciwdziałania exploitom, które wykorzystują jeszcze nieznane luki, jeśli nie zostaną zastosowane specjalne środki omijające LKRG. Ochrona opiera się na wykrywaniu nieautoryzowanej modyfikacji działającego jądra (weryfikacja integralności) oraz monitorowaniu zmian uprawnień procesów użytkowników (określenie zastosowania exploitów).

Weryfikacja integralności odbywa się na podstawie porównania hashy, obliczanych dla najważniejszych obszarów pamięci oraz struktur danych jądra, takich jak IDT (Tabela Opisująca Przerwania), MSR, tabele wywołań systemowych, wszystkie procedury i funkcje, obsługiwacze przerwań, listy załadowanych modułów, zawartość sekcji „.text” modułów oraz atrybuty procesów. Procedura weryfikacji jest aktywowana cyklicznie przez timer lub po wystąpieniu określonych zdarzeń w jądrze, na przykład podczas wykonywania wywołań systemowych setuid, setreuid, fork, exit, execve i do_init_module.

Wykrywanie możliwego zastosowania exploitów oraz blokowanie ataków odbywa się na etapie przed przyznaniem przez jądro dostępu do zasobów (na przykład przed otwarciem pliku), lecz po uzyskaniu przez proces nieautoryzowanych uprawnień (na przykład zmiana UID). W przypadku wykrycia nieautoryzowanego zachowania procesów, następuje ich wymuszone zakończenie, co jest wystarczające do zablokowania wielu exploitów. Koszty związane z działaniem modułu szacowane są na 2-2,5%.

Obsługuje działanie na systemach z architekturami x86-64, AArch64 (ARM64), ARM32 i x86. Działanie LKRG 1.0.0 zostało przetestowane z jądrami z różnych dystrybucji, począwszy od jądra 3.10 z RHEL/CentOS 7 aż do 6.17-rc4 z repozytorium, w którym przygotowywana jest wersja Fedora 44. Pakiety są dostępne dla dystrybucji ALT Linux, Arch Linux, Astra Linux, Gentoo, Guix, NixOS, Rocky Linux, Whonix, Yocto i OpenBMC. Pakiety zbudowane dla Rocky Linux można używać w RHEL 8/9 oraz pochodnych dystrybucjach, takich jak AlmaLinux 8/9, a pakiety dla Whonix w Debianie i Ubuntu.

Wśród zmian w nowej wersji:

  • Zapewniona zgodność z jądrami Linux aż do wydania 6.17-rc4.
  • Przy użyciu jąder od wersji 6.13 zaniechano przechwytywania zdalnych wywołań override_creds() i revert_creds(), co ograniczyło wykrywanie ataków, które nadpisują wskaźnik cred. Ograniczenia te próbowały zrekompensować przez dodanie kontroli nadpisania wskaźnika cred w innych miejscach jądra.
  • Zaniechano nadmiernego śledzenia danych uwierzytelniających, dla których nie przeprowadzano weryfikacji integralności. Zmiana ta pozwoliła na skrócenie bazy kodu o około 1500 linii.
  • Dodano wsparcie dla nowego mechanizmu w jądrze Linux 6.10 do tworzenia tymczasowych plików w systemie plików OverlayFS, korzystając z opcji O_TMPFILE (ovl_tmpfile). Wskazane wsparcie jest konieczne, aby zapobiec fałszywym alarmom, które pojawiają się przy użyciu odizolowanych kontenerów na systemach z jądrami 6.10-6.12.
  • Dla systemów x86_64 dodano wsparcie dla technologii Intel CET (Control-flow Enforcement Technology) w celu ochrony wykonywanego kodu wykorzystującego instrukcje IBT (śledzenie pośrednich wywołań), a także programowej ochrony kCFI (integralność przepływu sterowania jądra) w celu zablokowania naruszeń normalnej kolejności wykonywania (przepływu sterowania) w wyniku zastosowania exploitów modyfikujących wskaźniki do funkcji przechowywanych w pamięci.
  • Do obsługi wielu handlerów zamiast kretprobes zastosowano mechanizm kprobes, co uprościło kod instalacji hooków i pozwoliło na osiągnięcie wyższej wydajności.
  • Przepracowano działanie z blokadami (lock) danych w jądrze specyficznych dla procesu (per-task shadow data). Dzięki wyeliminowaniu zbędnych blokad udało się zwiększyć wydajność dostępu do takich danych.
  • Usunięto błędy prowadzące do stanów wyścigu, problemów z weryfikacją integralności i fałszywych alarmów.
  • Poprawiono wsparcie dla kompilacji z użyciem Clang.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster