Yazedd/Huntforge

GitHub: Yazedd/Huntforge

HuntForge 将威胁情报 IOC 自动映射到 MITRE ATT&CK 技术并生成多 SIEM 狩猎查询,解决了从情报到查询手动转换耗时的问题。

Stars: 0 | Forks: 0

# HuntForge **AI 增强的威胁情报 → MITRE ATT&CK → 即用型搜寻查询。** HuntForge 接收最新的 IOC 订阅源,使用透明且可扩展的置信度加权映射表将其映射到 ATT&CK 技术,在 Splunk SPL / Microsoft Sentinel KQL / Elasticsearch ES|QL 中自动生成搜寻查询,并在其上层叠加了一个检索增强的“搜寻 Copilot”,它*仅*根据本次运行实际摄取的内容来回答问题——而不是模型的一般知识。 它的构建基于一个理念:威胁搜寻的缓慢部分通常不在于发现 IOC,而在于从*“这个 IP 是 Cobalt Strike C2”*到*“这是一个我现在就可以粘贴到 Splunk 中的 SPL 查询”*的手动转换。 HuntForge 自动化了该转换,并展示了其在每一步的工作过程。 ``` Feed (ThreatFox/URLhaus) │ ▼ Normalize IOC ──▶ Map to ATT&CK ──▶ Generate hunt queries ──▶ Push to Elastic/Kibana (schema.py) (attack_mapper) (Splunk/KQL/ES|QL) │ │ │ │ ▼ └─────────────────┴────────────────────┴──────────▶ HuntCopilot (RAG) "How do I hunt for X?" ``` ## 为什么选择它,而不是另一个“开箱即用”的 SOC 代码库 大多数公开的“威胁情报实验室”代码库要么是 带有仪表板的订阅源查看器,要么是 包含 Wazuh/ELK 但中间没有任何实际逻辑的 Docker Compose 文件。HuntForge 真正的工程面在于管道的中间部分:一个您可以审计和扩展的**置信度加权 ATT&CK 映射引擎**、**模板驱动的多 SIEM 查询生成**,以及一个**范围限定于其自身输出的 RAG 层**,因此它无法凭空捏造(幻觉)从未摄取过的情报。 ## 功能 - **与订阅源无关的摄取** — ThreatFox 和 URLhaus 摄取器将其标准化为严格的 `NormalizedIOC` schema。添加 MISP 或 OTX 摄取器意味着只需编写一个新模块,而无需触及下游的任何内容。 - **透明的 ATT&CK 映射** — `data/attack_mapping.json` 是一个普通、可编辑的表格(恶意软件家族 / 威胁类型 / 标签 → 技术,每项均带有置信度权重)。没有黑盒;可以从您自己的 CTI 阅读中扩充它。 - **多 SIEM 查询生成** — Jinja2 模板将相同的技术匹配渲染为 Splunk SPL、Sentinel/Defender KQL 和 Elasticsearch ES|QL,并根据 IOC 类型(IP / domain / URL / hash)正确分支。 - **HuntCopilot (RAG)** — 对本次运行的 IOC 和生成的查询进行 TF-IDF 检索,可选择通过 Anthropic API 合成为搜寻假设。在没有 API 密钥的情况下可完全离线工作(返回原始检索到的上下文,而非叙述性文本)。 - **Kibana 可视化** — 内置的 `docker-compose.yml` 会启动一个本地单节点 Elasticsearch + Kibana,因此丰富的 IOC 是实际可见的,而不仅仅是磁盘上的 JSON。 - **缺口跟踪** — 每次运行都会报告哪些 IOC 无法被确信地映射,因此扩展映射表是一项待办事项列表,而不是凭空猜测。 ## Web UI HuntForge 还配备了一个本地 Web 仪表板 — 位于相同管道之上的 FastAPI 后端,带有静态前端(无需构建步骤,无需 Node)。 ``` huntforge-web # 打开 http://localhost:8000 ```

HuntForge web UI mockup

Illustrative mockup — run huntforge-web to see the real thing.

- 顶部的 **管道步骤条** 跟踪 摄取 → 映射 → 生成 → 搜寻。 - **IOC 台账** — 每个摄取的指标都包含类型、家族、置信度及其匹配的 ATT&CK 技术标签。 - **ATT&CK 覆盖网格** — 标志性视图:按战术分组的技术,根据您当前的 IOC 命中每个技术的数量点亮。这是搜寻者提出的实际问题(“今天的情报覆盖了什么?”),以热力图而非表格滚动的形式回答。 - **查询台** — 带选项卡的 Splunk SPL / Sentinel KQL / Elastic ES|QL,每个查询只需单击一次即可复制到剪贴板。 - **HuntCopilot 抽屉** — 基于当前会话的情报提出问题;答案会引用它们来自哪个摄取的 IOC 或生成的查询。状态在每个会话的内存中(它是一个本地分析师工具,而不是多租户服务)— 刷新会重新摄取,而不是持久化保存。 ## 快速开始 ``` git clone https://github.com//huntforge.git cd huntforge python3 -m venv .venv && source .venv/bin/activate pip install -e ".[dev,copilot]" # 1. Ingest(如果无法访问 feed,则回退到内置的 sample data) huntforge ingest --source all -o data/run_iocs.json # 2. 映射到 MITRE ATT&CK huntforge map -i data/run_iocs.json -o data/run_enriched.json # 3. 生成 hunt queries huntforge generate-queries -i data/run_enriched.json --platform splunk -o data/run_queries.txt huntforge generate-queries -i data/run_enriched.json --platform kql huntforge generate-queries -i data/run_enriched.json --platform esql # 4. 基于本次运行的 intel 向 copilot 提问 export ANTHROPIC_API_KEY=sk-... # optional - omit for retrieved-context-only mode huntforge ask "How would I hunt for Cobalt Strike C2 in this dataset?" -i data/run_enriched.json # 5.(可选)在 Kibana 中进行 Visualize docker compose up -d huntforge push-elastic -i data/run_enriched.json # 打开 http://localhost:5601 ``` 请参阅 [`examples/demo_walkthrough.md`](examples/demo_walkthrough.md) 获取完整的注释运行说明,包括实际生成的查询输出。 ## 项目结构 ``` huntforge/ ├── src/huntforge/ │ ├── ingest/ # feed-specific ingesters + common NormalizedIOC schema │ ├── mitre/ # AttackMapper - confidence-weighted technique matching │ ├── hunt/ # Jinja2 templates + query_generator (SPL/KQL/ES|QL) │ ├── copilot/ # RAG hunt copilot (TF-IDF retrieval + optional Claude synthesis) │ ├── elk/ # bulk push to Elasticsearch for Kibana viz │ ├── web/ # FastAPI backend + static frontend (`huntforge-web`) │ └── cli.py # `huntforge` CLI: ingest -> map -> generate-queries -> ask ├── data/ │ ├── attack_mapping.json # editable IOC-context -> ATT&CK technique table │ ├── sample_threatfox.json # offline fallback data │ └── sample_urlhaus.json # offline fallback data ├── tests/ # pytest, all deterministic / no network required ├── docker-compose.yml # local single-node Elasticsearch + Kibana ├── docs/screenshot-ui.svg └── examples/demo_walkthrough.md ``` ## 在扩展之前值得阅读的设计说明 - **ATT&CK 映射是一个起点,而不是绝对真理。** 仅凭上下文(恶意软件家族、威胁类型、标签)将 IOC 归因于某项技术本质上是一个微弱的信号 — 一个 C2 IP 本身几乎无法告诉你任何关于攻击手法的细节。这就是为什么每个匹配项都带有 `matched_via` 和 `weight`,以及为什么存在 `AttackMapper.unmapped()`:为了揭示 HuntForge *不知道*的内容,而不是默默地猜测。 - **HuntCopilot 只知道本次运行摄取的内容。** 它无法很好地回答诸如“Cobalt Strike 是如何工作的”这类通用问题 — 这是刻意为之的。它旨在回答“*我当前的数据集*对此有何说法”,这对于 LLM 来说是一个更狭义且更可信的问题。 - **离线优先。** 每个网络调用(订阅源 API、Anthropic API、Elasticsearch)都会优雅降级。完整的管道 — 从摄取到查询生成 — 可在零网络访问和零 API 密钥的情况下运行,这也是测试套件 100% 确定性的原因。 ## 路线图构想 - MISP / OTX 摄取器 - STIX 2.1 导出,用于与其他 CTI 工具互操作 - 将 TF-IDF 检索替换为位于相同 `Document` 接口之后的 sentence-transformer embeddings(`copilot/rag_engine.py` 的编写使其成为一个即插即用的更改) - PCAP 派生的 IOC 提取(与 XOR 编码的 C2 流量分析挂钩)作为额外的摄取器 ## 许可证 MIT — 查看 [LICENSE](LICENSE)。
标签:ATT&CK框架, DLL 劫持, SIEM查询生成, 大语言模型, 威胁情报, 安全运营, 开发者工具, 扫描框架, 请求拦截, 越狱测试, 逆向工具