剖析CWE视图的层次定义和解析方式

作者: 向倚

更新时间:2022-03-26 14:36:21

3076 阅读

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

本文分享自华为云社区《CWE视图层级关系的解析 之 CWE节点的存储和定义》,作者:Uncle_Tom。

1. 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 质量测量标准等。

  • CWE Top 25 (2021)
  • Most Important Hardware Weaknesses List (2021)
  • OWASP Top Ten (2021)
  • Seven Pernicious Kingdoms
  • Software Fault Pattern Clusters
  • SEI CERT Oracle Coding Standard for Java
  • SEI CERT C Coding Standard
  • SEI CERT Perl Coding Standard
  • CISQ Quality Measures (2020)
  • CISQ Data Protection Measures
  • Architectural Concepts

1.3. 帮助试图(Helpful Views)

这里基于特定的标准提供了特定领域的试图.

  • Introduced During Design
  • Introduced During Implementation
  • Quality Weaknesses with Indirect Security Impacts
  • Software Written in C
  • Software Written in C++
  • Software Written in Java
  • Software Written in PHP
  • Weaknesses in Mobile Applications
  • CWE Composites
  • CWE Named Chains
  • CWE Cross-Section
  • CWE Simplified Mapping
  • CWE Entries with Maintenance Notes
  • CWE Deprecated Entries
  • CWE Comprehensive View
  • Weaknesses without Software Fault Patterns
  • Weakness Base Elements

1.4. 过期的视图(Obsolete Views)

因为新的视图发布,而不再使用的视图, 例如以往的CWE TOP 25, OWASP TOP 10等.

  • CWE Top 25 (2020)
  • CWE Top 25 (2019)
  • CWE/SANS Top 25 (2011)
  • CWE/SANS Top 25 (2010)
  • CWE/SANS Top 25 (2009)
  • Weaknesses Used by NVD
  • OWASP Top Ten (2017)
  • OWASP Top Ten (2013)
  • OWASP Top 10 (2010)
  • OWASP Top 10 (2007)
  • OWASP Top 10 (2004)
  • The CERT C Secure Coding Standard (2008)
  • The CERT Oracle Secure Coding Standard for Java (2011)
  • SEI CERT C++ Coding Standard (2016)
  • CISQ Quality Measures (2016)

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)定义。见下图:

  • 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)的定义

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

  • 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的定义

  • CWE-120的定义

  • CWE-119的定义

  • CWE-118的定义

3. 小结

  • 介绍了CWE的四种主要视图类型:向导视图、扩展试图、帮助试图和过期的视图;
  • 介绍了CWE通过xsd完成xml存储的定义方式,重点介绍了如何建立各个CWE之间的层级关系;
  • 以CWE120为例说明了CWE在xml文件中如何建立与CWE-1000之间的层级关系。

 

点击关注,第一时间了解华为云新鲜技术~

版权声明:本文著作权归作者【向倚 】所有,不代表本网站立场。

侵权请联系:root_email@163.com

相关推荐