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.
linux
top
process-management
Debuger
źródło
źródło
this_is_not_the_process_you_are_looking_for
?Odpowiedzi:
Jądro Linuksa od wersji 3.3 obsługuje ukrywanie procesów przed innymi użytkownikami.
Odbywa się to przez
hidepid=
igid=
zamontować opcje / proc, jak opisano w odpowiedni popełnić i Documentation / filesystems / proc.txt .Debian Wheezy zawiera również tę funkcję.
źródło
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 wsecurity.c
, a magia diabła w szczegółach jest whijacks.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
.źródło
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.
źródło
Nie jest to takie proste na standardowym pudełku z linuksem. Spójrz na grsecurity , ale wymaga łatania jądra itp.
źródło
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
źródło
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łowytop
polecenia i odpowiednio go zmodyfikować. Następnie możesz zastąpićtop
polecenie w/usr/sbin
(lub gdziekolwiek to jest) swoją wersją.źródło
top
polecenia.