CVSS 3.1 评分实战:5步手动计算漏洞分数,详解向量字符串与公式
1. 理解CVSS 3.1评分系统的核心框架
CVSS(Common Vulnerability Scoring System)3.1是目前业界广泛采用的漏洞严重性评估标准。与简单依赖自动化工具不同,掌握手动计算方法能让你真正理解评分背后的逻辑,在特殊场景下做出更精准的评估。
评分系统的三大核心指标组:
基础指标组(Base Metrics):评估漏洞的固有特性,包括:
- 攻击向量(AV):网络/相邻网络/本地/物理
- 攻击复杂度(AC):低/高
- 权限要求(PR):无/低/高
- 用户交互(UI):是否需要用户参与
- 影响范围(S):是否影响其他组件
- 机密性(C)/完整性(I)/可用性(A)影响
时间指标组(Temporal Metrics):反映漏洞随时间变化的特性:
- 漏洞利用成熟度(E)
- 修复级别(RL)
- 报告可信度(RC)
环境指标组(Environmental Metrics):根据具体IT环境调整评分:
- 关键资产保护需求(CR/IR/AR)
- 修改后的基础指标值(MAV/MAC/MPR等)
提示:基础评分是CVSS的核心,时间评分和环境评分是在此基础上的调整因子。大多数公开漏洞数据库仅提供基础评分。
2. 解析CVSS向量字符串
向量字符串是CVSS评分的"DNA",它用紧凑的格式编码了所有评分参数。例如:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H向量字符串结构解析:
| 字段 | 示例值 | 含义 |
|---|---|---|
| AV | N | 攻击向量-网络 |
| AC | L | 攻击复杂度-低 |
| PR | N | 权限要求-无 |
| UI | N | 用户交互-不需要 |
| S | U | 影响范围-不变 |
| C | H | 机密性影响-高 |
| I | H | 完整性影响-高 |
| A | H | 可用性影响-高 |
常见指标值速查表:
| 指标 | 可能值 | 对应数值 |
|---|---|---|
| AV | N/A/L/P | 0.85/0.62/0.55/0.2 |
| AC | L/H | 0.77/0.44 |
| PR | N/L/H | 0.85/0.62/0.27 |
| UI | N/R | 0.85/0.62 |
| C/I/A | N/L/H | 0/0.22/0.56 |
3. 五步手动计算CVSS基础评分
3.1 计算攻击可行性子评分(Exploitability)
公式:
Exploitability = 8.22 × AV × AC × PR × UI示例计算:
AV:N(0.85) × AC:L(0.77) × PR:N(0.85) × UI:N(0.85) = 0.474 Exploitability = 8.22 × 0.474 = 3.893.2 计算影响子评分(Impact)
首先计算ISS(Impact Sub-Score):
ISS = 1 - [(1 - C) × (1 - I) × (1 - A)]如果影响范围(S)为"不变"(U):
Impact = 6.42 × ISS如果影响范围(S)为"变化"(C):
Impact = 7.52 × (ISS - 0.029) - 3.25 × (ISS - 0.02)^15示例计算(S:U, C:H, I:H, A:H):
ISS = 1 - [(1-0.56)×(1-0.56)×(1-0.56)] = 0.915 Impact = 6.42 × 0.915 = 5.873.3 确定影响范围系数(Scope)
- 如果S:U(不变):
Impact = min(6.42 × ISS, 10) - 如果S:C(变化):
Impact = min(7.52 × (ISS - 0.029) - 3.25 × (ISS × 0.9731 - 0.02)^13, 10)
3.4 计算基础评分
如果Impact ≤ 0:
Base Score = 0否则:
Base Score = roundup(min(Impact + Exploitability, 10), 1)示例计算:
3.89(Exploitability) + 5.87(Impact) = 9.76 roundup(9.76) = 9.83.5 严重性等级划分
根据基础评分确定漏洞等级:
| 评分范围 | 等级 |
|---|---|
| 9.0-10.0 | 严重 |
| 7.0-8.9 | 高危 |
| 4.0-6.9 | 中危 |
| 0.1-3.9 | 低危 |
4. 时间评分与环境评分调整
4.1 时间评分调整
时间评分公式:
Temporal Score = roundup(BaseScore × E × RL × RC, 1)时间指标取值:
| 指标 | 缩写 | 取值 |
|---|---|---|
| 漏洞利用成熟度 | E | 未验证0.91/POC0.94/存在1.0/高1.0 |
| 修复级别 | RL | 官方修复1.0/临时方案0.97/无0.95 |
| 报告可信度 | RC | 未知0.92/疑似0.96/确认1.0 |
4.2 环境评分调整
环境评分考虑组织特定的安全需求:
Environmental Score = roundup( roundup( min( (M.Impact + M.Exploitability), 10 ) × E × RL × RC, 1), 1)其中M.Impact和M.Exploitability是调整后的影响和攻击可行性分数。
5. 实战案例:Log4j漏洞(CVE-2021-44228)评分解析
向量字符串:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H手动计算过程:
攻击可行性:
AV:N(0.85) × AC:L(0.77) × PR:N(0.85) × UI:N(0.85) = 0.474 Exploitability = 8.22 × 0.474 = 3.89影响评分:
ISS = 1 - [(1-0.56)×(1-0.56)×(1-0.56)] = 0.915 Impact = 7.52 × (0.915 - 0.029) - 3.25 × (0.915 - 0.02)^15 = 6.42基础评分:
3.89 + 6.42 = 10.31 → 10.0(上限)时间评分(假设漏洞利用成熟度高且无修复):
10.0 × 1.0 × 0.95 × 1.0 = 9.5
关键发现:
- 影响范围(S:C)是获得10分的关键
- 网络攻击向量和低复杂度加剧了风险
- 无需权限和用户交互使漏洞更危险
常见计算误区与验证技巧
误区1:忽略影响范围(S)的乘数效应
- 当S:C时,Impact计算公式完全不同
- 实际案例:Spring4Shell(CVE-2022-22965)因S:U"仅"得9.8分
误区2:混淆PR值在不同场景的取值
- 当S:C时,PR取值需要调整:
- None → 0.85
- Low → 0.68
- High → 0.50
验证技巧:
- 使用NVD官方计算器交叉验证
- 检查向量字符串是否包含所有必需指标
- 确认数值范围是否合理(如AC不可能为0)
高级技巧:环境评分调整实战
假设某金融机构对数据机密性要求极高(CR=1.5):
调整后的C = min(0.56 × 1.5, 0.915) = 0.84 新ISS = 1 - [(1-0.84)×(1-0.56)×(1-0.56)] = 0.969 调整后Impact = 7.52×(0.969-0.029) - 3.25×(0.969-0.02)^15 = 6.89 最终环境评分 = 3.89 + 6.89 = 10.0掌握CVSS手动计算能力,不仅能验证自动化工具的结果,还能在特殊场景下做出更符合实际情况的评估。建议从简单漏洞开始练习,逐步挑战复杂案例,最终达到对评分系统的深刻理解。