Konsole & Flotte

SIEM-Export (Enterprise)

Ein Enterprise-Daemon kann jedes Audit-Ereignis in drei Formaten in ein lokales Verzeichnis spiegeln, als zeilenweises JSON, CEF und RFC-5424-syslog, damit der SIEM-Forwarder, den Sie ohnehin betreiben, sie einlesen kann. Diese Seite ist die Operator-Referenz: die Formate mit je einer Beispielzeile, die Felder, die Konfigurationsdatei und das Verhalten je Modus.

Lesezeit ~6 Min · Konsole & Flotte

Was es ist

Ein lokaler, dateibasierter Spiegel des Audit-Protokolls des Daemons:

  • Jede Audit-Aktion wird gespiegelt: allow, revert, quarantine, quarantine_reversible, detected_kept, meta_attack und fail_closed.
  • Drei Formate, jedes eine unabhängig aktivierbare rotierende Datei: JSON-Zeilen, CEF (ArcSight Common Event Format) und syslog (RFC 5424).
  • Lokal und Air-Gap-tauglich: Der Daemon schreibt Dateien auf die Platte; der einzige optionale Netzwerkpfad ist ein syslog-Ziel, das Sie in Ihrem eigenen Netz konfigurieren. An die PoisonZero-Cloud wird nichts gesendet.
  • Best-effort und fail-open: Jeder Init- und Schreibfehler wird geschluckt; der Export kann die Durchsetzung nie verzögern oder blockieren.
Forensische Quelle der Wahrheit bleibt das nur dem Eigentümer lesbare audit.log im Tresor (siehe Vorfälle und Audit). Die SIEM-Dateien sind ein Spiegel zum Einlesen, kein Ersatz.

Aktivieren

Der Export wird über genau eine lokale Datei konfiguriert, siem.json im Konfigurationsverzeichnis des Daemons. Sie ist bewusst nicht cloud-verwaltet: Keine Remote-Konfiguration kann ihn einschalten oder umleiten. Datei bearbeiten, dann den Daemon neu starten:

PlattformPfad
Linux/etc/poisonzero/siem.json
macOS / Windows<Konfig-Verzeichnis>/siem.json (Verzeichnis überschreibbar mit POISONZERO_CONFIG_DIR)
jsonsiem.json
{
  "enabled": true,
  "dir": "/var/log/poisonzero-siem",
  "formats": ["json", "cef", "syslog"],
  "syslog_target": "siem.example.com:514",
  "syslog_network": "udp",
  "group": "splunk"
}
FeldBedeutung
enabledHauptschalter. false oder fehlende Datei bedeutet: Export aus.
dirAusgabeverzeichnis; wird bei Bedarf mit Modus 0755 angelegt.
formatsBeliebige Teilmenge aus json, cef, syslog. Jedes aktivierte Format schreibt eine rotierende Datei.
syslog_targetOptionales host:port eines Live-syslog-Empfängers. Weglassen für reine Dateiausgabe.
syslog_networkudp (Standard) oder tcp.
groupOptionale Lesegruppe für die Exportdateien (Linux/macOS): Das Verzeichnis wird 0750, die Dateien werden 0640, beides gehört der Gruppe. Unter Windows ignoriert. Siehe Berechtigungen unten.
Fehlende Datei, enabled: false, leeres dir oder leere formats-Liste sowie unlesbares JSON führen alle zum selben Ergebnis: Export aus, Daemon läuft. Auch eine fehlgeschlagene Verbindung zum syslog_target wird geschluckt; der Dateispiegel schreibt weiter.

Ausgabedateien, Rotation und Berechtigungen

DateiInhalt
audit.jsonEin JSON-Objekt pro Zeile
audit.cefEine CEF-Zeile pro Ereignis
audit.syslogEine RFC-5424-Zeile pro Ereignis; dieselbe Zeile geht zusätzlich an das syslog_target, falls gesetzt
  • Rotation: Jede Datei rotiert bei 10 MiB nach *.1; der Spiegel bleibt auf der Platte größenbegrenzt.
  • Standard-Berechtigungen: Das Verzeichnis wird mit 0755 angelegt, die Dateien werden mit 0600 geschrieben. Die Zeilen tragen Dateipfade und Begründungen, deshalb darf sie standardmäßig nur der Nutzer des Daemons lesen. Beim Start setzt der Daemon auch geerbte Gruppenrechte auf diese Standardwerte zurück.
  • Forwarder-Zugriff über group (Linux/macOS): Ein Forwarder unter eigenem unprivilegiertem Nutzer (splunk, nxlog, td-agent) bekommt Lesezugriff über das optionale Feld group: Das Verzeichnis wird 0750, die Dateien werden 0640, beides gehört der Gruppe - einschließlich jeder frischen Datei aus der Rotation, was eine einfache Datei-ACL nicht überleben würde. Den Forwarder-Nutzer zur Gruppe hinzufügen.
  • Fail-safe: Existiert die Gruppe nicht oder schlägt das Setzen von Gruppe oder Modus fehl, startet der Export nicht (einmalig geloggt). Dateien bleiben nie mit falschen Berechtigungen liegen.
  • Widerruf: Feld entfernen, und der nächste Daemon-Start setzt Verzeichnis und Dateien auf 0755/0600 zurück; bereits rotierte *.1-Dateien werden erst bei ihrer nächsten Rotation korrigiert.
  • Windows: Das Feld wird ignoriert - POSIX-Modi gelten dort nicht. Lesezugriff für das Forwarder-Konto über die geerbte Verzeichnis-ACL erteilen.
Eine dedizierte Forwarder-Gruppe verwenden. Nie eine breite Gruppe wie staff (macOS: jeder lokale Nutzer), users, wheel oder everyone: Das gibt die Detektionszeilen an den überwachten Agenten-Prozess und jeden lokalen Nutzer - genau das, was der 0600-Standard verhindert. Eine dedizierte Gruppe anlegen (etwa pz-siem oder die eigene Gruppe des Forwarders wie splunk) und nur den Forwarder-Nutzer aufnehmen. Bei einer breiten Systemgruppe loggt der Daemon beim Start eine Warnung.

Die JSON-Zeile

Jede Zeile ist ein Audit-Eintrag; leere optionale Felder entfallen:

SchlüsselTypBedeutung
tsstringRFC 3339 UTC. Wird beim Rendern gestempelt, falls der Eintrag keinen Zeitstempel trug.
actionstringEine der oben gelisteten Audit-Aktionen. detected_kept heißt: erkannt, aber bewusst unangetastet gelassen; eine Erkennung, nie als Block gezählt.
pathstringAbsoluter Pfad der betroffenen Datei.
reasonstringMenschenlesbare Begründung bzw. Klassifikator-Meldung.
dangernumber0 bis 1, nur bei KI-Entscheidungen vorhanden.
threat_levelstringlow, medium oder high: die abgeleitete Bedrohungsstufe und erste Eingabe für CEF- und syslog-Severity.
app_idstringDaemon-Identität; wird aus der Identität des Daemons gestempelt, wenn der Eintrag keine trägt.
agentstringAgenten-Name, sofern bekannt.
categorystringAngriffskategorie, sofern vom Modell befüllt.
groundedbooleanOb der Beleg wörtlich in der bewerteten Änderung steht; nur vorhanden, wenn es einen Beleg gibt.
evidence_sha256, evidence_lengthstring, numberSHA-256 und Länge des Beleg-Zitats. Das Zitat selbst wird nie geschrieben; siehe unten.
jsonaudit.json-Zeile
{"ts":"2026-06-10T12:00:00Z","action":"revert","path":"/home/dev/.claude/CLAUDE.md","reason":"prompt injection: exfiltration instruction","danger":0.93,"app_id":"app-7c1","agent":"claude-code","category":"exfil","threat_level":"high","evidence_sha256":"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08","evidence_length":72}
Das wörtliche Beleg-Zitat verlässt den Tresor über diesen Export nie. Jedes Format trägt nur SHA-256 und Länge, dieselbe Redaktionsregel wie die Standardstufe des OpenTelemetry-Exports.

Die CEF-Zeile

Header: CEF:0|PoisonZero|PoisonZero|<Daemon-Version>|<action>|<action>|<Severity>|<Extensions>. Reservierte Zeichen werden in Header und Extension-Werten CEF-escaped. Die Extensions:

CEF-SchlüsselQuelleHinweise
rttsEreigniszeit (RFC 3339).
actactionGetroffene Entscheidung.
fnamepathBetroffene Datei.
msgreasonBegründung bzw. Klassifikator-Meldung.
appapp_idDaemon-Identität.
suseragentAgenten-Name.
cs1categoryMit cs1Label=Category.
cs2threat_levelMit cs2Label=ThreatLevel.
cn1dangerMit cn1Label=Danger.

Die Severity (CEF 0 bis 10) richtet sich zuerst nach dem Threat-Level: high ist 9, medium ist 6, low ist 2. Nur ein Eintrag ohne Threat-Level fällt auf seine Aktion zurück: quarantine 10; revert, meta_attack, fail_closed 9; quarantine_reversible, detected_kept 6; allow 2; eine unbekannte Aktion wird nach danger eingestuft. In Live-Daten entscheidet die Stufe: Eine bewiesene Quarantäne ist high (9), ein detected_kept ist medium (6), die beiden sind also bereits getrennt.

textaudit.cef-Zeile
CEF:0|PoisonZero|PoisonZero|0.7.8|revert|revert|9|rt=2026-06-10T12:00:00Z act=revert fname=/home/dev/.claude/CLAUDE.md msg=prompt injection app=app-7c1 suser=claude-code cs2=high cs2Label=ThreatLevel cn1=0.93 cn1Label=Danger

Die syslog-Zeile

RFC 5424, Facility local0 (16), also PRI = 16 × 8 + Severity. Der Nachrichtenkörper ist die CEF-Zeile von oben: CEF over syslog, die gängige SIEM-Konvention. Die Severity spiegelt die CEF-Logik, Threat-Level zuerst:

Eingabesyslog-Severity
Threat-Level highwarning (4)
Threat-Level mediumnotice (5)
Threat-Level lowinformational (6)
Ohne Stufe: quarantine, revert, meta_attack, fail_closedwarning (4)
Ohne Stufe: quarantine_reversible, detected_keptnotice (5)
Ohne Stufe: allow und alles Übrigeinformational (6)
textaudit.syslog-Zeile
<132>1 2026-06-10T12:00:00Z build-host poisonzero - audit - CEF:0|PoisonZero|PoisonZero|0.7.8|revert|revert|9|rt=2026-06-10T12:00:00Z act=revert ...
detected_kept bleibt absichtlich auf notice: Ein Operator, der ab notice filtert, sieht die Erkennung weiterhin. Als Block gezählt wird sie trotzdem nie.

Modi und Air Gap

Der Export verhält sich im Cloud-Modus und im Private-Modus identisch: Er ist eine rein lokale Senke, ein privates Gerät verliert also nichts (siehe Cloud oder Privat). Das Feature baut keine eigenen ausgehenden Verbindungen auf; der einzige Netzwerkpfad ist das von Ihnen ausdrücklich konfigurierte syslog_target in Ihrem eigenen Netz. In vollständig abgeschotteten Umgebungen lassen Sie syslog_target weg und lassen Ihren On-Premises-Collector die Dateien einlesen.

SIEM-Export oder OpenTelemetry-Export?

Beides sind Enterprise-Features und beide bleiben in Ihrem Netz; sie beantworten verschiedene Fragen:

SIEM-ExportOpenTelemetry-Export
TransportLokale Dateien (plus optionales syslog-Forwarding)OTLP/HTTP-Push zu einem Collector
UmfangJede Audit-Aktion, allow eingeschlossenErkennungs-Events; allow wird nie exportiert
FormateJSON-Zeilen, CEF, RFC-5424-syslogOTLP mit festen poisonzero.*-Attributen
DetailstufenKeine: Beleg immer als Hash plus Längehashes, redacted, full (lokale Entscheidung)
KonfigurationEine lokale Datei, nie cloud-verwaltetLokales Profil oder zentrale Admin-API für Flotten

Weiterlesen

Was das Audit-Protokoll selbst festhält: Vorfälle und Audit. Wie lange lokale Daten bleiben: Speicher, Aufbewahrung und Bereinigung. Die Modus-Wahl dahinter: Cloud oder Privat.

War das hilfreich?

Ihr Audit-Protokoll, im SIEM, das Sie ohnehin betreiben.

JSON, CEF und syslog, lokal geschrieben und von Ihrem eigenen Forwarder eingelesen. Keine Cloud im Pfad. Ein Enterprise-Feature.

Sign me up