| name | triaging-vulnerabilities-with-ssvc-framework |
| description | 使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。 |
| domain | cybersecurity |
| subdomain | vulnerability-management |
| tags | ["ssvc","vulnerability-triage","cisa","vulnerability-prioritization","decision-tree","cvss","remediation","risk-management"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 SSVC 框架对漏洞进行分类(Triaging Vulnerabilities with SSVC Framework)
概述
利益相关方特定漏洞分类(Stakeholder-Specific Vulnerability Categorization,SSVC)框架由卡内基梅隆大学软件工程研究所(SEI)与 CISA 合作开发,提供一种用于漏洞优先排序的结构化决策树方法。与单独使用 CVSS 不同,SSVC 综合考虑漏洞利用状态、技术影响、可自动化程度、任务普遍性和公共福祉影响,产出以下四种可操作结果之一:Track(跟踪)、*Track(重点跟踪)**、Attend(关注) 或 Act(立即行动)。
前置条件
- Python 3.9+,安装
requests、pandas 和 jinja2 库
- 可访问 CISA KEV 目录 API 和 FIRST 的 EPSS API
- NVD API 密钥(可选,用于获得更高速率限制)
- 来自 OpenVAS、Nessus 或 Qualys 等工具的漏洞扫描结果
SSVC 决策点
1. 漏洞利用状态(Exploitation Status)
评估当前漏洞利用活动:
- None(无) - 无主动利用证据
- PoC(概念验证) - 存在公开的概念验证代码
- Active(主动利用) - 观察到野外主动利用(检查 CISA KEV)
curl -s "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json" | \
python3 -c "import sys,json; data=json.load(sys.stdin); cves=[v['cveID'] for v in data['vulnerabilities']]; print('Active' if 'CVE-2024-3400' in cves else 'Check PoC/None')"
2. 技术影响(Technical Impact)
确定被利用后的受损范围:
- Partial(部分) - 仅限于系统功能或数据的子集
- Total(全部) - 完全控制受影响系统,完整数据访问
3. 可自动化程度(Automatability)
评估漏洞利用是否可以大规模自动化:
- No(否) - 需要针对每个受害者进行手动、有针对性的利用
- Yes(是) - 可以编写脚本或具有蠕虫式传播能力
4. 任务普遍性(Mission Prevalence)
受影响产品在您的环境中的部署范围:
- Minimal(最小) - 有限部署,非关键系统
- Support(支持) - 间接支持关键任务功能
- Essential(核心) - 直接支撑核心任务能力
5. 公共福祉影响(Public Well-Being Impact)
对人身安全和公共福利的潜在后果:
- Minimal(最小) - 对安全或公共服务影响可忽略
- Material(实质) - 公共服务显著降级
- Irreversible(不可逆) - 人员伤亡、重大财产损失或关键基础设施故障
SSVC 决策结果
| 结果 | 所需行动 | SLA |
|---|
| Track(跟踪) | 监控,在正常补丁周期内修复 | 90 天 |
| Track(重点跟踪)* | 密切监控,在下一个补丁窗口优先处理 | 60 天 |
| Attend(关注) | 上报高级管理层,加速修复 | 14 天 |
| Act(立即行动) | 立即应用缓解措施,执行层知晓 | 48 小时 |
实施步骤
步骤 1:摄取漏洞数据
import requests
import json
kev_url = "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
kev_data = requests.get(kev_url).json()
kev_cves = {v['cveID'] for v in kev_data['vulnerabilities']}
epss_url = "https://api.first.org/data/v1/epss"
epss_response = requests.get(epss_url, params={"cve": "CVE-2024-3400"}).json()
步骤 2:评估每个决策点
def evaluate_exploitation(cve_id, kev_set):
"""根据 CISA KEV 和 EPSS 数据确定漏洞利用状态。"""
if cve_id in kev_set:
return "active"
epss = requests.get(
"https://api.first.org/data/v1/epss",
params={"cve": cve_id}
).json()
if epss.get("data"):
score = float(epss["data"][0].get("epss", 0))
if score > 0.5:
return "poc"
return "none"
def evaluate_technical_impact(cvss_vector):
"""解析 CVSS 向量中的范围和影响指标。"""
if "S:C" in cvss_vector or "C:H/I:H/A:H" in cvss_vector:
return "total"
return "partial"
def evaluate_automatability(cvss_vector, cve_description):
"""检查攻击向量是否基于网络且复杂度低。"""
if "AV:N" in cvss_vector and "AC:L" in cvss_vector and "UI:N" in cvss_vector:
步骤 3:应用 SSVC 决策树
def ssvc_decision(exploitation, tech_impact, automatability, mission_prevalence, public_wellbeing):
"""CISA SSVC 决策树实现。"""
if exploitation == "active":
if tech_impact == "total" or automatability == "yes":
return "Act"
if mission_prevalence in ("essential", "support"):
return "Act"
return "Attend"
if exploitation == "poc":
if automatability == "yes" and tech_impact == "total":
return "Attend"
if mission_prevalence == "essential":
return "Attend"
return "Track*"
if tech_impact == "total" and mission_prevalence == "essential":
return "Track*"
return "Track"
步骤 4:生成分类报告
python3 scripts/process.py --input scan_results.csv --output ssvc_triage_report.json
cat ssvc_triage_report.json | python3 -m json.tool | head -50
与漏洞扫描器集成
从 Nessus CSV 导入
python3 scripts/process.py \
--input nessus_export.csv \
--format nessus \
--output ssvc_results.json
从 OpenVAS 导入
python3 scripts/process.py \
--input openvas_report.xml \
--format openvas \
--output ssvc_results.json
验证与测试
python3 -c "
from scripts.process import ssvc_decision
# CVE-2024-3400 - Palo Alto PAN-OS 命令注入(已列入 KEV)
assert ssvc_decision('active', 'total', 'yes', 'essential', 'material') == 'Act'
# CVE-2024-21887 - Ivanti Connect Secure(PoC 可用)
assert ssvc_decision('poc', 'total', 'yes', 'support', 'minimal') == 'Attend'
print('所有 SSVC 决策测试通过')
"
参考资料