Seguridad en la Raspberry - Episodio V: Cazando rootkits con RKhunter

Icono de lupa detectando código malicioso en el sistema
4 min. Lectura
0 Vistas
0 Valoración

Para poder detectar intrusos en nuestro sistema que puedan tener el control del mismo, vamos a instalar un detector de accesos no autorizados. El conjunto de herramientas que utilizan los intrusos se denominan rootkits, y para su detección voy a utilizar RKhunter.

Instalación y configuración inicial

Empezamos como siempre instalando:

sudo pacman -S rkhunter

Actualizamos la base de datos de RKhunter:

sudo rkhunter --update --check -sk

Tomamos una muestra del estado actual de nuestro sistema operativo, creando una base de datos con los binarios actuales, para que RKhunter nos avise si alguno ha sido modificado:

sudo rkhunter --propupd

El anterior comando lo ejecutaremos cada vez que haya un cambio en la configuración para actualizar la muestra de nuestro sistema operativo.

Y lanzamos el primer chequeo manualmente. La opción rwo sólo nos reportará los mensajes de advertencia:

sudo rkhunter -c --rwo

Resolviendo falsos positivos

En el primer chequeo han saltado algunos falsos positivos que están ya ampliamente reportados en la red:

Warning: The command '/usr/bin/ldd' has been replaced by a script
Warning: Hidden file found: /usr/share/man/man5/.k5identity.5.gz
Warning: The command '/usr/bin/egrep' has been replaced by a script
Warning: The command '/usr/bin/fgrep' has been replaced by a script

RKhunter también nos advierte del siguiente fichero oculto:

Warning: Hidden file found: /etc/.updated: ASCII text

pero se trata de un fichero que Arch Linux utiliza en las actualizaciones.

Para evitar estos falsos positivos vamos a modificar el fichero de configuración de RKhunter:

sudo nano /etc/rkhunter.conf

y añadiremos al final:

# Rootkit Hunter Custom Settings

## Allow some hidden directories/files
ALLOWHIDDENDIR=/etc/.git
ALLOWHIDDENFILE=/etc/.etckeeper
ALLOWHIDDENFILE=/etc/.gitignore
ALLOWHIDDENFILE=/etc/.updated
ALLOWHIDDENFILE=/usr/share/man/man5/.k5identity.5.gz
ALLOWHIDDENFILE=/usr/share/man/man5/.k5login.5.gz

## Ignore the warnings: 'The command ... has been replaced by ...'
SCRIPTWHITELIST=/usr/bin/egrep
SCRIPTWHITELIST=/usr/bin/fgrep
SCRIPTWHITELIST=/usr/bin/ldd

## It seems there was an SSHD rootkit in 2013 that used the name. Now is false positive!
RTKT_FILE_WHITELIST=/lib/libkeyutils.so.1.9
RTKT_FILE_WHITELIST=/lib64/libkeyutils.so.1.9
RTKT_FILE_WHITELIST=/usr/lib/libkeyutils.so.1.9
RTKT_FILE_WHITELIST=/usr/lib64/libkeyutils.so.1.9
EXCLUDE_USER_FILEPROP_FILES_DIRS=/lib/libkeyutils.so.1.9
EXCLUDE_USER_FILEPROP_FILES_DIRS=/lib64/libkeyutils.so.1.9
EXCLUDE_USER_FILEPROP_FILES_DIRS=/usr/lib/libkeyutils.so.1.9
EXCLUDE_USER_FILEPROP_FILES_DIRS=/usr/lib64/libkeyutils.so.1.9

También en el primer chequeo han aparecido las siguientes advertencias:

Warning: Unable to check for passwd file differences
Warning: Unable to check for group file differences

Es un mensaje informativo en la primera ejecución cuando RKhunter todavía no había hecho una copia. En los siguientes ya no aparecen.

Si volvemos a ejecutar:

sudo rkhunter -c --rwo

Solo deberían aparecer los cambios en los ficheros realizados.

Todo el análisis se guarda en rkhunter.log. Para consultarlo:

sudo nano /var/log/rkhunter.log

Automatización del escaneo

Para evitar ejecutar manualmente, crearemos un script que nos permitirá ejecutar el análisis diario a las 3:00 de la madrugada.

Actualización: Antes de implementar esta automatización, tal vez prefieres esta otra.

sudo nano /etc/systemd/system/rkhunter.service
[Unit]
Description=rkhunter rootkit scan and malware detection

[Service]
Type=oneshot
ExecStart=/usr/bin/rkhunter --update
ExecStart=/usr/bin/rkhunter --check -sk
RemainAfterExit=yes
sudo nano /etc/systemd/system/rkhunter.timer
[Unit]
Description=Run rkhunter daily at 3:00 AM

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=multi-user.target

Activamos el servicio:

sudo systemctl enable rkhunter.timer

y arrancamos:

sudo systemctl start rkhunter.timer

Comprobamos con:

systemctl list-timers --all

Por último, y para que nos avise por correo de las advertencias encontradas modificaremos de nuevo:

sudo nano /etc/rkhunter.conf
MAIL-ON-WARNING=usuario@warning.com
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}" -a /var/log/rkhunter.log

Bonus 05/2020: Script mejorado con MSMTP

En lugar de utilizar el correo propuesto de RKhunter, podemos utilizar un script que lance el análisis y que envíe un correo solamente con los mensajes de advertencia que puedan haber, evitando controlar todo el log.

Gracias a SEBASTIANO MONTINO por la idea y a MAN42 por depurarla.

Empezamos desactivando el correo por defecto de RKhunter:

sudo nano /etc/rkhunter.conf
# MAIL-ON-WARNING="mail@mail.com"
# MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}"

Además, si hemos creado los scripts anteriores, también los vamos a suprimir:

sudo systemctl stop rkhunter.timer
sudo systemctl disable rkhunter.timer

sudo rm /etc/systemd/system/rkhunter.timer
sudo rm /etc/systemd/system/rkhunter.service

Ahora crearemos el nuevo script:

sudo nano /usr/local/bin/rkhunter-email.sh
#!/bin/sh

OUTPUT=`rkhunter --update --check --cronjob --report-warnings-only --nocolors --skip-keypress`

if [ "$OUTPUT" != "" ]
then
    printf "Subject: RK-HUNTER from $HOSTNAME\r\n\r\n$OUTPUT" | msmtp receiver@mail
fi

Damos permiso de ejecución:

sudo chmod 744 /usr/local/bin/rkhunter-email.sh

y creamos el servicio que ejecutará systemd a la misma hora que ejecutaba el anterior:

sudo nano /etc/systemd/system/rkhunter-email.timer
[Unit]
Description=Run rkhunter email daily at 3:00 AM

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=multi-user.target
sudo nano /etc/systemd/system/rkhunter-email.service
[Unit]
Description=Send email with rkhunter warnings reports

[Service]
Type=oneshot
ExecStart=/usr/local/bin/rkhunter-email.sh
RemainAfterExit=yes

Activamos y arrancamos:

sudo systemctl enable rkhunter-email.timer
sudo systemctl start rkhunter-email.timer

comprobamos con:

systemctl list-timers --all

Después de todos los cambios realizados, ahora sería un buen momento para actualizar la muestra de nuestro sistema operativo:

sudo rkhunter --propupd

Y ahora solo nos queda esperar al primer análisis y esperar el correo.

Esto es todo para la detección de rootkits. En el siguiente artículo veremos cómo detectar y bloquear ataques automatizados utilizando Fail2ban.

¿Te ha sido útil?

Ayúdame a mejorar con tu puntuación y comentarios.

0.0 (0 votos)
Jaume Ferré

Jaume Ferré

Soy un entusiasta de las nuevas tecnologías, apasionado por explorar su potencial innovador. Colecciono CDs en formato físico y disfruto creando mezclas musicales. Además, la fotografía es otra de mis pasiones, capturando momentos y expresiones con cada disparo. ¡Gracias por leerme!

💬 Comentarios

Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!