Busindre » Blog Archive » Rootkits en Linux (chkrootkit / rkhunter)

Rootkits en Linux (chkrootkit / rkhunter)

March 5th, 2007 by Busindre

En sus orígenes hacía referencia a un grupo de herramientas recompiladas de Unix como ps, netstat, w o passwd que habiendo sido debidamente modificadas, ocultaban cualquier actividad del cracker. De este modo, el intruso podría mantener el control del sistema con privilegios de superusuario, pero quedando oculto a los ojos de los usuarios y administradores.

Tipos de rootkits: Integrados en el núcleo y a nivel de aplicación.

* Integrados en el kernek: Suele añadirse código al kernel, mediante controladores (driver) o módulos y parchean las llamadas al sistema para ocultarse

* A nivel de aplicación: Modifican el código de comandos típicos creando troyanos,backdoors o simplemente modificar el comportamiento de las aplicaciones existentes con exlpoits, parches, etc..

En resumen, los rootkits modifican muchas de las herramientas (binarios, scripts, archivos de configuración) y librerías de las cuales depende el sistema.

En este articulo trataremos las herramientas chkrootkit / rkhunter para poder escanear una maquina de una forma efectiva en busca de este software dañino.

NOTA: Los rootkits son habitualmente considerados troyanos / keyloggers.

chkrootkit
Web: http://www.chkrootkit.org/

Sistemas soportados: Linux 2.0.x, 2.2.x, 2.4.x and 2.6.x, FreeBSD 2.2.x, 3.x, 4.x and 5.x, OpenBSD 2.x and 3.x., NetBSD 1.6.x, Solaris 2.5.1, 2.6, 8.0 and 9.0, HP-UX 11, Tru64, BSDI y Mac OS X.

Chkrootkit es un shell script muy trabajado que busca en el sistema binarios modificados por esos root kits usados. Este anti-rootkit usa herramientas comunes de UNIX/Linux como las órdenes strings y grep para buscar las bases de las firmas de los programas del sistema y comparar un transversal del archivo del sistema /proc con la salida de la orden ps (estado de los procesos (process status)) para buscar discrepancias.

Compilarlo:

# make sense

Ejecutarlo:

# ./chkrootkit

Archivos generados y su funcionalidad:

ifpromisc.c : Comprueba si el interfaz está en modo promiscuo.
chklastlog.c : Comprueba para si hay canceladuras del lastlog.
chkwtmp.c : Comprueba para saber si hay canceladuras del wtmp.
check_wtmpx.c : Comprueba canceladuras del wtmpx. (Solaris solamente)
chkproc.c : Comprueba para saber si hay muestras de los trojans de LKM.
chkdirs.c : Comprueba para saber si hay muestras de los trojans de LKM.
strings.c : Reemplazo rápido de las secuencias.
chkutmp.c : Comprueba para saber si hay canceladuras del utmp.
chkrootkit : Script principal, usa los demás programas generados en su compilación.

Opciones de chkrootkit:

-h Muestra la ayuda

-V Muestra la versión

-l Muestra los test que realizará

-d Ejecución en modo depurador (Viendo el código)

-q Modo quiet (Solo saca los “infected”)

-x Modo experto (Saca la información de una forma más clara)

-r Para indicarle el directorio root (Por defecto /)

-p dir1:dir2:dirN Para indicarle a chkrootkit los path que usa chkrootkit para sus comandos (awk, cut, egrep, find, head, id, ls, netstat, ps, strings, sed, uname), en caso de no usar los estandars

-n Ignorara sistemas montados en NFS

Tests que se pueden realizar(Opcion -l):

aliens asp bindshell lkm rexedcs sniffer w55808 wted scalper slapper z2 chkutmp 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

Ejemplos:
Para que coja los binarios (Opcion -l) a escanear de otro sitio

./chkrootkit -p /cdrom/bin:/floppy/mybin:/cdrom/bin

Saca los procesos sospechosos

/chkrootkit -x lkm

Para escanear un linux montado

./chkrootkit -r /mnt/gentoo

Chequea los binarios y comprueba si hay algún interfaz de red en modo promiscuo.

./chkrootkit ps ls sniffer

NOTA: Si examinamos un binario que no tengamos en nuestra maquina (pop3) saldrá “not found”, si lo tenemos y no esta infectado, “not infected”. Este Programa al ser solo un ejecutable y no requiere de instalación permite ejecutarlo desde algún disquete o cd-live, lo cual es recomendable debido a que si se tienen instalados en el sistema, un rootkit puede meter mano al detector para permanecer bien escondido.

Rkhunter
Características de Rkhunter:

* Comprueba los MD5 para saber si hay cualquier cambio en el sistema.

* Comprueba los binarios y herramientas del sistema para detectar cualquier rootkits conocido, o muestre características de troyano,..

* Comprueba cualquier característica de archivo sospechosa de la mayoría de los programas que se usan

* Realiza un par de las pruebas dependientes del Sistema operativo usado.

* Explora para cualquier interfaz promiscuo y comprueba puertos backdoor con frecuencia usados.

* Comprueba archivos de configuración (/etc/rc.d, sshd_config), archivos ocultos, sospechoso,..

* Hace una exploración de los servicios que escuchan en cualquier puerto, como apache, procmail, etc..

* Muestra si cierto programa es vulnerable (GPG, sendmail,…).

* Comprueba cadenas sospechosas en los módulos del kernel.

Instalar rkhunter:
Descomprimimos y ejecutamos el archivo installer.sh:

./installer.sh

NOTA: Lo instalara en /usr/local/ y su archivo de configuración lo encontramos en /usr/local/etc/rkhunter.conf

Opciones de Rkhunter:

–checkall (-c) : Chequea todo.

–createlogfile [file]* : Crea un log (/var/log/rkhunter.log). (Siempre después de –checkall ó –cronjob).

–cronjob : No interactivo , no espera a que pulses enter (No tiene colores).

–display-logfile : Cuando termina el escaneo te sale el log.

–help (-h) : Muestra la ayuda.

–nocolors* : No muestra los colores.

–report-mode* : No muestra información considerada irrelevante (Poco recomendable).

–report-warnings-only* : Muestra los warnings (lesser output than –report-mode,: more than –quiet).

–skip-application-check* : No chequea la versión de las aplicaciones.

–skip-keypress (-sk)* : No interactivo, no espera que se pulse enter para seguir testando.

–quick* : Realiza un escaneo rápido.

–quiet* : Solo muestra warnings.

–update : Actualiza la base de datos y el programa si fuera necesario.

–version : Muestra la versión.

–versioncheck : Mira que versión es la ultima y la que tenemos instalada.

–bindir [bindir]* : Usa para indicar el directorio de los binarios (Si no usamos la de por defecto).

–configfile [file]* : Usar distinto archivo de configuración.

–dbdir [dir]* : Usa como directorio de la base de datos (Por defecto “/usr/rkhunter/lib/rkhunter/db” ).

–rootdir [rootdir]* : Usar en vez de /

–tmpdir [tempdir]* : Usar como directorio temporal.

Explicit scan options:

–allow-ssh-root-user* : Permite logueo de root mediante ssh.

–disable-md5-check* : Desactivar el chequeo con MD5.

–disable-passwd-check* : Desactivar el chequeo de passwd/group.

–scan-knownbad-files* : Detecta solo los rootkits “malos conocidos”.

–check-deleted : Realizar chequeo de archivos borrados.

–check-listen : Realizar el chequeo de ‘listening applications’.

NOTA: * -> Necesita usarlo con otros parámetros

Directorios de Rkhunter:

/usr/rkhunter/lib/rkhunter/db -> Base de datos.
/usr/rkhunter/lib/rkhunter/docs -> Documentación.
/usr/rkhunter/lib/rkhunter/scripts -> Scripts para uso del programa.
/usr/rkhunter/lib/rkhunter/tmp -> Directorio temporal .

Archivos Importantes (db):

/usr/rkhunter/lib/rkhunter/tmp -> Directorio temporal

/usr/rkhunter/lib/rkhunter/db/md5blacklist.dat -> Blacklist de los md5

/usr/rkhunter/lib/rkhunter/db/mirrors.dat -> Donde encontrar el numero de versión y el mirror (Actualizaciones)

/usr/rkhunter/lib/rkhunter/db/programs_bad.dat -> Versiones de programas afectados por vulnerabilidades

/usr/rkhunter/lib/rkhunter/db/programs_good.dat -> Versiones de programas no vulnerables

/usr/rkhunter/lib/rkhunter/db/os.dat -> Informacion sobre los sistemas operativos (RH, Mandriva, ubuntu, debian…)

/usr/rkhunter/lib/rkhunter/db/defaulthashes.dat -> Hashes md5 de todos los binarios del sistema

/usr/rkhunter/lib/rkhunter/db/backdoorports.dat -> Informacion sobre backdoors

Programas que escanea en busca de vulnerabilidades (programs_bad / programs_good):

httpd
sshd
exim
php
clamd
gpg
named
mc
procmail
proftpd
openssl

Ejemplos de salidas por pantalla de rkhunter:

* Application version scan
- GnuPG 1.2.7 [ Vulnerable ]
- Apache 1.3.33 [ Vulnerable ]
- Bind DNS 9.3.1 [ OK ]
- OpenSSL 0.9.7g [ Vulnerable ]

* Check: SSH
Searching for sshd_config…
Found /etc/ssh/sshd_config
Checking for allowed root login… [ OK (Remote root login disabled) ]
Checking for allowed protocols… [ Warning (SSH v1 allowed) ]

* Interfaces
Scanning for promiscuous interfaces… [ Warning! ]
Warning! Found promiscuous interface. Please use option ‘–createlogfile’ and check the logfile.

Ejemplo de lo mostrado al terminar el escaneo:

—————————- Scan results —————————-

MD5 scan
Scanned files: 0
Incorrect MD5 checksums: 0

File scan
Scanned files: 342
Possible infected files: 0

Application scan
Vulnerable applications: 3

scanning took 351 seconds

NOTA: Otras herramientas para completar lo que hacen los Rootkit Detectors de las importantes son: Sysinternals (Pack de varias herramientas, pero comprada por Microsoft,..) y Tripwire (Monitorea la consistencia de archivos y directorios de sistema críticos identificando todos los cambios hechos a ellos).

Estos dos detectores comentados en el articulo, como todos los demás, deben de saberse interpretar ya que muchas veces dan falsos positivos (Por haber añadido / actualizado algún programa). Es recomendable el uso de varios programas (Actualizados, logicamente) a la hora de escanear máquinas. Muchos rootkits cuando empiezan escaneos con estas herramientas se ocultan apagándose momentáneamente o incluso usan técnicas para confundir a estos Rootkit Detectors, la batalla es eterna.

Posted in Bugs |

2 Responses

  1. Manssson Says:

    El problema es que si te han troyanizado un sistema, posiblemente hayan buscado anti-rootkits y te los hayan troyanizado también o hayan cambiado sus parámetros y paths de busquedas para evitar ser detectados, por lo que la salida de estos tests no sería _para nada_ fiable. A menos que los uses desde un cd con binarios limpios (binarios del sistema) y con anti-rootkits limpios también.
    Algunos de los antirootkits buscan en los procesos activos, pero por todos es sabido que la gran mayoría de los rootkits actuales se ocultan en procesos por lo que dificil es saber si están o no.
    Lo mejor como bien dices es usar tripwire o logcheck y ver resultados dia a dia para ver si hay algo sospechoso (incluso una conexión)
    También podeis probar Babel Enteprise, que es una herramienta de gestión de seguridad centralizada: http://babel.sf.net

    Saludos
    Manssson.

  2. Tux Huellas » Rootkits en Linux (chkrootkit / rkhunter) Says:

    […] Original: http://www.busindre.com/rootkits-en-linux-chkrootkit-rkhunter/ Igual tambien te interesan…. Mas tutoriales de Linux y de phpArticulos […]

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.