Wazuh Container Monitoring: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „Dieser Artikel baut auf dem Docker-Stack mit Traefik auf und integriert ihn in das SIEM. Der Wazuh-Agent läuft dabei auf dem '''Docke…“ |
Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
Dieser Artikel baut auf dem [[Docker-Stack-Traefik|Docker- | Dieser Artikel baut auf dem [[Docker-Stack-Traefik|Docker-Aufbau mit Traefik]] auf und integriert ihn in das SIEM. Der Wazuh-Agent läuft auf dem '''Docker-Host''', nicht in den Containern. Drei Telemetriequellen werden eingebunden: Docker-Engine-Events, die Anwendungslogs und Datei-Integritätsüberwachung auf den Volumes. | ||
==Konzept== | ==Konzept== | ||
| Zeile 13: | Zeile 13: | ||
; Drei Quellen | ; Drei Quellen | ||
* Engine-Events (docker-listener), Anwendungslogs ( | * Engine-Events (docker-listener), Anwendungslogs (Container-stdout) und FIM auf den Daten-Volumes. | ||
==Voraussetzung: Python-Modul docker== | ==Voraussetzung: Python-Modul docker== | ||
| Zeile 24: | Zeile 24: | ||
; Installation prüfen | ; Installation prüfen | ||
* <code>/var/ossec/framework/python/bin/pip3 show docker</code> | * <code>/var/ossec/framework/python/bin/pip3 show docker</code> | ||
==Volume-Pfade ermitteln== | |||
Da jede Anwendung ein eigenes Compose-Projekt ist, lautet der Volume-Name <code><verzeichnis>_<volume></code>. Bei den Verzeichnissen <code>nextcloud/</code> und <code>mediawiki/</code> also <code>nextcloud_data</code> und <code>mediawiki_data</code>. Im Zweifel prüfen: | |||
; Volumes auflisten | |||
* <code>docker volume ls</code> | |||
; Mountpoint eines Volumes anzeigen | |||
* <code>docker volume inspect nextcloud_data</code> | |||
==Agent-Konfiguration (ossec.conf)== | ==Agent-Konfiguration (ossec.conf)== | ||
| Zeile 29: | Zeile 39: | ||
Der folgende Block kommt in die <code>/var/ossec/etc/ossec.conf</code> des Agents auf dem Docker-Host. | Der folgende Block kommt in die <code>/var/ossec/etc/ossec.conf</code> des Agents auf dem Docker-Host. | ||
===docker-listener | ===docker-listener=== | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
| Zeile 39: | Zeile 49: | ||
</wodle> | </wodle> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
; run_on_start | ; run_on_start | ||
* Startet das Modul direkt beim Hochfahren des Agents, nicht erst nach dem ersten Intervall. | * Startet das Modul direkt beim Hochfahren des Agents, nicht erst nach dem ersten Intervall. | ||
; attempts | |||
* Anzahl der Verbindungsversuche zum Docker-Socket, falls dieser beim Start noch nicht bereit ist. | |||
===Anwendungslogs=== | |||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
| Zeile 58: | Zeile 66: | ||
; json-Logtreiber | ; json-Logtreiber | ||
* Docker schreibt pro Container eine <code>*-json.log</code>. Wazuh | * Docker schreibt pro Container eine <code>*-json.log</code>. Wazuh liest diese als <code>json</code> ein und kann die Felder direkt auswerten. | ||
==FIM auf den Volumes== | ===FIM auf den Volumes=== | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
<syscheck> | <syscheck> | ||
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/ | <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/nextcloud_data/_data/data</directories> | ||
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/ | <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/mediawiki_data/_data</directories> | ||
</syscheck> | </syscheck> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
; realtime | ; realtime | ||
* <code>realtime="yes"</code> meldet Änderungen sofort über inotify, statt erst beim nächsten Scan-Durchlauf. | * <code>realtime="yes"</code> meldet Änderungen sofort über inotify, statt erst beim nächsten Scan-Durchlauf. Neue Dateien lösen Rule 554 aus. | ||
==Kompletter ossec.conf-Block== | ==Kompletter ossec.conf-Block== | ||
Alle drei Bausteine | Alle drei Bausteine am Stück zum Einfügen. Volume-Pfade ggf. an die tatsächlichen Namen anpassen. | ||
<syntaxhighlight lang="xml"> | <syntaxhighlight lang="xml"> | ||
| Zeile 96: | Zeile 98: | ||
<syscheck> | <syscheck> | ||
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/ | <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/nextcloud_data/_data/data</directories> | ||
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/ | <directories check_all="yes" realtime="yes">/var/lib/docker/volumes/mediawiki_data/_data</directories> | ||
</syscheck> | </syscheck> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Zeile 111: | Zeile 113: | ||
===Modul-Status im Agent-Log=== | ===Modul-Status im Agent-Log=== | ||
; ossec.log auf dem Agent | ; ossec.log auf dem Agent verfolgen | ||
* <code>tail -f /var/ossec/logs/ossec.log</code> | * <code>tail -f /var/ossec/logs/ossec.log</code> | ||
; Auf docker-listener-Meldungen | ; Auf docker-listener-Meldungen filtern | ||
* <code>grep docker-listener /var/ossec/logs/ossec.log</code> | * <code>grep docker-listener /var/ossec/logs/ossec.log</code> | ||
| Zeile 121: | Zeile 123: | ||
===Event auslösen=== | ===Event auslösen=== | ||
; Test-Container starten und | ; Test-Container starten und entfernen | ||
* <code>docker run --rm hello-world</code> | * <code>docker run --rm hello-world</code> | ||
| Zeile 129: | Zeile 131: | ||
===Im Manager prüfen=== | ===Im Manager prüfen=== | ||
; | ; alle Events mitlesen | ||
* <code>tail -f /var/ossec/logs/archives/archives.json</code> | * <code>tail -f /var/ossec/logs/archives/archives.json</code> | ||
; | ; nur Alerts mitlesen | ||
* <code>tail -f /var/ossec/logs/alerts/alerts.json</code> | * <code>tail -f /var/ossec/logs/alerts/alerts.json</code> | ||
| Zeile 140: | Zeile 142: | ||
; Engine-Events vs. Anwendungslogs | ; Engine-Events vs. Anwendungslogs | ||
* Der docker-listener meldet, '''dass''' ein Container gestartet oder betreten wurde – nicht, was innerhalb der Anwendung passiert. Für Angriffe auf die Webanwendung | * Der docker-listener meldet, '''dass''' ein Container gestartet oder betreten wurde – nicht, was innerhalb der Anwendung passiert. Für Angriffe auf die Webanwendung liefern die Anwendungslogs und FIM die Telemetrie. | ||
; Zusammenspiel | ; Zusammenspiel | ||
* Erst die Kombination macht das Bild vollständig: Engine-Ebene (Container-Lifecycle), Anwendungs-Ebene (Logs) und Datei-Ebene (FIM). | * Erst die Kombination macht das Bild vollständig: Engine-Ebene (Container-Lifecycle), Anwendungs-Ebene (Logs) und Datei-Ebene (FIM). | ||
Version vom 27. Juni 2026, 16:27 Uhr
Dieser Artikel baut auf dem Docker-Aufbau mit Traefik auf und integriert ihn in das SIEM. Der Wazuh-Agent läuft auf dem Docker-Host, nicht in den Containern. Drei Telemetriequellen werden eingebunden: Docker-Engine-Events, die Anwendungslogs und Datei-Integritätsüberwachung auf den Volumes.
Konzept
- Agent auf dem Host
- Der Wazuh-Agent wird auf dem Docker-Host installiert. Über das
docker-listener-Modul liest er die Events der Docker-Engine direkt vom Socket.
- Was im SIEM ankommt
- Container start, stop und die
- Image-Pulls
docker execin laufende Container (jemand klettert in den Container)- Netzwerk- und Volume-Events
- Drei Quellen
- Engine-Events (docker-listener), Anwendungslogs (Container-stdout) und FIM auf den Daten-Volumes.
Voraussetzung: Python-Modul docker
Das docker-listener-Modul benötigt das Python-docker-SDK in der Wazuh-eigenen Python-Umgebung. Ohne dieses Modul startet der Listener still nicht.
- SDK in die Wazuh-Python-Umgebung installieren
/var/ossec/framework/python/bin/pip3 install docker
- Installation prüfen
/var/ossec/framework/python/bin/pip3 show docker
Volume-Pfade ermitteln
Da jede Anwendung ein eigenes Compose-Projekt ist, lautet der Volume-Name <verzeichnis>_<volume>. Bei den Verzeichnissen nextcloud/ und mediawiki/ also nextcloud_data und mediawiki_data. Im Zweifel prüfen:
- Volumes auflisten
docker volume ls
- Mountpoint eines Volumes anzeigen
docker volume inspect nextcloud_data
Agent-Konfiguration (ossec.conf)
Der folgende Block kommt in die /var/ossec/etc/ossec.conf des Agents auf dem Docker-Host.
docker-listener
<wodle name="docker-listener">
<interval>10m</interval>
<attempts>5</attempts>
<run_on_start>yes</run_on_start>
<disabled>no</disabled>
</wodle>
- run_on_start
- Startet das Modul direkt beim Hochfahren des Agents, nicht erst nach dem ersten Intervall.
- attempts
- Anzahl der Verbindungsversuche zum Docker-Socket, falls dieser beim Start noch nicht bereit ist.
Anwendungslogs
<localfile>
<log_format>json</log_format>
<location>/var/lib/docker/containers/*/*-json.log</location>
</localfile>
- json-Logtreiber
- Docker schreibt pro Container eine
*-json.log. Wazuh liest diese alsjsonein und kann die Felder direkt auswerten.
FIM auf den Volumes
<syscheck>
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/nextcloud_data/_data/data</directories>
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/mediawiki_data/_data</directories>
</syscheck>
- realtime
realtime="yes"meldet Änderungen sofort über inotify, statt erst beim nächsten Scan-Durchlauf. Neue Dateien lösen Rule 554 aus.
Kompletter ossec.conf-Block
Alle drei Bausteine am Stück zum Einfügen. Volume-Pfade ggf. an die tatsächlichen Namen anpassen.
<wodle name="docker-listener">
<interval>10m</interval>
<attempts>5</attempts>
<run_on_start>yes</run_on_start>
<disabled>no</disabled>
</wodle>
<localfile>
<log_format>json</log_format>
<location>/var/lib/docker/containers/*/*-json.log</location>
</localfile>
<syscheck>
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/nextcloud_data/_data/data</directories>
<directories check_all="yes" realtime="yes">/var/lib/docker/volumes/mediawiki_data/_data</directories>
</syscheck>
Agent neu starten
systemctl restart wazuh-agent
Funktionsprüfung
Modul-Status im Agent-Log
- ossec.log auf dem Agent verfolgen
tail -f /var/ossec/logs/ossec.log
- Auf docker-listener-Meldungen filtern
grep docker-listener /var/ossec/logs/ossec.log
Erscheint hier eine Meldung über ein fehlendes Python-Modul, wurde das docker-SDK nicht in die Wazuh-Python-Umgebung installiert (siehe oben).
Event auslösen
- Test-Container starten und entfernen
docker run --rm hello-world
- In einen laufenden Container klettern
docker exec -it nextcloud sh
Im Manager prüfen
- alle Events mitlesen
tail -f /var/ossec/logs/archives/archives.json
- nur Alerts mitlesen
tail -f /var/ossec/logs/alerts/alerts.json
Die Docker-Events erscheinen mit dem Decoder docker. Das docker exec ist didaktisch der interessanteste Fall: Es zeigt, dass ein Eindringen in einen laufenden Container im SIEM sichtbar wird.
Hinweis zum Datenfluss
- Engine-Events vs. Anwendungslogs
- Der docker-listener meldet, dass ein Container gestartet oder betreten wurde – nicht, was innerhalb der Anwendung passiert. Für Angriffe auf die Webanwendung liefern die Anwendungslogs und FIM die Telemetrie.
- Zusammenspiel
- Erst die Kombination macht das Bild vollständig: Engine-Ebene (Container-Lifecycle), Anwendungs-Ebene (Logs) und Datei-Ebene (FIM).