DimakatsoMalope/ioc-triage-platform

GitHub: DimakatsoMalope/ioc-triage-platform

一个基于 Python 的 IOC 自动化富化与分诊平台,通过集成多源威胁情报 API 实现并发查询、加权评分和案例管理,帮助 SOC 分析师减少手动调查工作量。

Stars: 0 | Forks: 0

# IOC 富化与自动化分诊平台 v2.0 ## 有何不同 这不仅仅是一个脚本——它是一个展示了企业级安全自动化概念的**迷你 SOAR 平台**: | 功能 | v1 (基础版) | v2 (当前版本) | |---------|-----------|-------------------| | API 调用 | 顺序执行 (6s/IOC) | **并发执行** (~2s/IOC) | | 速率限制 | 无 | **令牌桶算法 + 指数退避** | | 重试机制 | 无 | **带抖动的 3 次重试** | | IOC 去重 | 无 | **富化前自动去重** | | 缓存 | 无 | **基于文件的 24 小时缓存** | | 置信度 | 硬编码 | **基于多源数据一致性得出** | | 评分透明度 | 单一数字 | **完整的分数归因** | | 进度追踪 | 无 | **tqdm 进度条** | | 报告排序 | 按输入顺序 | **按严重程度排序 (严重优先)** | | Case 管理 | 无 | **SQLite 带审计追踪** | | 报告 | 仅 JSON | **JSON + Markdown + CSV** | ## 架构 ``` ioc-triage-platform/ ├── config/ │ └── config.py # Environment & API configuration ├── input/ │ └── iocs.csv # IOC input file ├── reports/ # Generated triage reports ├── src/ │ ├── main.py # Orchestration engine & CLI │ ├── virustotal.py # VT API v3 client with rate limiting │ ├── abuseipdb.py # AbuseIPDB API v2 client │ ├── shodan_lookup.py # Shodan API client │ ├── scoring.py # Multi-source scoring with transparency │ ├── report_generator.py # JSON/MD/CSV report generation │ ├── case_manager.py # SQLite case management system │ ├── rate_limiter.py # Token bucket + retry logic │ └── utils.py # IOC classification, dedup, cache ├── tests/ # Unit tests ├── requirements.txt ├── .env.example └── README.md ``` ## 快速开始 ### 前置条件 - Python 3.11+ - [VirusTotal](https://www.virustotal.com/gui/join-us)、[AbuseIPDB](https://www.abuseipdb.com/register) 和 [Shodan](https://account.shodan.io/register) 的 API 密钥 ### 安装 ``` # 克隆仓库 git clone https://github.com/yourusername/ioc-triage-platform.git cd ioc-triage-platform # 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows # 安装依赖 pip install -r requirements.txt # 可选:安装 tqdm 以显示进度条 pip install tqdm ``` ### 配置 ``` # 复制示例环境文件 cp .env.example .env # 使用你的 API 密钥编辑 .env nano .env ``` ``` VT_API_KEY=your_virustotal_key ABUSEIPDB_API_KEY=your_abuseipdb_key SHODAN_API_KEY=your_shodan_key ``` ### 使用方法 ``` # 基本运行 python src/main.py -i input/iocs.csv # 仅生成 JSON 和 CSV python src/main.py -i input/iocs.csv --formats json csv # 跳过私有 IP,使用 3 个并发 worker python src/main.py -i input/iocs.csv --skip-private --workers 3 # 禁用 case management python src/main.py -i input/iocs.csv --no-cases # 验证配置 python src/main.py --validate # 清除 API 缓存 python src/main.py --clear-cache ``` ## 性能:并发 vs 顺序 | IOC 数量 | 顺序执行 | 并发执行 | 提速 | |------|-----------|------------|---------| | 10 | ~60s | ~20s | **3x** | | 50 | ~300s | ~100s | **3x** | | 100 | ~600s | ~200s | **3x** | *基于每个数据源 API 平均响应时间为 2 秒* ## 评分方法 ### 加权综合算法 | 来源 | 权重 | 指标 | |--------|--------|---------| | VirusTotal | 40% | 检出率、引擎数量、信誉度 | | AbuseIPDB | 40% | 滥用置信度、报告数量、分类 | | Shodan | 20% | 暴露端口、CVE、风险指标 | ### 评分透明度 报告不再仅仅显示 `Score: 92`,而是展示: ``` Score: 92/100 Score Breakdown: VirusTotal: 85.0 × 40% = 34.0 + High detection ratio ≥50% (+50 pts) + High engine coverage ≥60 (+10 pts) + Negative reputation -12 (+24 pts) AbuseIPDB: 95.0 × 40% = 38.0 + Abuse confidence 100% (+60 pts) + Report volume ≥50 (+15 pts) + TOR exit node (+10 pts) Shodan: 82.0 × 20% = 16.4 + High-risk ports exposed (+15 pts) + CVEs found (3) (+5 pts) Total: 92.0 ``` ### 置信度推导 置信度是**推导得出**的,而非硬编码: | 有数据的来源数 | 置信度 | 原因 | |-------------------|------------|-----------| | 3+ (其中 VT 引擎数 ≥50) | 高 | 强有力的多源一致性 | | 2 | 中 | 部分相互印证 | | 1 | 低 | 单一来源,信任度有限 | ### 严重程度阈值 | 分数 | 严重程度 | 操作 | |-------|----------|--------| | 80-100 | 🔴 严重 | 立即阻断,升级至 IR (应急响应) | | 60-79 | 🟠 高危 | 紧急调查,考虑隔离 | | 40-59 | 🟡 中危 | 密切监控,计划审查 | | 20-39 | 🟢 低危 | 信息性提示,常规监控 | | 0-19 | ⚪ 信息性 | 无需操作 | ## 🗄️ Case 管理 SQLite Case 管理系统模拟了真实的 SOC 工作流: ``` Alert Generated ↓ IOC Extracted ↓ Enrichment (VT + AbuseIPDB + Shodan) ↓ Risk Scoring ↓ CASE CREATED → CASE-20260721-0001 ↓ Status: Open Assigned: Unassigned Recommendation: Block at firewall Evidence: [Full enrichment data] ↓ Analyst Investigation ↓ Status: In Progress → Closed/Escalated ``` ### Case 操作 ``` from src.case_manager import CaseManager cm = CaseManager() # 列出打开的 case open_cases = cm.list_cases(status="Open") # 分配给分析师 cm.assign_case("CASE-20260721-0001", "analyst@company.com") # 添加调查记录 cm.add_note("CASE-20260721-0001", "Confirmed malicious C2 activity") # 更新状态 cm.update_status("CASE-20260721-0001", "Escalated", notes="Escalated to IR team") # 获取完整时间线 timeline = cm.get_timeline("CASE-20260721-0001") # 获取统计数据 stats = cm.get_stats() ``` ## 示例输出 ### 控制台输出 ``` TRIAGE COMPLETE ====================================================================== 🔴 Critical: 2 🟠 High: 3 🟡 Medium: 1 🟢 Low: 2 ⚪ Informational: 2 ⚠️ Require Immediate Action: 5 📁 Cases Created: 5 open 📄 Reports Generated: • triage_report_20260721_143022.json • triage_report_20260721_143022.md • triage_report_20260721_143022.csv 💾 Cache Stats: 7 entries ====================================================================== ``` ### JSON 报告 (节选) ``` { "ioc": "185.220.101.1", "type": "ip", "score": 87.5, "severity": "Critical", "confidence": "High", "recommendation": "BLOCK IMMEDIATELY - Escalate to incident response", "reasons": [ "High VT detection: 65.2% (42/64 engines)", "Very high abuse confidence: 100%", "High report volume: 127 reports", "TOR exit node detected", "High-risk ports exposed: [22, 3389]" ], "score_breakdown": [ { "source": "VirusTotal", "raw_score": 85.0, "weight": 0.4, "weighted_score": 34.0, "points": ["High detection ratio ≥50% (+50 pts)", ...] } ] } ``` ### Markdown 报告 人类可读的报告,包含: - 包含严重程度统计的高管摘要 - 按严重程度排序的详细发现 - 带有分数归因的评分细分 | MITRE ATT&CK 技术映射 | 杀伤链阶段参考 - 富化详情 (VT 检出、AbuseIPDB 置信度、Shodan 端口/CVE) - 地理位置和 ASN 数据 - 方法论附录 ### CSV 报告 ## 安全注意事项 - **API 密钥存放在 `.env` 中** — 永远不要提交到 Git (`.env` 已在 `.gitignore` 中) - **速率限制** — 令牌桶算法防止 API 被滥用 - **指数退避** — 优雅地处理 429 错误 - **私有 IP 检测** — 对 RFC 1918 地址跳过外部 API 查询 - **输入验证** — 防止注入攻击 - **请求超时** — 防止连接挂起 - **缓存 TTL** — 防止数据在 24 小时后过期 ## 测试 ``` # 运行所有测试 pytest tests/ -v # 运行 coverage pytest tests/ --cov=src --cov-report=html # 运行特定测试 pytest tests/test_utils.py -v ``` ## 🛣️ 路线图 - [x] 并发 API 富化 - [x] 基于令牌桶的速率限制 - [x] 指数退避重试 - [x] IOC 去重 - [x] 响应缓存 (24 小时 TTL) - [x] 基于多源数据一致性的置信度推导 - [x] 带有分数归因的评分透明度 - [x] 进度条 (tqdm) - [x] 按严重程度排序的输出 - [x] 带审计追踪的 SQLite Case 管理 - [ ] MITRE ATT&CK 自动映射 - [ ] PDF 报告导出 - [ ] 带搜索功能的 Flask 仪表板 - [ ] Docker 容器化 - [ ] 使用 GitHub Actions 的 CI/CD - [ ] 更多 TI 来源 (AlienVault OTX, GreyNoise) ## 博客文章:用 Python 构建一个迷你 SOAR 平台 [阅读完整博客文章](link-to-your-blog)
标签:Ask搜索, Python, VirusTotal, 域名侦查, 威胁情报, 安全规则引擎, 安全运营, 开发者工具, 扫描框架, 无后门, 自动化分类, 逆向工具