This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# Greenfield SIEM
|
||||
|
||||
**Release 1.1 – Deployment-Fix:** Garage-Bootstrap, vollständige `.env`, ClickHouse-Native-Port und idempotentes ClickHouse-Schema wurden gegenüber der ersten Greenfield-Version korrigiert.
|
||||
**Release 1.2 – Product Restoration:** Die skalierbare Greenfield-Pipeline bleibt bestehen; Rule-Sets, Suppressions, Grafana und ein deutlich umfangreicheres Analysten-UI sind wieder Bestandteil des Produkts. ClickHouse ist für den bekannten KVM-Host standardmäßig auf `26.3.17.56` gepinnt.
|
||||
|
||||
Kompletter Neuaufbau des bisherigen Projekts. Vom Altprojekt bleibt absichtlich nur der HTTP-Ingress-Vertrag erhalten.
|
||||
Kompletter Neuaufbau des bisherigen Eventpfads. Der HTTP-Ingress-Vertrag bleibt kompatibel, die SIEM-Produktebene wurde gegenüber der ersten Greenfield-Version wieder vollständig ausgebaut.
|
||||
|
||||
## Was dieses Projekt löst
|
||||
|
||||
@@ -24,8 +24,9 @@ Processor
|
||||
│
|
||||
└── rclone übernimmt Upload + Retention
|
||||
|
||||
ClickHouse ──► Detector ──► PostgreSQL (Detections / Status)
|
||||
ClickHouse + PostgreSQL ──► API/UI
|
||||
ClickHouse ──► Rule Engine ──► PostgreSQL (Rules / Suppressions / Findings)
|
||||
ClickHouse + PostgreSQL ──► Analyst API/UI
|
||||
ClickHouse + Prometheus ──► Grafana
|
||||
```
|
||||
|
||||
**Keine Event-Zeilen in PostgreSQL. Keine MariaDB. Keine synchronen Detection-Abfragen im Ingress. Keine Raw-XML-Duplikate in ClickHouse.**
|
||||
@@ -53,6 +54,7 @@ Danach:
|
||||
|
||||
- UI: `http://SERVER:8080/ui`
|
||||
- Ingress: `http://SERVER:8090/ingest`
|
||||
- Grafana: `http://SERVER:3000` (Port wird bei Konflikten automatisch verschoben)
|
||||
- Redpanda Console: lokal `http://127.0.0.1:8081`
|
||||
- Prometheus: lokal `http://127.0.0.1:9090`
|
||||
|
||||
@@ -86,6 +88,8 @@ Falls `.env` gelöscht wurde, aber alte PostgreSQL-Volumes mit einem unbekannten
|
||||
|
||||
## ClickHouse-Zugang
|
||||
|
||||
Für den bekannten KVM-Host mit `QEMU Virtual CPU version 2.5+` ist `clickhouse/clickhouse-server:26.3.17.56` der Standard, weil diese Version auf der VM nachweislich startet, während 26.6 dort mit SIGILL/Exit 132 abbricht. Der Preflight testet das Binary vor dem Stackstart.
|
||||
|
||||
ClickHouse besitzt zwei verschiedene Schnittstellen:
|
||||
|
||||
- HTTP: `127.0.0.1:8123`
|
||||
@@ -229,33 +233,59 @@ RAW_RETENTION=720h
|
||||
KAFKA_RETENTION_MS=86400000
|
||||
```
|
||||
|
||||
## Detections in Version 1
|
||||
## Rule-Sets und Detection Engine
|
||||
|
||||
Der Detector läuft unabhängig vom UI alle 30 Sekunden mit einem begrenzten Lookback und schreibt nur Findings in PostgreSQL.
|
||||
Der Detector ist nicht mehr auf einige hart codierte Go-Regeln beschränkt. Beim Start werden versionierte Rule-Sets aus `deploy/rules/` nach PostgreSQL synchronisiert. Aktivierungszustände aus dem UI bleiben bei Updates erhalten. Eigene Regeln werden im Rule-Set `custom` gespeichert.
|
||||
|
||||
Enthalten:
|
||||
Mitgeliefert werden 19 Regeln in vier Rule-Sets:
|
||||
|
||||
- Audit Log gelöscht (1102)
|
||||
- Dienst installiert (7045)
|
||||
- Account Lockout (4740)
|
||||
- Failed Logon Burst (4625)
|
||||
- Password Spray (4625 gegen viele Benutzer)
|
||||
- privilegierte Gruppenmitgliedschaft geändert (4728 / 4732 / 4756)
|
||||
| Rule-Set | Regeln | Beispiele |
|
||||
|---|---:|---|
|
||||
| Windows Core | 5 | Audit Log gelöscht, Dienst installiert, Scheduled Task, Audit Policy, Firewall |
|
||||
| Windows Authentication | 5 | Lockout, Failed-Logon-Burst, Password Spray, Kerberos, NTLM |
|
||||
| Windows Account & Admin | 5 | privilegierte Gruppen, Benutzer angelegt/aktiviert/gelöscht, Passwort-Reset |
|
||||
| Defender & PowerShell | 4 | Malware, Defender deaktiviert, EncodedCommand, verdächtige Download-/Memory-Muster |
|
||||
|
||||
**Es gibt bewusst keine pauschale `new_event_id`-Detection mehr.** Event 5857 und vergleichbare Betriebsereignisse sind normale Events, keine Incidents.
|
||||
Regeltypen sind `event`, `threshold` und `distinct`. Bedingungen werden über eine Feld-/Operator-Allowlist in ClickHouse-SQL kompiliert; Rule-Dateien enthalten kein frei ausführbares SQL. Einzelne Regeln und komplette Rule-Sets können aktiviert/deaktiviert werden. Suppressions können nach Rule-ID, Host, User oder Source-IP begrenzt und zeitlich befristet werden.
|
||||
|
||||
## UI
|
||||
**Es gibt weiterhin keine pauschale `new_event_id`-Detection.** Event 5857 und vergleichbare Betriebsereignisse sind normale Events. Details zum Format stehen in [`RULES.md`](RULES.md).
|
||||
|
||||
`/ui` enthält:
|
||||
## Analysten-UI
|
||||
|
||||
- Eventzahl 24h aus Rollup
|
||||
- aktive Hosts 24h
|
||||
- offene High-/Critical-Detections
|
||||
- Eventsuche nach Zeitraum, Host, User, IP, Event-ID und Channel
|
||||
- Detection-Liste mit Statusänderung
|
||||
- Agent-Liste / Last Seen
|
||||
`/ui` ist wieder eine eigentliche SIEM-Oberfläche und nicht nur eine einfache Eventtabelle. Enthalten sind:
|
||||
|
||||
Die initiale Eventsuche ist auf 24 Stunden und 500 Ergebnisse begrenzt. Der ClickHouse-Sortierschlüssel beginnt mit Tenant und Event-Zeit; alle UI-Suchen besitzen zusätzlich ein hart begrenztes Zeitfenster und Ergebnislimit. Das verhindert wiederkehrende Vollscans über die gesamte Historie.
|
||||
- **Overview:** 24h-KPIs, Eventvolumen, Top Hosts/Event-IDs und Authentication-Übersicht
|
||||
- **Investigation:** Zeit-, Host-, User-, IP-, Event-ID-, Channel- und Textfilter mit Drill-down
|
||||
- **Event Details:** Message, Commandline, relevante Attribute, Raw-Archiv-Referenz und Normalisierungsfelder
|
||||
- **Detections:** Severity, Status, Rule/Rule-Set, MITRE-Tags und Status-Workflow
|
||||
- **Rule-Sets:** Set- und Regel-Toggles sowie Custom-Rule-Editor
|
||||
- **Suppressions:** anlegen und entfernen, optional mit Ablaufzeit
|
||||
- **Agents:** Enrollment-/Last-Seen-Übersicht und Aktivierung
|
||||
|
||||
Die initiale Investigation ist zeitlich und per Ergebnislimit begrenzt. Das Overview verwendet kleine Rollups beziehungsweise begrenzte Aggregationen statt unkontrollierter Vollscans.
|
||||
|
||||
## Grafana
|
||||
|
||||
Grafana ist wieder Bestandteil des Standard-Stacks. Es wird automatisch mit einem dedizierten, **SELECT-only** ClickHouse-Benutzer und dem ClickHouse-Datasource provisioniert. Das administrative SIEM-UI und Grafana haben bewusst getrennte Aufgaben: UI für Workflow/Rules/Findings, Grafana für freie Visualisierung und Explore.
|
||||
|
||||
Mitgelieferte Dashboards:
|
||||
|
||||
- **SIEM Security Overview:** Eventvolumen, aktive Hosts, Failed Logons, Lockouts, Top Hosts/Event-IDs, Authentication, Top Failed Users und Source-IPs
|
||||
- **SIEM Pipeline Health:** Ingress/Redpanda/ClickHouse-Erreichbarkeit, Event-/Batch-Rate, Rejections und Scrape-Latenzen
|
||||
|
||||
Zugangsdaten:
|
||||
|
||||
```bash
|
||||
./credentials.sh
|
||||
```
|
||||
|
||||
Standardmäßig:
|
||||
|
||||
```text
|
||||
http://SERVER:3000
|
||||
```
|
||||
|
||||
`GRAFANA_PORT` wird wie die anderen Host-Ports durch `preflight.sh` auf Konflikte geprüft.
|
||||
|
||||
## Raw-Event wiederherstellen
|
||||
|
||||
@@ -398,3 +428,17 @@ Nur wenn wirklich alle Daten weg sollen:
|
||||
```
|
||||
|
||||
Das Skript verlangt zusätzlich die Eingabe `DELETE` und entfernt anschließend die Docker-Volumes.
|
||||
|
||||
## CPU-Kompatibilität und Portkonflikte
|
||||
|
||||
`deploy.sh` führt vor dem eigentlichen Start einen echten ClickHouse-Binary-Probe in einem kurzlebigen Container aus. Ein `Illegal instruction`/Exit 132 wird dadurch erkannt, bevor der Stack in eine Restart-Schleife gerät.
|
||||
|
||||
Bei `amd64` benötigt das offizielle ClickHouse-Image mindestens SSE3. Bei `arm64` setzt das offizielle Image ARMv8.2-A plus RCpc voraus. Bei VMs sollte deshalb nach Möglichkeit das CPU-Modell `host` beziehungsweise CPU-Passthrough verwendet werden.
|
||||
|
||||
Zusätzlich erkennt `deploy.sh` bereits belegte Host-Ports. Wenn `AUTO_PORTS=true` ist, werden nur kollidierende Ports auf freie Ersatzports verschoben und in `.env` gespeichert. Die tatsächlich verwendeten Werte zeigt anschließend `./credentials.sh`.
|
||||
|
||||
Für eine vollständige Hostdiagnose:
|
||||
|
||||
```bash
|
||||
./host-info.sh
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user