macbuildssys/vulnscope

GitHub: macbuildssys/vulnscope

VulnScope 是一个基于 NVD 历史数据的机器学习管道,用于分析 CVE 趋势并预测未来可能出现的新兴漏洞类别和风险等级。

Stars: 2 | Forks: 0

# VulnScope:CVE 趋势分析与未来风险预测

LocalChat screenshot

一个研究级的机器学习 pipeline,分析来自 NVD 的 10 多年漏洞 数据,以识别反复出现的弱点、衡量趋势,并预测 哪些 CVE 类别构成最大的新兴风险。 ## 研究问题 ## 工作流:三个命令 ``` python main.py fetch # one-time: download CVEs from NVD into SQLite python main.py build # trend analysis + feature engineering + train + evaluate python main.py predict # offline: forecast next year's emerging threats ``` ## ML 模型 | 模型 | 任务 | 方法 | 目标 | |---|---|---|---| | 线性回归 | 数量预测 | 滞后计数回归 | 每个 CWE 明年的 CVE 数量 | | 逻辑回归 | 新兴威胁检测 | 二分类 | 此 CWE 是否会激增 >50%? | | 随机森林 | 风险等级分类 | 多分类(4 个等级) | 低 / 中 / 高 / 严重 | ### 特征工程 分析单位:每个(年份,CWE)对为一行。每一行由该 CWE 过去三年的滞后历史数据构建,因此数据集中最早可用的训练年份是第四年。 | 特征 | 描述 | |---|---| | count_t, count_lag1–3 | 当前年份和过去三年的 CVE 计数 | | growth_1y, growth_3y | 同比和 3 年复合增长率 | | accel | 增长率的变化(计数的二阶导数) | | volatility | 过去三年计数的标准差 | | momentum | count_t × growth_1y — 规模调整后的趋势信号 | | avg_score | 此(年份,CWE)对的平均 CVSS 基础分数 | | pct_critical, pct_high | 严重和高严重级别的 CVE 占比 | | pct_network, pct_no_auth | 可通过网络利用 / 无需权限的 CVE 占比 | | year_norm | year − min_year — 让模型检测长期的长期趋势 | | sc_category_* | 上述五个供应链类别的独热编码指标 | ### 时间划分。无数据泄露 训练使用 2023 年之前的所有数据。测试使用 2023 年及以后的数据。这反映了生产环境的实际使用情况:模型在历史数据上进行训练,并在其从未见过的数据上进行评估。 ## 输出 **趋势分析图表** (`results/figures/`): - 每年的 CVE 数量 - 按历史总数量排名的顶级 CWE - 随时间变化的 CWE 增长趋势(前 6 名) - 每年的严重性分布 - 随时间变化的攻击向量占比 **文本报告** (`results/analysis_report.txt`): 反复出现的漏洞、增长最快的 CWE、正在衰退的 CWE、近期的严重性趋势。 **ML 评估** (`results/figures/eval_*.png` + `results/metrics/metrics.json`): LR 预测准确率、用于激增检测的 LogReg ROC、RF 混淆矩阵、SHAP 可解释性。 **威胁预测** (`python main.py predict`): 下一年新兴、持续存在和正在衰退的 CWE 类别的排序列表。 ## 安装 ``` git clone https://github.com/macbuildssys/vulnscope.git cd vulnscope python -m venv .venv && source .venv/bin/activate pip install -r requirements.txt ``` ## 用法 ### 使用真实 NVD 数据的完整 pipeline ``` # 设置 NVD API key(免费,可显著加快下载速度) python main.py init # 下载约 262,000 个 CVE(使用 API key 需 3-5 分钟) python main.py fetch # 趋势分析 + 训练 + 评估 python main.py build # 预测下一年的新兴威胁 python main.py predict # 检查数据库中的内容 python main.py db-status ``` ### 演示模式(无网络,合成数据) ``` python main.py demo ``` ### 预测输出示例 ``` { "forecast_year": 2026, "top_emerging_threats": [ { "cwe": "CWE-502", "predicted_count": 542, "surge_probability": 0.91, "risk_tier": "HIGH", "growth_1y": 0.38, "avg_score": 8.1 } ], "summary": { "critical_risk_cwes": 4, "surge_candidates": 7 } } ``` ## 局限性与后续步骤 - 尚未包含 CVSS v4 数据(NVD 正在积极对 v4 下的 CVE 进行评分;扩展解析器是一项近期的待办事项)。 - 未使用 CVE 描述中的文本特征。TF-IDF 或 SecBERT embeddings 将增加结构化 CVSS 向量之外的信号。 - 面板数据集相对较小(每个年份-CWE 对只有一行)。更丰富的聚合(例如按供应商、产品系列或 CWE 子类别)将增加观察值的数量。 - EPSS(Exploit Prediction Scoring System)分数可以作为附加特征加入,以捕获超越 CVSS 严重性评级的可利用性。 ## 数据来源 NVD API 2.0:https://services.nvd.nist.gov/rest/json/cves/2.0 NVD 数据属于公共领域。 ## 许可证 在 MIT 许可证下分发。见 [许可证](LICENSE)
标签:Apex, Python, SQLite, 代码示例, 数据分析, 数据预测, 无后门, 机器学习, 漏洞分析, 路径探测, 逆向工具