Análisis con Herramientas Estándar de Unix

Asumiendo que nuestras herramientas de Unix están limpias de root-kit podemos seguir desde el punto donde lo dejamos en la sección anterior. Hemos notado que las dos cuentas "y" y "z" tienen el directorio "home" situado en en /tmp y en / respectivamente. Eso significa que debemos examinar de forma detenida estos directorios para detectar cualquier anomalía.

ls -lat /mnt/tmp total 156

drwxrwxrwt 6 root root 1024 May 1 04:03 .
-r--r--r-- 1 root gdm 11 Apr 29 14:17 .X0-lock
drwxrwxrwt 2 root gdm 1024 Apr 29 14:17 .X11-unix
drwxrwxrwt 2 xfs xfs 1024 Apr 29 14:17 .font-unix
drwxr-xr-x 25 y root 1024 Apr 28 23:47 ..
drwx------ 2 user1 user1 1024 Apr 26 17:36 kfm-cache-500
-rw-rw-r-- 1 user1 user1 12288 Apr 26 16:37 psdevtab
drwxrwxrwt 2 root root 1024 Apr 21 11:12 .ICE-unix
-rwx------ 1 root root 138520 Apr 20 20:15 .fileMFpmnk

El listado nos muestra que existe un fichero cuyo tamaño es superior al resto. También vemos que es el fichero más antiguo de la carpeta que pertenece al root. El nombre del fichero no estandarizado y posee derechos de ejecución. Debemos determinar de quetipo de fichero se trata. El programa file nos informa que el fichero misterioso es un binario ELF de 32-bit LSB ejecutable, Intel 80386, versión 1 (Linux), enlazado estáticamente, stripeado. Para ver cual es el objetivo del fichero examinamos el listado de cadenas de texto que contiene.

1. strings - /mnt/tmp/.fileMFpmnk

/lib/ld-linux.so.2 gmon_start libpam.so.0 DYNAMIC _GLOBAL_OFFSET_TABLE pam_set_item free __ctype_tolower malloc strcmp pam_end pam_start

. . .

File

Compressed

Block

Stream [nowhere yet] ftpd

:aAvdlLiop:P:qQr:sSt:T:u:wWX bad value for -u option -%c requires an argument unknown option -%c ignored

. . .

VirtualFTP Connect to: %s [%s] banner logfile email /var/log/xferlog connection refused (server shut down) from %s %s FTP server shut down -- please try again later. lslong /bin/ls -la lsshort lsplain /bin/ls greeting full terse brief

%s FTP server (%s) ready.

%s FTP server ready.

FTP server ready.

. . .

FTP LOGIN REFUSED (already logged in as %s) FROM %s, %s Already logged in.

/etc/ftphosts

FTP LOGIN REFUSED (name in %s) FROM %s, %s anonymous

FTP LOGIN REFUSED (anonymous ftp denied on default server) FROM%s, %s

FTP LOGIN REFUSED (ftp in denied-uid) FROM %s, %s

/etc/ftpusers

. . .

Por lo que vemos, strings nos comenta que el binario es un servidor FTP, normalmente llamado ftpd ó in.ftpd. Puede ser que el fichero forma parte de un root-kit, o de un caballo de Troya. Los ficheros de configuración de este tipo de kits suelen normalmente encontrarse en el directorio /dev, entonces una búsqueda rápida en ese directorio podrá desvelar nos mucha información útil.

cd /mnt/dev # ls -lat | head -30 total 116

drwxr-xr-x8 root root 34816 Apr 30 04:02 .
srw-rw-rw-1 root root 0 Apr 30 04:02 log
crw-------1 root root 4,1 Apr 29 14:17 tty1
crw-------1 root root 4,2 Apr 29 14:17 tty2
crw-------1 root root 4,3 Apr 29 14:17 tty3
crw-------1 root root 4,4 Apr 29 14:17 tty4
crw-------1 root root 4,5 Apr 29 14:17 tty5
crw-------1 root root 4,6 Apr 29 14:17 tty6
srwxrwxrwx1 root root 0 Apr 29 14:17 gpmctl
srw-------1 root root 0 Apr 29 14:17 printer
crw-r--r--1 root root 1,9 Apr 29 14:17 urandom
prw-------1 root root 0 Apr 29 14:14 initctl
drwxr-xr-x 25 y root 1024 Apr 28 23:47 ..
crw-rw-rw- 1 root tty 3,2 Apr 28 11:44 ttyp2
crw-rw-rw- 1 root tty 3,0 Apr 28 11:43 ttyp0
crw-rw-rw- 1 root tty 3,1 Apr 28 11:43 ttyp1
-rw-r--r-- 1 root root 18 Apr 27 22:58 ptyp
drwxr-xr-x 4 r00t root 1024 Apr 27 22:58 ...
crw-rw-rw- 1 root tty 3,4 Apr 27 12:02 ttyp4
crw-rw-rw- 1 root tty 3,3 Apr 27 11:56 ttyp3
crw------- 1 root root 5,1 Apr 21 11:09 console
lrwxrwxrwx 1 root root 5 Apr 21 04:02 mouse -> psaux
drwxr-xr-x 2 root root 1024 Apr 20 15:21 rev0
-rw-r--r-- 1 root root 33 Apr 20 15:21 ptyr
lrwxrwxrwx 1 root root 9 Feb 28 02:23 isdnctrl -> isdnctrl0
lrwxrwxrwx 1 root root 5 Feb 28 02:23 nftape -> nrft0
lrwxrwxrwx 1 root root 3 Feb 28 02:23 fb -> fb0
lrwxrwxrwx 1 root root 15 Feb 28 02:23 fd -> ../proc/self/fd
lrwxrwxrwx Broken pipe 1 root root 4 Feb 28 02:23 ftape -> rft0

De todos los ficheros que podemos ver en este directorio, nos llaman atención los archivos "ptyp" y "ptyr" que no son dispositivos comunes, ni directorios ni tampoco enlaces simbólicos, son ficheros de tipo ASCII text. También localizamos un directorio llamado "rev0" y una carpeta oculta "..." que pertenece al usuario r00t.

less ptyr

. . .

sp.pl slice ssynk4 rev0 bc1 snif

Son ficheros de configuración de un caballo de Troya. El contenido muestra que ls ocultará ficheros o directorios sp.pl, slice (un cliente DoS), ssynk4 (cliente DoS), rev0, bc1, y snif (adivina que puede ser :).

Si estamos seguros que nuestro sistema no está "infectado" con un root-kit podemos utilizar las herramientas find y grep para identificar dónde se encuentran estos ficheros (el disco está montado como solo lectura, nodev, ¿verdad?).

cd /mnt

find . -ls | grep -f etc/ptyr

  1. 1 drwxr-xr-x2 rootroot1024 Apr 20 15:21 ./dev/rev0

  2. 1 -rw-r--r--1 rootroot5 Apr 20 15:21 ./dev/rev0/sniff.pid

28206120 -rw-r--r--1 rootroot19654 Apr 20 20:23 ./dev/rev0/tcp.log

  1. 9 -rwxr-xr-x1 1080users9106 Sep 20 1999 ./dev/rev0/slice

  2. 8 -rwxr-xr-x1 1080users8174 Sep 20 1999 ./dev/rev0/smurf4

  3. 8 -rwxr-xr-x1 1080users7229 Sep 20 1999 ./dev/rev0/snif

  4. 4 -rwxr-xr-x1 1080users4060 Mar 5 1999 ./dev/rev0/sp.pl

1647709 -rwxr-xr-x1 root10008268 Aug 10 1999 ./dev/.../blitznet/slice2

619072 -rwxr-xr-x1 rootroot2006 Mar 29 1999 ./usr/bin/sliceprint

2552301 -rw-r--r--1 rootroot900 Mar 21 1999 ./usr/include/python1.5/sliceobje

Algunos de los ficheros que están en la lista posiblemente son ficheros legítimos del sistema operativo, pero hay algunos que son bastante sospechosos, los que se encuentran en dos carpetas del directorio /dev.

cd /mnt/dev

less ptyp

. . .

3 egg

3 egg

3 bnc

En este momento podemos hacer una apuesta seguro, que el fichero "ptyp" es un fichero de configuración de la utilidad "ps" del root-kit, que oculta los procesos que contienen cadenas "egg", "bnc" en sus nombres. Hay queencontrar binarios ejecutables con estos nombres.

cd /mnt/dev # ls -lR ...

...: total 2699

drwxr-sr-x2 root 1000 1024 Aug 10 1999 blitznet
-rw-r--r--1 root root 30720 Apr 26 04:07 blitznet.tar
-rwxrw-r--1 r00t user1 22360 Apr 27 22:58 bnc
-rw-r--r--1 900 users 2693120 Apr 20 22:18 collision.tar
-rw-rw-r--1 r00t user1 976 Apr 27 22:58 example.conf
-rw-rw-r--1 user1 user1 5 Apr 28 20:35 pid.bnc
-rw-r--r--1 root 1000 3450 Aug 10 1999 README
-rw-r--r--1 root 1000 1333 Aug 10 1999 blitz.c
-rw-r--r--1 root 1000 3643 Aug 10 1999 blitzd.c
-rwxr-xr-x1 root 1000 2258 Aug 10 1999 rush.tcl
-rwxr-xr-x1 root 1000 8268 Aug 10 1999 slice2

ls -lR rev0 rev0: total 51

-rwxr-xr-x1 1080 users 9106 Sep 20 1999 slice
-rwxr-xr-x1 1080 users 8174 Sep 20 1999 smurf4
-rwxr-xr-x1 1080 users 7229 Sep 20 1999 snif
-rw-r--r--1 root root 5 Apr 20 15:21 sniff.pid
-rwxr-xr-x1 1080 users 4060 Mar 5 1999 sp.pl
-rw-r--r--1 root root 19654 Apr 20 20:23 tcp.log
drwxr-xr-x6 root root 27648 Apr 21 04:01 .
-rwsr-xr-x1 root root 20164 Apr 15 19:23 chx
lrwxrwxrwx1 root root 8 Feb 28 02:28 netscape-navigator -> netscape
drwxrwxr-x2 news news 1024 Feb 28 02:25 rnews.libexec
drwxrwxr-x2 news news 1024 Feb 28 02:25 control
drwxrwxr-x2 news news 1024 Feb 28 02:25 filter
lrwxrwxrwx1 root root 4 Dec 30 13:06 elatex -> etex
lrwxrwxrwx1 root root 5 Dec 30 13:06 lambda -> omega
lrwxrwxrwx1 root root 3 Dec 30 13:06 latex -> tex

strings - chx

/lib/ld-linux.so.2 gmon_start libcrypt.so.1 libpam.so.0

. . .

/var/log/btmp /usr/share/locale util-linux fh:p login: -h for super-user only. usage: login [-fp] [username]

/dev/tty %s??

/dev/vcs /dev/vcsa login

login: PAM Failure, aborting: %s Couldn’t initialize PAM: %s

FAILED LOGIN %d FROM %s FOR %s, %s

Login incorrect

TOO MANY LOGIN TRIES (%d) FROM %s FOR %s, %s

FAILED LOGIN SESSION FROM %s FOR %s, %s

Login incorrect

.hushlogin

%s/%s

/var/run/utmp

/var/log/wtmp

/bin/sh TERM dumb HOME

/usr/local/bin:/bin:/usr/bin

PATH

/sbin:/bin:/usr/sbin:/usr/bin

SHELL

/var/spool/mail

MAIL

LOGNAME

DIALUP AT %s BY %s

ROOT LOGIN ON %s FROM %s

ROOT LOGIN ON %s

LOGIN ON %s BY %s FROM %s

LOGIN ON %s BY %s You have %smail.

new login: failure forking: %s setuid() failed

No directory %s! Logging in with home = "/". login: no memory for shell script. exec login: couldn’t exec shell script: %s. login: no shell: %s.

%s login: login name much toolong. NAME too long login names may not start with ’-’. too many bare linefeeds. EXCESSIVE linefeeds

Login timed out after %d seconds

/etc/securetty

/etc/motd

/var/log/lastlog Last login: %.s from %.s on %.*s LOGIN FAILURE FROM %s, %sLOGIN FAILURE ON %s, %s

%d LOGIN FAILURES FROM %s, %s

%d LOGIN FAILURES ON %s, %s

. . .

El programa nos muestra los mensajes del sistema mencionando el fichero ".hushlogin". Todos los indicios apuntan que el binario es una versión modificada de de la aplicación login. Siempre Los binarios siempre incluyen información de objetos compilados y enlazados, salvo que estén stripeados. Si está presente esa información podemos examinarla con la utilidad nm.

nm chx chx: no symbols

En este caso estamos seguros queel fichero está stripeado. También podemos aprender bastante de lo que nos muestran los enlaces a las librerías dinámicas. Para verlo utilicemos ldd.

ldd chx libcrypt.so.1 => /lib/libcrypt.so.1 (0x40018000) libpam.so.0 => /lib/libpam.so.0 (0x40045000) libdl.so.2 => /lib/libdl.so.2 (0x4004d000) libpam_misc.so.0 => /lib/libpam_misc.so.0 (0x40050000) libc.so.6 => /lib/libc.so.6 (0x40054000)

/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

El binario depende del módulo PAM y de las librerías criptográficas. Entonces, el binario efectúa algunas tareas de autenticación de usuarios. El binario parece ser el /bin/login modificado que pertenece a algún caballo de Troya.

Normalmente los intrusos no dejan huellas evidentes que nos permiten encontrar ficheros y directorios. El ejemplo anterior nos ha probado que utilizando herramientas básicas podemos reunir bastante información.

En caso de que no sea tan sencillo, se deberá utilizar herramientas más complejas y eficaces. Para ver algún ejemplo complejo podemos ver referencias [14, 15].

results matching ""

    No results matching ""