CWE 是什么:缺陷类型分类
CVE 回答「这是哪一个具体缺陷」,CWE 回答「这属于哪一类缺陷」。前者是实例,后者是类型;一条 CVE 通常挂在一个 CWE 上,同一个 CWE 下则累积成千上万条历史记录。把缺陷按类型归并,才能回答「哪类毛病最常出现」「静态分析规则该覆盖哪些类型」「培训与测试该往哪使劲」。
## 一、本质:缺陷的「类」,而不是「个」
漏洞编号解决「指认同一个问题」,下一个问题自然是「这类毛病叫什么」。CWE(Common Weakness Enumeration,公共缺陷枚举)由 MITRE 维护,为软件与硬件缺陷类型提供稳定标识:CWE-89 是 SQL 注入,CWE-79 是跨站脚本,CWE-120 是缓冲区复制时未检查大小。同一个编号跨越厂商、语言与年份,指向同一类根因。缺陷类型稳定,统计才有意义:今年哪类弱点最多、哪种语言的实现最容易出错,都要靠编号对齐之后才算得出来。
## 二、编号与层级
CWE 条目以 CWE-NNN 编号。研究视图 CWE-1000 把条目按抽象程度分为四层:支柱是最粗的毛病大类,类是一族相关问题,基是可独立描述的弱点,变体是在特定语言、框架、条件下的具体表现。官方另提供软件开发视图(面向编码与测试人员)与硬件设计视图(面向芯片与固件),另有按主题归拢的类别条目,例如按 OWASP Top 10 归组的弱点清单。视图之间条目互有重叠,选错视角会让统计口径虚高或虚低。
```text
视图:CWE-1000 研究概念(示意),按层级缩进:
- CWE-119 缓冲区操作限制不当(类)
- CWE-120 缓冲区复制时未检查大小(基)
- CWE-193 Off-by-one 错误(变体)
- CWE-124 缓冲区下溢(基)
- CWE-20 输入验证不当(类)
- CWE-79 跨站脚本(基)
- CWE-89 SQL 注入(基)
```
## 三、一条记录里有什么
除编号与名称,条目带描述、扩展描述、常见后果、观测示例、检测方法与缓解措施;关系字段表达父子、前后继与同类(ChildOf、CanPrecede、CanFollow、PeerOf);映射字段把类型连到 CAPEC 攻击模式、ATT&CK 技术与 OWASP Top 10。条目还有成熟度状态:Stable、Draft、Deprecated、Rejected,引用前值得先看一眼。观测示例给出真实代码里的坏味道,检测方法对应静态分析与代码审计的切入点,缓解措施按实现与架构分层给建议——这些字段让 CWE 从一份名词表变成可执行的整改索引。
```text
CWE 记录片段(示意):
id: "CWE-89"
name: "Improper Neutralization of Special Elements used in an SQL Command"
status: "Stable"
relatedWeaknesses: [{ nature: "ChildOf", target: "CWE-943" }]
mappings: { "OWASP Top Ten 2021": ["A03:2021"] }
```
## 四、和邻居概念怎么分
与 CVE:实例与类型,一条 CVE 可对应零到多个 CWE,主因通常取一个。与 CAPEC:CWE 描述弱点长什么样,CAPEC 描述攻击怎么打,两者靠映射相连,CWE 自身不含攻击步骤。与 ATT&CK:ATT&CK 刻画攻击者行为,CWE 刻画被利用的缺陷类型,映射用于从攻击视角反推防御。常见误解三条:编号有严重度排序(不存在「CWE-89 比 CWE-79 更危险」的官方口径);CWE-1000 是全集(它只是视图之一);一个漏洞只能挂一个 CWE(可以多个,分主辅)。
| 构成项 | 作用 | 常见误读 |
|---|---|---|
| 条目编号 | 给缺陷类型一个稳定标识 | 以为编号隐含严重度排序 |
| 四层抽象 | 从支柱到变体组织同一族缺陷 | 把基与变体当同级并列使用 |
| 多视图 | 按受众(研究/开发/硬件)重组层级 | 把单个视图当成全部条目 |
| 关系字段 | 表达父子、前后继、同类关系 | 只看编号不看关系,误判粒度 |
| 映射字段 | 连接 CAPEC、ATT&CK、OWASP 与 CVE | 以为 CWE 自身包含攻击步骤 |
| 状态标记 | 标注 Stable/Draft/Deprecated | 引用已废弃条目而不自查 |
参考(仅置于代码块中):
```text
https://cwe.mitre.org/
https://cwe.mitre.org/data/index.html
```
- 点赞
- 收藏
- 关注作者
评论(0)