Edi-San24/ioc-reputation-scorer
GitHub: Edi-San24/ioc-reputation-scorer
聚合AlienVault OTX、VirusTotal和abuse.ch三大威胁情报源的多源IOC声誉评分与ML增强分诊管道,实现自动化置信度加权评分、异常检测、行为聚类和活动分类。
Stars: 1 | Forks: 0
# IOC 声誉评分系统



一个多源 IOC 扩展与分诊 pipeline,可自动化跨 AlienVault OTX、VirusTotal 和 abuse.ch 的威胁指标分析。专为需要带有 ML 增强行为分析的快速、置信度加权声誉评分的 CTI 分析师、SOC 团队和安全研究人员而构建。
## 它的功能
查询任何 IP、域名、文件哈希或 URL,并在几秒钟内获得一个置信度加权的声誉评分——由三个实时威胁情报源和一个三模型 ML pipeline 提供支持。
## 核心功能
**威胁 Feed 聚合**
同时查询 AlienVault OTX、VirusTotal 和 abuse.ch。结果被规范化为统一的 schema 并跨源合并——标记某个指标的源越多,置信度越高。
**置信度加权评分**
每个 IOC 会根据源可靠性权重、IOC 类型乘数和时效衰减获得一个 0–100 的评分。昨天被三个源标记的 IP 得分会高于六个月前被一个源标记的 IP。
**ML 增强分诊**
每次查询都会运行三个模型:
- Isolation Forest —— 标记统计上异常的指标
- K-Means clustering —— 分配行为画像(Botnet C2、Phishing、APT Indicator 等)
- Random Forest —— 预测活动关联性及其置信度分数
**结构化报告**
每次查询都可以将 JSON 或 CSV 情报报告导出到 `data/reports/`。
**白名单保护**
已知合法基础设施(Google、Cloudflare、Apple、GitHub)绝不会被误报,无论其 pulse 数量多少——这解决了基于 pulse 数量评分器中常见的品牌滥用偏见。
## 架构
```
ioc-reputation-scorer/
│
├── feeds/ # Threat feed clients
│ ├── otx_client.py # AlienVault OTX API
│ ├── abusech_client.py # MalwareBazaar, URLhaus, Feodo Tracker
│ ├── vt_client.py # VirusTotal API
│ └── feed_aggregator.py # Normalizes all sources into unified schema
│
├── scoring/ # Reputation scoring engine
│ ├── reputation_scorer.py
│ └── score_config.yaml # Tunable weights (no code changes needed)
│
├── ml/ # Machine learning pipeline
│ ├── feature_engineering.py
│ ├── anomaly_detector.py
│ ├── clusterer.py
│ ├── campaign_classifier.py
│ └── model_trainer.py
│
├── reporting/ # Structured report generation
│ └── report_builder.py
│
├── dashboard/ # Streamlit visual interface
│ └── app.py
│
├── models/ # Pre-trained ML models
├── data/reports/ # Generated intelligence reports
├── cli.py # Command line interface
└── config.py # Global settings and API keys
```
## 安装说明
**前置条件:** Python 3.10+
```
# 克隆 repository
git clone https://github.com/Edi-San24/ioc-reputation-scorer.git
cd ioc-reputation-scorer
# 创建并激活 virtual environment
python3 -m venv venv
source venv/bin/activate # Mac/Linux
venv\Scripts\activate # Windows
# 安装 dependencies
pip install -r requirements.txt
```
**所需 API 密钥**
将 `.env.example` 复制到 `.env` 并添加你的密钥:
```
cp .env.example .env
```
**预训练 ML 模型**(首次使用前必须执行):
```
python -m ml.model_trainer
```
这将查询你的训练 IOC 列表并将三个拟合好的模型保存到 `models/`。
由于 API 速率限制,大约需要 15–20 分钟。
## 用法
**单个 IOC 查询:**
```
python cli.py --ioc 185.220.101.45 --type ip
```
**带报告输出的查询:**
```
python cli.py --ioc 185.220.101.45 --type ip --output json
```
**详细模式(显示评分明细):**
```
python cli.py --ioc 185.220.101.45 --type ip --verbose
```
**从文件批量查询:**
```
python cli.py --file iocs.txt --output csv
```
文件格式 (`iocs.txt`):
**启动仪表板:**
```
streamlit run dashboard/app.py
```
**支持的 IOC 类型:** `ip` `domain` `hash` `url`
## 评分方法
每个 IOC 获得的声誉评分(0–100)计算方式如下:
| 组件 | 描述 |
|---|---|
| `base_score` | pulse 数量、源数量、标签多样性以及恶意软件家族关联性的加权和 |
| `source_confidence` | 每个返回数据源的可靠性评分的加权平均值 |
| `type_multiplier` | IOC 类型调整——由于误报率较低,hash (1.3×) 的权重高于 IP (1.0×) |
| `recency_decay` | 基于时间的惩罚——最后一次出现在 180–365 天前的 IOC 评分为 50%,超过 365 天的为 25% |
**严重性标签**
| 评分 | 严重性 |
|---|---|
| 85–100 | 🔴 严重 |
| 65–84 | 🟠 高 |
| 40–64 | 🟡 中 |
| 0–39 | 🟢 低 |
源权重可在 `scoring/score_config.yaml` 中调整,无需修改任何 Python 代码。
## ML Pipeline
当预训练模型可用时,每次查询都会运行三个模型。
**Isolation Forest —— 异常检测**
标记相对于训练语料库具有统计异常性的 IOC。
一个具有极端 pulse 数量且没有国家/地区属性的 IP 会比正常数据点更快被隔离——以 `is_anomaly: true` 呈现。
**K-Means Clustering —— 行为分析**
根据 IOC 的特征向量将其分为六种行为画像:
| 聚类 | 画像 |
|---|---|
| 0 | Botnet C2 基础设施 |
| 1 | Phishing / 凭证收集 |
| 2 | 常见恶意软件分发 |
| 3 | 扫描 / 探测活动 |
| 4 | 高置信度 APT Indicator |
| 5 | 低信号 / 未知 |
**Random Forest —— 活动分类**
预测某个 IOC 是与已知威胁行为者活动相关,还是属于一般的投机性活动。返回二元预测以及介于 0 和 1 之间的置信度分数。
使用来自 OTX pulse 的 70 个 IOC 进行训练,涵盖 Emotet、RedLine Stealer、Cobalt Strike 和已知良性基础设施。交叉验证平均 F1:0.954
(+/- 0.063)。
## 已知限制
**数据集规模** —— 活动分类器是在 70 个带有从丰富信号中提取的合成标签的 IOC 上训练的。生产环境部署需要大规模经过分析师验证的真实标签。该架构专为这种扩展而设计。
**品牌滥用偏见** —— 主要合法域名(Apple、Google、Microsoft)在威胁 Feed 中频繁出现,因为攻击者会冒充它们。白名单解决了已知基础设施的此问题,但新的合法域名得分可能仍会比预期的高。
**API 依赖性** —— 评分质量取决于查询时的 API 可用性。系统通过重试逻辑优雅地处理 OTX 速率限制和偶尔的超时,但如果源不可用,评分将会有所波动。
**合成标签** —— `_generate_labels()` 使用 pulse 数量和源数量作为活动关联性的代理。由于这些信号也是模型中的特征,这引入了循环性。生产系统将用分析师验证的注释替换合成标签。
## 数据源
| 源 | 覆盖范围 | 是否需要认证 |
|---|---|---|
| AlienVault OTX | IP、域名、hash、URL | 是(免费) |
| VirusTotal | IP、域名、hash、URL | 是(免费) |
| MalwareBazaar | 文件 hash | 是(免费) |
| URLhaus | URL、域名 | 是(免费) |
| Feodo Tracker | IP (botnet C2) | 否 |
## 致谢
- [AlienVault OTX](https://otx.alienvault.com)
- [VirusTotal](https://virustotal.com)
- [abuse.ch](https://abuse.ch)
## 许可证
MIT 许可证 —— 可免费使用、修改和分发,但需注明出处。
标签:abuse.ch, Apex, APT检测, Ask搜索, DNS 反向解析, IOC富化, IOC评估, IP 地址批量处理, Isolation Forest, K-Means, Kubernetes, Python, Random Forest, TI平台, VirusTotal, 信誉评分, 僵尸网络C2, 入侵指标, 品牌保护, 多源情报, 威胁情报, 威胁指标分析, 安全报告, 安全运营中心, 实时处理, 开发者工具, 异常检测, 无后门, 机器学习, 活动分类, 白名单, 网络信息收集, 网络安全, 网络映射, 自动化分类, 行为聚类, 逆向工具, 隐私保护