dronzzer/ioc-enrichment

GitHub: dronzzer/ioc-enrichment

一款专为 SOC 分析师设计的自动化 IOC 情报富化工具,支持批量查询 IP、域名和文件哈希在多个威胁情报源中的信誉并给出综合判定。

Stars: 0 | Forks: 0

# IOC 情报富化工具 一款专为 SOC 分析师设计的自动化失陷标示符 (IOC) 情报富化工具——支持针对多个威胁情报源检查 IP、域名和文件哈希,并返回综合判定结果,免去在多个浏览器标签页中手动逐一查询的繁琐。 包含 CLI 和桌面 GUI,并支持批量输入。 ## 面临的问题 在告警分诊期间,通常需要将每个 IOC(IP、域名、文件哈希)放到多个情报源中进行核查,以确定其是否恶意: - VirusTotal — 多引擎信誉扫描 - AbuseIPDB — 滥用举报历史(仅限 IP) - Shodan — 暴露的服务、开放端口、已知漏洞(仅限 IP) 针对每个工单中的每一个 IOC 手动执行此操作会大幅增加工作量,尤其是当单个告警同时包含多个 IOC 时。本工具将所有这些操作整合为一次查询,并支持一次性批量检查多个 IOC。 ## 功能说明 1. **自动检测 IOC 类型** — IP、域名或文件哈希 (MD5/SHA1/SHA256) 2. **处理防脱敏 IOC** — 自动将复制粘贴的报告格式(如 `1[.]2[.]3[.]4`、`evil[.]example[.]com` 或 `hxxp://` URL)还原为可查询的格式 3. **将每个 IOC 路由至对应的情报源:** | IOC 类型 | 查询情报源 | |---|---| | IP | VirusTotal + AbuseIPDB + Shodan | | Domain | VirusTotal(+ 解析的 IP)+ Shodan(针对解析出的 IP) | | File Hash | 仅 VirusTotal | 4. **将结果汇总为一个判定结论** — `Malicious` (恶意) / `Suspicious` (可疑) / `Clean` (干净) / `Unknown` (未知),并附上详细的判定理由 5. **自动遵守 VirusTotal 免费层级的速率限制** (自动调整请求频率以确保低于 4次/分钟 — 无需手动等待) 6. **同时输出快速扫描摘要和每个情报源的详细分解报告** 7. **按需导出为 CSV**,方便附加到工单或报告中 ## 输出示例 ``` ============================================================ SUMMARY ============================================================ IOC Type Verdict Confidence ---------------------------------------------------------------------- 108.89.40.247 ip Suspicious Medium festung-e.duckdns.org domain Malicious High ============================================================ ──────────────────────────────────────────────────────────── 108.89.40.247 (IP) → Suspicious (Medium confidence) ──────────────────────────────────────────────────────────── VirusTotal: Malicious: 2 Suspicious: 1 Harmless: 78 Undetected: 9 Reputation: -5 Link: https://www.virustotal.com/gui/ip-address/108.89.40.247 AbuseIPDB: Abuse Confidence: 15% Total Reports: 4 Whitelisted: No Country: US ISP: Some Hosting Co Link: https://www.abuseipdb.com/check/108.89.40.247 Shodan: Not available (no query credits) Reasons: - VirusTotal: 2 engine(s) flagged as malicious - AbuseIPDB: abuse confidence score 15% ──────────────────────────────────────────────────────────── ``` ## 设置说明 ``` git clone https://github.com/yourusername/ioc-enrichment cd ioc-enrichment python -m venv venv venv\Scripts\activate # Windows # source venv/bin/activate # macOS/Linux pip install -r requirements.txt cp .env.example .env # Then fill in your own keys — see below ``` ### 所需的 API 密钥(均为免费层级) | 密钥 | 获取地址 | 备注 | |---|---|---| | `VT_API_KEY` | https://www.virustotal.com (Profile → API Key) | 免费层级:4 次请求/分钟,500 次/天 | | `ABUSEIPDB_API_KEY` | https://www.abuseipdb.com (Account → API) | 免费层级:1000 次检查/天 | | `SHODAN_API_KEY` | https://account.shodan.io | 免费层级限制不一 — 详见下文备注 | **切勿提交真实的 `.env` 文件。** Git 中应仅追踪包含占位符值的 `.env.example`。 ## 使用说明 ### CLI ``` python main.py ``` 根据提示粘贴一个或多个 IOC(每行一个,或以逗号/空格分隔),然后在空行处按 Enter 键运行。 ### GUI ``` python gui_app.py ``` GUI 提供: - 一个多行粘贴框,用于输入单个或批量 IOC - 结果表会随着每个 IOC 检测完成而实时填充(由于 VT 的速率控制,批量检查速度较慢,此功能非常实用) - 颜色编码的判定结果(红色 = Malicious,橙色 = Suspicious,绿色 = Clean,灰色 = Unknown) - 点击任意行即可查看其完整的按情报源的详细分解 - 一键导出 CSV ### 独立可执行文件 将 GUI 打包为 Windows `.exe`: ``` pip install pyinstaller pyinstaller --onefile --windowed --name "IOC-Enrichment" gui_app.py ``` 将您的 `.env` 文件放置在生成的 `dist/IOC-Enrichment.exe` 旁边——它并不会被打包进二进制文件中。 ## 架构 ``` Raw IOC Input (single or bulk paste) │ ▼ IOC Detector (refang + classify: IP / domain / hash) │ ├── IP ─────────► VirusTotal + AbuseIPDB + Shodan │ ├── Domain ─────► VirusTotal (resolves IP) ─► Shodan (on resolved IP) │ └── Hash ───────► VirusTotal only │ ▼ Verdict Engine (consolidates signals into one verdict) │ ▼ Summary Table + Detailed Per-Source Breakdown │ ▼ CSV Export (optional) ``` ## 项目结构 ``` ioc-enrichment/ ├── main.py # CLI entry point ├── gui_app.py # Tkinter GUI (reuses main.py's pipeline functions) ├── config.py # Loads API keys from .env ├── requirements.txt ├── .env.example # Template — copy to .env and fill in your own keys │ ├── modules/ │ ├── ioc_detector.py # Refangs and classifies raw input as IP/domain/hash │ ├── vt_checker.py # VirusTotal queries with automatic rate-limit pacing │ ├── abuseipdb_checker.py # AbuseIPDB IP reputation queries │ ├── shodan_checker.py # Shodan host lookups (open ports, services, vulns) │ └── verdict_engine.py # Consolidates all sources into one verdict │ └── output/reports/ # CSV exports land here — gitignored ``` ## 安全说明 - `.env` 已在 `.gitignore` 中列出,且从不被追踪 - 仅提交了包含占位符值的 `.env.example` - 所有 API 密钥均通过 `python-dotenv` 在运行时加载 - 如果您复刻或克隆本项目,必须提供自己的密钥——代码中绝不会硬编码任何密钥 - 如果真实密钥被意外泄露(例如粘贴到了公开场合),请**立即撤销并重新生成密钥**——在后续的 commit 中将其删除并不能将其从 Git 历史记录中抹去 ## 设计说明 如果您打算扩展此项目,以下是一些值得了解的刻意设计决定: - **VirusTotal 限速是自动且全局的** — 整个运行过程中的每次调用都遵守相同的最小 16 秒间隔,因此批量查询本身会比较耗时,但绝不会触发 429 错误。 - **Shodan 的数据是上下文参考性的,不直接决定判定结果** — 主机上的开放端口甚至已知的 CVE 本身并不能证明其具有恶意意图。因此,Shodan 的发现结果仅出现在详细分解和判定理由中,绝不会独立地将最终判定结论更改为 Malicious。 - **AbuseIPDB 的白名单状态会覆盖微弱/嘈杂的信号** — 如果 AbuseIPDB 确认某个 IP 已被列入白名单,那么来自其他来源的轻微矛盾警告将从显示的判定理由中剔除,而不会与“Clean”的判定结果并列显示,否则看起来会自相矛盾。 ## 路线图 - [ ] 解决导致无法完全访问 Shodan 的潜在账户/套餐问题 - [ ] 可选的缓存层,以避免在短时间窗口内重复查询同一个 IOC - [ ] 导出为格式化的 Markdown/HTML 报告(类似于 KEV Investigator 的输出),以便直接作为附件添加到工单中 - [ ] 当 VirusTotal 没有缓存解析记录时,通过 DNS 后备机制进行批量域名 → IP 解析 ## 许可证 MIT — 随意使用、复刻,或将其改编以适用于您自己的 SOC 工作流。
标签:威胁情报, 安全运营, 开发者工具, 扫描框架, 攻击指标, 漏洞挖掘, 自动化分析, 跨站脚本, 逆向工具, 防御判断