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

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 $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.