rkhunter (Rootkit Hunter) scannt Linux-Systeme nach Rootkits, Backdoors und lokalen Exploits. Es ist ein wichtiges Werkzeug für die Server-Sicherheit.
Was erkennt rkhunter?
Scan-Kategorien
- Bekannte Rootkits
- Verdächtige Dateien
- Binärdateien mit falschen Permissions
- Versteckte Prozesse
- Verdächtige Strings in Binaries
- Kernel-Module
- Netzwerk-Ports
- Startup-Dateien
Prüfungen
| Kategorie | Beschreibung |
|---|
| Rootkits | Bekannte Rootkit-Signaturen |
| Backdoors | Versteckte Zugänge |
| Sniffer | Netzwerk-Sniffing-Tools |
| Exploits | Lokale Privilege Escalation |
| Suspicious files | Verdächtige Dateien |
Installation
Debian/Ubuntu
apt install rkhunter
CentOS/RHEL
dnf install epel-release
dnf install rkhunter
Aus Quellen
wget https://sourceforge.net/projects/rkhunter/files/rkhunter/1.4.6/rkhunter-1.4.6.tar.gz
tar xzf rkhunter-1.4.6.tar.gz
cd rkhunter-1.4.6
./installer.sh --install
Grundlegende Nutzung
Datenbank aktualisieren
# Signaturen aktualisieren
rkhunter --update
# Properties-Datenbank aktualisieren
rkhunter --propupd
System scannen
# Vollständiger Scan
rkhunter --check
# Ohne Bestätigungen
rkhunter --check --skip-keypress
# Nur Warnungen anzeigen
rkhunter --check --report-warnings-only
Schneller Check
rkhunter --check --skip-keypress --report-warnings-only
Konfiguration
Hauptkonfiguration
# /etc/rkhunter.conf
# Update-Mirror
UPDATE_MIRRORS=1
MIRRORS_MODE=0
WEB_CMD="/usr/bin/curl -fsS"
# Mail-Benachrichtigung
MAIL-ON-WARNING=admin@example.de
MAIL_CMD=mail -s "[rkhunter] Warnings on ${HOST_NAME}"
# Logging
LOGFILE=/var/log/rkhunter.log
APPEND_LOG=1
COPY_LOG_ON_ERROR=1
COLOR_SET2=1
# SSH-Root-Login erlauben
ALLOW_SSH_ROOT_USER=without-password
# Erlaubte SSH-Protokolle
ALLOW_SSH_PROT_V1=0
# Versteckte Verzeichnisse (false positives)
ALLOWHIDDENDIR=/etc/.java
ALLOWHIDDENDIR=/dev/.udev
# Versteckte Dateien
ALLOWHIDDENFILE=/etc/.gitignore
ALLOWHIDDENFILE=/etc/.pwd.lock
# Erlaubte Prozesse
ALLOWPROCLISTEN=/sbin/dhclient
# Erlaubte Kernel-Module
ALLOW_SYSMOD_NAMES=vboxdrv vboxnetflt vboxnetadp
# Script-Whitelist
SCRIPTWHITELIST=/usr/bin/egrep
SCRIPTWHITELIST=/usr/bin/fgrep
SCRIPTWHITELIST=/usr/bin/which
Debian-spezifische Konfiguration
# /etc/default/rkhunter
# Tägliche Updates
CRON_DAILY_RUN="true"
# Tägliche Scans
CRON_DB_UPDATE="true"
# Mail-Reports
REPORT_EMAIL="admin@example.de"
# APT-Integration
APT_AUTOGEN="true"
Whitelisting
Verzeichnisse erlauben
# Versteckte Verzeichnisse
ALLOWHIDDENDIR=/dev/.udev
ALLOWHIDDENDIR=/dev/.static
# User-Verzeichnisse
ALLOWHIDDENDIR=/home/*/.config
Dateien erlauben
# Versteckte Dateien
ALLOWHIDDENFILE=/usr/share/man/man1/..teleport.1.gz
ALLOWHIDDENFILE=/etc/.updated
# Dev-Dateien
ALLOWDEVFILE=/dev/shm/PostgreSQL.*
ALLOWDEVFILE=/dev/shm/SYSV*
Prozesse erlauben
# Legitime "versteckte" Prozesse
ALLOWPROCLISTEN=/sbin/dhclient
ALLOWPROCLISTEN=/usr/sbin/mysqld
SSH-Konfiguration
# Root-Login
ALLOW_SSH_ROOT_USER=without-password
# Optionen: yes, no, unset, without-password, forced-commands-only
# SSH Protokoll
ALLOW_SSH_PROT_V1=0
Automatisierung
Cron-Job
# /etc/cron.daily/rkhunter (bereits durch Paket installiert)
#!/bin/bash
/usr/bin/rkhunter --update --nocolors
/usr/bin/rkhunter --cronjob --report-warnings-only
Eigener Cron-Job
#!/bin/bash
# /usr/local/bin/rkhunter-scan.sh
LOG=/var/log/rkhunter-daily.log
MAILTO=admin@example.de
# Update durchführen
rkhunter --update --nocolors >> $LOG 2>&1
# Scan durchführen
rkhunter --check --skip-keypress --report-warnings-only --nocolors > /tmp/rkhunter-output.txt 2>&1
# Bei Warnungen Mail senden
if grep -q "Warning:" /tmp/rkhunter-output.txt; then
cat /tmp/rkhunter-output.txt | mail -s "[rkhunter] Warning on $(hostname)" $MAILTO
fi
rm /tmp/rkhunter-output.txt
Systemd-Timer
# /etc/systemd/system/rkhunter.service
[Unit]
Description=rkhunter Security Scan
[Service]
Type=oneshot
ExecStart=/usr/local/bin/rkhunter-scan.sh
# /etc/systemd/system/rkhunter.timer
[Unit]
Description=Daily rkhunter Scan
[Timer]
OnCalendar=*-*-* 04:00:00
RandomizedDelaySec=1800
Persistent=true
[Install]
WantedBy=timers.target
Nach Systemänderungen
Nach Paketinstallation
# Properties-Datenbank aktualisieren
rkhunter --propupd
Nach Kernel-Update
rkhunter --propupd
Debian-APT-Hook
# /etc/apt/apt.conf.d/90rkhunter
DPkg::Post-Invoke { "if [ -x /usr/bin/rkhunter ]; then /usr/bin/rkhunter --propupd; fi"; };
Scan-Ergebnisse verstehen
Warnungstypen
| Typ | Bedeutung |
|---|
| Warning | Potentielles Problem |
| Skipped | Test übersprungen |
| Not found | Nicht installiert |
| Checking | Wird geprüft |
Typische false positives
# SSH Root Login
Warning: The SSH configuration option 'PermitRootLogin' has not been set
→ ALLOW_SSH_ROOT_USER konfigurieren
# Versteckte Dateien
Warning: Hidden file found: /etc/.pwd.lock
→ ALLOWHIDDENFILE hinzufügen
# Script-Ersetzungen
Warning: The file properties have changed: /usr/bin/lwp-request
→ rkhunter --propupd ausführen
Echte Warnungen
# Rootkit gefunden
Warning: Rootkit 'XYZ' found
# Verdächtiger Prozess
Warning: Process '/usr/sbin/sshd' is listening on the network
# Manipulierte Binärdatei
Warning: The file '/bin/ls' has been replaced
Ergänzung: chkrootkit
Installation
apt install chkrootkit
Scan
chkrootkit
Automatischer Scan
# /etc/chkrootkit/chkrootkit.conf
RUN_DAILY="true"
RUN_DAILY_OPTS="-q"
DIFF_MODE="true"
Kombinierte Sicherheit
#!/bin/bash
# /usr/local/bin/rootkit-scan.sh
MAILTO=admin@example.de
HOSTNAME=$(hostname)
TMPFILE=/tmp/rootkit-scan-$$.txt
echo "=== Rootkit Scan Report ===" > $TMPFILE
echo "Host: $HOSTNAME" >> $TMPFILE
echo "Date: $(date)" >> $TMPFILE
echo "" >> $TMPFILE
# rkhunter
echo "=== rkhunter ===" >> $TMPFILE
rkhunter --update --nocolors >> /dev/null 2>&1
rkhunter --check --skip-keypress --report-warnings-only --nocolors >> $TMPFILE 2>&1
echo "" >> $TMPFILE
# chkrootkit
echo "=== chkrootkit ===" >> $TMPFILE
chkrootkit -q >> $TMPFILE 2>&1
# Mail senden bei Warnungen
if grep -qE "(Warning:|INFECTED|Vulnerable)" $TMPFILE; then
cat $TMPFILE | mail -s "[SECURITY] Rootkit Warnings on $HOSTNAME" $MAILTO
fi
rm $TMPFILE
Integration mit Monitoring
Nagios/Icinga-Plugin
#!/bin/bash
# /usr/lib/nagios/plugins/check_rkhunter
LOG=/var/log/rkhunter.log
# Prüfe ob Log existiert
if [ ! -f $LOG ]; then
echo "UNKNOWN - rkhunter log not found"
exit 3
fi
# Prüfe auf Warnungen im letzten Lauf
WARNINGS=$(grep -c "Warning:" $LOG 2>/dev/null || echo 0)
if [ "$WARNINGS" -gt 0 ]; then
echo "WARNING - $WARNINGS warnings found in rkhunter log"
exit 1
else
echo "OK - No warnings in rkhunter log"
exit 0
fi
Prometheus-Metriken
#!/bin/bash
# Nach rkhunter-Scan
PROM_FILE=/var/lib/prometheus/rkhunter.prom
WARNINGS=$(grep -c "Warning:" /var/log/rkhunter.log || echo 0)
cat > $PROM_FILE << EOF
# HELP rkhunter_warnings Number of rkhunter warnings
# TYPE rkhunter_warnings gauge
rkhunter_warnings $WARNINGS
# HELP rkhunter_last_scan_timestamp Last scan timestamp
# TYPE rkhunter_last_scan_timestamp gauge
rkhunter_last_scan_timestamp $(date +%s)
EOF
Troubleshooting
Veraltete Signaturen
rkhunter --update
rkhunter --versioncheck
File Properties Warning
# Nach System-Updates
rkhunter --propupd
Tests überspringen
# Bestimmte Tests deaktivieren
DISABLE_TESTS="suspscan hidden_procs deleted_files packet_cap_apps"
Debug-Modus
rkhunter --check --debug
Zusammenfassung
| Befehl | Funktion |
|---|
| rkhunter --update | Signaturen aktualisieren |
| rkhunter --propupd | Properties aktualisieren |
| rkhunter --check | System scannen |
| rkhunter --versioncheck | Version prüfen |
| Option | Wirkung |
|---|
| --skip-keypress | Keine Bestätigungen |
| --report-warnings-only | Nur Warnungen |
| --cronjob | Für Cron-Ausführung |
| --nocolors | Ohne Farben |
| Konfiguration | Datei |
|---|
| Hauptconfig | /etc/rkhunter.conf |
| Debian-Defaults | /etc/default/rkhunter |
| Log | /var/log/rkhunter.log |
Fazit
rkhunter ist ein essentielles Sicherheitstool für Linux-Server. Regelmäßige automatisierte Scans helfen, Kompromittierungen frühzeitig zu erkennen. Die Kombination mit chkrootkit erhöht die Erkennungsrate. Wichtig ist das korrekte Whitelisting legitimer Dateien, um false positives zu vermeiden. Nach jeder Systemänderung sollte die Properties-Datenbank aktualisiert werden.