Matheus Alves, badawcza bezpieczeństwa specjalizujący się w złośliwym oprogramowaniu, opublikował aktualizację projektu Singularity, rozwijającego otwarty rootkit dla jądra Linux, dystrybuowany na licencji MIT. Celem projektu jest demonstracja metod umożliwiających ukrycie swojej obecności po uzyskaniu dostępu root i zachowanie możliwości ukrytego wykonywania operacji z uprawnieniami. Zakłada się, że Singularity może być użyteczne dla badaczy bezpieczeństwa do testowania i opracowywania narzędzi do wykrywania i blokowania rootkitów.
Rootkit jest zrealizowany jako moduł dla jąder Linux 6.x i wykorzystuje mechanizm ftrace do dyskretnego przechwytywania wywołań systemowych bez zmiany punktów wejścia w wywołania systemowe i bez modyfikacji funkcji jądra. Singularity wspiera ukrywanie swojej obecności w systemie, a także ukrywanie procesów wyznaczonych przez atakującego oraz powiązanych z nimi plików i aktywności sieciowej. Dla wygody badaczy funkcjonalność rootkita podzielona jest na moduły.
Oprócz standardowych metod maskowania obecności w systemie, takich jak ukrywanie potrzebnych procesów, plików, katalogów i modułów jądra, w Singularity zrealizowano kilka zaawansowanych metod omijania mechanizmów ochrony i utrudniania wykrywania specjalistycznymi skanerami rootkitów, takimi jak Falco, ghostscan, tracee, unhide, chkrootkit i rkhunter. Singularity może między innymi ukrywać swoją aktywność przed narzędziami korzystającymi z eBPF, usuwać blokady eBPF, przeciwdziałać ładowaniu modułów jądra, stawiać opór analizie wejścia/wyjścia przez podsystem io_uring oraz omijać kontrole integralności wykonywane przez moduł LKRG (Linux Kernel Runtime Guard).
W Singularity znajduje się reverse shell, zapewniający uprzywilejowany zdalny dostęp do systemu poprzez wysyłanie pakietów ICMP, a także obsługiwacze, które umożliwiają ukrycie procesów lub podniesienie uprawnień w systemie poprzez określone manipulacje sygnałami i zmiennymi środowiskowymi. Na przykład, aby ukryć proces z /proc i wyjścia narzędzi, takich jak ps, można wykonać „kill -59 PID_procesu”, a aby podnieść uprawnienia ustawić zmienną środowiskową „MAGIC=mtz”.
Rootkit ukrywa ruch reverse shell przed analizatorami sieciowymi i pozwala omijać obsługiwacze SELinux, które reagują na ICMP. Singularity obejmuje także funkcje ukrywania wybranych połączeń sieciowych z tabeli /proc/net/nf_conntrack, obsług właściwego gniazda SOCK_DIAG/NETFILTER oraz narzędzi takich jak netstat, ss, lsof, tcpdump i wireshark. Dostępne są obsługiwacze do czyszczenia komunikatów audytu oraz logów (klogctl, syslog, systemd-journal, /sys/kernel/debug/tracing/, dmesg). Istnieją filtry przeciwdziałające analizatorom pamięci, takim jak Volatility, wykorzystującym /proc/kcore, /proc/kallsyms i /proc/vmallocinfo, a także możliwości filtrowania bezpośrednich odwołań do urządzeń blokowych, aby zapobiec niskopoziomowej analizie zawartości systemu plików.

Źródło: opennet.ru
