
Python-CLI/TUI für die forensische Triage von Ubuntu-Systemen — erkennt und behebt Persistenzmechanismen mit Artefakterfassung, Zeitachsenkorrelation und Wazuh-Integration.
Forensische Triage für laufende Ubuntu-Systeme — automatisierte Artefakterfassung, Persistenzerkennung und geführte Behebung in etwa einer Minute.
Wenn Sie vermuten, dass ein Linux-System kompromittiert wurde, werden die ersten 30–40 Minuten üblicherweise damit verbracht, dieselben zehn Befehle nacheinander auszuführen: laufende Prozesse prüfen, nach seltsamen Cron-Jobs suchen, nach LD_PRELOAD greppen, authorized_keys auf neue Einträge durchsuchen, sudoers auditieren. Jeder Schritt ist manuell, erfordert Kontextwechsel und ist unter Druck fehleranfällig. Verpassen Sie eine Quelle — etwa /etc/sudoers.d/ statt nur /etc/sudoers, oder Benutzer-Crontabs zusätzlich zu /etc/cron.d/ — und Sie haben ein unvollständiges Bild.
Bestehende Optionen lösen dies nicht sauber. lynis ist ein Härtungs-Auditor, kein Triage-Tool — es meldet Konfigurationsschwächen auf einem sauberen System und erzeugt Rauschen auf einem kompromittierten. chkrootkit und rkhunter prüfen auf bekannte Rootkit-Signaturen, sind aber blind gegenüber neuartigen Persistenztechniken wie missbrauchten systemd-Timern oder legitim aussehenden Cron-Einträgen. Generische SIEM-Abfragen erfordern eine Log-Infrastruktur, die auf dem betrachteten System möglicherweise nicht existiert. Und Forensik-Suiten wie Volatility zielen auf Speicherabbilder ab, nicht auf eine Live-Shell auf einem laufenden Host.
Die Lücke ist ein Tool, das jetzt sofort auf dem laufenden System ausgeführt wird, die gängigsten Persistenzvektoren abdeckt, Aktivitäten über Log-Quellen hinweg zu einer Timeline korreliert und Ihnen genau sagt, was Sie sich ansehen müssen — ohne einen externen Agenten, eine Datenbank oder eine Internetverbindung zu benötigen.
ubuntils läuft in vier aufeinanderfolgenden Phasen:
/proc, Cron-Tabellen, systemd-Units, SSH-Schlüsseln, sudoers-Dateien, Umgebungsdefinitionen, Paketintegrität (dpkg --verify), PAM/NSS-Konfiguration und geladenen Kernelmodulen. Die meisten Collectors sind in ein bis zwei Sekunden fertig; dpkg --verify, das jede installierte Paketdatei erneut prüft, dominiert — ein vollständiger Scan dauerte 29–68 Sekunden auf einer Ubuntu 26.04 arm64 Desktop-VM.--rules geladen wurden — über die gesammelten Artefakte aus und erzeugt in etwa einer Sekunde eine rangierte, mit Konfidenzwerten versehene Liste von Befunden.--json).ubuntils selbst führt keine Netzwerkaufrufe durch, und jede Funktion — benutzerdefinierte Regeln und Korrelation eingeschlossen — läuft gegen lokal gesammelte Artefakte. Die einzige Möglichkeit, wie Befunde den Host verlassen können, ist die Wazuh-Integration: Wenn ein Wazuh-Agent installiert ist, schreibt ein Live-scan seine Befunde in eine lokale Datei, die der Agent dann an seinen Manager übermittelt. Übergeben Sie --no-wazuh, um dies für einen Lauf abzuschalten.
ubuntils scan bleibt durch alles Folgende unverändert — es ist weiterhin 100 % live, Single-Host, und jeder bestehende Flag funktioniert identisch. Zwei zusätzliche Befehle, collect und analyze, teilen dieselbe Erkennungs-/Timeline-Pipeline in einen offline-freundlichen Acquire-then-Analyze-Workflow auf, für Fälle, in denen du die Erkennung nicht direkt auf dem zu untersuchenden Host ausführen kannst (oder willst) — siehe Offline-Analyse: collect und analyze unten, einschließlich der Einschränkungen bei der Erkennungsabdeckung.
Ubuntu 22.04+ und jedes System mit PEP 668 (empfohlen):
Ubuntu 22.04+ blockiert systemweites pip install. Verwende pipx — es handhabt die Umgebung transparent, sodass du nie darüber nachdenken musst:
sudo apt install pipx -y
pipx ensurepath # then open a new shell
git clone https://github.com/asmitdesai/ubuntils.git
cd ubuntils
pipx install -e .
ubuntils scan # not `ubuntils scan` — see below
Führe es als dein normaler Benutzer aus: scan und collect rufen sich selbst unter sudo erneut auf. Wenn du ubuntils … selbst eingibst, schlägt es mit command not found fehl, weil der secure_path von sudo ~/.local/bin nicht enthält, wo pipx den Befehl ablegt. Wenn du es aus einer Root-Shell starten musst, rufe die installierte Binärdatei über den Pfad auf (~youruser/.local/bin/ubuntils scan), oder installiere stattdessen in eine virtuelle Umgebung:
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/ubuntils scan
Ältere Systeme / manuelle Installation:
git clone https://github.com/asmitdesai/ubuntils.git
cd ubuntils
pip install -r requirements.txt -e .
ubuntils scan
ubuntils benötigt Root-Rechte für den vollständigen Zugriff auf Artefakte. Wenn du ubuntils scan als Nicht-Root-Benutzer ausführst, ruft es sich automatisch selbst mit sudo unter Verwendung desselben Python-Interpreters (über den absoluten Pfad) erneut auf, sodass die korrekte Umgebung verwendet wird, ohne dass dein PATH an den Root-Prozess weitergegeben wird. Jeder externe Befehl (ss, dpkg, systemctl, …) wird über einen festen, root-eigenen Suchpfad aufgelöst, niemals über deinen PATH. Wenn du ohne Root-Rechte ausgeführt wirst, werden /etc/shadow, einige /proc-Einträge und geschützte Cron-Dateien übersprungen, und für jeden wird eine Warnung protokolliert.
Nur Erkennung — interaktive TUI:
ubuntils scan
Erkennung mit JSON-Ausgabe in Datei gespeichert:
ubuntils scan --json > /tmp/triage-$(hostname)-$(date +%Y%m%d).json
Erkennung mit CLI-Behebungsvorschau (Dry Run – keine Änderungen angewendet):
ubuntils scan --remediate
Erkennung mit angewendeter CLI-Behebung:
ubuntils scan --remediate --confirm
Druckversion:
ubuntils version
Ein manipulationssicheres Bundle für spätere oder Offline-Analysen erstellen:
ubuntils collect --output /path/to/bundle.tar.gz
Analysiere ein zuvor erfasstes Bundle (keine Root-Rechte erforderlich):
ubuntils analyze /path/to/bundle.tar.gz --json
Analysieren Sie stattdessen ein gemountetes forensisches Image oder einen extrahierten Dateisystembaum anstelle eines Bundles:
ubuntils analyze --root /mnt/forensic-image --json
Siehe Offline-Analyse: Sammeln und Analysieren für das Bundle-Format und – wichtig – was die Offline-Analyse im Vergleich zu einem Live-scan nicht erkennen kann.