Tres herramientas muy útiles: rkhunter, chkrootkit y unhide.

rkhunter

Busca rootkits, puertas traseras y exploits. Al instalarlo, se programa un escaneo diario, pero cuando instalamos las actualizaciones de algunos programas, las firmas de rkhunter quedan obsoletas, por lo que empieza a mandar avisos.

bash Warning: The file properties have changed: File: /usr/bin/md5sum Current inode: 1093680 Stored inode: 475456 Current file modification time: 1285094009 (21-sep-2010 20:33:29) Stored file modification time : 1267759792 (05-mar-2010 04:29:52)

Podemos actualizar las firmas de rkhunter ejecutando:

bash $ sudo rkhunter --propupd

El motivo de que no se actualicen las firmas automáticamente es que es responsabilidad del usuario asegurarse de que los ficheros del sistema son genuinos y provienen de una fuente fiable. Cuando ejecutamos el comando anterior, le estamos diciendo a rkhunter que acepte las firmas de los nuevos ficheros como válidas y a éstos como genuinos.

Directorios o ficheros ocultos

Si usamos Ubuntu, es posible que nos llegue un correo de aviso de rkhunter diciendo que ha encontrado una serie de directorios ocultos, pero que son legítimos en Ubuntu. Por ejemplo:

bash Warning: Hidden directory found: /dev/.udev

Para solucionarlo, editamos el fichero de configuración /etc/rkhunter.conf y descomentamos, o añadimos, las líneas referentes a dichos directorios:

bash ALLOWHIDDENDIR=/dev/.udev

Si en lugar de un directorio es un fichero, la directiva a utilizar es ALLOWHIDDENFILE.

Después de introducir los cambios, actualizamos rkhunter:

bash $ sudo rkhunter --propupd


Actualización a 17 de marzo de 2013

La versión de los repositorios, la 1.3.8, tiene un pequeño fallo por el cual los enlaces simbólicos no pueden ser ignorados mediante la directiva ALLOWHIDDENFILES, por lo que aparece un mensaje como el siguiente:

bash Warning: Hidden file found: /dev/.initramfs: symbolic link to `/run/initramf`s

En la versión 1.4.0 ya está corregido, aunque aún no se encuentra en los repositorios en Ubuntu 12.04.2. Una alternativa es parchear el script[parchear el script].

Editamos el script en Python y vamos a la línea 846:

bash $ sudo vim +846 /usr/bin/rkhunter

Justo a continuación, deberemos comprobar si el fichero en un enlace simbólico, por lo que el código deberá queda así:

```bash elif [ -d "\({FNAME}" ]; then # # For the ALLOWHIDDENFILE option we need to allow # a hidden symbolic link to a directory. # test "\){OPT_NAME}" = "ALLOWHIDDENFILE" -a -h "${FNAME}" && continue

                            case "${OPT_NAME}" in

```

Ahora ya podemos añadir el fichero en el archivo de configuración /etc/rkhunter.conf:

bash ALLOWHIDDENFILE="/dev/.initramfs"

Y actualizar la base de datos de firmas:

bash $ sudo rkhunter --propupd

Si usamos algún programa que comprueba la integridad de los ficheros, como por ejemplo tiger, es posible que recibamos una aviso como el siguiente:

bash NEW: --FAIL-- [lin005f] Installed file '/usr/bin/rkhunter' checksum differs from installed package 'rkhunter'.


Comandos que cambian a scripts

Si se añade un script al PATH del sistema o sustituye a algún comando, rkhunter también nos lo notificará. Por ejemplo:

bash Warning: The command '/sbin/chkconfig' has been replaced by a script: /sbin/chkconfig: a /usr/bin/perl script text executable

Si estamos seguros de que el cambio es legítimos, podemos añadir la siguiente línea en /etc/rkhunter.conf:

bash SCRIPTWHITELIST=/sbin/chkconfig

Después de introducir los cambios, actualizamos rkhunter:

bash $ sudo rkhunter --propupd

rkhunter y reiserfs

Si nuestro sistema de ficheros es reiserfs, o xfs, y hemos instalado el paquete e2fsprogs, el cual contiene herramientas para trabajar con sistemas de ficheros ext2, ext3 y ext4, es posible que recibamos un aviso que se queja de lsattr:

Warning: Checking for prerequisites [ Warning ] No output from the 'lsattr' command - all file immutable-bit checks will be skipped.

La solución pasa por editar el fichero /etc/rkhunter.conf, buscar la directiva DISABLE_TESTS y añadir el parámetro immutable al final.

A continuación, actualizamos rkhunter:

bash $ sudo rkhunter --propupd

chkrootkit

...detecta rootkits. Por defecto, sólo se ejecuta cuando lo lanzamos nosotros. Para que se realice un escaneo diario, modificaremos el fichero /etc/chkrootkit.conf:

bash RUN_DAILY="true"


Actualizado el 2 de noviembre de 2013

En los reportes de chkrootkit es posible que nos llegue el aviso de que el archivo /sbin/init está infectado:

bash Warning: /sbin/init INFECTED

Parece ser un fallo en chkrootkit, ya que para determinar si el archivo /sbin/init está infectado, lo que hace es buscar la cadena "HOME" el el fichero, mediante el comando strings:

bash $ strings /sbin/init | egrep HOME XDG_CACHE_HOME XDG_CONFIG_HOME

El fallo está presente al menos en la versión 0.49, que es la que hay disponible en los repositorios de Ubuntu Saucy Salamander. Una manera de evitar el aviso es buscar el siguiente trozo de código, alrededor de la línea 1005:

bash if [ ${SYSTEM} != "HP-UX" ] && ( ${strings} ${ROOTDIR}sbin/init | ${egrep} HOME || cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1

Y sustituirlo por:

bash if [ ${SYSTEM} != "HP-UX" ] && ( cat ${ROOTDIR}/proc/1/maps | ${egrep} "init." ) >/dev/null 2>&1


unhide

Detecta procesos ocultos y puertas traseras, basándose en la información obtenida de /proc, /bin/ps y syscalls, y de los puertos activos que no aparecen según /bin/netstat.

En la versión unhide-20100201-1, para el listado de procesos, comprueba los resultados de /bin/ps, ejecutándolo de las siguientes maneras:

```c // we are looking only for real process not thread and only one by one

define COMMAND "ps --no-header -p %i o pid"

// we ara looking for session ID one by one

define SESSION "ps --no-header -s %i o sess"

// We are looking for group ID one by one // but ps can’t select by pgid

define PGID "ps --no-header -eL o pgid"

// We are looking for all processes even threads

define THREADS "ps --no-header -eL o lwp"

// for sysinfo scanning, fall back to old command, as --no-header seems to create // an extra process

define SYS_COMMAND "ps -eL o lwp"

```

En escaneo de puertos utiliza los resultados de /bin/netstat:

c // Linux char tcpcommand[]= "netstat -tan | sed -e '/[\\.:][0-9]/!d' -e 's/.*[\\.:]\\([0-9]*\\) .*[\\.:].*/\\1/'" ; char udpcommand[]= "netstat -uan | sed -e '/[\\.:][0-9]/!d' -e 's/.*[\\.:]\\([0-9]*\\) .*[\\.:].*/\\1/'" ;

Podemos lograr que se ejecute periódicamente añadiendo al crontab algo como:

bash 0 8 * * * unhide-linux26 proc 2>&1 | mail -s "Daily unhide-linux26 proc Scan" user@example.com 30 8 * * * unhide-linux26 sys 2>&1 | mail -s "Daily unhide-linux26 sys Scan" user@example.com 0 9 * * * unhide-linux26 brute 2>&1 | mail -s "Daily unhide-linux26 brute Scan" user@example.com 30 9 * * * unhide-tcp 2>&1 | mail -s "Daily unhide-tcp Scan" user@example.com


Entradas relacionadas