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, 域名侦查, 威胁情报, 安全规则引擎, 安全运营, 开发者工具, 扫描框架, 无后门, 自动化分类, 逆向工具