
Ein Prozessüberwachungstool, das versucht, Ausnutzung zu erkennen
Ein Prozessüberwachungstool, das versucht, Ausnutzung zu erkennen
[!IMPORTANT] Aufkommende Bedrohung: kritisches PHP-Sicherheitsrelease am 21. Oktober 2026, 14:00 UTC. Das PHP-Projekt kündigte es am 20. Oktober an (Ankündigung): zwei kritische Schwachstellen, beide mit CVSS v4.0 9.2 bewertet. Details, betroffene Versionen und Fixes kommen mit dem Release, das früher erscheinen kann, wenn Details öffentlich werden oder die Ausnutzung beginnt. Bereiten Sie sich jetzt darauf vor, PHP zu aktualisieren.
Die Ankündigung sagt nicht, um welche Art von Schwachstellen es sich handelt. Wenn ein Angriff PHP dazu bringt, Programme zu starten, zeigt process-watcher jedes davon mit seiner Befehlszeile an und kann optional die von Ihnen benannten beenden. Es sucht nicht nach diesen Schwachstellen: es verhindert nichts und übersieht Code, der innerhalb von PHP läuft, ohne einen Prozess zu starten, daher fügt es eine Erkennungsschicht hinzu und ersetzt nicht den Patch.
Hier beginnen: PHP mit process-watcher überwachen, oder lesen Sie den vollständigen PHP-Leitfaden.
Sehen Sie, was ein Dienst startet. process-watcher verfolgt einen Dienst (einen Webserver, einen Anwendungsserver, ...) und jeden
Prozess, den er erzeugt, in Echtzeit und protokolliert jeden Start, Programmwechsel und jedes Beenden als JSON, optional mit der Befehls-
zeile. Wenn Ihr Webserver plötzlich eine Shell oder curl ausführt, sehen Sie, was gestartet wurde, von welchem Prozess und von welchem
Dienst. Es ist eine einzelne statische Binärdatei für Linux (amd64, arm64): herunterladen, entpacken, ausführen.
Es macht die Aktivität sichtbar; es beurteilt sie nicht. Eine Baseline zu erstellen oder zu entscheiden, was ein Angriff ist, bleibt Ihnen
oder dem System überlassen, das die Ereignisse empfängt (Protokolldatei, SIEM, Webhook). Optional kann es auf bestimmte Kind-
prozesse mit einem gezielten SIGKILL reagieren (Kill-Regeln).
1. Herunterladen und entpacken Sie das neueste Release (amd64 oder
arm64, erkannt von Ihrem Rechner; die Archivnamen enthalten die Version, daher sucht die zweite Zeile das neueste Tag nach):
ARCH=$(uname -m | sed 's/x86_64/amd64/; s/aarch64/arm64/')
VERSION=$(curl -fsSLI -o /dev/null -w '%{url_effective}' https://github.com/Neo23x0/process-watcher/releases/latest | sed 's#.*/##')
curl -fsSLO https://github.com/Neo23x0/process-watcher/releases/download/$VERSION/process-watcher_${VERSION}_linux_${ARCH}.tar.gz
tar xzf process-watcher_${VERSION}_linux_${ARCH}.tar.gz && cd process-watcher_${VERSION}_linux_${ARCH}
2. Ausführen gegen den Dienst, den Sie überwachen möchten. Es benötigt Root-Rechte und Linux 5.15 oder neuer mit BTF;
sudo ./process-watcher doctor sagt Ihnen, ob Ihr Host die Voraussetzungen erfüllt.
sudo ./process-watcher --watch-image-contains nginx --capture-argv=true
nginx ist ein Teilstring des Namens der ausführbaren Datei Ihres Dienstes (apache2, php-fpm, java, ...). Beenden Sie den Agenten mit
Ctrl-C; er schreibt die Ereignisse in ./process-watcher.jsonl. --capture-argv=true zeichnet Befehlszeilen auf, die
Geheimnisse enthalten können (Argument capture). Bevorzugen Sie eine Datei? Bearbeiten Sie process-watcher.yaml neben der Binärdatei
(sie wird automatisch gefunden) und führen Sie sudo ./process-watcher aus.
3. Beobachten Sie, was der Dienst startet (zweites Terminal, gleiches Verzeichnis; jq macht das JSON lesbar):
sudo tail -f process-watcher.jsonl | jq -r '
select(.event_type=="process.exec" and .lineage.role=="descendant")
| "\(.timestamp[:19])Z \(.root.image) > \(.process.image) \(.process.argv // [] | join(" "))" | gsub("[[:cntrl:]]"; "?")'
Beispiel: Ein Dienst namens nginx wird dazu gebracht, eine Shell und einige Programme auszuführen (simuliert mit einem Ersatzprogramm):
2026-10-17T19:15:16Z nginx > dash sh -c id; uname -s
2026-10-17T19:15:16Z nginx > id id
2026-10-17T19:15:16Z nginx > uname uname -s
2026-10-17T19:15:16Z nginx > curl curl --version
2026-10-17T19:15:16Z nginx > sleep sleep 1
Ein Web- oder Anwendungsserver, der Shells, Download-Tools oder Interpreter (sh, curl, wget, nc, python,
...) startet, ist eine klassische Spur einer Web-Shell oder einer Remote-Code-Ausführung. Alle Generationen werden
verfolgt, auch nachdem der Elternprozess beendet wurde. (jq fügt die Argumente nur zur Anzeige zusammen; das Ereignis
behält sie als Array. sh erscheint als dash, weil das Image das Programm ist, das tatsächlich ausgeführt wurde.)
Als Nächstes: als systemd-Dienst weiterlaufen lassen · die Ereignisse mit
--tcp-address, --udp-address oder --webhook-url an Ihr SIEM oder Ihre Log-Pipeline senden (Ausgaben) ·
verdächtige Kindprozesse automatisch beenden (Kill-Regeln).
| Anforderung | Wert |
|---|---|
| Betriebssystem | Linux, amd64 oder arm64 |
| Kernel | 5.15 oder neuer mit BTF (/sys/kernel/btf/vmlinux). Die Versionsnummer allein ist keine Garantie: Beim Start prüft der Agent die Funktionen und Kernel-Strukturfelder, die er benötigt. |
| Berechtigungen | root oder CAP_BPF + CAP_PERFMON (+ CAP_SYS_PTRACE für /proc/<pid>/exe von Prozessen anderer Benutzer, CAP_KILL für die Kill-Funktion, CAP_SYS_RESOURCE vor Kernel 5.11). Kernel-Lockdown confidentiality verhindert den Betrieb. |
| PID-Namespace | der initiale PID-Namespace des Hosts (alle PIDs sind Host-PIDs); die Ausführung innerhalb eines Containers wird abgelehnt. |
Wenn eine Anforderung fehlt, stoppt der Agent mit einer konkreten Diagnose und Exit-Code 3; er fällt niemals auf
Polling von /proc zurück, wodurch kurzlebige Prozesse übersehen würden. sudo ./process-watcher doctor prüft alles,
lädt die Programme und führt einen eigenen Probe-Prozess aus. Getestete Kernel: docs/compatibility.md.
# in the directory the archive was downloaded to, with $VERSION and $ARCH from step 1
curl -fsSLO https://github.com/Neo23x0/process-watcher/releases/download/$VERSION/SHA256SUMS
sha256sum --check --ignore-missing SHA256SUMS
gh attestation verify process-watcher_${VERSION}_linux_${ARCH}.tar.gz --repo Neo23x0/process-watcher # build provenance