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 文件和截图资源的完整项目布局。 ![项目结构](https://static.pigsec.cn/wp-content/uploads/repos/cas/cf/cf138291b8b26695afa15327b5157d8c95fa29e94f5baa19abcfe2f5730108a6.png) ### 2. Docker 容器运行中 展示了两个必需的容器成功运行:`tig-api` 和 `tig-neo4j`。 ![Docker 容器](https://static.pigsec.cn/wp-content/uploads/repos/cas/ca/cae6e3821c5b20a3e0a11c183f01a9aaad39c43868868997ef6c8968e7318ffd.png) ### 3. 测试结果 展示了自动化测试套件成功通过。 ![测试通过](https://static.pigsec.cn/wp-content/uploads/repos/cas/ab/abcc018c07108bf7e3023b83ead8b46176f93f4e6400a61f803b4ff0c781cc40.png) ### 4. FastAPI 健康检查 Endpoint 展示了 API 健康检查返回 `status: ok` 和 `neo4j: true`,确认后端可以与 Neo4j 通信。 ![API 健康](https://static.pigsec.cn/wp-content/uploads/repos/cas/8d/8d6b41b9d956938e832c1a11b2420807d0883a752ccf37c479cfeeefad5be71e.png) ### 5. 分析师 UI — IOC 调查 展示了分析师搜索 IOC `45.155.205.233` 并接收相关的 CTI 上下文、置信度评分、图路径以及总结后的关联关系。 ![IOC 调查 UI](https://static.pigsec.cn/wp-content/uploads/repos/cas/21/2188e346436356186ce226a52a046eba3ee80eef88c94e0b5578dc07bbbb9c08.png) ### 6. 分析师 UI — CVE 调查 展示了对 `CVE-2024-6387` 的 CVE 调查,包含相关的攻击活动、行为者、恶意软件、工具、ATT&CK 技术、评分以及图路径。 ![CVE 调查 UI](https://static.pigsec.cn/wp-content/uploads/repos/cas/b2/b2e06adfe7e3f653b39afacc51fb0904821c416c344685a72382eb493636ab7c.png) ### 7. 分析师 UI — 告警富化 展示了对 Wazuh/SIEM 样式告警的富化。平台从告警消息中提取指标和 CVE,对其进行调查,并返回分析师级别的总结。 ![告警富化 UI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ab/ab04600b48f105d089f99f3f5e5bc3eedbb3a29610bb2baa071670a51addccab.png) ### 8. API 认证 展示了受保护的 API 行为。当 `X-API-Key` header 缺失或无效时,API 会返回简洁的未授权错误,而不是暴露内部细节。 ![API 认证](https://static.pigsec.cn/wp-content/uploads/repos/cas/1a/1aff86f7b47de391836c82c7d4df238837b13607509e8da8927c6af841a3a5c9.png) ### 9. Neo4j IOC 图可视化 展示了在 Neo4j Browser 中的 IOC 关联图。该 IOC 连接到相关的攻击活动、行为者、恶意软件、工具、CVE、ATT&CK 技术、ASN、国家和报告节点。 ![Neo4j IOC 图](https://static.pigsec.cn/wp-content/uploads/repos/cas/92/92f286520469d9986c6eb8fe8fe3719adce3ca598c404ea4d696aea430a9c45d.png) ### 10. Neo4j 数据库摘要 展示了加载的图数据库摘要,包含 14 个节点、15 个关联关系、标签以及属性键。 ![Neo4j 数据库摘要](https://static.pigsec.cn/wp-content/uploads/repos/cas/42/42b73047810c95fcd6e63e9234e00eabdccd8176629e86f4ed2261d25c5a692b.png) ## 快速开始 ### 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, 威胁情报, 安全运营, 安全防御评估, 开发者工具, 扫描框架, 版权保护, 请求拦截, 逆向工具