ahmedgheyas72/IOC-Enrichment-Threat-Intelligence-API

GitHub: ahmedgheyas72/IOC-Enrichment-Threat-Intelligence-API

IOC增强与威胁情报API,自动化风险评估和IOC增强。

Stars: 0 | Forks: 0

# IOC 增强与威胁情报 API ![Python](https://img.shields.io/badge/Python-3.11-blue?logo=python&logoColor=white) ![FastAPI](https://img.shields.io/badge/FastAPI-0.110-009688?logo=fastapi&logoColor=white) ![Docker](https://img.shields.io/badge/Docker-Compose-2496ED?logo=docker&logoColor=white) ![Azure](https://img.shields.io/badge/Azure-App_Service-0078D4?logo=microsoftazure&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green) 一个生产级别的 REST API,接受妥协指标(IP、域名、URL、文件哈希),同时针对多个威胁情报来源进行增强,评估其风险等级,并返回结构化调查准备好的输出——旨在复制 Tier 1 SOC 分析师分级工作流程。 ## 它能做什么 SOC 分析师在调查警报时通常必须手动检查每个可疑 IP 的 VirusTotal、AbuseIPDB 和 AlienVault OTX——一次一个标签页。此 API 自动化此过程: 1. 通过一次 API 调用提交 IOC 2. 三种威胁情报来源同时查询(通过异步 I/O) 3. 一个加权评分算法返回带有来源归因原因的 `CLEAN / SUSPICIOUS / MALICIOUS` 判决 4. 结果被存储并链接到调查案例 ## 架构 ``` ┌─────────────────────────────────────────────────────────────────┐ │ Azure App Service │ │ │ │ ┌──────────────┐ ┌───────────────┐ ┌─────────────┐ │ │ │ FastAPI │────▶│ Redis Cache │ │ Key Vault │ │ │ │ + Pydantic │ │ (1hr TTL) │ │ API keys │ │ │ └──────┬───────┘ └───────────────┘ └─────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ PostgreSQL │ ◀── Flexible Server (private VNet) │ │ │ Flex Server │ │ │ └──────────────┘ │ └─────────────────────────────────────────────────────────────────┘ │ │ asyncio.gather() — all 3 fire simultaneously ├──────────────────┬──────────────────┐ ▼ ▼ ▼ [VirusTotal] [AbuseIPDB] [AlienVault OTX] AV detections Abuse confidence Threat actor pulses ``` ## 技术栈 | 层 | 技术 | 为什么 | |---|---|---| | API 框架 | FastAPI | 异步原生,自动生成 Swagger UI,内置 Pydantic 验证 | | 验证 | Pydantic v2 | 在任何 API 调用触发之前拒绝格式错误的输入 | | HTTP 客户端 | httpx(异步) | 非阻塞——同时运行 VT、AbuseIPDB、OTX | | 缓存 | Redis | 内存查找返回时间小于 10ms,而实时调用约为 800ms | | 数据库 | PostgreSQL(asyncpg) | 持久性案例管理和增强历史记录 | | 容器化 | Docker + Compose | 一条命令本地设置,相同的镜像部署到 Azure | | 云 | Azure App Service | 带有 VNet 隔离的 PostgreSQL 的容器部署 | | 机密 | Azure Key Vault | API 密钥永远不会在 `.env` 文件或源代码中 | | CI/CD | GitHub Actions | 在将 `main` 推送到 `main` 时自动部署到 Azure | | 监控 | Azure Application Insights | 请求跟踪、延迟、错误跟踪 | ## 快速入门(本地) **先决条件:** Docker Desktop、免费的 [VirusTotal API 密钥](https://virustotal.com)、免费的 [AbuseIPDB API 密钥](https://abuseipdb.com). ``` git clone https://github.com/[your-handle]/ioc-enrichment-api cd ioc-enrichment-api # 复制并填写您的API密钥 cp .env.example .env # 启动一切(FastAPI + PostgreSQL + Redis) docker compose up --build ``` API 可在 `http://localhost:8000` 上使用 Swagger UI 在 `http://localhost:8000/docs` ## API 参考 ### 增强一个 IOC ``` POST /ioc/enrich Content-Type: application/json { "value": "185.220.101.5", "ioc_type": "ip" } ``` **响应:** ``` { "id": "3f7a1c2e-84b0-4d9a-a3f1-0e6b2c1d4e5f", "value": "185.220.101.5", "ioc_type": "ip", "verdict": "MALICIOUS", "score": 70, "reasons": [ "VirusTotal: 8 malicious engine detections", "AbuseIPDB: 73% abuse confidence score", "AlienVault OTX: found in 3 threat actor pulses" ], "sources": { "virustotal": { "malicious": 8, "suspicious": 2, "harmless": 62 }, "abuseipdb": { "confidence": 73, "total_reports": 41 }, "otx": { "pulse_count": 3 } }, "cached": false, "created_at": "2025-07-01T14:23:01Z" } ``` **支持的 IOC 类型:** `ip`、`domain`、`url`、`hash` ### 检索过去的增强 ``` GET /ioc/3f7a1c2e-84b0-4d9a-a3f1-0e6b2c1d4e5f ``` ### 搜索增强历史记录 ``` GET /ioc/search?value=185.220.101.5 ``` ### 创建一个调查案例 ``` POST /cases Content-Type: application/json { "title": "Suspicious outbound traffic — Ticket #4821", "description": "Multiple endpoints beaconing to the same external IP" } ``` **响应:** ``` { "id": "case-uuid", "title": "Suspicious outbound traffic — Ticket #4821", "status": "open", "ioc_count": 0, "created_at": "2025-07-01T14:23:01Z" } ``` ### 将 IOC 附带到案例中 ``` POST /cases/{case_id}/iocs Content-Type: application/json { "ioc_id": "3f7a1c2e-84b0-4d9a-a3f1-0e6b2c1d4e5f" } ``` ### 检索完整的案例摘要 ``` GET /cases/{case_id} ``` 返回包含所有附加 IOC、它们的判决、分数和来源数据的案例——分析师编写事件报告所需的一切。 ### 关闭案例 ``` DELETE /cases/{case_id} ``` ### 健康检查 ``` GET /health ``` ``` { "status": "ok", "version": "1.0.0" } ``` ## 评分算法 大多数 IOC 工具返回原始 API 数据,并将解释留给分析师。此 API 添加了一个评分层,将来自所有三个来源的信号组合成一个可操作的判决。 ``` def score_ioc(vt_result, abuseipdb_result, otx_result) -> dict: score = 0 reasons = [] # VirusTotal: how many AV engines flagged it malicious = vt_result["last_analysis_stats"]["malicious"] if malicious > 3: score += 40 reasons.append(f"VirusTotal: {malicious} malicious engine detections") # AbuseIPDB: community-reported abuse confidence confidence = abuseipdb_result["abuseConfidenceScore"] if confidence > 50: score += 30 reasons.append(f"AbuseIPDB: {confidence}% abuse confidence score") # AlienVault OTX: threat actor attribution pulses = otx_result["pulse_info"]["count"] if pulses > 0: score += 20 reasons.append(f"AlienVault OTX: found in {pulses} threat actor pulses") verdict = "MALICIOUS" if score >= 60 else "SUSPICIOUS" if score >= 30 else "CLEAN" return {"score": score, "verdict": verdict, "reasons": reasons} ``` | 分数 | 判决 | 含义 | |---|---|---| | 0–29 | `CLEAN` | 没有来自来源的任何有意义信号 | | 30–59 | `SUSPICIOUS` | 一些信号——需要分析师审查 | | 60–100 | `MALICIOUS` | 强大的多来源确认 | **设计决策:** VirusTotal 权重最高(40 分),因为它聚合了 70 多个 AV 引擎。AbuseIPDB(30 分)依赖于社区报告,可能存在误报,因此单独携带的权重较小。OTX(20 分)对于威胁行为者归因最有价值——即使一个脉冲也很重要。未来的改进将是添加近期加权:2019 年的 VirusTotal 检测应该比上周的检测分数低。 ## 项目结构 ``` ioc-enrichment-api/ ├── app/ │ ├── main.py # FastAPI app instance, startup events │ ├── database.py # Async SQLAlchemy engine + session factory │ ├── models/ │ │ ├── ioc.py # IOCRecord SQLAlchemy model │ │ └── case.py # Case + CaseIOC junction table │ ├── schemas/ │ │ ├── ioc.py # Pydantic request/response schemas │ │ └── case.py │ ├── routers/ │ │ ├── ioc.py # /ioc/* endpoints │ │ └── cases.py # /cases/* endpoints │ └── services/ │ ├── virustotal.py # VirusTotal async client │ ├── abuseipdb.py # AbuseIPDB async client │ ├── otx.py # AlienVault OTX async client │ ├── scoring.py # Weighted scoring algorithm │ └── cache.py # Redis get/set with TTL ├── tests/ │ ├── test_enrich.py │ └── test_scoring.py ├── .github/ │ └── workflows/ │ └── deploy.yml # GitHub Actions → Azure ├── Dockerfile ├── docker-compose.yml ├── .env.example └── README.md ``` ## 环境变量 ``` # 数据库 DATABASE_URL=postgresql+asyncpg://user:password@localhost/iocdb # Redis REDIS_URL=redis://localhost:6379 # 威胁情报API(在生产中使用Azure Key Vault) VT_API_KEY=your_virustotal_key ABUSEIPDB_API_KEY=your_abuseipdb_key OTX_API_KEY=your_otx_key # Azure(仅限生产) AZURE_KEY_VAULT_URL=https://your-vault.vault.azure.net ``` 在生产中,所有 API 密钥都存储在 Azure Key Vault 中。`.env` 文件仅用于本地开发,并排除在源代码控制之外。 ## 我接下来会构建什么 - **Slack webhook 集成**——自动将 `MALICIOUS` 判决发布到 SOC Slack 频道,这样分析师就不需要轮询 API - **STIX/TAXII 导出**——标准化的威胁情报导出格式,允许与 MISP 或 ThreatConnect 等商业 TIP 平台集成 - **评分中的近期加权**——3 年前的 VirusTotal 检测应该比上个月的检测分数低;评分算法目前将所有检测同等对待 - **批量增强端点**——`POST /ioc/enrich/bulk` 接受最多 100 个 IOC,以流的形式返回结果;对于处理完整的警报 IOC 列表很有用 - **Shodan 集成**——为 IP 添加端口/服务暴露数据;没有先前滥用历史的 IP 运行端口 4444 比运行端口 443 的 IP 更可疑 ## 作者 **Ahmed [Last Name**] 美国沙迦大学计算机科学毕业生 针对阿联酋的蓝队/SOC 分析师职位 [LinkedIn](https://linkedin.com/in/[handle]) · [GitHub](https://github.com/[handle])
标签:搜索引擎查询, 测试用例, 请求拦截, 逆向工具