Seguridad en la Raspberry. Episodio V: Cazando Rootkits

Cazando rootkits con RkHunter

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.


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

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 ArchLinux 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, al igual 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 ultimo, 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

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}"

Ademas, 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 ejecutara 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 seria 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 como detectar y bloquear ataques automatizados utilizando Failban.

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!

Valora este artículo1 2 3 4 5 (0 votos)

(0 votos)

Categorias del blog

twitter

Últimos tweets