剖析 CWE 视图的层次定义和解析方式
摘要:CWE 做为软件缺陷分类的重要标准, 对安全研究、安全标准、缺陷管理起了重要的纽带作用。CWE 通过编号的类型(类缺陷、基础缺陷和变种缺陷等)形成了多层次的缺陷类型划分体系。本文进一步剖析了 CWE 视图的层次之间的定义和解析方式。
本文分享自华为云社区《CWE视图层级关系的解析 之 CWE节点的存储和定义》,作者:Uncle_Tom。
1. CWE 的视图
CWE 做为软件缺陷分类的重要标准, 对安全研究、安全标准、缺陷管理起了重要的纽带作用。CWE 使代码缺陷不同领域的研究人员在交流安全问题时,能够采用相同的定义,减少了歧义性。
CWE 通过编号的类型(类缺陷、基础缺陷和变种缺陷等)形成了多层次的缺陷类型划分体系。
CWE 按照使用者视角, 给出了不同的 CWE 视图. CWE 提供了三大类的视图.
1.1. 向导视图(Navigate CWE)
CWE 提供了:
该视图旨在促进对弱点的研究,包括弱点之间的相互依赖性,并可用来系统地找出 CWE 内部的理论差距。该视图面向的是学术研究人员、漏洞分析人员和评估工具厂商。
它对弱点进行了分类,在很大程度上忽略了如何检测它们,它们出现在代码中的什么地方,以及它们何时被引入软件开发生命周期。相反,它主要是根据软件行为的抽象来组织的。这种分类方法不关心缺陷的检测方法,缺陷在代码中的位置,在软件开发生命周期中何时引入缺陷。该视图主要基于对软件行为进行抽象描述的方法组织归类。
该视图围绕软件开发中经常使用或遇到的弱点。因此该视图可以用于开发人员、教育工作者和评估供应商。分类基础是软件开发中经常使用和碰到的概念, 它提供了多种类别,旨在简化导航、浏览和映射。
1.2. 扩展试图(External Mappings)
基于一些外部组织生成的视图. 这里有我们熟悉的 CWE TOP 25,OWASP TOP 10,以及 SEC CERT 的编程规范和 CISQ 质量测量标准等。
1.3. 帮助试图(Helpful Views)
这里基于特定的标准提供了特定领域的试图.
1.4. 过期的视图(Obsolete Views)
因为新的视图发布,而不再使用的视图, 例如以往的 CWE TOP 25, OWASP TOP 10 等.
2. CWE 的存储结构
2.1. CWE 定义的 xml schema 文件
CWE 每个版本的所有信息是存放在一个 xml 文件中。xml 中各个字段的格式和定义是由一个 xsd 文件来定义 xml 的 schema。这些两个文件可以从CWE的下载页面得到。
我们来看下视图和具体的 CWE 的存储关系是怎么定义在 schema 中的。
2.2. CWE xml 文件的框架(Weakness_Catalog 节点)
这个节点下定义了组成 xml 文件的四个主要节点:
Weaknesses:各个 CWE 的定义,由 WeaknessType 类型具体定义;
Categories:弱点的分类定义,由 CategoryType 类型具体定义;
Views:弱点视图的定义,由 ViewType 类型具体定义;
External_References: 外部参考信息,由 ExternalReferenceType 类型具体定义。
接下来我们重点说下四个节点中的:Weaknesses 和 Views。
2.3. 弱点节点(Weaknesses)定义
Weaknesses 的定义是由 WeaknessType 类型定义的。
2.3.1. 弱点类型(WeaknessType)的定义
这个节点下定义每个 CWE 弱点的主要地方,这里有我们了解的必须的节点,例如 CWE 的 ID,名字(Name), 描述(Description)等,以及组成每个 CWE 的其他节点的定义。
这里我们重点关注 CWE 间的关系:Related_WeaknessesType。
2.3.2. 弱点关系类型(Related_WeaknessesType)的定义
这个节点定义个当前 CWE 在不同视图下与其他节点的关联关系。主要字段包括:
Nature: 关系类型,由另一个枚举(RelatednatureEnumeration)定义。见下图:
WE_ID: 与之关联的 CWE 编号 ID;
VIEW_ID: 与之关联的 CWE 视图(View)编号(ID);
通常这里只定义父节点,也就是当前节点在视图(VIEW_ID)中的父节点(Nature 为 ChildOf)的 CWE 节点是 CWE_ID。
2.4. 视图节点(Views)定义
Views 的定义是由 ViewType 类型定义的。
2.4.1. 视图类型(ViewType)的定义
这里定义了视图的主要组成:
ID:视图的 ID;
Name: 视图的名字;
Members:视图的成员,由 RelationshipsType 类型具体定义。
2.4.2. 视图节点关系类型(RelationshipType)的定义
该类型具体的定义了视图的成员,以及和视图成员之间的关系。
Has_Member: 由结构体 Member_Type 定义,具体如下图:
视图成员由成员的 CWE_ID,和所属的视图编号 View_ID 组成。
2.5. CWE 层级关系的举例
2.5.1. 研究者视图 CWE-1000
研究者视图 CWE-1000 页面关系展示
从这个图示可以看到编号:CWE-1000 的研究者视图由以下节点组成:
视图的成员:
CWE-284:访问控制不恰当(Improper Access Control);
CWE-435: 交互错误(Improper Interaction Between Multiple Correctly-Behaving Entities);
CWE-664:在生命周期中对资源的控制不恰当(Improper Control of a Resource Through its Lifetime);
视图的子节点:
这里以 CWE-120 为例,从图中可以看到:
CWE-120:未进行输入大小检查的缓冲区拷贝(传统缓冲区溢出),它的父节点是:CWE-119;
CWE-119:内存缓冲区边界内操作的限制不恰当,它的父节点是: CWE-118;
CWE-118: 对可索引资源的访问不恰当(越界错误), 它的父节点是: CWE-664;
CWE-664:在生命周期中对资源的控制不恰当,它的父节点是: CWE-1000;
CWE-1000:研究者视图。
2.5.2. 对应的 xml 定义
研究者视图 CWE-1000 的定义
WE-120 的定义
WE-119 的定义
CWE-118 的定义
小结
介绍了 CWE 的四种主要视图类型:向导视图、扩展试图、帮助试图和过期的视图;
介绍了 CWE 通过 xsd 完成 xml 存储的定义方式,重点介绍了如何建立各个 CWE 之间的层级关系;
以 CWE120 为例说明了 CWE 在 xml 文件中如何建立与 CWE-1000 之间的层级关系。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/04582e70134b15afaf8198257】。文章转载请联系作者。
评论