CWE视图层级关系的解析 之 CWE节点的存储和定义

Uncle_Tom 发表于 2022/01/23 23:44:19 2022/01/23
【摘要】 CWE做为软件缺陷分类的重要标准, 对安全研究、安全标准、缺陷管理起了重要的纽带作用。CWE通过编号的类型(类缺陷、基础缺陷和变种缺陷等)形成了多层次的缺陷类型划分体系。本文进一步剖析了CWE视图的层次之间的定义和解析方式。

1. CWE的视图

CWE做为软件缺陷分类的重要标准, 对安全研究、安全标准、缺陷管理起了重要的纽带作用。CWE使代码缺陷不同领域的研究人员在交流安全问题时,能够采用相同的定义,减少了歧义性。

CWE通过编号的类型(类缺陷、基础缺陷和变种缺陷等)形成了多层次的缺陷类型划分体系。

CWE的介绍可以参看往期的介绍:

CWE按照使用者视角, 给出了不同的CWE视图. CWE提供了三大类的视图.

1.1. 向导视图(Navigate CWE)

CWE提供了:

  • 研究者:CWE-1000 VIEW: Research Concepts
    该视图旨在促进对弱点的研究,包括弱点之间的相互依赖性,并可用来系统地找出CWE内部的理论差距。该视图面向的是学术研究人员、漏洞分析人员和评估工具厂商。
    它对弱点进行了分类,在很大程度上忽略了如何检测它们,它们出现在代码中的什么地方,以及它们何时被引入软件开发生命周期。相反,它主要是根据软件行为的抽象来组织的。这种分类方法不关心缺陷的检测方法,缺陷在代码中的位置,在软件开发生命周期中何时引入缺陷。该视图主要基于对软件行为进行抽象描述的方法组织归类。

  • 软件开发: CWE-699 VIEW: Software Development
    该视图围绕软件开发中经常使用或遇到的弱点。因此该视图可以用于开发人员、教育工作者和评估供应商。分类基础是软件开发中经常使用和碰到的概念, 它提供了多种类别,旨在简化导航、浏览和映射。

  • 硬件设计: CWE-1194 VIEW: Hardware Design

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节点)

catalog
)
这个节点下定义了组成xml文件的四个主要节点:

  • Weaknesses:各个CWE的定义,由WeaknessType类型具体定义;
  • Categories:弱点的分类定义,由CategoryType类型具体定义;
  • Views:弱点视图的定义,由ViewType类型具体定义;
  • External_References: 外部参考信息,由ExternalReferenceType类型具体定义。

接下来我们重点说下四个节点中的:Weaknesses和Views。

2.3. 弱点节点(Weaknesses)定义

Weaknesses的定义是由WeaknessType类型定义的。

2.3.1. 弱点类型(WeaknessType)的定义

WeaknessType

这个节点下定义每个CWE弱点的主要地方,这里有我们了解的必须的节点,例如CWE的ID,名字(Name), 描述(Description)等,以及组成每个CWE的其他节点的定义。

这里我们重点关注CWE间的关系:Related_WeaknessesType。

2.3.2. 弱点关系类型(Related_WeaknessesType)的定义

relation type

这个节点定义个当前CWE在不同视图下与其他节点的关联关系。主要字段包括:

  • Nature: 关系类型,由另一个枚举(RelatednatureEnumeration)定义。见下图:
    relation enum

  • CWE_ID: 与之关联的CWE编号ID;

  • VIEW_ID: 与之关联的CWE视图(View)编号(ID);

通常这里只定义父节点,也就是当前节点在视图(VIEW_ID)中的父节点(Nature为ChildOf)的CWE节点是CWE_ID。

2.4. 视图节点(Views)定义

Views的定义是由ViewType类型定义的。

2.4.1. 视图类型(ViewType)的定义

ViewType

这里定义了视图的主要组成:

  • ID:视图的ID;
  • Name: 视图的名字;
  • Members:视图的成员,由RelationshipsType类型具体定义。

2.4.2. 视图节点关系类型(RelationshipType)的定义

RelationshipsType

该类型具体的定义了视图的成员,以及和视图成员之间的关系。

  • Has_Member: 由结构体Member_Type定义,具体如下图:
    memberType

每个视图成员由成员的CWE_ID,和所属的视图编号View_ID组成。

2.5. CWE层级关系的举例

2.5.1. 研究者视图CWE-1000

  • 研究者视图CWE-1000页面关系展示
    CWE_view

从这个图示可以看到编号: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的定义
    CWE-1000

  • CWE-120的定义
    CWE-120

  • CWE-119的定义
    CWE-119

  • CWE-118的定义
    CWE-118

3. 小结

  • 介绍了CWE的四种主要视图类型:向导视图、扩展视图、帮助视图和过期的视图;
  • 介绍了CWE通过xsd完成xml存储的定义方式,重点介绍了如何建立各个CWE之间的层级关系;
  • 以CWE120为例说明了CWE在xml文件中如何建立与CWE-1000之间的层级关系。
  • 下节将介绍如何利用本文中获得的CWE之间的关系,将CWE的层级关系存储到Sqlite数据库中后,通过Sqlite提供的递归查询方式完成父节点和子节点关系的查询。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。