Jak uczynić proces niewidocznym dla innych użytkowników?


19

Jak można uruchomić proces i uczynić go niewidocznym dla toppolecenia? Proces jest uruchamiany przez zwykłego użytkownika (nie root) i nie powinien być widoczny dla innych zwykłych użytkowników.


1
Tego rodzaju pokonanie celu topowego byłoby zbyt łatwe do nadużyć. Dlaczego nie zmienić nazwy procesu? this_is_not_the_process_you_are_looking_for?

Rozumiem, a co z ukrywaniem użytkownika?

5
Powiedz nam, że nie próbujesz pisać root-kita. Czy możesz wyjaśnić swój scenariusz, abyśmy mogli zaproponować lepszą architekturę bezpieczeństwa zamiast takiej, która jest ogólnie uważana za „złe” zachowanie?
Caleb

2
Możesz użyć grsecurity lub SELinux . Oba wymagają interwencji użytkownika root podczas początkowej konfiguracji.
Gilles „SO- przestań być zły”

Odpowiedzi:



11

topPolecenie 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.cpliku.

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_getattrsymbol 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.


4

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.


1

Nie jest to takie proste na standardowym pudełku z linuksem. Spójrz na grsecurity , ale wymaga łatania jądra itp.


2
Myślę, że jest to standard z jądrem selinux.
user606723,


0

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 toppolecenia i odpowiednio go zmodyfikować. Następnie możesz zastąpić toppolecenie w /usr/sbin(lub gdziekolwiek to jest) swoją wersją.


2
Zastąpienie „góry” nie powstrzymuje użytkownika od robienia tego, co robi góra.
Tim Post

2
Nie, ale pytanie dotyczyło tego, jak uczynić procesy niewidocznymi dla toppolecenia.
LawrenceC
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.