Come hai potuto avviare un processo e renderlo invisibile al top
comando? Il processo viene avviato da un utente normale (non root) e non dovrebbe essere visibile ad altri utenti normali.
Come hai potuto avviare un processo e renderlo invisibile al top
comando? Il processo viene avviato da un utente normale (non root) e non dovrebbe essere visibile ad altri utenti normali.
Risposte:
Il kernel Linux dal 3.3 contiene il supporto per nascondere i processi ad altri utenti.
Viene eseguito da hidepid=
e gid=
installa le opzioni per / proc come descritto nel commit e nella documentazione / filesystems / proc.txt corrispondenti .
Debian Wheezy include anche questa funzione.
Il top
comando legge i dati da proc, che viene fornito direttamente dal kernel. Per nascondere i processi, dovresti usare il codice all'interno del kernel per eseguire il mascheramento.
Oltre all'utilizzo di un framework di sicurezza come SELinux e grsecurity (menzionato nelle altre risposte), il codice in stile rootkit è l'unica opzione rimasta. Dico "stile" perché un "rootkit" di per sé non è male, è come viene usato. Ci sono ragioni perfettamente legittime dietro i processi nascosti da altri utenti, motivo per cui questa capacità esiste nei framework di sicurezza.
Il percorso di base che dovresti seguire per farlo funzionare è agganciare (o dirottare, a seconda di come lo guardi) le funzioni nel kernel di Linux che distribuiscono i /proc/pid/
dati. Dimostro un metodo di aggancio alle funzioni del kernel linux in un modulo di sicurezza che ho scritto:
https://github.com/cormander/tpe-lkm
Il codice "di alto livello" è nel hijack_syscalls()
metodo security.c
e la magia del diavolo nei dettagli è nel hijacks.c
file.
Probabilmente troverai le funzioni che vorrai agganciare nella fs/proc/
directory del codice sorgente del kernel Linux. Tieni presente che Linux non fornisce un ABI stabile, quindi il tuo codice dovrà cambiare un po 'per farlo funzionare in diverse versioni del kernel di Linux. Inoltre, tieni presente che è necessario un accesso root completo alla macchina per poter inserire questo codice.
AGGIORNARE:
Se si avvolge il pid_getattr
simbolo del kernel con un po 'di codice aggiuntivo, è davvero facile farlo. Di recente ho aggiunto qualcosa che nasconde i processi al modulo kernel sopra:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
Si potrebbe fare qualcosa di simile rendendo i processi di un determinato utente o gruppo non visualizzabili da nessuno tranne root e quell'utente. Farlo in base al nome del processo è un po 'più complesso, ma possibile. Dai un'occhiata alla exe_from_mm()
funzione. Si noti che potrebbero esserci implicazioni in termini di prestazioni nell'usarlo all'interno di pid_getattr
.
Sembra le due opzioni principali.
Selinux lavora mettendo diverse persone in diversi domini di sicurezza e in un certo senso li inscatola in modo che non possano vedere le cose degli altri. Questo è trattato in questa domanda . Poiché selinux sta rapidamente diventando il framework di sicurezza di fatto nel mondo Linux, questa è probabilmente la direzione da seguire.
L'altro è la sicurezza come menzionato da marioosh e come chiesto in questa domanda . Alcune distribuzioni hanno pacchetti kernel alternativi con patch grsecurity applicate. Se il tuo ha questo potresti cercare di usarli.
Se per qualche motivo vuoi farlo senza l'aggiunta di un framework di sicurezza come selinux o grsecurity, spiega come non stai scrivendo un root-kit.
Non è così semplice su Linux box standard. Guarda grsecurity , ma richiede patch kernel ecc.
potresti sovrascrivere il tuo argv [0] con un altro nome ... ma a rigore, stai cercando una specie di rootkit. questo può aiutarti: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
È possibile scrivere un comando equivalente che funziona esattamente come top
, ma non visualizza i processi che corrispondono a un nome specifico. In alternativa puoi ottenere il codice sorgente del top
comando e modificarlo di conseguenza. È quindi possibile sostituire il top
comando in /usr/sbin
(o ovunque sia) con la propria versione.
top
comando.
this_is_not_the_process_you_are_looking_for
?