Rihanat/Cyber-threat-prioritization
GitHub: Rihanat/Cyber-threat-prioritization
该项目是一个基于可解释机器学习的网络安全威胁优先级排序管道,通过融合多源威胁情报为 SOC 提供透明、可审计的告警评分与分诊方案。
Stars: 1 | Forks: 0
# 🛡️ 面向企业网络威胁优先级排序的可解释机器学习







**Rianat Abbas**
## 🧪 关于数据的说明
本仓库提供了一个**合成队列生成器**([`01_data_acquisition.py`](01_data_acquisition.py)),而不是对任何供应商真实威胁情报源的二次分发。真实的 STIX/TAXII 集合、商业 CTI 订阅以及 CISA KEV/EPSS 拉取受限于许可证、保密协议(NDA)或速率限制,不适合放在公开仓库中。相反,该合成生成器模拟了您从这些来源获得的**真实模式和真实关系** —— 技术/战术对提取自真实的 MITRE ATT&CK ID,KEV 条目是来自已发布目录的真实 CVE ID,优先级标签由潜在的分析师评分函数(KEV 状态、EPSS、检测盲点、资产暴露面、异常信号)加上现实噪声生成,绝不是对模型自身输入特征的泄露。
将 [`01_data_acquisition.py`](01_data_acquisition.py) 替换为实时的 `taxii2-client` 轮询并加上真实的 KEV/EPSS/Sigma 拉取,后续流程完全不需要改变 —— 其他所有步骤仅依赖于该模块生成的 schema。
## 📌 概述
尽管多年来在 SOAR 和 SIEM 工具上进行了大量投资,但大多数 SOC 在分类告警时仍然主要依靠直觉和静态的严重性字段。本项目旨在解决在 SOC 工作流中信任基于 ML 的优先级评分所面临的三个具体障碍:
| 障碍 | 本项目的解决方案 |
|---|---|
| 🔲 黑盒优先级评分 | 通过 LightGBM TreeExplainer 为每个告警提供 SHAP 瀑布图解释 |
| 🔲 缺乏部署可靠性保障 | 指定了可观测性架构:Prometheus + Grafana + AKS + SLOs |
| 🔲 聚合指标中隐藏的盲点 | 对 19 个子组进行全面的运营公平性审计(资产层级、业务部门、OS 平台、区域) |
### 符合美国网络安全政策与标准
- ✅ **NIST CSF 2.0** — 通过量化的、可解释的优先级评分支持检测和响应功能
- ✅ **CISA 绑定运营指令 22-01** — KEV 状态是一等模型特征,而不是事后补充
- ✅ **FIRST EPSS** — 漏洞利用概率评分直接集成到特征集中
- ✅ **第 14028 号行政令**(提升国家网络安全) — 透明、可审计的检测逻辑
## 📊 结果

### 模型性能(保留测试集,n = 2,250)
| 模型 | AUC-ROC (95% CI) | AUC-PRC | F1 | Recall | Brier Score |
|---|---|---|---|---|---|
| 逻辑回归 | 0.693 (0.666–0.721) | 0.386 | 0.396 | 0.522 | 0.220 |
| **XGBoost** | 0.692 (0.665–0.719) | 0.379 | 0.398 | 0.551 | 0.218 |
| **LightGBM** ⭐ | 0.690 (0.663–0.717) | 0.365 | 0.384 | 0.502 | **0.166** |
| 基于规则的启发式算法 (KEV / EPSS / 覆盖率) | 0.556 | — | — | — | — |
⭐ LightGBM 是用于部署的模型:它的 AUC 落后于其他两个模型不到一个百分点,但实现了**显著更好的校准**(Brier Score 为 0.166,而其他模型约为 0.22),并且其 TreeExplainer 能够为每个告警提供亚秒级的 SHAP 解释,非常适合实时的 `/explain` endpoint。所有三个经过训练的模型都轻松超越了当今大多数 SOC 正在运行的静态 KEV/EPSS/覆盖率启发式算法(AUC 0.556) —— 逻辑回归和 XGBoost 基本持平,这与该队列中潜在的风险关系接近对数线性相一致。
### 队列摘要
| 特征 | 数值 |
|---|---|
| 告警总数 | 15,000 |
| 升级为高优先级的告警 | 2,774 (18.5%) |
| 关联了 CVE 的告警 | 6,211 (41.4%) |
| 映射到 CISA KEV 条目的告警 | 354 (2.4%) |
| Sigma 规则覆盖率为零的告警 | 3,072 (20.5%) |
| 面向互联网的资产 | 3,674 (24.5%) |
| EPSS 中位数评分(包含 CVE 的告警) | 0.076 |
### 顶级 SHAP 特征(LightGBM,测试集上的平均 \|φ\|)
| 特征 | 平均 \|SHAP value\| |
|---|---|
| 资产关键性:低层级 | 0.153 |
| 面向互联网 | 0.087 |
| Sigma 规则覆盖率 | 0.084 |
| Sigma 规则数量 | 0.072 |
| 异常评分 | 0.065 |
| IOC 置信度 | 0.059 |
| 资产关键性:中层级 | 0.048 |
| 资产关键性:核心资产层级 | 0.047 |
| CISA KEV 标志 | 0.036 |
| EPSS 评分 | 0.029 |


也支持针对每个告警的解释 —— 以下是模型对单个高优先级升级的解释:

### 运营公平性评估
与审计人口统计公平性的临床模型不同,这里的风险不在于针对受保护群体的歧视 —— 而是模型可能暗中学会降低对企业特定部分(某个业务部门、OS 平台、区域)威胁的评分,同时表面上的聚合指标看起来却很好。我们使用 [Hardt et al., NeurIPS 2016] 的均等几率框架,在模型自身的 F1 最优决策阈值(0.392)下,审计了 19 个子组的 AUC 和假阴性率的均等性。
| 运营维度 | 最大 ΔAUC | 最大 ΔFNR | 状态 |
|---|---|---|---|
| 资产关键性 | 0.045 | 0.480 | ⚠️ 需复核 |
| 业务部门 | 0.044 | 0.075 | ✅ 正常 |
| OS 平台 | 0.031 | 0.125 | ⚠️ 需复核 |
| 地理区域 | 0.055 | 0.159 | ⚠️ 需复核 |
在单一的全局阈值下,**19 个子组中有 13 个通过**(ΔAUC ≤ 0.05,ΔFNR ≤ 0.10)。值得关注的发现是:在**核心资产**上的召回率非常出色(FNR ≈ 0.02 —— 模型几乎不会漏掉那里的任何真实升级),但在**低/中层级**资产上却急剧下降(FNR 0.61–0.70)。单一的全局阈值隐含地过度偏向于对高价值资产最强的信号。直接的缓解措施 —— 也是本次审计得出的诚恳建议 —— 是采用**特定层级的决策阈值**,而不是在整个资产范围内使用单一阈值,并且在任何生产环境部署之前进行重新验证。


## 🚀 快速开始
### 1. 克隆并安装
```
git clone https://github.com//threat-prioritization.git
cd threat-prioritization
pip install -r requirements.txt
```
### 2. 运行完整 Pipeline
```
python run_all.py
```
无需外部凭证或下载数据 —— 合成队列是实时生成的。这将按顺序执行所有 6 个步骤(约 45–60 秒):
| 步骤 | 脚本 | 运行时间 |
|---|---|---|
| 1/6 | 数据获取与队列构建 | ~1.5s |
| 2/6 | 特征工程与 训练/验证/测试集 划分 | ~3s |
| 3/6 | 模型训练 (LogReg, XGBoost, LightGBM) | ~21s |
| 4/6 | SHAP 可解释性分析 | ~17s |
| 5/6 | 公平性与子组分析 | ~3s |
| 6/6 | 报告表格与最终摘要 | <1s |
### 3. 运行单个步骤
```
python 01_data_acquisition.py
python 02_feature_engineering.py
python 03_train_models.py
python 04_shap_analysis.py
python 05_equity_analysis.py
python 06_generate_paper_tables.py
```
## 🔁 可复现性
所有步骤均使用固定的随机种子 (42)。运行完整的 pipeline 可以精准复现本 README 中的每一个表格和图表。
## 📁 项目结构
```
threat-prioritization/
│
├── run_all.py # Master pipeline runner
│
├── 01_data_acquisition.py # Synthetic STIX/TAXII-style cohort generator
├── 02_feature_engineering.py # Feature matrix + train/val/test split
├── 03_train_models.py # LogReg, XGBoost, LightGBM + hyperopt tuning
├── 04_shap_analysis.py # SHAP TreeExplainer + figures
├── 05_equity_analysis.py # Subgroup equity evaluation
├── 06_generate_paper_tables.py # Report-ready tables + metrics JSON
│
├── data/
│ └── processed/ # Generated cohort + splits (not tracked by git)
│
├── models/ # Trained model artifacts (not tracked by git)
│ ├── xgboost_model.pkl
│ ├── lightgbm_model.pkl
│ └── logistic_regression_model.pkl
│
├── outputs/
│ ├── figures/ # All README figures (PDF + PNG)
│ │ ├── roc_prc_curves.*
│ │ ├── calibration_curves.*
│ │ ├── shap_global_importance.*
│ │ ├── shap_beeswarm.*
│ │ ├── shap_waterfall.*
│ │ ├── equity_auc_comparison.*
│ │ └── equity_fnr_comparison.*
│ └── metrics/
│ ├── paper_metrics.json
│ ├── cohort_table.csv
│ ├── performance_table.csv
│ ├── equity_table.csv
│ ├── equity_detail_table.csv
│ └── shap_global_importance.csv
│
├── requirements.txt
└── LICENSE
```
## 🏗️ 计划的部署架构
下方的部署架构被指定为用于未来实施的概念性、可复现设计 —— 并非已部署的基础设施。
```
SIEM / XDR Azure Kubernetes Service
Event Stream ─────▶ ┌─────────────┐ ┌─────────────────┐
(STIX/TAXII) │ FastAPI │ │ LightGBM + │
│ /predict │ │ SHAP │
│ /explain │ │ TreeExplainer │
└──────┬──────┘ └────────┬─────────┘
│ │
└─────────┬──────────┘
▼
┌───────────────────────────────┐
│ Prometheus + Grafana │
│ SLO Monitoring + Drift │
│ Detection │
└───────────────────────────────┘
```
**目标 SLOs:**
- 系统可用性:≥ 99.9%
- p99 预测延迟:≤ 200 ms
- p99 SHAP 延迟:≤ 200 ms
- 错误率:≤ 0.1%
- 预测漂移:偏离 30 天基线 ≤ 2σ
## 📦 依赖要求
```
pandas
numpy
scikit-learn
xgboost
lightgbm
shap
matplotlib
seaborn
hyperopt
imbalanced-learn
fastapi
uvicorn
prometheus-client
```
安装所有依赖:
```
pip install -r requirements.txt
```
## 📝 引用
如果您基于此 pipeline 进行开发,请引用:
```
@misc{abbas2026threatprioritization,
title = {Explainable Machine Learning for Enterprise Cyber Threat Prioritization},
author = {Abbas, Rianat},
year = {2026},
note = {GitHub repository},
url = {https://github.com//threat-prioritization}
}
```
## 🔐 数据与道德声明
- 本仓库中的所有告警数据均为**完全合成**的数据,由 [`01_data_acquisition.py`](01_data_acquisition.py) 生成。不包含也不需要任何真实的 STIX/TAXII 源、供应商 CTI 订阅或内部企业数据。
- 引用的 CISA KEV 目录条目是真实的、已发布的 CVE ID,仅用于为合成生成器提供逼真的结构 —— 不包含也不暗示任何漏洞利用指南。
- 公平性评估遵循 [Hardt et al., NeurIPS 2016] 的均等几率框架。
- 本仓库用于作品集 / 方法论演示,不是生产级安全工具。在未进行全面的安全和隐私审查之前,请勿将其直接应用于真实的 SIEM/XDR 数据。
## 📜 许可证
本项目基于 [MIT 许可证](LICENSE) 发布。
## 📬 联系方式
**Rianat Abbas**
高级分析员 · ISACA 全球咨询委员会受任人
*使用以下技术构建:STIX/TAXII · MITRE ATT&CK · Sigma · CISA KEV · FIRST EPSS · XGBoost · LightGBM · SHAP · FastAPI · Prometheus · Grafana · Azure Kubernetes Service*
标签:Apex, LightGBM, Python, XGBoost, 可解释AI, 威胁情报, 开发者工具, 无后门, 机器学习, 网络安全, 自定义请求头, 逆向工具, 隐私保护