Rootkits en Linux (chkrootkit / rkhunter)
March 5th, 2007 by BusindreEn 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.
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.
* 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: 0File scan
Scanned files: 342
Possible infected files: 0Application scan
Vulnerable applications: 3scanning 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 |
March 5th, 2007 at 7:15 pm
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.
May 4th, 2007 at 5:25 pm
[…] Original: http://www.busindre.com/rootkits-en-linux-chkrootkit-rkhunter/ Igual tambien te interesan…. Mas tutoriales de Linux y de phpArticulos […]