____ _ _ _ _ _
/ ___| _| |__ ___ _ __| | __ _ _ __ __| |(_|_)
| | | | | | '_ \ / _ \ '__| |/ _` | '_ \ / _` || | |
| |__| |_| | |_) | __/ | | | (_| | | | | (_| || | |
\____\__, |_.__/ \___|_| |_|\__,_|_| |_|\__,_|/ |_|
|___/ |__/
Detection-as-code pipelines ยท SOC & purple-team labs ยท network & endpoint detection engineering
I design, build, and validate detection systems โ from architecture to alert.
Most of my work is hands-on: I build lab environments, write detection rules from real-world traffic and real endpoint telemetry, and document everything โ including failures. My focus is understanding how attacks actually look in network and endpoint data and how to detect them before the attacker gains a foothold. Lately I've been turning that craft into a Detection-as-Code pipeline โ detection rules under continuous validation in CI, where every change re-proves the whole corpus still works.
- โ๏ธ 38 Suricata rules under continuous CI validation โ the badge below is live state, not a screenshot
- ๐ฎ Elastic detection lab running โ EDR + SIEM on a WireGuard mesh; emulated campaigns correlated node-by-node, rules deployed and replay-validated
- ๐ First SigmaHQ pull request open โ #6110, filling a network-layer gap in existing RAT coverage
- ๐๏ธ Work is organised as named operations โ Iron Watch (SOC architecture) ยท PCAP Autopsy (network forensics) ยท The Forge (detection-as-code CI) ยท Prism Box (endpoint detection engineering) ยท Ground Truth (OT/ICS, next)
- ๐ Bremen, Germany โ open to Detection Engineering / SOC roles in DE ยท BE ยท CH ยท LU ยท French (native) ยท German ยท English ยท reach me on LinkedIn
Also used across the labs: Snort ยท Graylog ยท Docker ยท WireGuard ยท Hetzner Cloud ยท Kali ยท Ubuntu/Debian ยท Windows 10 ยท Apache ยท rsyslog ยท Git ยท draw.io
A living lab, not a finished one. Detection rules ported into a Git CI/CD pipeline and held under continuous validation โ every push re-runs the harness against every operation, so the green check is a standing claim that the entire corpus still works, right now. This is where I practice Detection Engineering as an engineering discipline: hermetic test fixtures, regression detection, version control.
Each operation is validated in both directions โ a known-bad fixture that the rules must fire on, and a crafted known-good fixture that they must not fire on (false-positive guard). The badge above is the real CI state.
| Operation | Detection | CI Status |
|---|---|---|
| PA-01 โ You Dirty Rat! (STRRAT) | 3 Suricata ยท known-bad + known-good | ๐ข Validated |
| PA-02 โ Lumma in the Room-ah (Lumma Stealer) | 12 Suricata (1 removed โ ECH) ยท known-bad + known-good | ๐ข Validated |
| PA-03 โ The Ghost in the Wire (GhostWeaver RAT) | 16 Suricata ยท known-bad + known-good + benign-adversarial | ๐ข Validated |
| PA-04 โ Easy as 123 (NetSupport Manager RAT) | 7 Suricata ยท known-bad + known-good | ๐ข Validated |
All four PCAP Autopsy operations are ported and green โ 38 Suricata rules under continuous validation. Next intake: the Sigma track, now that endpoint telemetry is live and Operation Prism Box has surfaced the coverage gaps worth authoring from scratch โ followed by OT/ICS rules from Operation Ground Truth. The lab is designed to keep growing and stay green.
A cloud-hosted, living detection lab on a WireGuard mesh: an Elastic Stack brain (Elasticsearch + Kibana) with a Fleet Server managing Elastic Defend EDR on a Windows 10 victim endpoint, correlated against Suricata / Zeek network telemetry. Atomic Red Team drives emulated attack chains; detection rules are written from the resulting telemetry and cross-correlated across the network and endpoint layers โ then hardened and automated with Shuffle SOAR.
| Phase | Focus | Status |
|---|---|---|
| PB-01 | Elastic Stack brain + Fleet Server + Elastic Defend EDR on Windows victim (WireGuard mesh) | โ Complete |
| PB-02 | Detection engineering on Elastic โ emulation campaigns, correlation, rule authoring | ๐ง Active |
| PB-03 | Hardening ยท full detection suite ยท Shuffle SOAR + playbook automation | ๐ Planned |
PB-02 is my detection-engineering home on the Elastic stack. Campaigns are deliberately laddered: each one has to prove a different tier of detection craft, not just add more coverage.
| Campaign | Emulates | Detection tier | Status |
|---|---|---|---|
| Magpie | Lumma Stealer โ 11-node chain, Atomic Red Team | Signature โ single-event Sigma โ Elastic (Lucene / EQL) | โ Complete |
| Brood | DBatLoader / ModiLoader | Behavioural โ multi-event ancestry correlation, hand-authored EQL sequences | ๐ Next |
๐ฆโโฌ Magpie โ complete. An 11-node Lumma Stealer kill chain, pinned by atomic GUID (not test index) so the run is actually reproducible, detonated on the victim endpoint and then correlated node-by-node against ground truth.
- All 11 nodes correlated โ endpoint evidence, SIEM evidence, and timeline reconciled independently per technique (Kibana in UTC vs. victim in CEST โ a standing +2h reconciliation).
- 4 Sigma rules adapted from SigmaHQ under DRL 1.1 (
related: derived, original authors retained), converted to Elastic detection rules, deployed to Kibana and replay-validated 4/4 firing. - Defender caught 2 of 11 โ both at the delivery/transfer stage. Everything after the foothold passed the NGAV tier untouched, which is exactly the gap custom rules exist to close.
- Headline finding: two rules deployed as Lucene produced zero alerts despite the events being present. Root cause โ Lucene's whitespace tokenisation breaks wildcard matching on space-bearing command-line substrings. Re-converting to EQL fixed both. The non-firing Lucene versions are kept in the repo on purpose, as evidence.
- Honest scoping: the atomics are discrete TTP demonstrations, not an end-to-end data flow โ the exfil node shipped synthetic data to a placeholder domain. The claim is "each TTP Lumma uses was emulated and its telemetry correlated," not "credentials were stolen and exfiltrated end-to-end."
๐ฅ Brood โ next on the bench. Where Magpie detects events, Brood detects relationships. The thesis: express well-known parent/child abuse as true two-step EQL sequences (sequence by โฆ with maxspan=โฆ, ancestry join, derived time window) instead of the single-event ParentImage shortcut most rules settle for. Sigma can't cleanly express sequences โ so Brood is authored directly in EQL, by design.
- Campaign: DBatLoader / ModiLoader โ chosen because it's ancestry-native: multi-stage BAT / JS / PowerShell chains, a signed legitimate binary used as the malicious parent via DLL side-loading, plus LOLBin abuse.
- Single-host by design โ the name is the scope guardrail. No lateral movement, no AD.
- Status: campaign and method locked, awaiting clean baseline reset and detonation.
Repo: github.com/cyberlandji/prism-box โ detection work lives in
pb-02-detection-engineering/A Microsoft-stack mirror (Defender for Endpoint + Sentinel, KQL translation) is a longer-term goal โ decoupled from this arc, not a direct successor to PB-03.
PCAP-based investigation series. Each operation analyzes real-world malware traffic, reconstructs the attack chain, and produces validated Suricata detection rules. Zeek runs alongside as a known-answer calibration layer, auditing and sharpening the investigation methodology.
| Operation | Title | Malware Family | Rules | Status |
|---|---|---|---|---|
| PA-01 | You Dirty Rat! | STRRAT | 3 Suricata | โ Complete |
| PA-02 | Lumma in the Room-ah | Lumma Stealer | 12 Suricata (1 removed โ ECH) | โ Complete |
| PA-03 | The Ghost in the Wire | GhostWeaver RAT | 16 Suricata + 3 Sigma | โ Complete |
| PA-04 | Easy as 123 | NetSupport Manager RAT | 7 Suricata + 1 Sigma | โ Complete |
38 Suricata rules validated across 4 operations, all four ported into The Forge and green in CI. The 4 Sigma rules identified during these autopsies are still open โ network-layer, single-event signature work, parked in PB-02 alongside the campaign output rather than lost in a backlog.
Giving back to the ruleset I learn from. My first pull request to SigmaHQ โ a Zeek-based detection for NetSupport Manager RAT cleartext C2 over port 443, derived directly from the PA-04 network forensics.
- Rule:
zeek_http_netsupport_manager_cleartext_c2.ymlโrules/network/zeek/ - Logic:
user_agent|startswith 'NetSupport Manager/'ANDid.resp_p: 443 - Why it's non-duplicate: existing SigmaHQ coverage for this RAT is host-based; this fills the network-layer gap.
- Validation: fields confirmed against real PA-04 Zeek
http.logยทsigma-cliclean (0 errors) ยท logic tested to fire only on malicious rows.
๐ฌ Submitted and currently under maintainer review โ PR #6110.
A three-part SOC lab series. Each operation builds on the last: from manual detection to centralized log management to full DMZ architecture with proactive defense.
| Operation | Focus | Status |
|---|---|---|
| IW01 | Foundational SOC โ Snort IDS, manual correlation | โ Complete |
| IW02 | Graylog log management โ web enumeration detection, SSH compromise invisible | โ Complete |
| IW03 | DMZ hardening, full log pipeline, DDoS Detection Suite | โ Complete |
Industrial protocol detection in an OT/ICS context โ Modbus / DNP3 behavioral rules with Suricata, framed against IEC 62443 and KRITIS. Bringing detection engineering to the operational-technology side, where the traffic and the threat model look nothing like enterprise IT.
๐ In design โ next on the anvil.
Everything I build lives here on GitHub โ the repos above are the portfolio.
I design, build, and validate detection systems โ from architecture to alert.
