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-DateienPrü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 rkhunterCentOS/RHEL
dnf install epel-release
dnf install rkhunterAus 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 --installGrundlegende Nutzung
Datenbank aktualisieren
# Signaturen aktualisieren
rkhunter --update
# Properties-Datenbank aktualisieren
rkhunter --propupdSystem scannen
# Vollständiger Scan
rkhunter --check
# Ohne Bestätigungen
rkhunter --check --skip-keypress
# Nur Warnungen anzeigen
rkhunter --check --report-warnings-onlySchneller Check
rkhunter --check --skip-keypress --report-warnings-onlyKonfiguration
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/whichDebian-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/*/.configDateien 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/mysqldSSH-Konfiguration
# Root-Login
ALLOW_SSH_ROOT_USER=without-password
# Optionen: yes, no, unset, without-password, forced-commands-only
# SSH Protokoll
ALLOW_SSH_PROT_V1=0Automatisierung
Cron-Job
# /etc/cron.daily/rkhunter (bereits durch Paket installiert)
#!/bin/bash
/usr/bin/rkhunter --update --nocolors
/usr/bin/rkhunter --cronjob --report-warnings-onlyEigener 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.txtSystemd-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.targetNach Systemänderungen
Nach Paketinstallation
# Properties-Datenbank aktualisieren
rkhunter --propupdNach Kernel-Update
rkhunter --propupdDebian-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ührenEchte 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 replacedErgänzung: chkrootkit
Installation
apt install chkrootkitScan
chkrootkitAutomatischer Scan
# /etc/chkrootkit/chkrootkit.conf
RUN_DAILY="true"
RUN_DAILY_OPTS="-q"
DIFF_MODE="true"Kombinierte Sicherheit
Skript für beide Tools
#!/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 $TMPFILEIntegration 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
fiPrometheus-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)
EOFTroubleshooting
Veraltete Signaturen
rkhunter --update
rkhunter --versioncheckFile Properties Warning
# Nach System-Updates
rkhunter --propupdTests überspringen
# Bestimmte Tests deaktivieren
DISABLE_TESTS="suspscan hidden_procs deleted_files packet_cap_apps"Debug-Modus
rkhunter --check --debugZusammenfassung
| 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.