Rihanat/Cyber-threat-prioritization

GitHub: Rihanat/Cyber-threat-prioritization

该项目是一个基于可解释机器学习的网络安全威胁优先级排序管道,通过融合多源威胁情报为 SOC 提供透明、可审计的告警评分与分诊方案。

Stars: 1 | Forks: 0

# 🛡️ 面向企业网络威胁优先级排序的可解释机器学习 ![Python](https://img.shields.io/badge/python-3.9+-blue) ![XGBoost](https://img.shields.io/badge/model-XGBoost-orange) ![AUC-ROC](https://img.shields.io/badge/AUC--ROC-0.692-brightgreen) ![LightGBM](https://img.shields.io/badge/model-LightGBM-9cf) ![SHAP](https://img.shields.io/badge/explainability-SHAP-success) ![MITRE ATT&CK](https://img.shields.io/badge/framework-MITRE%20ATT%26CK-red) ![License](https://img.shields.io/badge/license-MIT-yellow) **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 号行政令**(提升国家网络安全) — 透明、可审计的检测逻辑 ## 📊 结果 ![ROC 和 Precision-Recall 曲线](https://static.pigsec.cn/wp-content/uploads/repos/cas/71/71bdafe868fdd8f2449f2ac69b9491ac8790bdd0380c94ef4bbf619db9d2b6b8.png) ### 模型性能(保留测试集,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 | ![SHAP 全局特征重要性](https://static.pigsec.cn/wp-content/uploads/repos/cas/0f/0f104e537cabe0058957faa46609e15cd58d3d5e0460e96315901ce89e104471.png) ![SHAP 蜂群摘要图](https://static.pigsec.cn/wp-content/uploads/repos/cas/23/23426bd8d6ce50157e67f782e13965a2a1d38ed13170d9244825771aa6783db4.png) 也支持针对每个告警的解释 —— 以下是模型对单个高优先级升级的解释: ![单个告警的 SHAP 瀑布图](https://static.pigsec.cn/wp-content/uploads/repos/cas/98/98d4d9847e67606af5a5b536fcdfdd99158d4f4da5b4c63398a173fd8320662f.png) ### 运营公平性评估 与审计人口统计公平性的临床模型不同,这里的风险不在于针对受保护群体的歧视 —— 而是模型可能暗中学会降低对企业特定部分(某个业务部门、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)。单一的全局阈值隐含地过度偏向于对高价值资产最强的信号。直接的缓解措施 —— 也是本次审计得出的诚恳建议 —— 是采用**特定层级的决策阈值**,而不是在整个资产范围内使用单一阈值,并且在任何生产环境部署之前进行重新验证。 ![子组 AUC 比较](https://static.pigsec.cn/wp-content/uploads/repos/cas/f6/f6216060bfaa9abe48056e05f4df3baf28693abc8d61245418cb6cbb44396da5.png) ![子组 FNR 比较](https://static.pigsec.cn/wp-content/uploads/repos/cas/b7/b7ef06adabbaa09a8663104dd1a53ebaaeab4d5fc6c5533b08e10e00eee99e59.png) ## 🚀 快速开始 ### 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, 威胁情报, 开发者工具, 无后门, 机器学习, 网络安全, 自定义请求头, 逆向工具, 隐私保护