Difendersi con chkrootkit
by admin on Feb.10, 2010, under Hacking, Linux, Sicurezza, Tools
Chkrootkit è un ottimo strumento open source progettato per aiutare gli amministratori di sistema nel compito di controllare periodicamente l’integrità e la sicurezza della proprie macchine UNIX/linux.
Chkrootkit (Check Rootkit) è uno shell script che richiama molti comuni tools UNIX/Linux (awk, cut,egrep, find, head, id, ls, netstat, ps, strings, sed, uname), per rilevare all’interno di fondamentali programmi di sistema la presenza di particolari pattern e per confrontare il contenuto del filesystem /proc con l’ output del comando ps (process status) alla ricerca di discrepanze.
Dato che l’affidabilità di qualsiasi programma destinato al rilevamento di malware (come rootkits e virus) è sempre condizionata dell’eventualità di essere a sua volta compromesso, sarebbe opportuno che il software di controllo venisse lanciato da un “rescue disc” (typicamente un Live CD).
Il programma, che lanciato senza ulteriori parametri effettuerebbe tutti i tests disponibili, con l’opzione -h restituisce le proprie opzioni di esecuzione:
# chkrootkit -h
Usage: ./chkrootkit [options] [testname ...]
Options:
-h show this help and exit
-V show version information and exit
-l show available tests
-d debug
-q quiet mode
-x expert mode
-r dir use dir as the root directory
-p dir1:dir2:dirN path for the external commands used by chkrootkit
-n skip NFS mounted dirs
dove testname indica uno o più elementi presi dalla lista seguente, ottenuta con:
# chkrootkit -l
/usr/sbin/chkrootkit: tests: aliens asp bindshell lkm rexedcs sniffer w55808 wted scalper slapper z2 amd basename biff chfn chsh cron crontab date du dirname echo egrep env find fingerd gpm grep hdparm su ifconfig inetd inetdconf identd init killall ldsopreload login ls lsof mail mingetty netstat named passwd pidof pop2 pop3 ps pstree rpcinfo rlogind rshd slogin sendmail sshd syslogd tar tcpd tcpdump top telnetd timed traceroute vdir w write
Per esempio:
# chkrootkit aliens
ROOTDIR is `/'
Checking `aliens'...
/dev/shm/pulse-shm-3167735092
Searching for sniffer's logs, it may take a while... nothing found
Searching for rootkit HiDrootkit's default files... nothing found
Searching for rootkit t0rn's default files... nothing found
Searching for t0rn's v8 defaults... nothing found
Searching for rootkit Lion's default files... nothing found
[...]
Searching for ENYELKM rootkit default files… nothing found
Searching for common ssh-scanners default files… nothing found
Searching for anomalies in shell history files… nothing found
Il comando seguente controlla invece se i binari ps e ls siano stati compromessi e inoltre verifica che nessuna interfaccia di rete si trovi in promiscuous mode:
# ./chkrootkit ps ls sniffer
ROOTDIR is `/'
Checking `ps'... not infected
Checking `ls'... not infected
Checking `sniffer'...
lo: not promisc and no packet sniffer sockets
ppp0: not promisc and no packet sniffer sockets
Con la opzione -q chkrootkit opera in “quiet mode”. In tale modalità vengono emessi solamente i messaggi relativi allo status “infected”.
Con la opzione -x si possono esaminare stringhe sospette all’interno di programmi binari che possano indicare la presenza di un trojan.
In tal caso tutta la analisi viene lasciata all’utente.
Ecco come trovare dei pathnames all’interno di un comando di sistema:
# chkrootkit -x login | egrep '^/'
/lib/ld-linux.so.2
/usr/share/locale
/var/log/faillog
/var/log/wtmp
/dev/
/dev/%s
/etc/gshadow
/bin/sh
/etc/login.defs
È possibile, con la opzione -p, fornire a chkrootkit un percorso di ricerca alternativo, per fare in modo che non adoperi i binari di un sistema (possibilmente) compromesso per effettuare i propri tests.
Per usare, ad esempio, i binari presenti in /mnt/cdrom/bin:
# chkrootkit -p /mnt/cdrom/bin
È anche possibile aggiungere più paths separate da un carattere “:”
# chkrootkit -p /mnt/cdrom/bin:/mnt/floppy/bin
Talvolta può essere utile montare il disco di una macchina compromessa e specificare una nuova rootdir con la opzione “-r”.
Supponendo ad esempio che il disco che si vuole controllare sia montato sotto /mnt/dsk-stranger, si può impartire:
# chkrootkit -r /mnt/dsk-stranger
Ovviamente, la validità di uno strumento come chkrootkit risiede in un utilizzo regolare, possibilmente schedulato.
Per ottenerne, ad esempio, i risultati una volta al giorno per email alle 5 am, si può inserire nel cron file di root (sotto Debian/Ubunti è /var/spool/cron/crontabs/root):
0 5 * * * (cd /usr/local/chkrootkit; ./chkrootkit 2>&1 | mail -s "esito chkrootkit" me@mycompany.com)
quindi:
# /etc/init.d/cron restart

