Skip to content

02 · Advanced Threat Hunting

SIEM alerts (Level 3 Module 5) catch what you already thought to detect. Threat hunting is the proactive discipline of looking for adversaries who evaded every existing alert — starting from a hypothesis, not a triggered rule.

1. Hunting vs. alerting

Alerting:  "Tell me when X happens" -- reactive, scales, but only catches
            known patterns.
Hunting:    "Assume X already happened undetected -- go find evidence" --
            proactive, human-led, catches what alerting missed.

A mature program needs both: hunting findings that prove valuable become new alerts (feeding back into Level 3 Module 5), continuously raising the bar for what's caught automatically.

2. The hunting process

1. Hypothesis   -- "If an attacker has a foothold, they'd likely use
                    living-off-the-land binaries for discovery"
2. Data gathering -- pull relevant logs (process creation, network, auth)
3. Analysis      -- look for the hypothesized behavior or its absence
4. Findings      -- confirmed malicious activity, a new detection gap,
                    or nothing found (still valuable -- documents coverage)
5. Feedback      -- new Sigma/SIEM rule, updated baseline, or closed hunt

3. Hypothesis-driven hunting with ATT&CK

Hypothesis: "Adversaries may be using PsExec or WMI for lateral movement,
             bypassing our RDP-focused monitoring" (T1021.002, T1047)

Hunt query (Splunk):
index=wineventlog EventCode=4688
| search CommandLine="*wmic*" OR CommandLine="*psexec*"
| stats count by host, user, CommandLine
| where count > 0

Every hunt should map to specific ATT&CK techniques not yet well-covered by existing detections (from the coverage tracking in Level 3 Module 5), prioritizing gaps over techniques already well-alerted.

4. Data-driven / baseline hunting

Instead of a specific hypothesis, look for statistical outliers against an established baseline of "normal" for your environment:

# Find processes that ran on exactly one host in the last 90 days --
# rare execution is a strong (not certain) signal of something unusual
index=wineventlog EventCode=4688 earliest=-90d
| stats dc(host) as host_count by Image
| where host_count=1
| sort host_count
# Beaconing detection: connections at suspiciously regular intervals
# (a hallmark of malware C2 checking in on a timer)
index=network
| streamstats current=f last(_time) as prev_time by src_ip, dest_ip
| eval delta=_time-prev_time
| stats stdev(delta) as jitter, avg(delta) as avg_interval by src_ip, dest_ip
| where jitter < 2 AND avg_interval > 30

5. Hunting across the kill chain

Reconnaissance:  unusual DNS queries for internal hostnames from a single host
Delivery:        rare/newly-registered sender domains in email logs
Execution:       parent-child process anomalies (Word spawning PowerShell)
C2:              long-lived connections, beaconing intervals, DNS tunneling
                 patterns (high query volume, unusual TXT record sizes)
Lateral movement: authentication to hosts a user has never accessed before
Exfiltration:    large outbound transfers to rare destinations, off-hours

6. Tooling for advanced hunting

# EDR query languages (example: CrowdStrike/Elastic-style) let hunters
# search raw telemetry beyond what's pre-indexed into alerts
process where process.name == "rundll32.exe" and
  process.command_line : "*javascript:*"

Jupyter notebooks with direct data-source access (rather than only a SIEM UI) let hunters apply statistical/ML techniques — clustering, anomaly scoring — that a standard SIEM search language can't express.

7. Documenting and operationalizing hunts

A hunt that isn't documented is a hunt that gets re-run from scratch next quarter with no institutional memory:

Hunt ID: H-2026-014
Hypothesis: Living-off-the-land lateral movement via WMI
Data sources: Windows Event Logs (Sysmon), 90-day window
Result: No malicious activity found; identified 2 legitimate admin
  scripts using WMI that should be added to a baseline allowlist
Outcome: New Sigma rule created for anomalous WMI use outside allowlist;
  ATT&CK T1047 coverage moved from "none" to "detected"

How It Actually Works: how baseline/anomaly hunting actually computes "normal," and why hunting finds what rules miss

Data-driven hunting works by building a statistical model of normal behavior per entity (per host, per user, per process) and flagging deviation, rather than matching a known-bad pattern the way a SIEM correlation rule does. Concretely, for something like process-execution frequency, a hunter (or the tooling supporting the hunt) computes a baseline distribution — mean and standard deviation of "how many distinct child processes does explorer.exe normally spawn per hour, per host" over a trailing window — and flags observations several standard deviations outside that baseline as candidates. This is a fundamentally different detection mechanism than the signature/correlation approach from Level 2–3's SIEM modules: a correlation rule can only ever catch behavior someone already characterized as bad; an anomaly baseline catches anything statistically unusual, including techniques nobody has written a rule for yet, at the cost of needing a human analyst to judge whether a given anomaly is actually malicious rather than a false positive from a legitimate but rare event (a scheduled batch job, an admin's unusual-but-authorized session).

This is the precise, mechanistic reason hunting finds things alerting doesn't: a correlation rule requires the "IF condition" to be specified before the attack happens; a hunt hypothesis (section 3) is formed after observing intelligence about a new technique (Level 3 Module 4's threat intel feeding directly into this), and is tested by an analyst manually querying historical data for the specific ATT&CK-mapped telemetry signature that technique would leave — meaning a hunt can retroactively find an intrusion that occurred before any rule existed to catch it, as long as the raw telemetry was retained (tying directly back to Level 2 Module 6's retention discussion: a hunt is only as good as how far back the index actually goes). Kill-chain-based hunting structures this further by hypothesizing at each of the seven classic stages (reconnaissance through actions-on-objective) independently, because a technique's telemetry footprint and the baseline of "normal" both differ enormously stage to stage — DNS query volume anomalies matter for command-and-control hunting in a way they're irrelevant for a privilege-escalation hunt, which looks instead at token/permission-change telemetry.

8. Checklist

  • [ ] Hunts are hypothesis-driven and mapped to specific ATT&CK techniques
  • [ ] Both hypothesis-driven and baseline/statistical hunting used
  • [ ] A "no findings" hunt still documented and counted as coverage gained
  • [ ] Confirmed findings converted into permanent detections
  • [ ] Hunt results logged for institutional memory, not re-derived each time

What's next

Module 3 looks at zero trust architecture, a design philosophy that shrinks the space an attacker can move through undetected in the first place.