Austin Rose
Lab/Threat-hunting simulator

Threat-hunting simulator

LiveUpdated 2026-04-26

Four frameworks, applied to one brute-force use case across three log sources. Walk the steps yourself, or read the background first.

Mission objective

Demonstrate that one detection use case spans three log sources when you map it through the framework stack — and that surgical data ingestion (only what each sub-technique needs) is what justifies the Splunk volume.

Threats
  • Synthetic telemetry too clean reads as a tutorial; too noisy reads as broken.
  • The walkthrough turning into a vendor-tool demo instead of a methodology demo.
  • MaGMa metrics drifting from MITRE's actual semantics over time.
Go / No-go criteria
  • All three scenarios reach disposition with a working detection-as-code artifact.
  • The cross-source coverage point lands without explanation needed.
  • ATT&CK Navigator iframe loads the layer JSON from /attack-layer.json.
Lessons learned
  • One use case, three sub-techniques: the framework stack is the multiplier.
  • Cost-of-silence: only ingest what each use case requires; justify every byte.
Built for this
  • Interview-grade four-phase walkthrough (Ingest → Pivot → Correlate → Disposition)
  • California CDT detection methodology applied to synthetic telemetry
  • Cross-source proof: same Sigma rule covers Windows AD, FTP, and WordPress
  • MaGMa lifecycle + metrics rendered as a live sidebar
Built on
  • MITRE ATT&CK taxonomy + Navigator embed
  • MaGMa lifecycle framework
  • Sigma rule format + SPL search syntax

Most SOCs drown in alerts because there is no shared language for what to detect, why, or how well. Four frameworks fix that — each one solving a problem the others do not.

Skip to the walkthrough →
The stack

Kill Chain (where) → ATT&CK (what) → MaGMa (how it is managed) → ATC (the deliverables that prove it). Four frameworks, one analytical stack — not interchangeable layers.

  1. 01Lockheed Kill Chain

    Where in the attack lifecycle.

    Highlighted phase row in Step 3.

    lockheedmartin.com
  2. 02MITRE ATT&CK

    What, specifically, the adversary is doing.

    Tactic → Technique → Sub-technique badges in Step 3.

    attack.mitre.org
  3. 03FI-ISAC MaGMa

    How the detection is managed once it ships.

    Lifecycle sidebar in Steps 3–4: stage, drivers, effectiveness / implementation / coverage.

    betaalvereniging.nl
  4. 04Atomic Threat Coverage

    How the detection is delivered — as code, not a wiki page.

    Six artifact tabs in Step 4: Sigma, SPL, Logging, Trigger (ART), Response, Hardening.

    github.com/atc-project
Walkthrough
L1L1.CACredential AccessL2L2.CA.001Brute-force authentication attemptsL33 scenarios(L3.CA.001.WIN)
Step 1 — Ingest

36 events from a 4-hour window

Source: Windows Security log. The cluster you're hunting is hidden in here. Filter to seeded events to skip ahead, or scroll to see what real triage looks like.

120 events × 90 days × 50 hosts ≈ 540K events / month. Surgical ingestion — only the IDs the use case needs — is the discipline that keeps Splunk pricing sane.

TimeSourceEventUserSrc IPMessage
windows4624Logon successkbenson10.42.7.18Successful network logon
windows4624Logon successlcarter10.42.7.21Successful network logon
windows4624Logon successmdavis10.42.9.103Successful RemoteInteractive logon
windows4634LogoffkbensonAccount logged off
windows4624Logon successnedwards10.42.7.55Successful network logon
windows4625Logon failurejadams198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurekbenson198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurelcarter198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failuremdavis198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurenedwards198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failureofranklin198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurepgomez198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failureqhall198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurerivanov198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failuresjensen198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failuretkim198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failureulopez198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurejadams198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurekbenson198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failuremdavis198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failureofranklin198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failureqhall198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurerivanov198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failuresjensen198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failuretkim198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failureulopez198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurejadams198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurelcarter198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurenedwards198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurepgomez198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4625Logon failurejadams198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4624Logon successjadams198.51.100.42Successful network logon — flagged: matches preceding 30-min failure burst
windows4625Logon failurekbenson198.51.100.42Account failure: bad password (substatus 0xC000006A)
windows4624Logon successofranklin10.42.9.211Successful network logon
windows4634LogofflcarterAccount logged off
windows4624Logon successpgomez10.42.7.31Successful RemoteInteractive logon
Coverage