GurukiranShiv/Threat-Intel-Graph-Platform
GitHub: GurukiranShiv/Threat-Intel-Graph-Platform
一个基于 FastAPI 和 Neo4j 的 Docker 化威胁情报图平台,帮助安全分析师从单个 IOC 或告警出发构建完整的威胁上下文图谱。
Stars: 0 | Forks: 0
# 用于 IOC 扩展和 ATT&CK 上下文的威胁情报图平台
这是一个 Docker化的网络威胁情报项目,旨在帮助 SOC 和威胁情报分析师从单个 IOC、CVE 或 SIEM/Wazuh 告警出发,扩展并构建出完整的威胁上下文图谱。
该平台不仅限于检查 IP/域名/hash 是否恶意,还能将相关实体连接起来,例如威胁行为者、恶意软件、工具、指标、CVE、MITRE ATT&CK 技术、攻击活动、报告、ASN 和 GeoIP 样式的上下文信息。
## 问题陈述
SOC 分析师收到的告警通常仅包含一两项证据,例如 IP 地址、可疑域名、文件 hash、CVE 或登录失败事件。难点不仅在于识别 IOC 是否可疑,更在于理解完整的威胁上下文:
- 该 IOC 与哪个攻击活动相关?
- 是否有关联的威胁行为者?
- 是否涉及恶意软件或已知工具?
- 该告警是否与某个 CVE 存在关联?
- 它映射到哪个 MITRE ATT&CK 技术?
- 置信度水平如何?
- 分析师接下来应该做什么?
本项目通过使用图数据库和为分析师量身定制的 API/UI 解决了这个问题。
## 项目目标
构建一个真实场景风格的 CTI 图平台,分析师可以在其中搜索 IOC 或丰富 Wazuh/SIEM 告警,并获取:
- 相关的威胁行为者上下文
- 相关的恶意软件和工具上下文
- IOC 关联关系
- CVE 上下文
- MITRE ATT&CK 技术映射
- 攻击活动和报告参考
- ASN/GeoIP 样式的上下文
- 基于关联关系的置信度评分
- 分析师级别的建议
## 高层架构
```
Threat Intel Sources
OpenCTI STIX Export / MITRE ATT&CK STIX / OTX / MISP / NVD / Internal Reports
|
v
Python Ingestion + Normalization Pipeline
|
v
Neo4j CTI Graph Database
|
v
FastAPI Backend with API-Key Authentication
|
v
Analyst Console UI + API Docs + Neo4j Browser
|
v
SOC Output: IOC Investigation, CVE Investigation, Alert Enrichment, Score, Recommendations
```
## 技术栈
| 领域 | 技术 |
|---|---|
| 后端 API | Python, FastAPI |
| 图数据库 | Neo4j Community Edition |
| 容器化 | Docker, Docker Compose |
| CTI 建模 | 图关联关系,STIX/TAXII 概念 |
| ATT&CK 映射 | MITRE ATT&CK 样式的技术映射 |
| UI | 轻量级 HTML/CSS/JavaScript 分析师控制台 |
| 安全性 | `X-API-Key` 认证 |
| 测试 | Pytest |
| 演示数据 | 合成的 CTI 样本数据 |
## 核心功能
- 支持 `ThreatActor`、`Malware`、`Tool`、`Indicator`、`CVE`、`Technique`、`Campaign`、`Report`、`ASN` 和 `Country` 的图 schema。
- IOC 调查 endpoint,用于从 IP/域名/hash/URL 扩展至相关的图实体。
- CVE 调查 endpoint,用于理解与漏洞相关的威胁上下文。
- Wazuh/SIEM 样式的告警富化 endpoint。
- 从告警消息中提取 IOC 和 CVE。
- 基于关联关系的置信度评分。
- 分析师级别的总结和建议。
- 位于 `/ui` 的简单分析师 UI。
- 位于 `/docs` 的 FastAPI 交互式文档。
- 位于 `localhost:7474` 的 Neo4j 图可视化。
- 使用 `X-API-Key` 进行 API key 认证。
- 针对未授权和未找到的情况进行简洁的 JSON 错误处理。
- 针对提取、评分、序列化、认证和健康检查的单元测试。
## 仓库结构
```
threat-intel-graph-platform/
├── app/
│ ├── cypher/
│ │ └── schema.cypher
│ ├── ingest/
│ │ ├── nvd.py
│ │ ├── otx.py
│ │ ├── sample_loader.py
│ │ └── stix_ingest.py
│ ├── services/
│ │ └── query_service.py
│ ├── static/
│ │ └── index.html
│ ├── auth.py
│ ├── config.py
│ ├── extractors.py
│ ├── graph.py
│ ├── main.py
│ └── scoring.py
├── data/
│ └── sample_cti.json
├── docs/
│ ├── screenshots/
│ ├── analyst_use_cases.md
│ ├── architecture.md
│ ├── cypher_queries.md
│ ├── further_improvements.md
│ ├── interview_answer.md
│ └── resume_bullets.md
├── scripts/
│ ├── fetch_cve_to_graph.py
│ ├── ingest_attack_stix.py
│ ├── ingest_sample.py
│ ├── ingest_stix_bundle.py
│ └── run_demo_queries.py
├── tests/
│ ├── test_api_health.py
│ ├── test_auth.py
│ ├── test_extractors.py
│ ├── test_scoring.py
│ └── test_serialization.py
├── docker-compose.yml
├── Dockerfile
├── Makefile
├── requirements.txt
└── README.md
```
## 截图
### 1. 项目结构
展示了包含后端代码、导入脚本、测试、文档、Docker 文件和截图资源的完整项目布局。

### 2. Docker 容器运行中
展示了两个必需的容器成功运行:`tig-api` 和 `tig-neo4j`。

### 3. 测试结果
展示了自动化测试套件成功通过。

### 4. FastAPI 健康检查 Endpoint
展示了 API 健康检查返回 `status: ok` 和 `neo4j: true`,确认后端可以与 Neo4j 通信。

### 5. 分析师 UI — IOC 调查
展示了分析师搜索 IOC `45.155.205.233` 并接收相关的 CTI 上下文、置信度评分、图路径以及总结后的关联关系。

### 6. 分析师 UI — CVE 调查
展示了对 `CVE-2024-6387` 的 CVE 调查,包含相关的攻击活动、行为者、恶意软件、工具、ATT&CK 技术、评分以及图路径。

### 7. 分析师 UI — 告警富化
展示了对 Wazuh/SIEM 样式告警的富化。平台从告警消息中提取指标和 CVE,对其进行调查,并返回分析师级别的总结。

### 8. API 认证
展示了受保护的 API 行为。当 `X-API-Key` header 缺失或无效时,API 会返回简洁的未授权错误,而不是暴露内部细节。

### 9. Neo4j IOC 图可视化
展示了在 Neo4j Browser 中的 IOC 关联图。该 IOC 连接到相关的攻击活动、行为者、恶意软件、工具、CVE、ATT&CK 技术、ASN、国家和报告节点。

### 10. Neo4j 数据库摘要
展示了加载的图数据库摘要,包含 14 个节点、15 个关联关系、标签以及属性键。

## 快速开始
### 1. 安装要求
安装以下工具:
- Docker Desktop
- VS Code
- Git,可选但推荐
确认 Docker 正在运行:
```
docker --version
docker compose version
```
### 2. 打开项目文件夹
在可以看到这些文件的项目文件夹中打开 PowerShell:
```
docker-compose.yml
Dockerfile
README.md
app
scripts
data
tests
```
示例:
```
cd "G:\New folder (2)\threat-intel-graph-platform\threat-intel-graph-platform"
```
### 3. 启动 Neo4j 和 FastAPI
```
docker compose up -d --build
```
检查正在运行的容器:
```
docker ps
```
预期的容器:
```
tig-api
tig-neo4j
```
### 4. 加载 CTI 样本数据
```
docker compose exec api python scripts/ingest_sample.py
```
预期输出:
```
Loaded sample CTI: {'nodes': 14, 'relationships': 15}
```
### 5. 检查 API 健康状态
```
Invoke-RestMethod "http://localhost:8000/health"
```
预期响应:
```
{
"status": "ok",
"neo4j": true
}
```
### 6. 打开分析师 UI
```
http://localhost:8000/ui
```
默认的本地 API key:
```
dev-threat-intel-key
```
### 7. 打开 FastAPI 文档
```
http://localhost:8000/docs
```
受保护的 endpoint 需要 `X-API-Key` header。
### 8. 打开 Neo4j Browser
```
http://localhost:7474
```
登录:
```
Username: neo4j
Password: threatintelpass
```
运行此查询以可视化 IOC 图:
```
MATCH p=(:Indicator {value:"45.155.205.233"})-[*1..4]-(related)
RETURN p
LIMIT 50;
```
## API 认证
受保护的 endpoint 需要此 header:
```
X-API-Key: dev-threat-intel-key
```
PowerShell 示例:
```
$headers = @{ "X-API-Key" = "dev-threat-intel-key" }
Invoke-RestMethod "http://localhost:8000/investigate/ioc?value=45.155.205.233" -Headers $headers | ConvertTo-Json -Depth 20
```
未授权请求示例:
```
{
"error": "unauthorized",
"message": "Missing or invalid X-API-Key header."
}
```
## API Endpoint
| 方法 | Endpoint | 需要认证 | 用途 |
|---|---|---:|---|
| `GET` | `/ui` | 否 | 分析师浏览器控制台 |
| `GET` | `/health` | 否 | 检查 API 和 Neo4j 连接 |
| `GET` | `/investigate/ioc?value=` | 是 | 从 IP/域名/hash/URL 扩展 |
| `GET` | `/investigate/cve/{cve_id}` | 是 | 调查 CVE 威胁上下文 |
| `GET` | `/search?query=` | 是 | 搜索图实体 |
| `GET` | `/graph/path?source=&target=` | 是 | 查找两个实体之间的路径 |
| `POST` | `/alerts/enrich` | 是 | 富化 Wazuh/SIEM 告警文本 |
## 演示 API 命令
### IOC 调查
```
$headers = @{ "X-API-Key" = "dev-threat-intel-key" }
Invoke-RestMethod "http://localhost:8000/investigate/ioc?value=45.155.205.233" -Headers $headers | ConvertTo-Json -Depth 20
```
### CVE 调查
```
$headers = @{ "X-API-Key" = "dev-threat-intel-key" }
Invoke-RestMethod "http://localhost:8000/investigate/cve/CVE-2024-6387" -Headers $headers | ConvertTo-Json -Depth 20
```
### Wazuh/SIEM 告警富化
```
$headers = @{ "X-API-Key" = "dev-threat-intel-key"; "Content-Type" = "application/json" }
$body = '{"alert_id":"wazuh-001","source":"wazuh","message":"sshd brute force from 45.155.205.233 targeting exposed OpenSSH service related to CVE-2024-6387"}'
Invoke-RestMethod "http://localhost:8000/alerts/enrich" -Method POST -Headers $headers -Body $body | ConvertTo-Json -Depth 20
```
### 未找到错误示例
```
$headers = @{ "X-API-Key" = "dev-threat-intel-key" }
Invoke-RestMethod "http://localhost:8000/investigate/ioc?value=1.2.3.4" -Headers $headers
```
预期的简洁错误信息:
```
{
"found": false,
"error": "IOC not found",
"value": "1.2.3.4",
"message": "IOC was not found in the CTI graph. Try ingesting CTI data or checking another indicator."
}
```
## 运行测试
在 API 容器内运行测试:
```
docker compose exec api pytest -q
```
测试覆盖率包括:
- IOC 提取
- CVE 提取
- 关联关系置信度评分
- 图节点序列化
- API key 认证
- 健康检查 endpoint 行为
## Neo4j 查询
### 显示完整图
```
MATCH p=(n)-[r]->(m)
RETURN p
LIMIT 50;
```
### 从演示 IOC 开始
```
MATCH p=(:Indicator {value:"45.155.205.233"})-[*1..4]-(related)
RETURN p
LIMIT 50;
```
### 从演示 CVE 开始
```
MATCH p=(:CVE {id:"CVE-2024-6387"})-[*1..4]-(related)
RETURN p
LIMIT 50;
```
### 显示行为者到技术的路径
```
MATCH p=(:ThreatActor {name:"DEMO-Actor-CloudFox"})-[*1..4]-(t:Technique)
RETURN p;
```
## 调查流程示例
Wazuh/SIEM 告警样本:
```
sshd brute force from 45.155.205.233 targeting exposed OpenSSH service related to CVE-2024-6387
```
平台提取出:
```
[
{"type": "ip", "value": "45.155.205.233"},
{"type": "cve", "value": "CVE-2024-6387"}
]
```
随后它通过 Neo4j 关联关系进行扩展并返回:
- 相关攻击活动:`DEMO-SSH-Bruteforce-Cloud-Campaign`
- 相关行为者:`DEMO-Actor-CloudFox`
- 相关恶意软件:`DEMO-LightBeacon`
- 相关工具:`Hydra`
- 相关 CVE:`CVE-2024-6387`
- 相关 ATT&CK 技术:`T1110 Brute Force`
- 相关 ASN 和国家上下文
- 分析师建议
- 置信度评分
## 我学到的 / 展示的技能
该项目展示了实用的网络安全工程技能:
- 使用 Docker Compose 构建容器化的安全平台
- 在 Neo4j 中设计 CTI 图 schema
- 对行为者、恶意软件、IOC、CVE、攻击活动、工具和 ATT&CK 技术之间的关联关系进行建模
- 创建经过认证的 FastAPI endpoint
- 开发专注于分析师的浏览器 UI
- 从告警消息中提取 IOC 和 CVE
- 根据图证据生成置信度评分
- 为安全自动化逻辑编写测试用例
- 使用 Neo4j Cypher 查询进行 CTI 调查
- 编写适合作品集的文档和截图
## 简历要点
- 使用 Python、FastAPI、Neo4j、Docker、STIX/TAXII 概念、OpenCTI 导出以及 MITRE ATT&CK 样式的映射构建了一个基于图的网络威胁情报平台,以连接威胁行为者、恶意软件、IOC、CVE、工具、攻击活动、ASN/GeoIP 上下文以及分析师建议。
- 开发了受 API key 保护的 CTI 调查 endpoint 和轻量级分析师 UI,使 SOC 分析师能够搜索 IOC 或利用行为者、恶意软件、CVE、ATT&CK、置信度评分和建议的下一步操作来富化 Wazuh 样式的告警。
- 实现了 CTI 导入、IOC 提取、图遍历、置信度评分、简洁的 API 错误处理,以及针对提取、评分、序列化、认证和健康检查的自动化测试。
## 面试解释
我构建这个项目是因为 SOC 分析师经常收到包含单个 IOC 或 CVE 的告警,但他们需要快速了解完整的威胁上下文。我没有构建一个简单的 IOC 查询工具,而是设计了一个基于图的网络威胁情报平台,将指标、威胁行为者、恶意软件、工具、攻击活动、报告、CVE、ASN 和 MITRE ATT&CK 技术连接起来。
当分析师搜索像 `45.155.205.233` 这样的 IOC 时,平台会跨越 Neo4j 关联关系进行扩展,并返回相关的行为者上下文、恶意软件家族、工具使用情况、CVE 上下文、ATT&CK 映射、置信度评分、图路径和建议操作。我还添加了 FastAPI 后端、Docker 部署、API key 认证、简洁的错误处理、分析师 UI 以及基于 pytest 的测试,使其更接近真实的 SOC 工具,而不是一个基础脚本。
## 未来改进
以下项目被有意列为下一阶段的改进内容:
1. 添加实时的 OpenCTI 连接器集成,而不仅仅是 STIX 导出。
2. 添加带有 API 速率限制处理的 AlienVault OTX pulse 导入。
3. 添加 MISP 事件导入。
4. 使用 MaxMind 或其他提供商添加真实的 GeoIP 和 ASN 富化。
5. 添加包含 CVSS、EPSS、KEV 和 exploit 引用的 NVD CVE 富化。
6. 添加基于角色的访问控制,而不是单一的静态 API key。
7. 添加分析师笔记和针对 TheHive 的案例导出。
8. 添加定期的 CTI 刷新任务。
9. 使用 JavaScript 图库添加更丰富的前端图可视化。
10 添加 GitHub Actions CI/CD 以自动运行测试。
11. 为 FastAPI 服务添加 Docker 健康检查。
12. 添加生产环境的日志记录和审计追踪。
## 安全说明
- 不要提交真实的 `.env` 文件或 API key。
- 不要上传私密客户告警、内部 IP、真实的 API token 或敏感指标。
- 在本地实验室之外使用本项目之前,请替换默认的演示 API key。
- 包含的 CTI 数据是合成的,可安全用于公开的作品集演示。
## 免责声明
本项目仅用于教育、作品集和实验室演示目的。包含的样本威胁行为者、恶意软件、攻击活动和基础设施数据均为合成数据。其目标是在不暴露真实敏感情报的情况下,演示 CTI 图建模、SOC 告警富化以及分析师调查工作流。
标签:AV绕过, Docker, FastAPI, 威胁情报, 安全运营, 安全防御评估, 开发者工具, 扫描框架, 版权保护, 请求拦截, 逆向工具