agentic-threat-hunting-framework 0.2.3__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.3.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/hunt.py +1 -3
- athf/commands/init.py +45 -0
- athf/commands/similar.py +2 -2
- 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.3.dist-info/RECORD +0 -23
- {agentic_threat_hunting_framework-0.2.3.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/WHEEL +0 -0
- {agentic_threat_hunting_framework-0.2.3.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/entry_points.txt +0 -0
- {agentic_threat_hunting_framework-0.2.3.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/licenses/LICENSE +0 -0
- {agentic_threat_hunting_framework-0.2.3.dist-info → agentic_threat_hunting_framework-0.2.4.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentic-threat-hunting-framework
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.4
|
|
4
4
|
Summary: Agentic Threat Hunting Framework - Memory and AI for threat hunters
|
|
5
5
|
Author-email: Sydney Marrone <athf@nebulock.io>
|
|
6
6
|
Maintainer-email: Sydney Marrone <athf@nebulock.io>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
agentic_threat_hunting_framework-0.2.4.dist-info/licenses/LICENSE,sha256=_KObErRfiKoolznt-DF0nJnr3U9Rdh7Z4Ba7G5qqckk,1071
|
|
2
|
+
athf/__init__.py,sha256=OrjZe8P97_BTEkscapnwSsqKSjwXNP9d8-HtGr19Ni0,241
|
|
3
|
+
athf/__version__.py,sha256=Cl7hGHiamJWMCcDKQ8Lcm6Vlc50BZ6GasydpyAoWkg8,59
|
|
4
|
+
athf/cli.py,sha256=LSOazv6E_RChZFqoyMcdfDPH1hIJeZc1s95fssjDLZs,4515
|
|
5
|
+
athf/commands/__init__.py,sha256=uDyr0bz-agpGO8fraXQl24wuQCxqbeCevZsJ2bDK29s,25
|
|
6
|
+
athf/commands/context.py,sha256=WvOf0OuttAsEk_h4QDtdfqYI4CulDg2UCtq_5r5iJAA,12686
|
|
7
|
+
athf/commands/env.py,sha256=AisRllJXbyCjK_2ii21qBBmCz9raxhBUemwM7BxqIYg,11859
|
|
8
|
+
athf/commands/hunt.py,sha256=9ZEI11y8DUixUqw8-yR01K4hVz2JSJJokRwWk8tnNn4,22969
|
|
9
|
+
athf/commands/init.py,sha256=Qn0iETNyuQvM-ySqCeoDz-pPemeuzROX_karQF5yN_o,12685
|
|
10
|
+
athf/commands/investigate.py,sha256=mK_id5vjfN_ukqB_-fyia0FNa0pBmtn0Xv6CKHQI1Qo,24663
|
|
11
|
+
athf/commands/similar.py,sha256=lniOkSOn--ZIztsfTZS-afioJpqJEJQjmqfxsDy6xZQ,11790
|
|
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=PFsg8Ecg94NCpuFZpApo82lyORkgK5IfOIih-7-XsmM,11580
|
|
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/data/__init__.py,sha256=eC5AiaYPQ7oYR3ktxTvRhUHVd_RB1zhQgcVPD3o-9Vw,364
|
|
19
|
+
athf/data/docs/CHANGELOG.md,sha256=1dAondeKsQnGOn9esy9oZ29uG_oGgRuHxmkcmGQ1Cwo,5950
|
|
20
|
+
athf/data/docs/CLI_REFERENCE.md,sha256=zqUp-tu8OAcqzpOwx3XvzEq7UV6woDraUOcWasZI0a8,43748
|
|
21
|
+
athf/data/docs/INSTALL.md,sha256=JOWxk6q2-rdpgCnWdSPb3-Cp8rX1y4nQm7ObKz2G0uM,13117
|
|
22
|
+
athf/data/docs/README.md,sha256=rp-XQZeqteXJz7M2qKX3sl6o0AVfhGmz8GcNNKAt8pM,1061
|
|
23
|
+
athf/data/docs/environment.md,sha256=K88NBWZM2bI1Jztd0ORa6AYaMgPVjVB-K2fJl8S5-g8,8306
|
|
24
|
+
athf/data/docs/getting-started.md,sha256=j4SAXe-Rm1RhYBDvWaNpV8XS0rc_mZ2Ew0yPCxE4_wQ,14156
|
|
25
|
+
athf/data/docs/level4-agentic-workflows.md,sha256=DX54qu8LbJysjDfQLGSEPSO_Q6BUACLpa-XCsR6xUp4,13439
|
|
26
|
+
athf/data/docs/lock-pattern.md,sha256=eICjNh5SAgIhkOYBDhHg1tgw4A29xgnRDWC9vH1wLEQ,4863
|
|
27
|
+
athf/data/docs/maturity-model.md,sha256=S2m8JSQDe9R5ROBWS4Gy0-sRF5I7mo-CI3cUnmNpxmk,16347
|
|
28
|
+
athf/data/docs/why-athf.md,sha256=rIoUb7iqdZKbuWNyRlGxhZrRkLx7gWAGS-kurEZDt04,2148
|
|
29
|
+
athf/data/hunts/FORMAT_GUIDELINES.md,sha256=lMyBekmOzhtO1olO1P-M0Gi_n5oY60k7qkRZE63sTgw,15010
|
|
30
|
+
athf/data/hunts/H-0001.md,sha256=rdUIpQ_uN8bx7XS1ED85rW5aRKxFOpMg0X7PANY7eCY,23220
|
|
31
|
+
athf/data/hunts/H-0002.md,sha256=yF5ZEfl7NAJJMjuVf9ZitafwDfWMTzyU5fgkrAQ4U6I,20405
|
|
32
|
+
athf/data/hunts/H-0003.md,sha256=w0iAaplcM0kFWRmVhQsX53LVIWaRDJsB3TWalI1zz_o,27436
|
|
33
|
+
athf/data/hunts/README.md,sha256=WMj871_NTsMjYBriQ3xezOBktUs3KT7MTKVJSo0iwXA,5812
|
|
34
|
+
athf/data/integrations/MCP_CATALOG.md,sha256=hJ_cyHijEjWdkFiX7WEyBtJqlLtKuRzZCKlqrhbSLrU,1782
|
|
35
|
+
athf/data/integrations/README.md,sha256=jkiK0u5pNjodmFuNKKMR0G40Soq8pqBRVsaP89wP70w,4336
|
|
36
|
+
athf/data/integrations/quickstart/splunk.md,sha256=6REsD05zQOPcT6ezxyeysOtTRsSp7JO6vK_epd7GCJU,4897
|
|
37
|
+
athf/data/knowledge/hunting-knowledge.md,sha256=djublWCzFexl5ssssL6KfMm4RnUI0ANoWMY9zLSQDd0,91107
|
|
38
|
+
athf/data/prompts/README.md,sha256=5Jtz38Csh-rWjgX_zN46e3DxJoOfeeVQLDcIpcVExJ0,5029
|
|
39
|
+
athf/data/prompts/ai-workflow.md,sha256=rZtOcGuAEi35qx7182TwHJEORdz1-RxkZMBVkg611Rs,17087
|
|
40
|
+
athf/data/prompts/basic-prompts.md,sha256=2bunpO35RoBdJWYthXVi40RNl2UWrfwOaFthBLHF5sU,8463
|
|
41
|
+
athf/data/templates/HUNT_LOCK.md,sha256=zXxHaKMWbRDLewLTegYJMbXRM72s9gFFvjdwFfGNeJE,7386
|
|
42
|
+
athf/utils/__init__.py,sha256=aEAPI1xnAsowOtc036cCb9ZOek5nrrfevu8PElhbNgk,30
|
|
43
|
+
agentic_threat_hunting_framework-0.2.4.dist-info/METADATA,sha256=gcqEWImt2gBOrH2q5VUhafR5OiG_xIoCdpfbtEy1mt0,15472
|
|
44
|
+
agentic_threat_hunting_framework-0.2.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
45
|
+
agentic_threat_hunting_framework-0.2.4.dist-info/entry_points.txt,sha256=GopR2iTiBs-yNMWiUZ2DaFIFglXxWJx1XPjTa3ePtfE,39
|
|
46
|
+
agentic_threat_hunting_framework-0.2.4.dist-info/top_level.txt,sha256=Cxxg6SMLfawDJWBITsciRzq27XV8fiaAor23o9Byoes,5
|
|
47
|
+
agentic_threat_hunting_framework-0.2.4.dist-info/RECORD,,
|
athf/__version__.py
CHANGED
athf/cli.py
CHANGED
|
@@ -40,7 +40,7 @@ Getting Started:
|
|
|
40
40
|
Documentation:
|
|
41
41
|
• Full docs: https://github.com/Nebulock-Inc/agentic-threat-hunting-framework
|
|
42
42
|
• CLI reference: docs/CLI_REFERENCE.md
|
|
43
|
-
• AI workflows: prompts/ai-workflow.md
|
|
43
|
+
• AI workflows: Run 'athf init' to get prompts/ai-workflow.md
|
|
44
44
|
|
|
45
45
|
\b
|
|
46
46
|
Need help? Run 'athf COMMAND --help' for command-specific help.
|
athf/commands/hunt.py
CHANGED
|
@@ -448,9 +448,7 @@ def stats() -> None:
|
|
|
448
448
|
# Easter egg: First True Positive milestone
|
|
449
449
|
if stats["true_positives"] == 1 and stats["completed_hunts"] > 0:
|
|
450
450
|
console.print("[bold yellow]🎯 First True Positive Detected![/bold yellow]\n")
|
|
451
|
-
console.print("[italic]Every expert threat hunter started here.")
|
|
452
|
-
console.print("This confirms your hypothesis was testable, your data was sufficient,")
|
|
453
|
-
console.print("and your analytical instincts were sound. Document what worked.[/italic]\n")
|
|
451
|
+
console.print("[italic]Every expert threat hunter started here. This confirms your hypothesis was testable, your data was sufficient, and your analytical instincts were sound. Document what worked.[/italic]\n")
|
|
454
452
|
|
|
455
453
|
|
|
456
454
|
@hunt.command()
|
athf/commands/init.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""Initialize ATHF directory structure."""
|
|
2
2
|
|
|
3
|
+
import shutil
|
|
3
4
|
from pathlib import Path
|
|
4
5
|
|
|
5
6
|
import click
|
|
@@ -7,6 +8,8 @@ import yaml
|
|
|
7
8
|
from rich.console import Console
|
|
8
9
|
from rich.prompt import Confirm, Prompt
|
|
9
10
|
|
|
11
|
+
from athf.data import get_data_path
|
|
12
|
+
|
|
10
13
|
console = Console()
|
|
11
14
|
|
|
12
15
|
|
|
@@ -107,6 +110,9 @@ def init(path: str, non_interactive: bool) -> None:
|
|
|
107
110
|
_create_hunt_template(templates_path / "HUNT_LOCK.md")
|
|
108
111
|
console.print(" ✓ Created [cyan]templates/HUNT_LOCK.md[/cyan]")
|
|
109
112
|
|
|
113
|
+
# Copy reference files from package data
|
|
114
|
+
_copy_reference_files(base_path)
|
|
115
|
+
|
|
110
116
|
console.print("\n[bold green]✅ ATHF initialized successfully![/bold green]")
|
|
111
117
|
console.print("\n[bold]Next steps:[/bold]")
|
|
112
118
|
console.print(" 1. Customize [cyan]AGENTS.md[/cyan] with your environment details")
|
|
@@ -409,3 +415,42 @@ tags: []
|
|
|
409
415
|
|
|
410
416
|
with open(path, "w", encoding="utf-8") as f:
|
|
411
417
|
f.write(content)
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
def _copy_reference_files(base_path: Path) -> None:
|
|
421
|
+
"""Copy reference files from package data to workspace.
|
|
422
|
+
|
|
423
|
+
Copies knowledge base, prompts, example hunts, docs, and integrations
|
|
424
|
+
from the installed package to the user's workspace.
|
|
425
|
+
"""
|
|
426
|
+
try:
|
|
427
|
+
data_path = get_data_path()
|
|
428
|
+
except Exception:
|
|
429
|
+
# Package data not available (e.g., development mode)
|
|
430
|
+
console.print(" [dim]Skipping reference file copy (package data not available)[/dim]")
|
|
431
|
+
return
|
|
432
|
+
|
|
433
|
+
# Directories to copy from package to workspace
|
|
434
|
+
copy_dirs = ["knowledge", "prompts", "hunts", "docs", "integrations"]
|
|
435
|
+
|
|
436
|
+
for dir_name in copy_dirs:
|
|
437
|
+
src_dir = data_path / dir_name
|
|
438
|
+
dst_dir = base_path / dir_name
|
|
439
|
+
|
|
440
|
+
if src_dir.exists() and src_dir.is_dir():
|
|
441
|
+
try:
|
|
442
|
+
# Copy files, don't overwrite existing
|
|
443
|
+
for src_file in src_dir.rglob("*"):
|
|
444
|
+
if src_file.is_file():
|
|
445
|
+
# Calculate relative path and destination
|
|
446
|
+
rel_path = src_file.relative_to(src_dir)
|
|
447
|
+
dst_file = dst_dir / rel_path
|
|
448
|
+
|
|
449
|
+
# Only copy if destination doesn't exist
|
|
450
|
+
if not dst_file.exists():
|
|
451
|
+
dst_file.parent.mkdir(parents=True, exist_ok=True)
|
|
452
|
+
shutil.copy2(src_file, dst_file)
|
|
453
|
+
|
|
454
|
+
console.print(f" ✓ Copied reference files to [cyan]{dir_name}/[/cyan]")
|
|
455
|
+
except Exception as e:
|
|
456
|
+
console.print(f" [yellow]Warning: Could not copy {dir_name}/: {e}[/yellow]")
|
athf/commands/similar.py
CHANGED
|
@@ -144,7 +144,7 @@ def _find_similar_hunts(
|
|
|
144
144
|
hunt_files = list(hunts_dir.glob("H-*.md"))
|
|
145
145
|
|
|
146
146
|
if not hunt_files:
|
|
147
|
-
|
|
147
|
+
# Don't print warning - let the output format handle empty results
|
|
148
148
|
return []
|
|
149
149
|
|
|
150
150
|
# Extract hunt content and metadata
|
|
@@ -172,7 +172,7 @@ def _find_similar_hunts(
|
|
|
172
172
|
)
|
|
173
173
|
|
|
174
174
|
if not hunt_data:
|
|
175
|
-
|
|
175
|
+
# Don't print warning - let the output format handle empty results
|
|
176
176
|
return []
|
|
177
177
|
|
|
178
178
|
# Build TF-IDF vectors using searchable text (weighted semantic sections)
|
athf/data/__init__.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""ATHF reference data and templates."""
|
|
2
|
+
|
|
3
|
+
from importlib.resources import files
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def get_data_path() -> Path:
|
|
8
|
+
"""Get the path to ATHF data directory.
|
|
9
|
+
|
|
10
|
+
Returns:
|
|
11
|
+
Path to the athf/data directory containing templates, knowledge,
|
|
12
|
+
prompts, hunts, docs, and integrations.
|
|
13
|
+
"""
|
|
14
|
+
return Path(str(files("athf.data")))
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the Agentic Threat Hunting Framework (ATHF) will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- None
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
- None
|
|
15
|
+
|
|
16
|
+
### Deprecated
|
|
17
|
+
- None
|
|
18
|
+
|
|
19
|
+
### Removed
|
|
20
|
+
- None
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
- None
|
|
24
|
+
|
|
25
|
+
### Security
|
|
26
|
+
- None
|
|
27
|
+
|
|
28
|
+
## [0.2.2] - 2024-12-17
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- Type errors in `athf/core/attack_matrix.py` (added TypedDict for proper mypy checking)
|
|
32
|
+
- Python 3.8 compatibility: `list[str]` → `List[str]` in `athf/core/attack_matrix.py`
|
|
33
|
+
- Python 3.8 compatibility: `tuple[...]` → `Tuple[...]` in `athf/core/investigation_parser.py`
|
|
34
|
+
- Python 3.8 compatibility: `tuple[...]`, `list[str]` → `Tuple[...]`, `List[str]` in `athf/commands/investigate.py`
|
|
35
|
+
- Python 3.8 compatibility: `set[str]` → `Set[str]` in `athf/core/hunt_manager.py`
|
|
36
|
+
- Python 3.8 compatibility: `int | str` → `Union[int, str]` in `athf/commands/env.py`
|
|
37
|
+
- Windows UTF-8 encoding errors in `athf/commands/context.py` (3 instances) and `athf/commands/similar.py` (2 instances)
|
|
38
|
+
- Test assertion errors in `tests/commands/test_env.py` for env info and activate commands
|
|
39
|
+
- Mypy unused-ignore errors in `athf/commands/similar.py` (sklearn imports handled by --ignore-missing-imports flag)
|
|
40
|
+
- CI/CD pipeline errors blocking builds on Python 3.8-3.12 across all platforms
|
|
41
|
+
|
|
42
|
+
## [0.2.1] - 2024-12-17
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
- Type errors in `athf/core/attack_matrix.py` (added TypedDict for proper mypy checking)
|
|
46
|
+
- Python 3.8 compatibility: `list[str]` → `List[str]` in `athf/core/attack_matrix.py`
|
|
47
|
+
- Python 3.8 compatibility: `tuple[...]` → `Tuple[...]` in `athf/core/investigation_parser.py`
|
|
48
|
+
- Python 3.8 compatibility: `tuple[...]`, `list[str]` → `Tuple[...]`, `List[str]` in `athf/commands/investigate.py`
|
|
49
|
+
- Python 3.8 compatibility: `set[str]` → `Set[str]` in `athf/core/hunt_manager.py`
|
|
50
|
+
- Python 3.8 compatibility: `int | str` → `Union[int, str]` in `athf/commands/env.py`
|
|
51
|
+
- Windows UTF-8 encoding errors in `athf/commands/context.py` (3 instances) and `athf/commands/similar.py` (2 instances)
|
|
52
|
+
- Test assertion errors in `tests/commands/test_env.py` for env info and activate commands
|
|
53
|
+
- Mypy unused-ignore errors in `athf/commands/similar.py` (sklearn imports handled by --ignore-missing-imports flag)
|
|
54
|
+
- CI/CD pipeline errors blocking builds on Python 3.8-3.12 across all platforms
|
|
55
|
+
|
|
56
|
+
## [0.2.0] - 2024-12-17
|
|
57
|
+
|
|
58
|
+
### Added
|
|
59
|
+
- **CLI Commands**
|
|
60
|
+
- `athf context` - AI-optimized context loading (replaces ~5 Read operations, 75% token savings)
|
|
61
|
+
- `athf env` - Environment setup and management (setup, info, activate, clean)
|
|
62
|
+
- `athf investigate` - Investigation workflow for exploratory work (separate from hunt metrics)
|
|
63
|
+
- `athf similar` - Semantic search for similar hunts using scikit-learn embeddings
|
|
64
|
+
- **Core Modules**
|
|
65
|
+
- `athf/core/attack_matrix.py` - MITRE ATT&CK coverage tracking and analysis
|
|
66
|
+
- `athf/core/investigation_parser.py` - Parser for I-XXXX investigation files
|
|
67
|
+
- **Testing Infrastructure**
|
|
68
|
+
- Comprehensive test suite for all new commands (tests/commands/)
|
|
69
|
+
- Command-specific test modules (test_context.py, test_env.py, test_similar.py)
|
|
70
|
+
- Integration tests for multi-command workflows
|
|
71
|
+
- **Rich Content CLI Flags**
|
|
72
|
+
- `--hypothesis`, `--threat-context`, `--actor`, `--behavior`, `--location`, `--evidence`
|
|
73
|
+
- Enable fully-populated hunt files via single CLI command
|
|
74
|
+
- AI-friendly one-liner hunt creation without manual editing
|
|
75
|
+
|
|
76
|
+
### Changed
|
|
77
|
+
- Enhanced `athf hunt` command with investigation integration
|
|
78
|
+
- Updated CLI help system with improved command descriptions
|
|
79
|
+
- Improved context bundling for AI workflows (structured JSON/YAML output)
|
|
80
|
+
- Updated documentation to reflect new commands and workflows
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
- Python 3.8 compatibility issues
|
|
84
|
+
- Testing framework stability improvements
|
|
85
|
+
|
|
86
|
+
## [0.1.0] - 2024-12-10
|
|
87
|
+
|
|
88
|
+
### Added
|
|
89
|
+
- Initial ATHF framework documentation
|
|
90
|
+
- LOCK pattern (Learn, Observe, Check, Keep)
|
|
91
|
+
- 5-level maturity model
|
|
92
|
+
- USING_ATHF.md adoption guide
|
|
93
|
+
- INSTALL.md installation guide
|
|
94
|
+
- Example hunt implementations
|
|
95
|
+
- H-0001: macOS Data Collection via AppleScript Detection
|
|
96
|
+
- H-0002: Linux Crontab Persistence Detection
|
|
97
|
+
- H-0003: AWS Lambda Persistence Detection
|
|
98
|
+
- Templates
|
|
99
|
+
- HUNT_LOCK.md template
|
|
100
|
+
- Query templates for Splunk, KQL, Elastic
|
|
101
|
+
- Documentation
|
|
102
|
+
- README.md with visual enhancements
|
|
103
|
+
- SHOWCASE.md with real results
|
|
104
|
+
- docs/CLI_REFERENCE.md (planned for CLI implementation)
|
|
105
|
+
- Knowledge base
|
|
106
|
+
- hunting-knowledge.md expert hunting frameworks
|
|
107
|
+
- AGENTS.md AI assistant instructions
|
|
108
|
+
- environment.md template
|
|
109
|
+
- Integration guides
|
|
110
|
+
- MCP_CATALOG.md for tool integrations
|
|
111
|
+
- SIEM integration examples
|
|
112
|
+
- EDR integration examples
|
|
113
|
+
|
|
114
|
+
### Philosophy
|
|
115
|
+
- Framework-first approach: "Structure over software, adapt to your environment"
|
|
116
|
+
- Document-first methodology: Works with markdown, git, and AI assistants
|
|
117
|
+
- Optional tooling: CLI enhances but doesn't replace core workflow
|
|
118
|
+
- Progression-minded: Start simple, scale when complexity demands it
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Version History
|
|
123
|
+
|
|
124
|
+
**Legend:**
|
|
125
|
+
- `[Unreleased]` - Changes in development
|
|
126
|
+
- `[X.Y.Z]` - Released versions
|
|
127
|
+
|
|
128
|
+
**Version Format:**
|
|
129
|
+
- `X` - Major version (breaking changes)
|
|
130
|
+
- `Y` - Minor version (new features, backward compatible)
|
|
131
|
+
- `Z` - Patch version (bug fixes, backward compatible)
|
|
132
|
+
|
|
133
|
+
**Change Categories:**
|
|
134
|
+
- `Added` - New features
|
|
135
|
+
- `Changed` - Changes to existing functionality
|
|
136
|
+
- `Deprecated` - Soon-to-be removed features
|
|
137
|
+
- `Removed` - Removed features
|
|
138
|
+
- `Fixed` - Bug fixes
|
|
139
|
+
- `Security` - Security improvements
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Contribution Notes
|
|
144
|
+
|
|
145
|
+
ATHF is a framework to internalize, not a platform to extend. However, if you've adapted ATHF in interesting ways or have feedback, we'd love to hear about it in [GitHub Discussions](https://github.com/Nebulock-Inc/agentic-threat-hunting-framework/discussions).
|
|
146
|
+
|
|
147
|
+
For more on the philosophy, see [USING_ATHF.md](../../../USING_ATHF.md).
|