
Linux-Sicherheitsprüfungen
Krypto-Miner-Erkennung, -Entfernung und Härtungstoolkit für Linux-Server.
Entwickelt aus realen Vorfallreaktionen – erkennt Miner, die sich mit Rootkit-Techniken vor
ps,top,htopundbtopverstecken.
git clone https://gitlab.com/abdom.seada/security-checks.git
cd security-checks
sudo bash setup.sh
🔀 Branch:
master– Dieses Toolkit befindet sich immaster-Branch. In Zukunft können weitere Sicherheitsskripte in separaten Branches hinzugefügt werden.
⚠️ Führen Sie
setup.sheinmal direkt nach dem Klonen aus – das Überspringen ist die häufigste Fehlerursache.
sudo bash setup.sh
setup.sh erledigt alles automatisch:
| Schritt | Beschreibung |
|---|---|
| ✅ Berechtigungen | chmod +x auf miner-hunter und alle lib/*.sh-Skripte |
| ✅ Verzeichnisse | Erstellt /var/log/miner_hunter/ und /var/lib/miner_hunter/ (nur root, 700) |
| ✅ Abhängigkeiten | Überprüft perf, mpstat, iptables, fail2ban, bc, strings – installiert fehlende automatisch |
| ✅ Selbsttest | Führt ./miner-hunter --version aus, um zu bestätigen, dass alles korrekt eingerichtet ist |
Erwartete Ausgabe bei erfolgreicher Einrichtung:
✅ Setup complete — all checks passed!
Next steps:
sudo ./miner-hunter scan # Safe read-only scan
sudo ./miner-hunter full # Scan → Kill → Harden
💡 Warum ist das nötig? Linux führt keine Datei aus, solange sie nicht das
+x-Flag hat. Git- und SCP-Übertragungen entfernen dieses Flag.setup.shrepariert alle Dateien auf einmal – einschließlich derlib/-Module, von denen das Hauptskript abhängt.
sudo ./miner-hunter scan # ✅ Safe — read-only, zero changes
sudo ./miner-hunter full # ⚠️ Full pipeline: Scan → Kill → Harden
sudo ./miner-hunter scan --dry-run # 👁️ Preview mode — shows what would happen
| Befehl | Beschreibung | Ändert System? |
|---|---|---|
scan | Vollständiger Erkennungsscan – versteckte Prozesse, CPU, Netzwerk, Persistenz | ✅ Nein |
kill | Erkannte Miner töten, Pool-IPs blockieren, Artefakte entfernen | ⚠️ Ja |
harden | Härtung nach dem Vorfall – SSH, Firewall, Watchdog, Integritätsbasis | ⚠️ Ja |
full | Führt scan → kill → harden mit Bestätigungsabfragen zwischen den Phasen aus | ⚠️ Ja |
report | Zeigt den neuesten Scanbericht an | ✅ Nein |
| Option | Beschreibung |
|---|---|
-d, --dry-run | Alle Aktionen in der Vorschau anzeigen, ohne Änderungen vorzunehmen |
-e, --evidence DIR | Beweise in einem benutzerdefinierten Verzeichnis speichern anstatt in /root/miner_evidence_* |
-h, --help | Hilfe anzeigen |
-v, --version | Version anzeigen |
Reale Situationen und genau das, was in jeder ausgeführt werden soll.
top zeigt nichts"Dies ist das klassische Rootkit-Symptom. Der Miner versteckt sich vor Userspace-Tools, kann sich aber nicht vor Hardware-Leistungszählern verstecken.
# Step 1: Run a safe scan first — confirm what's there before touching anything
sudo ./miner-hunter scan
Was Sie sehen, wenn ein Miner vorhanden ist:
🚨 [CRITICAL] CPU anomaly: 97% user CPU but top shows max 2% per process
🚨 [CRITICAL] perf detected 4 hidden threads consuming ~94% total CPU
🚨 [CRITICAL] Active connection to 185.x.x.x:9200 (known mining port)
🚨 [CRITICAL] Fake kernel thread PID=3421 NAME=[kworker/0:1] EXE=/tmp/.x/miner
# Step 2: Kill the miner and block its pool
sudo ./miner-hunter kill
# Step 3: Harden the server so it can't come back
sudo ./miner-hunter harden
Ihnen ist etwas Verdächtiges aufgefallen – ungewöhnlicher ausgehender Datenverkehr, ein Cron-Job, den Sie nicht erstellt haben, ein Prozess mit einem seltsamen Namen – aber Sie sind sich nicht sicher.
# Run a full scan — completely safe, read-only, zero changes
sudo ./miner-hunter scan
# Then read the structured report
sudo ./miner-hunter report
Der Bericht unter /root/miner_evidence_*/report.txt kategorisiert jeden Fund nach Schweregrad:
[CRITICAL]-Einträge → sofort zu kill übergehen[WARNING]-Einträge → manuell prüfen, bevor gehandelt wirdDer Miner hat einen Persistenzmechanismus – einen Cron-Job, systemd-Dienst, PM2-Eintrag oder Shell-Profil-Hintertür, die ihn nach dem Töten wiederbelebt.
sudo ./miner-hunter scan
Achten Sie auf diese in der Ausgabe:
⚠️ [WARN] Suspicious cron entry: * * * * * /tmp/.x/update
🚨 [CRITICAL] Malicious systemd service: /etc/systemd/system/update-check.service
🚨 [CRITICAL] PM2 process 'app-worker' has 8432 restarts — likely miner respawn loop
🚨 [CRITICAL] Shell profile backdoor detected in /root/.bashrc
# kill removes ALL persistence artifacts — not just the running process
sudo ./miner-hunter kill
# Then harden to install the watchdog so you're alerted if anything respawns
sudo ./miner-hunter harden
💡 Nach
killläuft der Watchdog-Cron alle 5 Minuten und protokolliert in/var/log/miner_hunter/watchdog_alerts.log– Sie wissen sofort, ob etwas zurückkommt.
Proaktive Härtung vor der Bereitstellung – kein Miner, kein Vorfall, einfach alles absichern.
# Run harden standalone — no scan or kill needed
sudo ./miner-hunter harden
Dies wird:
sshd-Gefängnis aktiv ist/usr/bin-Integritätsbasis (MD5-Prüfsummen) erstellen, damit Sie später manipulierte Binärdateien erkennen könnenNach kill meldet der Verifizierungsschritt, dass der Miner möglicherweise noch läuft:
⚠️ MINER MAY HAVE RESPAWNED
CPU: 89% | Mining conns: 1
Firewall blocks are in place — miner can't reach pool
Consider a REBOOT or OS REINSTALL
# 1. Firewall blocks are already in place — miner CANNOT reach its pool
# Confirm blocks are active:
iptables -L OUTPUT -n | grep DROP
# 2. Run a second scan to see what survived
sudo ./miner-hunter scan
# 3. Check for a kernel module rootkit hiding the process
lsmod | grep -iE 'diamorphine|reptile|kovid|rootkit'
# 4. Non-zero taint = out-of-tree kernel modules loaded (rootkit indicator)
cat /proc/sys/kernel/tainted
Wenn der Kernel-Taint-Wert nicht Null ist oder ein bekanntes Rootkit-Modul auftaucht – der Miner hat Kernel-Level-Kontrolle. Der sicherste Weg an diesem Punkt ist eine vollständige Neuinstallation des Betriebssystems von einem bekannten sauberen Snapshot.
Nach harden ist der Watchdog-Cron bereits installiert. So arbeiten Sie damit:
# Watch the alert log in real time
tail -f /var/log/miner_hunter/watchdog_alerts.log
# Confirm the watchdog cron job is registered
cat /etc/cron.d/miner-watchdog
# Check for /usr/bin binary changes since your baseline was taken
md5sum --check /var/lib/miner_hunter/usrbin_baseline.md5 --quiet
Jede Ausgabe des letzten Befehls bedeutet, dass eine Systembinärdatei nach Ihrer Baseline modifiziert wurde – sofort untersuchen.
| Technik | Was erfasst wird |
|---|---|
/proc vs ps-Vergleich | Prozesse, die für Userspace-Tools unsichtbar sind |
| LD_PRELOAD-Hijacking | Bösartige Shared Libraries, die libc hooken, um Prozesse zu verstecken |
| Kernel-Modul-Rootkits | Diamorphine, Reptile, Kovid und andere bekannte Rootkits |
| Gefälschte Kernel-Threads | Miner, die sich als [kworker], [kthreadd], [kswapd] tarnen |
| Modifizierte Systembinärdateien | Ersetzte ps, top, ls, ss, netstat |
| Technik | Was erfasst wird |
|---|---|
perf Hardware-PMC-Profiling | Verborgene CPU-Verbraucher – Rootkits können Hardwarezähler nicht fälschen |
/proc-Delta-Abtastung | Direkte CPU-Abrechnung auf Kernel-Ebene pro PID |
| CPU-Anomalieerkennung | Hohe %user-CPU ohne sichtbaren Prozess, der sie erklärt |
| Technik | Was erfasst wird |
|---|---|
Direktes Lesen von /proc/net/tcp | Aktive Verbindungen – umgeht gehackte ss/netstat |
| Erkennung von Mining-Ports | Ports 3333, 4444, 5555, 7777, 9200, 14433, 14444, 45560 |
| Auflösung von Mining-Domänen | Löst bekannte Pool-Domänen auf und kreuzprüft aktive Verbindungen |
| Socket-zu-PID-Zuordnung | Verfolgt, welcher Prozess jede Mining-Verbindung besitzt |
| Speicherort | Was geprüft wird |
|---|---|
| Cron | /etc/cron*, /var/spool/cron/, alle Benutzer-Crontabs |
| Systemd | Alle Unit-Dateien und Timer auf verdächtige Einträge |
| Udev-Regeln | Hardware-getriggerte Ausführung bei Geräteereignissen |
| PM2 | Einträge des Node.js-Prozessmanagers mit extremen Neustartzahlen |
| Shell-Profile | .bashrc, .bash_profile, /etc/profile, /etc/profile.d/* |
| SSH | Alle authorized_keys-Dateien aller Benutzer |
| Webshells | PHP-Dateien in Node.js-Projektverzeichnissen |
| XMRig-Konfigurationen | config.json in üblichen Miner-Ablageorten |
Wenn Sie sudo ./miner-hunter kill ausführen, ist dies die genaue Abfolge:
DROP-Regeln werden vor dem Töten angewendet, sodass der Miner sich nicht wieder verbinden kann, selbst wenn er wiederbelebt wird.SIGKILLperf erneut aus und überprüft /proc/net/tcp, um zu bestätigen, dass die CPU gesunken ist und Verbindungen verschwunden sind| Aktion | Detail |
|---|---|
| Firewall-Persistenz | Systemd-Dienst, um iptables-Mining-Blockaden bei jedem Neustart wiederherzustellen |
| SSH-Überprüfung | Überprüft PermitRootLogin, PasswordAuthentication, MaxAuthTries – zeigt empfohlene Werte an |
| Fail2ban-Prüfung | Überprüft, ob das sshd-Gefängnis aktiv ist, und meldet aktuell gesperrte IPs |
| Miner-Watchdog | Cron-Job alle 5 Minuten – prüft CPU-Anomalie, LD_PRELOAD, Mining-Ports, PHP-Webshells |
/usr/bin-Baseline | Erstellt MD5-Prüfsummen aller Binärdateien in /usr/bin zur zukünftigen Erkennung von Manipulationen |
security-checks/ ← repo root (master branch)
├── miner-hunter # Entry point — this is what you run
├── setup.sh # ⚙️ First-time setup — run once after cloning
├── lib/
│ ├── common.sh # Shared utilities: logging, colors, helpers
│ ├── detect_hidden.sh # Hidden process & rootkit detection
│ ├── detect_cpu.sh # CPU profiling via perf & /proc
│ ├── detect_network.sh # Mining pool connection detection
│ ├── detect_persistence.sh # Persistence mechanism detection
│ ├── kill_miner.sh # Process killing & artifact removal
│ └── harden.sh # Post-incident hardening
├── README.md
└── LICENSE
| Anforderung | Detail |
|---|---|
| Betriebssystem | Linux – getestet auf Ubuntu 24.04 LTS, Debian 13 |
| Berechtigungen | Muss als root (sudo) ausgeführt werden |
| Automatisch installiert von setup.sh | perf, mpstat (sysstat), bc, strings (binutils) |
| Empfohlen | fail2ban – wird als fehlend markiert, nicht automatisch installiert |
| Erforderlich (nicht automatisch installiert) | iptables – muss für die kill/harden-Phasen vorhanden sein |
| Ausgabe | Speicherort | Inhalt |
|---|---|---|
| Beweisverzeichnis | /root/miner_evidence_YYYYMMDD_HHMMSS/ | Erfasste Binärdateien, perf-Berichte, Miner-Konfigurationen |
| Logdatei | /var/log/miner_hunter/run_YYYYMMDD_HHMMSS.log | Vollständiger, mit Zeitstempel versehener Ausführungslog |
| Bericht | evidence_dir/report.txt | Strukturierte Zusammenfassung der Ergebnisse mit Schweregraden |
| Watchdog-Warnungen | /var/log/miner_hunter/watchdog_alerts.log | Laufende Warnungen nach harden |
| Integritätsbasis | /var/lib/miner_hunter/usrbin_baseline.md5 | /usr/bin-Prüfsummen nach harden |
Dieses Tool wurde während einer aktiven Incident-Response gegen einen Krypto-Miner entwickelt, der:
next umbenannt hat, um sich auf einem Node.js-Server in Next.js-Prozesse einzufügenkthreadd umbenannt wurde – ein tatsächlicher Kernel-Thread-Name/proc/PID/exe → (deleted))ps, top, htop und btop vollständig unsichtbar warperf-Hardware-CPU-Zähler-Profiling erkannt werden konnteMIT