LesCondones/Cyber-Threat-Intelligence-Agent
GitHub: LesCondones/Cyber-Threat-Intelligence-Agent
基于 LangGraph 的多智能体威胁情报研究系统,能够自动完成主题调研、IOC 提取、框架分析并生成完整的 PDF 情报报告。
Stars: 0 | Forks: 0
# Deep Agents: 网络威胁情报
一个基于 **LangGraph** 构建的多智能体系统,可端到端研究威胁主题,并生成一份独立完整的 PDF 情报报告。它能够执行并发的基于来源的研究、提取并丰富 IOC、对威胁行为者进行画像、将发现映射到 MITRE ATT&CK、应用经典的 CTI 框架(Diamond Model、Cyber Kill Chain、Admiralty 评级)、生成优先级建议和可部署的检测逻辑,并将所有内容持久化到 SQLite 知识图谱以及本地 Chroma 向量库中,以实现语义检索。
## 架构
```
User Input (Research Topic)
|
CoordinatorAgent.investigate()
|
LangGraph State Machine:
|
plan ──► research ──► mitre_map ──► profile_actors ──► enrich_iocs
|
framework_analysis
|
generate_report ◄── executive_summary ◄── detection_logic ◄── recommendations
|
+── IOCStore.persist() ──► SQLite knowledge graph
+── VectorStore.upsert() ──► Chroma (semantic search index)
+── ReportGenerator.create_report() ──► PDF (single deliverable)
```
PDF 是**唯一**的报告产物 —— 没有单独的 STIX/CSV/规则文件。所有
渲染的检测内容和汇总的 IOC 都包含在 PDF 中,因此它是
独立完整的。结构化数据还会额外持久化到 SQLite(作为事实来源)
并嵌入到 Chroma 中(用于语义搜索)。
### 图节点
| 节点 | 功能 | 描述 |
|------|----------|-------------|
| `plan` | `plan_node` | LLM 将主题拆分为 3–5 个带有针对性查询的特定子主题 |
| `research` | `research_node` | 每个子主题并发执行 SubAgent(每个子主题一次合并的 LLM 调用) |
| `mitre_map` | `mitre_node` | 通过一次调用将综合发现映射到 MITRE ATT&CK 技术 |
| `profile_actors` | `actor_node` | 识别并对威胁行为者组织进行画像分析 |
| `enrich_iocs` | `enrich_node` | VirusTotal / Shodan / AbuseIPDB 信誉查询 |
| `framework_analysis` | `framework_node` | Diamond Model、Cyber Kill Chain、Admiralty 置信度评估 |
| `recommendations` | `recommendations_node` | 具有负责人和理由的、按优先级排序的可操作建议 |
| `detection_logic` | `detection_logic_node` | Sigma 规则、YARA 规则、Splunk SPL 和 Microsoft KQL 狩猎查询 |
| `executive_summary` | `summary_node` | TL;DR 要点 + 威胁状态 + 基于来源的执行摘要 |
| `generate_report` | `report_node` | PDF 生成 + SQLite 持久化 + Chroma 索引 |
### Agent 组件
| Agent | 文件 | 用途 |
|-------|------|---------|
| **Coordinator** | `main.py` | LangGraph 编排,CLI,公开 API |
| **SubAgent** | `agents/subagent.py` | 基于来源的研究与关键发现提取 |
| **Web Searcher** | `agents/searcher.py` | Tavily API 集成(带 SQLite 结果缓存) |
| **Web Scraper** | `agents/scraper.py` | LangChain WebBaseLoader,用于直接抓取 URL |
| **IOC Extractor** | `agents/ioc_extractor.py` | 通过正则表达式提取 IP、域名、URL、哈希、CVE 和恶意软件 |
| **MITRE Mapper** | `agents/mitre_mapper.py` | 基于 LLM 的 ATT&CK 技术映射与去重 |
| **Enrichment Agent** | `agents/enrichment_agent.py` | VirusTotal、Shodan、AbuseIPDB 查询 |
| **Threat Actor Profiler** | `agents/threat_actor_profiler.py` | 基于 LLM 的结构化威胁行为者画像 |
| **Framework Analyst** | `agents/framework_analyst.py` | Diamond Model、Cyber Kill Chain、Admiralty 置信度评估 |
| **Recommendations Generator** | `agents/recommendations_generator.py` | 按优先级排序的、可直接转为工单的建议 |
| **Detection Logic Generator** | `agents/detection_logic_generator.py` | Sigma / YARA / Splunk SPL / KQL 检测内容 |
| **Source Classifier** | `agents/source_classifier.py` | 确定性来源类型标记(政府 / 供应商 / 研究 / 新闻 / 博客) |
| **Feed Monitor** | `agents/feed_monitor.py` | RSS / CVE 订阅源摄取 |
| **IOC Store** | `database/ioc_store.py` | SQLite 知识图谱 |
| **Vector Store** | `database/vector_store.py` | Chroma + sentence-transformers 语义搜索索引 |
| **Report Generator** | `reports/generator.py` | 包含图表、表格和框架部分的 PDF 报告 |
## 设置
1. **安装依赖**:
```
uv sync
```
2. **配置环境**:
```
cp .env.example .env
```
3. **将您的 API 密钥添加到** `.env`:
```
TAVILY_SEARCH_API_KEY=your_key_here
ANTHROPIC_API_KEY=your_key_here
# Anthropic model(默认为 claude-sonnet-4-6)
ANTHROPIC_MODEL=claude-sonnet-4-6
# 可选的 enrichment keys(未设置则跳过 enrichment)
VIRUSTOTAL_API_KEY=
SHODAN_API_KEY=
ABUSEIPDB_API_KEY=
# 可选的 semantic-search 设置(安全的默认值;无需 API key)
EMBEDDING_MODEL=all-MiniLM-L6-v2
VECTOR_DB_PATH=database/chroma
```
只有 `TAVILY_SEARCH_API_KEY` 和 `ANTHROPIC_API_KEY` 是必需的。丰富化(Enrichment)相关的密钥是
可选的 —— 如果缺少某个提供商的密钥,将跳过该提供商的丰富化操作。语义搜索
embedding 在本地运行,不需要密钥。
## 用法
### 运行 CLI
```
uv run python main.py
```
可用命令:
- **[topic]** — 调查任何研究主题(生成 PDF 报告)
- **feeds** — 检查所有威胁情报源
- **feeds:ransomware** — 检查按关键字过滤的情报源
- **search \** — 对存储的发现、摘要、威胁行为者、建议和检测规则进行语义搜索。添加 `--type=finding|summary|actor|recommendation|detection` 以按内容类型进行过滤。
- **stats** — 显示知识图谱统计信息
- **exit** — 退出
### Streamlit UI
```
uv run streamlit run app.py
```
提供调查运行器和带有语义搜索框的知识库页面。
`.streamlit/config.toml` 禁用了 Streamlit 的文件监视器 —— 本地 embedding 模型
引入了一些模块,否则这些模块会用无害的 `torchvision`
警告淹没控制台。(重启应用以应用代码更改。)
### 编程方式用法
```
from main import CoordinatorAgent
coordinator = CoordinatorAgent()
# 完整调查 — 返回生成的 PDF 报告的路径
report_path = coordinator.investigate("Ransomware trends 2024")
# 检查 threat feeds
result = coordinator.check_feeds(keyword="ransomware")
# result = {"alerts": [...], "cves": [...]}
# 查询 knowledge graph (SQLite)
stats = coordinator.ioc_store.get_graph_summary()
high_risk = coordinator.ioc_store.get_high_risk_iocs(min_score=60)
relationships = coordinator.ioc_store.get_relationships("LockBit")
# 跨已存储 intel 进行 semantic search(Chroma vector store)
hits = coordinator.semantic_search("ransomware affiliates targeting healthcare", k=10)
actor_hits = coordinator.semantic_search("APT29 phishing", k=5, types=["actor"])
```
### 更改 Claude 模型
编辑 `.env`:
```
ANTHROPIC_MODEL=claude-sonnet-4-6
```
## 工作原理
1. **计划** — LLM 为该主题生成特定的子主题和有针对性的搜索查询。
2. **研究** — SubAgent 并发运行:搜索、基于来源进行分析、提取 IOC、评估严重性。
3. **MITRE 映射** — 将发现映射到 ATT&CK 技术/战术并进行去重。
4. **威胁行为者画像** — 从发现中识别并对威胁行为者组织进行画像。
5. **IOC 丰富化** — 针对 VirusTotal、Shodan 和 AbuseIPDB 检查 IP、域名和哈希。
6. **框架分析** — 应用 Diamond Model、Cyber Kill Chain 和 Admiralty 置信度评级。
7. **建议** — 生成具有负责人和理由的、按优先级排序且可直接转为工单的操作。
8. **检测逻辑** — 根据观察到的 TTP 和 IOC 生成 Sigma、YARA、Splunk SPL 和 KQL 检测内容。
9. **执行摘要** — 带有 TL;DR 要点、威胁状态、置信度和情报缺口的基于来源的摘要。
10. **报告 + 持久化** — 生成 PDF 报告;结构化数据持久化到 SQLite;文本产物 embedding 到 Chroma 中。
## 输出
### PDF 报告(唯一交付物)
该报告是以 BLUF(结论先行)为导向的 —— 管理层关注的材料在前,原始数据在后 —— 并且有意
避免在多个地方重述相同的情报。部分包括:
- **TL;DR 卡片**(面向管理层的 2–4 个要点)
- **时效性标头**(情报收集时间戳 + 威胁状态:活跃 / 历史的 / 预期的)
- **情报评估**(单行的 Admiralty 置信度 + 可靠性、情报缺口、收集优先级)
- **执行摘要**(基于来源的正文)
- **优先级建议**(操作 / 负责人 / 理由,按优先级进行颜色编码)
- **检测逻辑**(位于预格式化代码块中的完整 Sigma / YARA / Splunk SPL / KQL 规则主体)
- **威胁严重性概述**(表格 + 条形图)
- **Diamond Model 分析**
- **Cyber Kill Chain**(已观察与未观察阶段的流程图 + 每个已观察阶段的一行简明信息)
- **详细发现**包含分析、IOC 和来源引用(每个来源均标记为政府 / 供应商 / 研究 / 新闻 / 博客)
- **威胁行为者画像**(动机、目标、技术、恶意软件、活动)
- **IOC 丰富化结果**(风险评分、检测计数、高风险详情)
- **MITRE ATT&CK 技术映射**
- **统一的入侵指标**(已去重,可直接复制粘贴)
### 知识图谱 (SQLite)
持久化存储会跟踪:
- 调查与发现
- 包含丰富化数据和风险评分的 IOC
- 威胁行为者画像
- MITRE ATT&CK 映射
- 实体关系(行为者 → 使用 → 恶意软件 → 与...通信 → 域名)
### 语义搜索
本地向量库与 SQLite 并存。每次调查后,以下
内容将使用本地的 `sentence-transformers` 模型(默认为
`all-MiniLM-L6-v2`)进行 embedding,并持久化到 `database/chroma/`:
- 发现分析(按子主题)及其严重性和主题元数据
- 执行摘要(按调查)
- 威胁行为者画像(描述、目标、技术、恶意软件)
- 建议(操作 + 理由 + 引用)
- 检测规则(Sigma、YARA、Splunk SPL、KQL — 标题 + 描述 + 主体)
文档 ID 是确定性的(例如 `inv:42:finding:0`、`actor:lockbit`),因此重新
运行调查会干净地执行 upsert,而不会导致条目重复。无需 API 密钥 —
embedding 在本地且离线运行。可在 `.env` 中使用 `EMBEDDING_MODEL` 和
`VECTOR_DB_PATH` 覆盖模型或路径。
## 订阅源监控
内置 RSS 订阅源:
- CISA 警报和已知被利用的漏洞
- NVD CVE 数据库 (API)
- Krebs on Security
- The Hacker News
- BleepingComputer
- Dark Reading
## 项目结构
```
/
├── .env # API keys & config
├── .env.example # Config template
├── .streamlit/config.toml # Streamlit settings (file watcher disabled)
├── main.py # LangGraph coordinator + CLI + public API
├── app.py # Streamlit UI (investigation runner + knowledge base)
├── config.py # Settings (Anthropic model, keys, embedding model, vector path)
├── agents/
│ ├── searcher.py # Tavily web search (with SQLite cache)
│ ├── scraper.py # WebBaseLoader URL scraper
│ ├── subagent.py # Source-grounded research subagent
│ ├── ioc_extractor.py # IOC extraction
│ ├── mitre_mapper.py # MITRE ATT&CK mapping
│ ├── enrichment_agent.py # VirusTotal/Shodan/AbuseIPDB
│ ├── threat_actor_profiler.py # Threat actor profiling
│ ├── framework_analyst.py # Diamond Model, Kill Chain, confidence
│ ├── recommendations_generator.py # Prioritized actionable recommendations
│ ├── detection_logic_generator.py # Sigma/YARA/SPL/KQL detection content
│ ├── source_classifier.py # Deterministic source-type tagging
│ └── feed_monitor.py # RSS/CVE feed monitoring
├── database/
│ ├── ioc_store.py # SQLite knowledge graph
│ ├── vector_store.py # Chroma semantic search index
│ └── search_cache.py # Tavily search-result cache
├── reports/
│ └── generator.py # PDF report generator
└── pyproject.toml # Dependencies
```
## API 密钥来源
| 服务 | URL | 免费层级 |
|---------|-----|-----------|
| Tavily | https://app.tavily.com | 1,000 次搜索/月 |
| Anthropic | https://console.anthropic.com | 按量付费 |
| VirusTotal | https://www.virustotal.com | 4 次请求/分钟 |
| Shodan | https://account.shodan.io | 有限查询 |
| AbuseIPDB | https://www.abuseipdb.com | 1,000 次检查/天 |
## 示例主题
- "针对金融机构的 APT 组织"
- "云基础设施中的零日漏洞"
- "2024 年勒索软件趋势"
- "软件开发中的供应链攻击"
- "针对医疗保健的钓鱼活动"
标签:ATT&CK框架, DLL 劫持, Kubernetes, 多智能体, 大语言模型, 威胁情报, 开发者工具, 网络安全, 自动化分析, 跨站脚本, 逆向工具, 隐私保护