Do jądra Linux 5.4 wprowadzono poprawki ograniczające dostęp roota do wnętrz jądra

Linus Torvalds przyjął do składu przyszłego wydania jądra Linux 5.4 zestaw poprawek „lockdown«, proponowany autorstwa Davida Howellsa (pracuje w Red Hat) oraz Matthew Garretta (Matthew Garrett, pracuje w Google), mających na celu ograniczenie dostępu użytkownika root do jądra. Funkcjonalność związana z „lockdown” została wydzielona do opcjonalnie ładowanego modułu LSM (Linux Security Module), który ustanawia barierę między UID 0 a jądrem, ograniczając określoną funkcjonalność niskiego poziomu.

Jeśli atakujący w wyniku ataku uzyskał możliwość wykonywania kodu z uprawnieniami root, może uruchamiać swój kod także na poziomie jądra, na przykład przez podmianę jądra za pomocą kexec lub odczyt/zapis pamięci przez /dev/kmem. Najbardziej oczywistą konsekwencją takiej aktywności może być obejście UEFI Secure Boot lub pozyskanie poufnych danych przechowywanych na poziomie jądra.

Początkowo funkcje ograniczające uprawnienia root rozwijano w kontekście wzmocnienia ochrony zweryfikowanego rozruchu, a dystrybucje już od dość dawna stosują zewnętrzne poprawki blokujące obejście UEFI Secure Boot. Jednocześnie takie ograniczenia nie były włączane do głównego drzewa jądra z powodu rozbieżności w sposobie ich realizacji oraz obaw o naruszenie działania istniejących systemów. Moduł „lockdown” łączy stosowane już w dystrybucjach poprawki, które zostały przeprojektowane w formie oddzielnego podsystemu, niezwiązanego bezpośrednio z UEFI Secure Boot.

W trybie lockdown ograniczany jest dostęp do /dev/mem, /dev/kmem, /dev/port, /proc/kcore, debugfs, trybu debugowania kprobes, mmiotrace, tracefs, BPF, PCMCIA CIS (Card Information Structure), niektórych interfejsów ACPI oraz rejestrów MSR CPU, blokowane są wywołania kexec_file i kexec_load, zabronione jest przechodzenie w tryb uśpienia, ograniczane jest użycie DMA dla urządzeń PCI, zabroniony jest import kodu ACPI ze zmiennych EFI,
niedozwolone są manipulacje portami wejścia/wyjścia, w tym zmiana numeru przerwania i portu wejścia/wyjścia dla portu szeregowego.

Domyślnie moduł lockdown jest nieaktywny, jest kompilowany po wskazaniu w kconfig opcji SECURITY_LOCKDOWN_LSM i aktywowany za pomocą parametru jądra „lockdown=”, pliku sterującego „/sys/kernel/security/lockdown” lub opcji kompilacji LOCK_DOWN_KERNEL_FORCE_*, które mogą przyjmować wartości „integrity” i „confidentiality”. W pierwszym przypadku blokowane są możliwości pozwalające na wprowadzanie zmian do działającego jądra z przestrzeni użytkownika, a w drugim dodatkowo wyłączana jest funkcjonalność, którą można wykorzystać do pozyskiwania poufnych informacji z jądra.

Warto przy tym zaznaczyć, że lockdown jedynie ogranicza standardowe możliwości dostępu do jądra, ale nie chroni przed modyfikacjami wynikającymi z wykorzystania luk. Do blokowania zmian w działającym jądrze przy użyciu exploitów projekt Openwall rozwijana jest oddzielny moduł LKRG (Linux Kernel Runtime Guard).

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster