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 rkhunterActualizamos la base de datos de RKhunter:
sudo rkhunter --update --check -skTomamos 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 --propupdEl 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 --rwoResolviendo 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 scriptRKhunter también nos advierte del siguiente fichero oculto:
Warning: Hidden file found: /etc/.updated: ASCII textpero 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.confy 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.9Tambié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 differencesEs 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 --rwoSolo 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.logAutomatizació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=yessudo 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.targetActivamos el servicio:
sudo systemctl enable rkhunter.timery arrancamos:
sudo systemctl start rkhunter.timerComprobamos con:
systemctl list-timers --allPor último, y para que nos avise por correo de las advertencias encontradas modificaremos de nuevo:
sudo nano /etc/rkhunter.confMAIL-ON-WARNING=usuario@warning.com
MAIL_CMD=mail -s "[rkhunter] Warnings found for ${HOST_NAME}" -a /var/log/rkhunter.logBonus 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.serviceAhora 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
fiDamos permiso de ejecución:
sudo chmod 744 /usr/local/bin/rkhunter-email.shy 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.targetsudo 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=yesActivamos y arrancamos:
sudo systemctl enable rkhunter-email.timer
sudo systemctl start rkhunter-email.timercomprobamos con:
systemctl list-timers --allDespués de todos los cambios realizados, ahora sería un buen momento para actualizar la muestra de nuestro sistema operativo:
sudo rkhunter --propupdY 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.
💬 Comentarios
Los comentarios están gestionados por GitHub Discussions. Necesitas una cuenta de GitHub para participar. ¡Es gratis y rápido!