Edi-San24/ioc-reputation-scorer

GitHub: Edi-San24/ioc-reputation-scorer

聚合AlienVault OTX、VirusTotal和abuse.ch三大威胁情报源的多源IOC声誉评分与ML增强分诊管道,实现自动化置信度加权评分、异常检测、行为聚类和活动分类。

Stars: 1 | Forks: 0

# IOC 声誉评分系统 ![Python](https://img.shields.io/badge/Python-3.13-blue) ![License](https://img.shields.io/badge/License-MIT-green) ![Status](https://img.shields.io/badge/Status-Active-brightgreen) 一个多源 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, 入侵指标, 品牌保护, 多源情报, 威胁情报, 威胁指标分析, 安全报告, 安全运营中心, 实时处理, 开发者工具, 异常检测, 无后门, 机器学习, 活动分类, 白名单, 网络信息收集, 网络安全, 网络映射, 自动化分类, 行为聚类, 逆向工具, 隐私保护