agentic-threat-hunting-framework 0.2.2__py3-none-any.whl → 0.2.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentic_threat_hunting_framework-0.2.2.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/METADATA +1 -1
- agentic_threat_hunting_framework-0.2.4.dist-info/RECORD +47 -0
- athf/__version__.py +1 -1
- athf/cli.py +1 -1
- athf/commands/context.py +29 -15
- athf/commands/hunt.py +1 -3
- athf/commands/init.py +45 -0
- athf/commands/similar.py +2 -2
- athf/core/hunt_manager.py +7 -0
- athf/data/__init__.py +14 -0
- athf/data/docs/CHANGELOG.md +147 -0
- athf/data/docs/CLI_REFERENCE.md +1797 -0
- athf/data/docs/INSTALL.md +594 -0
- athf/data/docs/README.md +31 -0
- athf/data/docs/environment.md +256 -0
- athf/data/docs/getting-started.md +419 -0
- athf/data/docs/level4-agentic-workflows.md +480 -0
- athf/data/docs/lock-pattern.md +149 -0
- athf/data/docs/maturity-model.md +400 -0
- athf/data/docs/why-athf.md +44 -0
- athf/data/hunts/FORMAT_GUIDELINES.md +507 -0
- athf/data/hunts/H-0001.md +453 -0
- athf/data/hunts/H-0002.md +436 -0
- athf/data/hunts/H-0003.md +546 -0
- athf/data/hunts/README.md +231 -0
- athf/data/integrations/MCP_CATALOG.md +45 -0
- athf/data/integrations/README.md +129 -0
- athf/data/integrations/quickstart/splunk.md +162 -0
- athf/data/knowledge/hunting-knowledge.md +2375 -0
- athf/data/prompts/README.md +172 -0
- athf/data/prompts/ai-workflow.md +581 -0
- athf/data/prompts/basic-prompts.md +316 -0
- athf/data/templates/HUNT_LOCK.md +228 -0
- agentic_threat_hunting_framework-0.2.2.dist-info/RECORD +0 -23
- {agentic_threat_hunting_framework-0.2.2.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/WHEEL +0 -0
- {agentic_threat_hunting_framework-0.2.2.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/entry_points.txt +0 -0
- {agentic_threat_hunting_framework-0.2.2.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/licenses/LICENSE +0 -0
- {agentic_threat_hunting_framework-0.2.2.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# Basic Hunt Prompts
|
|
2
|
+
|
|
3
|
+
**Level:** 0-1 (Manual/Documented)
|
|
4
|
+
**Purpose:** Copy-paste prompts for ChatGPT, Claude, or other AI assistants
|
|
5
|
+
|
|
6
|
+
Use these prompts when you're working outside of an AI-enabled IDE and need quick assistance with hypothesis generation, query building, or documentation.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Section 1: Generate Hypothesis
|
|
11
|
+
|
|
12
|
+
Use this when you have context (CTI, alerts, anomalies) but need help forming a testable hypothesis.
|
|
13
|
+
|
|
14
|
+
### Prompt Template
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
You are a threat hunting expert helping generate behavior-based hunt hypotheses.
|
|
18
|
+
|
|
19
|
+
CONTEXT:
|
|
20
|
+
[Paste your context here - CTI snippet, alert, baseline drift, or gap]
|
|
21
|
+
|
|
22
|
+
RULES:
|
|
23
|
+
1. Generate 1-3 tightly scoped hypotheses
|
|
24
|
+
2. Each hypothesis must follow this pattern: "Adversaries use [behavior] to [goal] on [target]"
|
|
25
|
+
3. Focus on observable behaviors in data, not indicators
|
|
26
|
+
4. Include relevant ATT&CK technique (T####)
|
|
27
|
+
5. Keep hypotheses specific and testable
|
|
28
|
+
|
|
29
|
+
OUTPUT FORMAT:
|
|
30
|
+
For each hypothesis provide:
|
|
31
|
+
- Hypothesis statement
|
|
32
|
+
- ATT&CK Technique
|
|
33
|
+
- Tactic
|
|
34
|
+
- Data sources needed (e.g., "Windows Event Logs, Sysmon")
|
|
35
|
+
- Why this is worth hunting now
|
|
36
|
+
|
|
37
|
+
EXAMPLE OUTPUT:
|
|
38
|
+
Hypothesis: "Adversaries use base64-encoded PowerShell commands to establish persistence on Windows servers"
|
|
39
|
+
ATT&CK: T1059.001 (PowerShell)
|
|
40
|
+
Tactic: TA0003 (Persistence)
|
|
41
|
+
Data Needed: Sysmon Event ID 1, PowerShell logs
|
|
42
|
+
Why Now: Recent CTI shows APT29 using this technique; baseline shows low historical usage on servers
|
|
43
|
+
|
|
44
|
+
Generate hypothesis now:
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Tips
|
|
48
|
+
|
|
49
|
+
- **Be specific with context** - More details = better hypotheses
|
|
50
|
+
- **Ask for alternatives** - "Give me 3 different approaches"
|
|
51
|
+
- **Iterate** - Refine based on what data you actually have
|
|
52
|
+
- **Test for specificity** - Can you write a query from this hypothesis?
|
|
53
|
+
|
|
54
|
+
### Refining Hypotheses
|
|
55
|
+
|
|
56
|
+
If too broad:
|
|
57
|
+
|
|
58
|
+
- Add "on [specific target]" (e.g., "on domain controllers")
|
|
59
|
+
- Add time constraints (e.g., "during business hours")
|
|
60
|
+
- Add environmental context (e.g., "in production network")
|
|
61
|
+
|
|
62
|
+
If too narrow:
|
|
63
|
+
|
|
64
|
+
- Remove overly specific indicators
|
|
65
|
+
- Focus on behavior pattern, not single event
|
|
66
|
+
- Generalize target or timeframe
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Section 2: Build Query
|
|
71
|
+
|
|
72
|
+
Use this when you have a hypothesis and need help drafting a safe, bounded query.
|
|
73
|
+
|
|
74
|
+
### Prompt Template
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
You are a threat hunting query expert. Help me write a safe, bounded query to test a hunt hypothesis.
|
|
78
|
+
|
|
79
|
+
HYPOTHESIS:
|
|
80
|
+
[Your hypothesis here]
|
|
81
|
+
|
|
82
|
+
PLATFORM: [Splunk / KQL (Sentinel/Defender) / Elastic]
|
|
83
|
+
|
|
84
|
+
DATA AVAILABLE:
|
|
85
|
+
- Index/Table: [name]
|
|
86
|
+
- Sourcetype/DataSource: [name]
|
|
87
|
+
- Key fields: [list]
|
|
88
|
+
|
|
89
|
+
CONSTRAINTS:
|
|
90
|
+
1. Time range: earliest=-24h latest=now (adjust as needed)
|
|
91
|
+
2. Result cap: head 1000 (or | take 1000 for KQL)
|
|
92
|
+
3. Use tstats (Splunk) or summarize (KQL) when possible for performance
|
|
93
|
+
4. Include metadata comments with hunt ID and ATT&CK technique
|
|
94
|
+
5. Return only essential fields
|
|
95
|
+
6. Add eval/extend to tag results with hunt_id and attack_technique
|
|
96
|
+
|
|
97
|
+
OUTPUT FORMAT:
|
|
98
|
+
Provide:
|
|
99
|
+
1. The complete query
|
|
100
|
+
2. Brief explanation of what it does
|
|
101
|
+
3. Expected runtime estimate
|
|
102
|
+
4. Suggestions for tuning if results are too noisy
|
|
103
|
+
|
|
104
|
+
Generate query now:
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Query Templates
|
|
108
|
+
|
|
109
|
+
**Splunk SPL:**
|
|
110
|
+
|
|
111
|
+
```spl
|
|
112
|
+
/* H-#### | ATT&CK: T#### | Purpose: [description]
|
|
113
|
+
Earliest: -24h | Latest: now | Cap: 1000 | Owner: [name] */
|
|
114
|
+
|
|
115
|
+
| tstats count from datamodel=YourDataModel where
|
|
116
|
+
[your conditions]
|
|
117
|
+
by _time, host, [key_fields] span=5m
|
|
118
|
+
| head 1000
|
|
119
|
+
| eval hunt_id="H-####", attack_technique="T####"
|
|
120
|
+
| fields _time, host, [relevant_fields], hunt_id, attack_technique
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**KQL:**
|
|
124
|
+
|
|
125
|
+
```kql
|
|
126
|
+
// H-#### | ATT&CK: T#### | Purpose: [description]
|
|
127
|
+
// TimeRange: ago(24h) | Cap: 1000 | Owner: [name]
|
|
128
|
+
|
|
129
|
+
YourTable
|
|
130
|
+
| where TimeGenerated >= ago(24h)
|
|
131
|
+
| where [your conditions]
|
|
132
|
+
| summarize Count=count() by bin(TimeGenerated, 5m), Computer, [key_fields]
|
|
133
|
+
| take 1000
|
|
134
|
+
| extend HuntId="H-####", AttackTechnique="T####"
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Query Best Practices
|
|
138
|
+
|
|
139
|
+
**Performance:**
|
|
140
|
+
|
|
141
|
+
- Use data models (Splunk) or summarize (KQL) when possible
|
|
142
|
+
- Filter early - most restrictive conditions first
|
|
143
|
+
- Limit fields - only return what you need
|
|
144
|
+
- Set sensible time ranges - start with 24h, expand if needed
|
|
145
|
+
|
|
146
|
+
**Safety:**
|
|
147
|
+
|
|
148
|
+
- Always bound time - never open-ended searches
|
|
149
|
+
- Always cap results - protect your SIEM
|
|
150
|
+
- Test on small timeframes first - 1 hour before 24 hours
|
|
151
|
+
- Use lookups for enrichment - don't join large datasets inline
|
|
152
|
+
|
|
153
|
+
**Signal Quality:**
|
|
154
|
+
|
|
155
|
+
- Filter known good - baseline automation, admin tools
|
|
156
|
+
- Add context - enrich with asset inventory, user roles
|
|
157
|
+
- Look for anomalies - rare processes, unusual times, unexpected hosts
|
|
158
|
+
- Use stats wisely - count, distinct count, rare events
|
|
159
|
+
|
|
160
|
+
### Troubleshooting
|
|
161
|
+
|
|
162
|
+
**Too many results?**
|
|
163
|
+
|
|
164
|
+
- Add more specific filters
|
|
165
|
+
- Shorten time range
|
|
166
|
+
- Filter out known benign activity
|
|
167
|
+
- Use rare() or unusual patterns
|
|
168
|
+
|
|
169
|
+
**Too few results?**
|
|
170
|
+
|
|
171
|
+
- Broaden conditions
|
|
172
|
+
- Check field names and values
|
|
173
|
+
- Verify data is actually indexed
|
|
174
|
+
- Expand time range
|
|
175
|
+
|
|
176
|
+
**Query too slow?**
|
|
177
|
+
|
|
178
|
+
- Use data models/accelerated searches
|
|
179
|
+
- Reduce time range
|
|
180
|
+
- Remove expensive operations (regex, complex joins)
|
|
181
|
+
- Add index= constraints
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## Section 3: Document Results
|
|
186
|
+
|
|
187
|
+
Use this after executing a hunt to help write concise findings in LOCK format.
|
|
188
|
+
|
|
189
|
+
### Prompt Template
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
You are a threat hunting analyst helping document hunt results following the LOCK pattern.
|
|
193
|
+
|
|
194
|
+
HYPOTHESIS:
|
|
195
|
+
[Your hypothesis]
|
|
196
|
+
|
|
197
|
+
QUERY EXECUTED:
|
|
198
|
+
[Paste query]
|
|
199
|
+
|
|
200
|
+
RESULTS SUMMARY:
|
|
201
|
+
- Time range: [earliest to latest]
|
|
202
|
+
- Rows examined: [count]
|
|
203
|
+
- Rows returned: [count]
|
|
204
|
+
- Runtime: [seconds]
|
|
205
|
+
- Key findings: [brief description of what you found]
|
|
206
|
+
|
|
207
|
+
RAW OBSERVATIONS:
|
|
208
|
+
[Paste sample results or describe what you saw]
|
|
209
|
+
|
|
210
|
+
TASK:
|
|
211
|
+
Write a concise summary for the KEEP section of my hunt file.
|
|
212
|
+
Focus on:
|
|
213
|
+
- What we found (2-4 sentences)
|
|
214
|
+
- Decision (accept/reject/needs_changes) with reason
|
|
215
|
+
- Next steps (one concrete action)
|
|
216
|
+
- Lessons learned (one key takeaway)
|
|
217
|
+
|
|
218
|
+
Keep it to 5-8 sentences total.
|
|
219
|
+
|
|
220
|
+
Generate summary now:
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### What Makes Good Documentation
|
|
224
|
+
|
|
225
|
+
**Be Concise:**
|
|
226
|
+
|
|
227
|
+
- 5-8 sentences total for findings
|
|
228
|
+
- 3 bullet points max per section
|
|
229
|
+
- Focus on signal, not every detail
|
|
230
|
+
|
|
231
|
+
**Be Honest:**
|
|
232
|
+
|
|
233
|
+
- Accept = Found useful signal or suspicious activity
|
|
234
|
+
- Reject = Benign, false positive, or baseline noise
|
|
235
|
+
- Needs Changes = Interesting but query needs refinement
|
|
236
|
+
|
|
237
|
+
Don't be afraid to reject! Useful negatives teach us what's normal.
|
|
238
|
+
|
|
239
|
+
**Be Specific:**
|
|
240
|
+
|
|
241
|
+
- ❌ "Found some suspicious stuff, need to investigate"
|
|
242
|
+
- ✅ "Found 3 hosts with encoded PowerShell outside business hours; 2 match known deployment patterns, 1 requires IR escalation"
|
|
243
|
+
|
|
244
|
+
**Capture Lessons:**
|
|
245
|
+
This is the most important part - it's what makes the system smarter.
|
|
246
|
+
|
|
247
|
+
Good lessons:
|
|
248
|
+
|
|
249
|
+
- "Baseline automation reduced signal-to-noise by 80%"
|
|
250
|
+
- "Time-of-day filtering eliminated weekend maintenance jobs"
|
|
251
|
+
- "Parent process context critical for distinguishing admin vs adversary"
|
|
252
|
+
|
|
253
|
+
Avoid vague lessons:
|
|
254
|
+
|
|
255
|
+
- "Queries should be better"
|
|
256
|
+
- "Need more data"
|
|
257
|
+
- "This was hard"
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Usage Notes
|
|
262
|
+
|
|
263
|
+
### Workflow
|
|
264
|
+
|
|
265
|
+
1. **Generate Hypothesis** - Use Section 1 with your context
|
|
266
|
+
2. **Build Query** - Use Section 2 with your hypothesis
|
|
267
|
+
3. **Execute Hunt** - Run query in your SIEM (test small timeframes first!)
|
|
268
|
+
4. **Document Results** - Use Section 3 to capture findings
|
|
269
|
+
|
|
270
|
+
### Safety Reminders
|
|
271
|
+
|
|
272
|
+
- **Always review** AI-generated hypotheses for feasibility
|
|
273
|
+
- **Always test** AI-generated queries on small timeframes first
|
|
274
|
+
- **Always validate** that queries are safe and bounded
|
|
275
|
+
- **Use your judgment** - You know your environment better than AI
|
|
276
|
+
|
|
277
|
+
### Platform-Specific Tips
|
|
278
|
+
|
|
279
|
+
**Splunk:**
|
|
280
|
+
|
|
281
|
+
- Mention "Splunk SPL" in your prompt
|
|
282
|
+
- Specify data models when available
|
|
283
|
+
- AI knows common Splunk patterns
|
|
284
|
+
|
|
285
|
+
**KQL (Sentinel/Defender):**
|
|
286
|
+
|
|
287
|
+
- Mention "KQL for Sentinel" or "KQL for Defender"
|
|
288
|
+
- Specify table names (SecurityEvent, DeviceProcessEvents, etc.)
|
|
289
|
+
- AI understands Sentinel-specific syntax
|
|
290
|
+
|
|
291
|
+
**Elastic:**
|
|
292
|
+
|
|
293
|
+
- Mention "Elastic EQL" or "Lucene query"
|
|
294
|
+
- Specify index patterns
|
|
295
|
+
- Note which Elastic stack version
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Next Steps
|
|
300
|
+
|
|
301
|
+
Once you're comfortable with these basic prompts:
|
|
302
|
+
|
|
303
|
+
1. **Build your hunt repository** - Document hunts using [templates/HUNT_LOCK.md](../templates/HUNT_LOCK.md)
|
|
304
|
+
2. **Progress to Level 2** - Use [ai-workflow.md](ai-workflow.md) for AI tools with repository access
|
|
305
|
+
3. **See real examples** - Review [H-0001.md](../hunts/H-0001.md) and [H-0002.md](../hunts/H-0002.md)
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## Customizing for Your Environment
|
|
310
|
+
|
|
311
|
+
Feel free to modify these prompts:
|
|
312
|
+
|
|
313
|
+
- Add your organization's specific data sources
|
|
314
|
+
- Include your ATT&CK coverage gaps
|
|
315
|
+
- Reference your baseline automation
|
|
316
|
+
- Add your threat model priorities
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
---
|
|
2
|
+
hunt_id: H-XXXX
|
|
3
|
+
title: [Hunt Title]
|
|
4
|
+
status: planning # Options: planning, in-progress, completed
|
|
5
|
+
date: YYYY-MM-DD
|
|
6
|
+
hunter: [Your Name]
|
|
7
|
+
platform: [Windows, macOS, Linux, Cloud, Network] # Array - can include multiple platforms
|
|
8
|
+
tactics: [initial-access, persistence, privilege-escalation, defense-evasion, credential-access, discovery, lateral-movement, collection, command-and-control, exfiltration, impact]
|
|
9
|
+
techniques: [T1003.001, T1059.001] # MITRE ATT&CK technique IDs
|
|
10
|
+
data_sources: [Splunk, ClickHouse, Sentinel, etc.] # SIEM/log platforms used
|
|
11
|
+
related_hunts: [] # Hunt IDs that relate to this hunt (e.g., [H-0001, H-0005])
|
|
12
|
+
findings_count: 0 # Total findings discovered (optional - can update post-execution)
|
|
13
|
+
true_positives: 0 # Count of confirmed malicious activity (optional)
|
|
14
|
+
false_positives: 0 # Count of benign activity flagged (optional)
|
|
15
|
+
customer_deliverables: [] # For managed service providers tracking client reports (optional)
|
|
16
|
+
tags: [supply-chain, credential-theft, living-off-the-land] # Freeform tags for categorization
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
# H-XXXX: [Hunt Title]
|
|
20
|
+
|
|
21
|
+
> **Note:** YAML frontmatter above enables AI filtering and automation (Level 2+). It's optional at Level 0-1, recommended at Level 2+, required at Level 3+. The markdown metadata section below provides human-readable context.
|
|
22
|
+
|
|
23
|
+
**Hunt Metadata**
|
|
24
|
+
|
|
25
|
+
- **Date:** YYYY-MM-DD
|
|
26
|
+
- **Hunter:** [Your Name]
|
|
27
|
+
- **Status:** [Planning|In Progress|Completed]
|
|
28
|
+
- **MITRE ATT&CK:** [T####.### - Technique Name]
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## LEARN: Prepare the Hunt
|
|
33
|
+
|
|
34
|
+
### Hypothesis Statement
|
|
35
|
+
|
|
36
|
+
[Clear statement of what you're hunting for and why. Example: "Detect credential dumping attempts via mimikatz on corporate Windows servers based on recent APT29 activity patterns."]
|
|
37
|
+
|
|
38
|
+
### ABLE Scoping
|
|
39
|
+
|
|
40
|
+
Define your hunt scope using the ABLE framework:
|
|
41
|
+
|
|
42
|
+
| **Field** | **Your Input** |
|
|
43
|
+
|-------------|----------------|
|
|
44
|
+
| **Actor** *(Optional)* | [Threat actor or "N/A" - Focus on behavior first unless actor context adds value] |
|
|
45
|
+
| **Behavior** | [Describe the actions, TTPs, methods, or tools involved] |
|
|
46
|
+
| **Location** | [Where: endpoint, network segment, cloud environment, etc.] |
|
|
47
|
+
| **Evidence** | **Source:** [Log source]<br>**Key Fields:** [field1, field2, field3]<br>**Example:** [What malicious activity looks like]<br><br>**Source:** [Additional source]<br>**Key Fields:** [field1, field2, field3]<br>**Example:** [What malicious activity looks like] |
|
|
48
|
+
|
|
49
|
+
**ABLE Example:**
|
|
50
|
+
|
|
51
|
+
| **Field** | **Example** |
|
|
52
|
+
|-----------|-------------|
|
|
53
|
+
| **Actor** | `APT29 (Cozy Bear)` |
|
|
54
|
+
| **Behavior** | `Credential dumping via mimikatz.exe (T1003)` |
|
|
55
|
+
| **Location** | `Corporate Windows Servers` |
|
|
56
|
+
| **Evidence** | **Source:** Sysmon Event ID 1 (Process Creation)<br>**Key Fields:** process_name, command_line, parent_process, user, hash<br>**Example:** Execution of mimikatz.exe with "privilege::debug sekurlsa::logonpasswords"<br><br>**Source:** Windows Security Events 4624/4625<br>**Key Fields:** user, source_ip, event_id, timestamp<br>**Example:** Successful logon followed by high-privilege process launches |
|
|
57
|
+
|
|
58
|
+
### Threat Intel & Research
|
|
59
|
+
|
|
60
|
+
- **MITRE ATT&CK Techniques:**
|
|
61
|
+
- `T#### - Tactic Name`
|
|
62
|
+
- `T####.### - Technique Name`
|
|
63
|
+
- **CTI Sources & References:**
|
|
64
|
+
- [Link to threat report, blog, or intel source]
|
|
65
|
+
- [Additional reference]
|
|
66
|
+
- **Historical Context:**
|
|
67
|
+
- Has this been observed before in your environment?
|
|
68
|
+
- Are there existing detections or mitigations?
|
|
69
|
+
- What makes this hunt relevant now?
|
|
70
|
+
|
|
71
|
+
### Related Tickets
|
|
72
|
+
|
|
73
|
+
| **Team** | **Ticket/Details** |
|
|
74
|
+
|----------|-------------------|
|
|
75
|
+
| **SOC/IR** | [Incident ticket or "N/A"] |
|
|
76
|
+
| **Threat Intel** | [TI ticket or "N/A"] |
|
|
77
|
+
| **Detection Engineering** | [Detection ticket or "N/A"] |
|
|
78
|
+
| **Other** | [Related context or "N/A"] |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## OBSERVE: Expected Behaviors
|
|
83
|
+
|
|
84
|
+
### What Normal Looks Like
|
|
85
|
+
|
|
86
|
+
[Describe legitimate activity that might trigger false positives]
|
|
87
|
+
|
|
88
|
+
- [Example: System administrators running privileged commands]
|
|
89
|
+
- [Example: Automated maintenance scripts]
|
|
90
|
+
|
|
91
|
+
### What Suspicious Looks Like
|
|
92
|
+
|
|
93
|
+
[Describe the anomalous behavior you're hunting for]
|
|
94
|
+
|
|
95
|
+
- [Example: Mimikatz execution outside maintenance windows]
|
|
96
|
+
- [Example: Credential access from non-admin users]
|
|
97
|
+
|
|
98
|
+
### Expected Observables
|
|
99
|
+
|
|
100
|
+
- **Processes:** [process_name, command_line patterns]
|
|
101
|
+
- **Network:** [connections, destinations, protocols]
|
|
102
|
+
- **Files:** [paths, names, hashes]
|
|
103
|
+
- **Registry:** [keys, values modified]
|
|
104
|
+
- **Authentication:** [logon types, privilege escalations]
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## CHECK: Execute & Analyze
|
|
109
|
+
|
|
110
|
+
### Data Source Information
|
|
111
|
+
|
|
112
|
+
- **Index/Data Source:** [e.g., index=windows, Sysmon logs, CloudTrail]
|
|
113
|
+
- **Time Range:** [Start datetime] to [End datetime]
|
|
114
|
+
- **Events Analyzed:** [Number or "TBD"]
|
|
115
|
+
- **Data Quality:** [Good|Fair|Poor - note any telemetry gaps]
|
|
116
|
+
|
|
117
|
+
### Hunting Queries
|
|
118
|
+
|
|
119
|
+
#### Initial Query
|
|
120
|
+
|
|
121
|
+
```[language: spl, kql, sigma, etc.]
|
|
122
|
+
[Your initial hunt query]
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Query Notes:**
|
|
126
|
+
|
|
127
|
+
- Did this return expected results?
|
|
128
|
+
- False positives encountered?
|
|
129
|
+
- Gaps identified?
|
|
130
|
+
|
|
131
|
+
#### Refined Query
|
|
132
|
+
|
|
133
|
+
```[language]
|
|
134
|
+
[Refined query after initial analysis]
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Refinement Rationale:**
|
|
138
|
+
|
|
139
|
+
- What changed and why?
|
|
140
|
+
- What improvements did this bring?
|
|
141
|
+
|
|
142
|
+
### Visualization & Analytics
|
|
143
|
+
|
|
144
|
+
- [Describe any time-series, heatmaps, or anomaly detection used]
|
|
145
|
+
- [Note patterns observed in visualizations]
|
|
146
|
+
- [Add screenshots to support findings]
|
|
147
|
+
|
|
148
|
+
### Query Performance
|
|
149
|
+
|
|
150
|
+
- **What Worked Well:** [Effective detection logic, good data sources]
|
|
151
|
+
- **What Didn't Work:** [Query issues, detection gaps, data limitations]
|
|
152
|
+
- **Iterations Made:** [Summary of query refinements]
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## KEEP: Findings & Response
|
|
157
|
+
|
|
158
|
+
### Executive Summary
|
|
159
|
+
|
|
160
|
+
[3-5 sentences summarizing the investigation. State whether hypothesis was proved/disproved and key findings.]
|
|
161
|
+
|
|
162
|
+
### Findings
|
|
163
|
+
|
|
164
|
+
| **Finding** | **Ticket** | **Description** |
|
|
165
|
+
|-------------|-----------|-----------------|
|
|
166
|
+
| [True Positive / False Positive / Suspicious] | [INC-####] | [Brief description of finding and impact] |
|
|
167
|
+
| [Finding type] | [Ticket] | [Description] |
|
|
168
|
+
| [Finding type] | [Ticket] | [Description] |
|
|
169
|
+
|
|
170
|
+
**True Positives:** [Count and summary]
|
|
171
|
+
**False Positives:** [Count and common patterns]
|
|
172
|
+
**Suspicious Events:** [Count requiring further investigation]
|
|
173
|
+
|
|
174
|
+
### Detection Logic
|
|
175
|
+
|
|
176
|
+
**Automation Opportunity:**
|
|
177
|
+
|
|
178
|
+
- Could this hunt become an automated detection?
|
|
179
|
+
- What thresholds or conditions would trigger alerts?
|
|
180
|
+
- Tuning considerations to reduce false positives?
|
|
181
|
+
|
|
182
|
+
**Proposed Detection:**
|
|
183
|
+
|
|
184
|
+
```[language]
|
|
185
|
+
[Draft detection rule if applicable]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Lessons Learned
|
|
189
|
+
|
|
190
|
+
**What Worked Well:**
|
|
191
|
+
|
|
192
|
+
- [Successful query strategies]
|
|
193
|
+
- [Effective data sources]
|
|
194
|
+
- [Useful analysis techniques]
|
|
195
|
+
|
|
196
|
+
**What Could Be Improved:**
|
|
197
|
+
|
|
198
|
+
- [Query refinements needed]
|
|
199
|
+
- [Data gaps to address]
|
|
200
|
+
- [Tooling or process improvements]
|
|
201
|
+
|
|
202
|
+
**Telemetry Gaps Identified:**
|
|
203
|
+
|
|
204
|
+
- [Missing log sources]
|
|
205
|
+
- [Insufficient field visibility]
|
|
206
|
+
- [Collection improvements needed]
|
|
207
|
+
|
|
208
|
+
### Follow-up Actions
|
|
209
|
+
|
|
210
|
+
- [ ] [Escalate true positives to incident response]
|
|
211
|
+
- [ ] [Create detection rule from hunt logic]
|
|
212
|
+
- [ ] [Update hypothesis with learnings]
|
|
213
|
+
- [ ] [Address telemetry gaps with engineering team]
|
|
214
|
+
- [ ] [Schedule recurring hunt execution]
|
|
215
|
+
- [ ] [Document findings in knowledge base]
|
|
216
|
+
- [ ] [Share insights with SOC/IR/TI teams]
|
|
217
|
+
|
|
218
|
+
### Follow-up Hunts
|
|
219
|
+
|
|
220
|
+
[New hunt ideas spawned from this investigation]
|
|
221
|
+
|
|
222
|
+
- H-XXXX: [New hunt based on findings]
|
|
223
|
+
- H-XXXX: [Pivot hunt to explore related TTPs]
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
**Hunt Completed:** [Date]
|
|
228
|
+
**Next Review:** [Date for recurring hunt or "N/A"]
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
agentic_threat_hunting_framework-0.2.2.dist-info/licenses/LICENSE,sha256=_KObErRfiKoolznt-DF0nJnr3U9Rdh7Z4Ba7G5qqckk,1071
|
|
2
|
-
athf/__init__.py,sha256=OrjZe8P97_BTEkscapnwSsqKSjwXNP9d8-HtGr19Ni0,241
|
|
3
|
-
athf/__version__.py,sha256=p9cAuZ-dTEMpo-qoeYkFo2166r8LvKpa5qHBZihGq3w,59
|
|
4
|
-
athf/cli.py,sha256=XLNRXEs9kHPH6utJ7_SnzLFcldbGAnACPMTe0xMOkhQ,4492
|
|
5
|
-
athf/commands/__init__.py,sha256=uDyr0bz-agpGO8fraXQl24wuQCxqbeCevZsJ2bDK29s,25
|
|
6
|
-
athf/commands/context.py,sha256=XpMtTf9Pq6NxMhawp6f1NYnTKYt1IuGx9CNDIY8K8Do,11956
|
|
7
|
-
athf/commands/env.py,sha256=AisRllJXbyCjK_2ii21qBBmCz9raxhBUemwM7BxqIYg,11859
|
|
8
|
-
athf/commands/hunt.py,sha256=2KORNWAqEvLY-Wc1q-a894g8kOpcqw_iJfnenKJeTDI,23019
|
|
9
|
-
athf/commands/init.py,sha256=L_29fvZF8SZ1BKh2D6NyDuacCC5JXOTezIxdBnnK88E,10941
|
|
10
|
-
athf/commands/investigate.py,sha256=mK_id5vjfN_ukqB_-fyia0FNa0pBmtn0Xv6CKHQI1Qo,24663
|
|
11
|
-
athf/commands/similar.py,sha256=ROoMs4NP1otCaXwM1XzpLWxmANknoeASlBT7zuMDqas,11793
|
|
12
|
-
athf/core/__init__.py,sha256=yG7C8ljx3UW4QZoYvDjUxsWHlbS8M-GLGB7Je7rRfqo,31
|
|
13
|
-
athf/core/attack_matrix.py,sha256=QZKKmxckQ6-U7lqVdGUJoj2jEAhP3Juvr3sqaNx2oTw,3238
|
|
14
|
-
athf/core/hunt_manager.py,sha256=6DC3wmreJ5IBiC7vi9xB9DP_WDXOetmGceFPTqjYVRU,11366
|
|
15
|
-
athf/core/hunt_parser.py,sha256=FUj0yyBIcZnaS9aItMImeBDhegQwpkewIwUMNXW_ZWU,5122
|
|
16
|
-
athf/core/investigation_parser.py,sha256=wbfjnq4gFgIc0a4bHIAnidVNPhbHDpIXWY1SGLk0Xls,6804
|
|
17
|
-
athf/core/template_engine.py,sha256=vNTVhlxIXZpxU7VmQyrqCSt6ORS0IVjAV54TOmUDMTE,5636
|
|
18
|
-
athf/utils/__init__.py,sha256=aEAPI1xnAsowOtc036cCb9ZOek5nrrfevu8PElhbNgk,30
|
|
19
|
-
agentic_threat_hunting_framework-0.2.2.dist-info/METADATA,sha256=zFr9-YmLEz0jqC0rmqEUmOmMhl-yMUr20U9IrqUrfcI,15472
|
|
20
|
-
agentic_threat_hunting_framework-0.2.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
21
|
-
agentic_threat_hunting_framework-0.2.2.dist-info/entry_points.txt,sha256=GopR2iTiBs-yNMWiUZ2DaFIFglXxWJx1XPjTa3ePtfE,39
|
|
22
|
-
agentic_threat_hunting_framework-0.2.2.dist-info/top_level.txt,sha256=Cxxg6SMLfawDJWBITsciRzq27XV8fiaAor23o9Byoes,5
|
|
23
|
-
agentic_threat_hunting_framework-0.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|