Wazuh SIEM: Umfassende Container-Sicherheit mit Docker-Monitoring
Wazuh SIEM: Umfassende Container-Sicherheit mit Docker-Monitoring
Einleitung
In einer Container-basierten Infrastruktur reicht klassisches Monitoring nicht aus. Wir brauchen Security Information and Event Management (SIEM), das nicht nur Verfügbarkeit, sondern auch Sicherheitsbedrohungen erkennt. In diesem Artikel zeige ich, wie wir Wazuh 4.9.2 für umfassende Container-Sicherheit eingerichtet haben – inklusive Docker-Event-Monitoring, Container-Log-Analyse, Vulnerability Detection und VirusTotal-Integration.
Warum Wazuh für Container-Sicherheit?
Unsere Infrastruktur besteht aus über 40 Docker-Containern:
- Traefik (Reverse Proxy)
- Mailcow (E-Mail-Server mit 15+ Containern)
- Authentik (SSO)
- Nextcloud (File-Sharing)
- n8n (Workflow-Automation)
- Directus CMS
- Grafana, Prometheus (Monitoring)
Was Prometheus nicht kann:
- Erkennung von Brute-Force-Attacken
- Analyse von Container-Logs auf Sicherheitsprobleme
- Vulnerability Scanning von installierten Paketen
- File Integrity Monitoring
- MITRE ATT&CK-Mapping für Threat Intelligence
Prometheus überwacht Performance-Metriken, Wazuh überwacht Sicherheit. Zusammen bilden sie ein vollständiges Observability-Stack.
Architektur-Übersicht
┌─────────────────────────────────────┐
│ Wazuh Dashboard │
│ https://siem.example.com │
│ (via Traefik) │
└──────────────┬──────────────────────┘
│
┌──────────────▼──────────────────────┐
│ Wazuh Manager │
│ (Rules, Analysis, Alerting) │
│ Port 55000 (API) │
│ Port 1514/1515 (Agents) │
└──────────────┬──────────────────────┘
│
┌────────────────────────┼────────────────────────┐
│ │ │
┌─────────▼─────────┐ ┌─────────▼─────────┐ ┌─────────▼─────────┐
│ Wazuh Indexer │ │ Wazuh Agent │ │ SMTP-Relay │
│ (OpenSearch) │ │ + Docker- │ │ (E-Mail Alerts) │
│ Port 9200 │ │ Listener │ │ │
└───────────────────┘ └───────────────────┘ └───────────────────┘
Komponenten im Detail
1. Wazuh Indexer (OpenSearch)
Der Indexer speichert alle Security-Events in einer Zeitreihen-Datenbank. Er ist die Grundlage für Dashboards und Suche.
Ressourcen-Anforderungen:
| Komponente | RAM | CPU |
|---|---|---|
| Wazuh Indexer | 2-4 GB | 1-2 Cores |
| Wazuh Manager | 1-2 GB | 1-2 Cores |
| Wazuh Dashboard | 512 MB - 1 GB | 0.5-1 Core |
| Gesamt | 4-7 GB | 3-5 Cores |
2. Wazuh Manager
Das Herzstück des Systems. Der Manager:
- Empfängt Daten von Agents
- Wendet über 3.000 vordefinierte Regeln an
- Generiert Alerts und sendet Benachrichtigungen
- Führt Vulnerability Scans durch
3. Wazuh Agent mit Docker-Listener
Der Agent läuft direkt auf dem Host und überwacht:
- System-Logs (auth.log, syslog, kern.log)
- File Integrity (kritische Systemdateien)
- Docker-Events (Container-Lifecycle)
- Container-Logs (via Command-Monitoring)
Docker-Event-Monitoring
Der Docker-Listener erfasst alle Container-Events in Echtzeit:
Konfiguration in ossec.conf (Agent)
<wodle name="docker-listener">
<disabled>no</disabled>
<interval>10m</interval>
<attempts>5</attempts>
<run_on_start>yes</run_on_start>
</wodle>
Erfasste Events
| Event-Typ | Beispiele | Alert Level |
|---|---|---|
| Container | start, stop, kill, die, restart, create, destroy | 3-5 |
| Image | pull, push, delete, tag | 3-4 |
| Network | connect, disconnect, create, destroy | 3-4 |
| Volume | create, destroy, mount, unmount | 3-4 |
| Exec | exec_start (Shell-Zugriff!) | 5 |
Der DockerListener-Prozess muss Schreibzugriff auf den Wazuh-Queue-Socket haben. Lösung:
usermod -aG wazuh root
systemctl restart wazuh-agent
Beispiel-Alert: Shell-Zugriff auf Container
{
"rule": {
"level": 5,
"description": "Docker: Started shell session in container grafana",
"id": "87908",
"mitre": {
"id": ["T1059"],
"tactic": ["Execution"]
}
},
"data": {
"docker": {
"Type": "container",
"Action": "exec_start: /bin/bash"
}
}
}
Container-Log-Monitoring
Zusätzlich zu Docker-Events überwachen wir die Logs sicherheitsrelevanter Container:
Konfiguration
<!-- Traefik Access Logs -->
<localfile>
<log_format>command</log_format>
<command>docker logs --tail 50 traefik 2>&1</command>
<alias>traefik-logs</alias>
<frequency>120</frequency>
</localfile>
<!-- Authentik Authentication Logs -->
<localfile>
<log_format>command</log_format>
<command>docker logs --tail 50 authentik-server 2>&1</command>
<alias>authentik-logs</alias>
<frequency>120</frequency>
</localfile>
<!-- Postfix Mail Logs -->
<localfile>
<log_format>command</log_format>
<command>docker logs --tail 50 mailcowdockerized-postfix-mailcow-1 2>&1</command>
<alias>postfix-logs</alias>
<frequency>120</frequency>
</localfile>
<!-- Dovecot IMAP Logs -->
<localfile>
<log_format>command</log_format>
<command>docker logs --tail 50 mailcowdockerized-dovecot-mailcow-1 2>&1</command>
<alias>dovecot-logs</alias>
<frequency>120</frequency>
</localfile>
Erkannte Sicherheitsereignisse
- Brute-Force-Attacken: Fehlgeschlagene Logins in Authentik, Dovecot
- Spam-Versuche: Rejected connections in Postfix
- Verdächtige Requests: SQL-Injection, XSS-Versuche in Traefik
- Unauthorized Access: 401/403 Fehler in kritischen Services
Vulnerability Detection
Wazuh scannt automatisch alle installierten Pakete auf bekannte Schwachstellen (CVEs):
Konfiguration im Manager
<vulnerability-detection>
<enabled>yes</enabled>
<index-status>yes</index-status>
<feed-update-interval>60m</feed-update-interval>
</vulnerability-detection>
Beispiel-Ergebnis
{
"vulnerability": {
"id": "CVE-2025-8941",
"severity": "High",
"score": 7.8,
"package": "libpam-runtime",
"version": "1.5.3-5ubuntu5.5",
"description": "Privilege escalation via symlink attack"
},
"agent": {
"name": "your-server",
"os": "Ubuntu 24.04.3 LTS"
}
}
1.727 CVEs gefunden auf dem Host-System. Die meisten sind Low/Medium Severity, aber einige High-Severity CVEs erfordern Aufmerksamkeit.
MITRE ATT&CK Integration
Wazuh mappt Sicherheitsereignisse automatisch auf das MITRE ATT&CK Framework:
| Tactic | Technique | Beispiel-Event |
|---|---|---|
| Initial Access | T1190 (Exploit Public-Facing App) | SQL-Injection in Web-Logs |
| Execution | T1059 (Command & Scripting) | Shell-Session in Container |
| Credential Access | T1110 (Brute Force) | Failed SSH/IMAP logins |
| Defense Evasion | T1070 (Indicator Removal) | Log-Dateien gelöscht |
| Impact | T1561 (Disk Wipe) | Container destroyed |
VirusTotal Integration
Bei Dateiänderungen (File Integrity Monitoring) wird der Hash automatisch bei VirusTotal geprüft:
Konfiguration im Manager
<integration>
<name>virustotal</name>
<api_key>YOUR_VIRUSTOTAL_API_KEY</api_key>
<group>syscheck</group>
<alert_format>json</alert_format>
</integration>
Kostenlos erhältlich unter virustotal.com. Free Tier erlaubt 500 Abfragen/Tag.
Workflow
- Syscheck erkennt Dateiänderung in überwachtem Verzeichnis
- Hash der Datei wird berechnet (SHA256)
- Hash wird an VirusTotal API gesendet
- Ergebnis wird als Alert angezeigt (Malware gefunden / Clean)
E-Mail-Alerting
Kritische Sicherheitsereignisse werden per E-Mail gemeldet:
Konfiguration
<global>
<email_notification>yes</email_notification>
<smtp_server>smtp-relay</smtp_server>
<email_from>wazuh@example.com</email_from>
<email_to>admin@example.com</email_to>
<email_maxperhour>12</email_maxperhour>
</global>
<alerts>
<log_alert_level>3</log_alert_level>
<email_alert_level>7</email_alert_level>
</alerts>
Alert-Level-Übersicht
| Level | Beschreibung | E-Mail? |
|---|---|---|
| 3-6 | Informational (Login, Docker Events) | Nein |
| 7-9 | Warning (Failed Logins, Config Changes) | Ja |
| 10-12 | High (Multiple Failures, Firewall) | Ja |
| 13-15 | Critical (Rootkit, System Compromise) | Ja |
Traefik Integration
Das Wazuh Dashboard ist über Traefik mit HTTPS erreichbar:
labels:
- "traefik.enable=true"
- "traefik.http.routers.wazuh.rule=Host(`siem.example.com`)"
- "traefik.http.routers.wazuh.entrypoints=websecure"
- "traefik.http.routers.wazuh.tls.certresolver=letsencrypt"
- "traefik.http.services.wazuh.loadbalancer.server.port=5601"
- "traefik.http.services.wazuh.loadbalancer.server.scheme=https"
- "traefik.http.services.wazuh.loadbalancer.serversTransport=wazuh-transport@file"
Da das Wazuh Dashboard intern HTTPS verwendet, muss ein serversTransport mit insecureSkipVerify: true konfiguriert werden.
Troubleshooting
Problem 1: Traefik zeigt 404
Ursache: Traefik ignoriert Container mit Healthcheck-Status "unhealthy".
Lösung: Healthcheck anpassen:
healthcheck:
test: ["CMD-SHELL", "curl -k -s https://localhost:5601 -o /dev/null -w '%{http_code}' | grep -qE '401|200|302'"]
interval: 30s
timeout: 10s
retries: 5
Problem 2: Docker-Events werden nicht erfasst
Ursache: DockerListener-Prozess kann nicht auf Queue-Socket schreiben.
Lösung:
usermod -aG wazuh root
systemctl restart wazuh-agent
Problem 3: Vulnerability Scanner findet nichts
Ursache: Syscollector auf dem Agent nicht aktiviert.
Lösung: In Agent-ossec.conf:
<wodle name="syscollector">
<disabled>no</disabled>
<interval>1h</interval>
<packages>yes</packages>
</wodle>
Wichtige Befehle
Status prüfen
# Container Status
docker compose ps
# Agent Status (auf Host)
systemctl status wazuh-agent
# Agent-Verbindung prüfen (im Manager)
docker exec wazuh-manager /var/ossec/bin/agent_control -l
# Cluster Health
docker exec wazuh-manager curl -sk -u admin:PASSWORD \
https://wazuh.indexer:9200/_cluster/health?pretty
Logs anzeigen
# Manager Logs
docker logs wazuh-manager --tail 100
# Agent Logs (auf Host)
tail -f /var/ossec/logs/ossec.log
# Alerts
docker exec wazuh-manager tail -f /var/ossec/logs/alerts/alerts.json
Dashboard-Module
| Modul | Beschreibung | Datenquelle |
|---|---|---|
| Threat Hunting | Alle Security Alerts durchsuchen | Alle Regeln |
| Vulnerability Detection | CVEs in installierten Paketen | Syscollector + NVD Feed |
| MITRE ATT&CK | Taktiken & Techniken Framework | Regeln mit MITRE-Mapping |
| VirusTotal | Malware-Analyse von Dateien | Syscheck + VT API |
| File Integrity | Änderungen an Systemdateien | Syscheck |
| Security Events | Docker Events, Logins, etc. | Docker-Listener, Logs |
Zusammenfassung
- Wazuh SIEM 4.9.2 mit Indexer, Manager, Dashboard
- Host-Agent mit Docker-Listener
- Container-Log-Monitoring (Traefik, Authentik, Postfix, Dovecot, Nextcloud)
- Vulnerability Detection mit NVD Feeds
- MITRE ATT&CK Mapping
- VirusTotal Integration
- E-Mail-Alerting via SMTP-Relay
Ergebnis:
- 225+ Security Alerts im Dashboard
- 1.727 CVEs auf dem Host identifiziert
- Docker-Events werden in Echtzeit erfasst
- Container-Logs werden alle 2 Minuten analysiert
- Kritische Alerts per E-Mail (Level >= 7)
Fazit
Mit Wazuh haben wir ein Enterprise-Grade SIEM für unsere Container-Infrastruktur aufgebaut. Die Kombination aus:
- Docker-Event-Monitoring für Container-Lifecycle
- Container-Log-Analyse für Anwendungs-Security
- Vulnerability Detection für Patch-Management
- MITRE ATT&CK für Threat Intelligence
- VirusTotal für Malware-Erkennung
...bietet umfassende Sicherheitsüberwachung für moderne Container-Infrastrukturen.
Wazuh ist Open Source und kostenlos. Die einzigen Kosten sind Infrastruktur (4-7 GB RAM) und Zeit für die Einrichtung.
Weiterführende Links
- Wazuh Documentation: https://documentation.wazuh.com/
- Wazuh Docker: https://github.com/wazuh/wazuh-docker
- MITRE ATT&CK: https://attack.mitre.org/
- VirusTotal: https://www.virustotal.com/
Dieser Artikel beschreibt die Implementierung eines Wazuh SIEM-Systems für eine self-hosted Docker-Infrastruktur mit umfassender Container-Sicherheitsüberwachung.
Tags: #Wazuh #SIEM #Docker #Security #ContainerSecurity #VulnerabilityManagement #MITRE #VirusTotal #OpenSource