Jak można uruchomić proces i uczynić go niewidocznym dla top
polecenia? Proces jest uruchamiany przez zwykłego użytkownika (nie root) i nie powinien być widoczny dla innych zwykłych użytkowników.
Jak można uruchomić proces i uczynić go niewidocznym dla top
polecenia? Proces jest uruchamiany przez zwykłego użytkownika (nie root) i nie powinien być widoczny dla innych zwykłych użytkowników.
Odpowiedzi:
Jądro Linuksa od wersji 3.3 obsługuje ukrywanie procesów przed innymi użytkownikami.
Odbywa się to przez hidepid=
i gid=
zamontować opcje / proc, jak opisano w odpowiedni popełnić i Documentation / filesystems / proc.txt .
Debian Wheezy zawiera również tę funkcję.
top
Polecenie odczytuje dane z proc, który jest dostarczany bezpośrednio z jądra. Aby ukryć procesy, musisz użyć kodu w jądrze, aby wykonać maskowanie.
Oprócz korzystania ze środowiska bezpieczeństwa, takiego jak SELinux i grsecurity (wspomniane w innych odpowiedziach), kod w stylu rootkita jest twoją jedyną pozostałą opcją. Mówię „styl”, ponieważ sam „rootkit” nie jest zły, jest taki, jak się go używa. Istnieją całkowicie uzasadnione powody ukrywania procesów przed innymi użytkownikami, dlatego ta funkcja istnieje w ramach bezpieczeństwa.
Podstawową drogą, którą musisz podążać, aby to zadziałało, jest podpięcie się (lub przejęcie, w zależności od tego, jak na to spojrzysz) funkcji w jądrze Linux-a, które przekazują /proc/pid/
dane. Pokazuję jedną metodę podpięcia się do funkcji jądra Linuksa w module bezpieczeństwa, który napisałem:
https://github.com/cormander/tpe-lkm
Kod „wysokiego poziomu” do tego jest w hijack_syscalls()
metodzie w security.c
, a magia diabła w szczegółach jest w hijacks.c
pliku.
Prawdopodobnie znajdziesz funkcje, do których chcesz się podłączyć w fs/proc/
katalogu kodu źródłowego jądra systemu Linux. Pamiętaj, że linux nie zapewnia stabilnego ABI, więc twój kod będzie musiał się nieco zmienić, aby działał w różnych wersjach jądra linuksa. Pamiętaj również, że aby wstawić ten kod, potrzebujesz pełnego dostępu roota do komputera.
AKTUALIZACJA:
Jeśli owiniesz pid_getattr
symbol jądra jakimś dodatkowym kodem, naprawdę łatwo to zrobić. Niedawno dodałem coś, co ukrywa procesy do powyższego modułu jądra:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
Możesz zrobić coś podobnego, sprawiając, że procesy określonego użytkownika lub grupy nie będą widoczne dla nikogo oprócz użytkownika root i tego użytkownika. Robienie tego według nazwy procesu jest nieco bardziej złożone, ale możliwe. Zobacz exe_from_mm()
funkcję. Pamiętaj, że korzystanie z niego może mieć wpływ na wydajność pid_getattr
.
Wydaje się, że dwie główne opcje.
Selinux działa, umieszczając różnych ludzi w różnych domenach bezpieczeństwa i w pewnym sensie umieszczając je w piaskownicy, aby nie mogli widzieć siebie nawzajem. Jest to omówione w tym pytaniu . Ponieważ selinux szybko staje się de facto strukturą bezpieczeństwa w świecie Linuksa, prawdopodobnie jest to kierunek, w którym powinieneś szukać.
Drugim jest grsecurity, o którym wspomniał marioosh i jak zadano w tym pytaniu . Niektóre dystrybucje mają alternatywne pakiety jądra z zastosowanymi łatami grsecurity. Jeśli twoje to ma, możesz rozważyć ich użycie.
Jeśli z jakiegoś powodu chcesz to zrobić bez dodania frameworka bezpieczeństwa, takiego jak selinux lub grsecurity, wyjaśnij, w jaki sposób nie piszesz root-kita.
Nie jest to takie proste na standardowym pudełku z linuksem. Spójrz na grsecurity , ale wymaga łatania jądra itp.
możesz zastąpić swój argv [0] inną nazwą ... ale ściśle mówiąc, szukasz jakiegoś rootkita. może ci to pomóc: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
Możesz napisać równoważne polecenie, które działa tak samo top
, ale nie wyświetla procesów pasujących do określonej nazwy. Alternatywnie możesz uzyskać kod źródłowy top
polecenia i odpowiednio go zmodyfikować. Następnie możesz zastąpić top
polecenie w /usr/sbin
(lub gdziekolwiek to jest) swoją wersją.
top
polecenia.
this_is_not_the_process_you_are_looking_for
?