Hunt Lifecycle and Documentation
Two analysts on the same team ran hunts for the same TTP six months apart, used different queries, found different things, and documented them in different formats in different locations. Neither could build on the other's work. The hunt program made no measurable progress despite 200 hours of analyst effort. Structured lifecycle management is what separates a hunt program that compounds knowledge from one that resets every time a hunt session ends.
The Full Hunt Lifecycle
PEAK, introduced in Chapter 3, provides the operational backbone for every hunt. This chapter covers PEAK in practice, with the specific activities, deliverables, and quality checks that make each phase effective rather than ceremonial.
The three phases are not equally weighted in time or importance:
- PREPARE: 20 to 30% of total hunt time. Most hunters rush this phase. The ones who invest in it find more and waste less time during execution.
- EXECUTE: 50 to 60% of total hunt time. The actual query work, analysis, and iteration.
- ACT: 20 to 30% of total hunt time. Most hunters skip or compress this. The ones who do not skip it build better programs over time.
The lifecycle applies to every hunt regardless of scale. A 2-hour hunt has a lighter version of the same structure. A 2-week campaign hunt has a full version. The structure does not change; only the depth of each phase changes with scope.
What distinguishes a structured hunt from an ad hoc investigation: the written plan, the execution log, and the ACT phase output. Without all three, you are investigating, not hunting. The distinction matters for program maturity measurement, institutional knowledge retention, and the ability to build detections from hunt findings.
PREPARE Phase in Detail
PREPARE is where most hunt value is won or lost before a single query runs. The five steps of the PREPARE phase:
Step 1: Select hypothesis from backlog. Use the priority score framework from Chapter 2: threat relevance (is this actor or technique active against your industry?), data availability (do you have the logs to test it?), business risk (what is the impact if the technique is present?), and hunt coverage recency (when was this TTP last hunted?).
Step 2: Intelligence research. What do you know about this TTP? Who uses it, what variations exist, what artifacts it leaves? Check MITRE ATT&CK procedure examples, recent threat reports from your intel feeds, and HYPOS at h3ad-sec.github.io/HYPOS/ for structured hypothesis variants. Time spent here directly reduces false positive investigation time during execution.
Step 3: Scope definition. Write it down. Required fields:
- Hypothesis in ABLE format
- Target systems: all endpoints, specific segments, cloud, identity, or a defined subset
- Time window with justification for the choice
- Data sources with explicit confirmation each is available and quality-checked
- Out of scope: explicit exclusions documented (dev environment, known test systems, specific known-good processes)
Step 4: Query planning. Draft queries before opening the SIEM. What tables? What filters? What aggregation logic? Drafting first prevents the common failure of opening the SIEM and writing whatever comes to mind, which typically produces queries that are either too broad (massive result sets) or too narrow (zero results that look like no findings).
Step 5: Plan review. One other analyst reviews the plan before execution starts. The SANS PAM (Plan, Action, Measure) approach formalizes this. Peer review catches scope gaps, wrong data source assumptions, and missing exclusion filters before they waste execution time.
Hypothesis: APT29 used Windows Remote Management (WinRM, T1021.006) for lateral movement from compromised workstations to domain controllers, leaving Windows Remote Management service connection events (Event 6 in the Microsoft-Windows-WinRM/Operational channel) and PowerShell remoting logs (Event 400 and 800 in PowerShell Operational) on target hosts.
Target systems: All Windows endpoints, priority on domain controllers and file servers. Standard workstations included as source hosts.
Time window: Last 30 days. Justification: APT29's known operational tempo in recent campaigns suggests activity within 30-day windows after initial compromise.
Data sources: Sysmon Event 3 (network connections to port 5985/5986, all endpoints — confirmed present and quality-checked 2026-06-01), Windows Security Event 4624 Type 3 (network logons — confirmed), WinRM Operational log (confirmed on DCs only; gap on standard workstations — documented).
Out of scope: Linux and macOS hosts, cloud infrastructure, known IT admin machines using WinRM for authorized management (documented list from IT ops team).
Success criteria: Hunt confirms if: WinRM connections are observed between non-server hosts, or between workstations and DCs outside of documented admin activity. Hunt is complete when all anomalous WinRM connections are triaged or when confirmed coverage gap prevents answering the hypothesis.
EXECUTE Phase in Detail
EXECUTE has three sub-phases: gather, analyze, and iterate. Each has a specific quality check before moving to the next.
Gather: Pull the relevant data. Run initial queries. Before analyzing results, verify data quality: are the expected record types present? Are event counts plausible for the environment size and time window? If data quality is bad, stop. Document the gap and its likely cause. This is a control deficiency finding, not a hunt result. Do not spend analysis time on bad data.
Analyze: Apply the statistical methods from Chapter 5. Frequency analysis, long-tail sorting, baseline deviation comparison. Look for anomalies. Apply the Diamond Model for pivot structure: for each anomaly, which other vertices can you pivot toward? Score evidence with Admiralty ratings as you go, not after the fact.
Iterate: For each anomaly, investigate and classify. If false positive: document and add to the filter list. If true positive: pivot and escalate. If coverage gap: document for the data source team. Generate new hypotheses from unexpected tangential findings and add them to the backlog, not the active hunt scope.
Execution log discipline is what separates a documented hunt from a forgotten session. Keep a running log as you work. Include: timestamp, query run in copy-paste format, result count, action taken, and reasoning for each action. This log becomes the body of your after-action report and proves your methodology to any reviewer.
## Hunt Execution Log
**Hypothesis:** APT29 WinRM lateral movement (T1021.006)
**Analyst:** [name] | **Date:** 2026-06-02
### 09:15 — Initial scope query
Query: DeviceNetworkEvents
| where RemotePort in (5985, 5986)
| summarize count() by DeviceName, RemoteIP
Result: 847 connection events across 23 hosts
Action: Filtering to connections between non-server hosts (workstation-to-workstation)
### 09:32 — Refined: workstation-to-workstation WinRM
Query: [refined with asset type filter using device classification]
Result: 12 events across 3 host pairs
Action: Reviewing host pairs individually
- Pair 1: IT-ADMIN-01 to FILESERVER-03 — known admin activity, documented. FP.
- Pair 2: LAPTOP-128 to WORKSTATION-44 — unusual. No admin activity documented.
- Pair 3: LAPTOP-128 to FILESERVER-03 — same source host as pair 2.
### 09:55 — Suspicious finding: LAPTOP-128 lateral movement
Both connections originated from LAPTOP-128 at 02:17 on 2026-05-28.
Connection to WORKSTATION-44 (standard endpoint) and FILESERVER-03 (file server).
Time is outside business hours. User account associated is a standard user.
Action: Pivot to Sysmon Event 1 on target hosts for timestamp. Check what process spawned.
### 10:12 — EDR process tree pivot on FILESERVER-03
FILESERVER-03 shows wsmprovhost.exe spawning cmd.exe at 02:18.
cmd.exe executes: net user /domain and net localgroup administrators.
Enumeration commands. This is post-exploitation behavior.
Confidence: 85 (A1 from EDR). Severity: HIGH (file server with domain credentials).
Action: Escalate to IR team. Ticket #IR-2026-0547.
New hypothesis for backlog: Hunt for other WinRM sessions from LAPTOP-128 in last 60 days.
ACT Phase in Detail
ACT is where hunt value becomes permanent. Three components: preserve, detect, communicate. All three are required. Skipping any one converts a completed hunt into a dead-end session.
Preserve: Document the full hunt in a standard format. Future analysts and future-you need to reproduce this hunt without asking questions. The documentation is the institutional memory. Without it, the hunt exists only in one analyst's head and disappears when they take PTO or change roles.
Detect: Every confirmed true positive should produce a detection rule. Every confirmed coverage gap should produce a data source improvement request submitted to the engineering team. The path from hunt finding to detection rule: confirmed TP, write a Sigma rule that captures the behavior, test against known-good and known-bad data, submit to TRACERULES at h3ad-sec.github.io/TRACERULES/, monitor alert volume in SIEM for the first 30 days to tune false positives. Hunts that do not produce detections are not being fully operationalized.
Communicate: Who needs to know what, and at what level of detail?
- IR team: if there is an active threat, give them the full pivot trail, evidence chain, and confidence rating.
- Management: if the finding is significant, a one-page summary with business impact language, not technical query details.
- Data source team: if coverage gaps were found, a specific, actionable improvement request with the ATT&CK technique gap documented.
- Threat intel team: if you observed TTPs not yet in your intel profiles, or if actor attribution was clarified by the finding.
Classifying Hunt Outcomes
Four standard outcome classifications are used by Red Canary, OTRF, and mature hunt teams. Using a consistent classification across all hunts enables program-level metrics that are otherwise impossible to compute.
| Outcome | Definition | Action | Who Is Notified |
|---|---|---|---|
| True Positive (TP) | Confirmed malicious or suspicious activity after false positives are ruled out | Escalate to IR. Create detection rule. Document full evidence chain. | IR team, management (if high severity), threat intel team |
| False Positive (FP) | Investigation confirmed the activity is legitimate | Document the FP pattern. Update query exclusion filters. Update team knowledge base. | Hunt team internal. Asset owner notified if they provided context. |
| Coverage Gap | The data needed to test the hypothesis does not exist or is of insufficient quality | Document the gap specifically (missing log source, missing field, retention too short). Submit as control deficiency to data source team. | Data source / security engineering team. Management if gap is high-impact. |
| No-Find | Hypothesis tested against confirmed good-quality data, no evidence found | Document as No-Find with explicit data quality confirmation. This is a positive result: coverage is working. | Hunt team internal. Management summary if the technique is high-priority. |
A fifth outcome gets missed by most teams: New Hypothesis Generated. During execution you found something tangentially suspicious that was not your original target. Add it to the backlog immediately with the context that generated it. Do not chase it mid-hunt. It is a separate scoped hunt. The backlog entry with context is more valuable than an undocumented detour that disrupts the current hunt scope.
After-Action Report Template
The after-action report is the formal output of a completed hunt. It replaces tribal knowledge with documented process. Any analyst on the team should be able to read the after-action report and reproduce the hunt, understand why decisions were made, and build on the findings without asking questions.
HUNT AFTER-ACTION REPORT
─────────────────────────────────────────────
Hypothesis: [ABLE format: Actor, Behavior, Location, Evidence]
Hunt Dates: [start date] to [end date]
Analyst: [name]
ATT&CK Technique: [e.g., T1021.006 — Remote Services: Windows Remote Management]
─── SCOPE ───────────────────────────────────
Target Systems: [all endpoints / specific segments / cloud / identity]
Time Window: [start] to [end] — [justification for window length]
Data Sources:
- [source 1]: [available / quality confirmed / gap noted]
- [source 2]: [available / quality confirmed / gap noted]
Out of Scope: [explicit exclusions with rationale]
─── EXECUTION SUMMARY ───────────────────────
Queries Run: [count]
Records Analyzed: [approximate count]
Data Quality Issues: [none — OR — specific issue and impact on hunt coverage]
─── FINDINGS ────────────────────────────────
Result Classification: [TP / FP / Coverage Gap / No-Find]
Finding Summary: [2-3 sentences describing what was found or confirmed absent]
Evidence Quality: [Admiralty rating, e.g., A2 — own EDR, probably true]
Confidence Score: [0-100 with brief rationale]
Severity: [Critical / High / Medium / Low with rationale]
─── ACTIONS TAKEN ───────────────────────────
Escalated to IR: [Yes — Ticket #IR-XXXX-XXXX / No]
Detection Rules Created: [Yes — TRACERULES link / No]
Data Source Improvement Requests: [Yes — description / No]
New Hypotheses Added to Backlog: [list with brief context for each]
─── LESSONS LEARNED ─────────────────────────
What worked: [specific tactics or queries that were efficient]
What to improve: [scope too broad, missing data, query logic issues, etc.]
Hypothesis: APT29 used WinRM (T1021.006) for lateral movement from compromised workstations to domain controllers. Actor: APT29. Behavior: WinRM lateral movement (T1021.006). Location: Windows endpoints, production environment. Evidence: WinRM connection events (port 5985/5986), PowerShell remoting logs (Events 400/800), network logon events (Event 4624 Type 3).
Hunt Dates: 2026-06-02 to 2026-06-02 (same-day hunt, 30-day data window).
Result Classification: True Positive.
Finding Summary: LAPTOP-128 made WinRM connections to WORKSTATION-44 and FILESERVER-03 at 02:17 on 2026-05-28, outside business hours using a standard user account. EDR process tree on FILESERVER-03 confirmed wsmprovhost.exe spawning cmd.exe executing domain enumeration commands. Escalated to IR as ticket #IR-2026-0547.
Evidence Quality: A1 — Own EDR telemetry, confirmed in environment. Confidence: 85. Severity: HIGH (file server with domain credentials).
Actions Taken: Escalated to IR. Detection rule created for WinRM connections from non-admin workstations to servers outside business hours (TRACERULES entry #TR-20260602-001). New hypothesis added: "Hunt WinRM activity from LAPTOP-128 in prior 60 days for earlier lateral movement."
Lessons Learned: Asset classification (server vs. workstation) was not available in DeviceNetworkEvents. Required a join to device inventory table. Future WinRM hunts should include asset classification join in the query template.
Hunt KPIs and Metrics
How do you measure a hunt program? Most security metrics are activity metrics that measure inputs, not outcomes. These are outcome metrics that tell you whether the program is actually working.
Core KPIs
Hunt Yield Rate: confirmed TPs divided by total hunts conducted. Target: above 15% for mature programs. Below 5% signals that hypotheses are too broad, data quality is insufficient, or false positive management is poor. Above 30% may indicate hunts are too narrow and are missing novel activity.
Mean Time to Confirm (MTTC): time from hunt start to result classification (TP, FP, Gap, or No-Find). Track the trend over time. Decreasing MTTC means improving efficiency from better query design, better false positive suppression, and accumulated environment knowledge.
Detection Rule Creation Rate: new detection rules created from hunt findings divided by total hunts completed. Target: above 50%. Every two hunts should produce at least one new detection rule. Zero detections from ten hunts means hunt findings are not being operationalized into durable detection capability.
ATT&CK Coverage: percentage of relevant ATT&CK techniques covered by at least one hunt in the prior 90 days. "Relevant" is defined by your actor profiles and industry sector. Track this quarterly. Growing percentage means improving program maturity.
Data Gap Discovery Rate: number of confirmed coverage gaps identified per quarter. A team identifying zero gaps is either exceptionally covered (unlikely) or not hunting broadly enough to encounter gaps. Gaps are expected. Discovering them is a program health indicator.
Dwell Time Reduction: when a hunt finds an active threat, measure the gap between the initial compromise timestamp and the hunt discovery timestamp. Compare this to your pre-program dwell time average. Decreasing dwell time is the clearest evidence that the hunt program is delivering security value.
| KPI | Target (Mature Program) | Low Signal | Action if Below Target |
|---|---|---|---|
| Hunt Yield Rate | >15% | <5% | Improve hypothesis intel input or data quality |
| Mean Time to Confirm | Trend decreasing quarter-over-quarter | Increasing trend | Improve query templates, FP suppression, asset context |
| Detection Rule Creation Rate | >50% | <20% | Build explicit Sigma conversion step into ACT phase workflow |
| ATT&CK Coverage (90-day) | Growing % toward sector-relevant techniques | Flat for two or more quarters | Diversify hypothesis backlog across ATT&CK tactic categories |
| Data Gap Discovery Rate | 1-3 actionable gaps per quarter | 0 for two consecutive quarters | Expand hypothesis coverage to less-hunted log sources |
| Dwell Time Reduction | Decreasing trend year-over-year | No change or increasing | Increase hunt frequency on high-dwell-time techniques |
Key Takeaways
- PEAK's three phases have distinct time allocations: PREPARE (20-30%), EXECUTE (50-60%), ACT (20-30%). Most analysts invest too little in PREPARE and ACT.
- A structured hunt differs from an ad hoc investigation by three things: a written plan, an execution log, and an ACT phase output. All three are required.
- ACT phase has three components: preserve (documentation), detect (Sigma rule creation and data gap requests), and communicate (right information to the right people at the right level of detail).
- Coverage Gap and No-Find are distinct outcomes. No-Find with good data confirms coverage is working. Coverage Gap means you cannot draw any conclusion. Never report them as the same outcome.
- The after-action report is the institutional memory of a completed hunt. Any analyst should be able to reproduce the hunt from the report without asking questions.
- Hunt Yield Rate above 15% is the target for a mature program. Detection Rule Creation Rate above 50% means hunt findings are being operationalized into durable detection.
- Activity metrics (query count, hours hunted) are not KPIs. Outcome metrics (yield rate, dwell time reduction, ATT&CK coverage) measure whether the program is working.
Knowledge Check
Click an answer to reveal the explanation.
What are the three components of the PEAK ACT phase?
A hunter tests a hypothesis and finds no evidence. The data quality was confirmed good. Which outcome classification applies?
What is the Hunt Yield Rate target for a mature hunt program?
Which fields are required in a hunt after-action report?
What is the difference between a Coverage Gap and a No-Find result?