Breve analisi del rootkit SuckIT
Su un sistema Linux RedHat 7.3 è stato installato il rootkit SuckIT, uno dei più evoluti in quanto agisce direttamente su /dev/kmem e non ha bisogno di un kernel modulare, cancella le proprie tracce dal /proc file system e modifica /sbin/init con una versione trojan.
Di default si installa nella directory /usr/share/locale/sk/.sk12/ che ovviamente non è visibile all'amministratore del sistema violato.
Un lsof, come tutti gli altri comandi di visualizzazione di file e processi, normalmente non ne rileva l'esistenza, ma nella shell remota dell'intrusore il processo è normalmente visibile:
[root@95 .sk12]# lsof | grep sk
(dalla shell del rootkit)
sk 5878 root cwd DIR 3,6 4096 2 /
sk 5878 root rtd DIR 3,6 4096 2 /
sk 5878 root txt REG 3,6 29220 211267 /usr/share/locale/sk/.sk12/sk
sk 5878 root 0u CHR 1,3 33485 /dev/null
sk 5878 root 1u CHR 1,3 33485 /dev/null
sk 5878 root 2u CHR 1,3 33485 /dev/null
sk 5878 root 3u CHR 1,2 33250 /dev/kmem
sk 5878 root 4u raw 2791354 00000000:0006->00000000:0000 st=07
sk 5878 root 5u IPv4 2960357 TCP 95.intranet:32954->95.intranet:32947 (ESTABLISHED)
sk 5878 root 6u CHR 2,0 33702 /dev/ptyp0
[root@95 .sk12]# ps -adef
(evidenziati i processi normalmente nascosti)
root 5040 1 0 11:25 ? 00:00:00 ./sk
root 5878 5040 0 11:32 ? 00:00:00 ./sk
root 5879 5878 0 11:32 ttyp0 00:00:00 sh -i
Fortunatamente l'ultima versione al momento disponibile di chkrootkit si accorge che qualcosa sul sistema è anomalo:
[root@95 chkrootkit-pre-0.36]# ./chkrootkit
ROOTDIR is `/'
Checking `amd'... not found
Checking `basename'... not infected
Checking `biff'... not found
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `date'... not infected
Checking `du'... not infected
Checking `dirname'... not infected
Checking `echo'... not infected
Checking `egrep'... not infected
Checking `env'... not infected
Checking `find'... not infected
Checking `fingerd'... not found
Checking `gpm'... not infected
Checking `grep'... not infected
Checking `hdparm'... not infected
Checking `su'... not infected
Checking `ifconfig'... not infected
Checking `inetd'... not tested
Checking `inetdconf'... not found
Checking `identd'... not infected
Checking `killall'... not infected
Checking `ldsopreload'... not infected
Checking `login'... not infected
Checking `ls'... not infected
Checking `lsof'... not infected
Checking `mail'... not infected
Checking `mingetty'... not infected
Checking `netstat'... not infected
Checking `named'... not found
Checking `passwd'... not infected
Checking `pidof'... not infected
Checking `pop2'... not found
Checking `pop3'... not found
Checking `ps'... not infected
Checking `pstree'... not infected
Checking `rpcinfo'... not infected
Checking `rlogind'... not found
Checking `rshd'... not found
Checking `slogin'... not infected
Checking `sendmail'... not infected
Checking `sshd'... not infected
Checking `syslogd'... not infected
Checking `tar'... not infected
Checking `tcpd'... not infected
Checking `top'... not infected
Checking `telnetd'... not infected
Checking `timed'... not found
Checking `traceroute'... not infected
Checking `w'... not infected
Checking `write'... not infected
Checking `aliens'... no suspect files
Searching for sniffer's logs, it may take a while... nothing found
Searching for HiDrootkit's default dir... nothing found
Searching for t0rn's default files and dirs... nothing found
Searching for t0rn's v8 defaults... nothing found
Searching for Lion Worm default files and dirs... nothing found
Searching for RSHA's default files and dir... nothing found
Searching for RH-Sharpe's default files... nothing found
Searching for Ambient's rootkit (ark) default files and dirs... nothing found
Searching for suspicious files and dirs, it may take a while...
/usr/lib/perl5/5.6.1/i386-linux/.packlist
Searching for LPD Worm files and dirs... nothing found
Searching for Ramen Worm files and dirs... nothing found
Searching for Maniac files and dirs... nothing found
Searching for RK17 files and dirs... nothing found
Searching for Ducoci rootkit... nothing found
Searching for Adore Worm... nothing found
Searching for ShitC Worm... nothing found
Searching for Omega Worm... nothing found
Searching for Sadmind/IIS Worm... nothing found
Searching for MonKit... nothing found
Searching for Showtee... nothing found
Searching for OpticKit... nothing found
Searching for T.R.K... nothing found
Searching for Mithra... nothing found
Searching for anomalies in shell history files... nothing found
Checking `asp'... not infected
Checking `bindshell'... not infected
Checking `lkm'... You have 3 process hidden for readdir command
You have 3 process hidden for ps command
Warning: Possible LKM Trojan installed
Checking `rexedcs'... not found
Checking `sniffer'...
eth0 is not promisc
Checking `wted'... nothing deleted
Checking `z2'...
nothing deleted
In particolare è lo script che controlla ad uno ad uno tutti i possibili PID (da 1 a 65535) che si accorge che alcune righe di ps e alcune directory (che sono comunque accessibili, se si conosce il nome, ma non vengono visualizzate) in /proc/ vengono nascoste:
[root@95 chkrootkit-pre-0.36]# ./chkproc -v
PID 5040: not in readdir output
PID 5040: not in ps output
PID 5878: not in readdir output
PID 5878: not in ps output
PID 5879: not in readdir output
PID 5879: not in ps output
You have 3 process hidden for readdir command
You have 3 process hidden for ps command
A questo punto anche da una shell normale è possibile visualizzare il contenuto delle rispettive directory in proc, anche se un ls non le visualizza:
cat /proc/5040/cmdline
./sk
Dalla shell dell'intrusore si visualizza sia /sbin/init sia /sbin/initsk12 (questo è l'init originario, che viene rinominato, sostituito con una versione modificata, e nascosto (come tutti i file che finiscono con sk12 (suffisso configurabile in fase di compilazione del rootkit)
-rwxr-xr-x 1 root root 26920 Jul 5 11:16 init
-rwxr-xr-x 1 root root 37617 Apr 19 18:35 initlog
-rwxr-xr-x 1 root root 26920 Jul 5 11:16 initsk12
Un controllo sull'integrità dei file modificati ci rende evidente che il rootkit non altera il checksum md5, rendendo difficle, per tool come Tripwire, l'individuazione dello stesso.
[root@95 chkrootkit-pre-0.36]# md5sum /sbin/init
a44b4fe49763349af054000b8565618a /sbin/init
[root@95 chkrootkit-pre-0.36]# md5sum /sbin/initsk12
a44b4fe49763349af054000b8565618a /sbin/initsk12