剖析CWE视图的层次定义和解析方式
摘要: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之间的层级关系。
剖析CWE视图的层次定义和解析方式的更多相关文章
- 剖析非同质化代币ERC721-全面解析ERC721标准
什么是ERC-721?现在我们看到的各种加密猫猫狗狗都是基于ERC-721创造出来的,每只都是一个独一无二的ERC-721代币,不过ERC-721在区块链世界远不止猫猫狗狗,它更大的想象空间在于将物理 ...
- webapi返回json格式,并定义日期解析格式
1.webapi返回json格式 var json = config.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferen ...
- mysql视图和存储过程定义者修改脚本(懒人专用)
前言: 在实际工作中mysql数据库的迁移.备份恢复.数据库重命名等一系列涉及到视图和存储过程定义者问题都会需要修改,每次都要从基础表获取数据,然后手工整理做脚本,十分麻烦,所以简单写了个过程,以后可 ...
- 标准JSON格式定义与解析注意点
标准JSON格式定义与解析注意点 在JS.IOS.Android中都内置了JSON的序列化.反序列化SDK.JEE中也可以使用第三方的JSON解析库,如GSON.虽然在JSON格式被定义出来的时候并没 ...
- django类视图简单使用和源码解析
django的类视图,CBV: 我们在开始接触django的时候,习惯于使用函数编写视图,即FBV.使用FBV时,我们只需要在路由匹配时,对应的路由下找到这个函数就可以了,这样做看似很和谐,但是有的时 ...
- Java开发笔记(一百零九)XML报文的定义和解析
前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...
- 四种xml的解析方式
这篇文章是我上网找资料,加上自己总结了一些而得 资料来源: http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html http ...
- XML基础+Java解析XML +几种解析方式的性能比较
XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...
- xml的四种解析方式(转载)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- Javascript学习笔记:3种定义函数的方式
①使用函数声明语法定义函数 function sum(num1,num2){ return num1+num2; } ②使用函数表达式定义函数 var sum=function(num1,num2){ ...
随机推荐
- Godot - 通过C#实现类似Unity协程
参考博客Unity 协程原理探究与实现 Godot 3.1.2版本尚不支持C#版本的协程,仿照Unity的形式进行一个协程的尝试 但因为Godot的轮询函数为逐帧的_Process(float del ...
- 解决使用mitmprox抓包可以访问网页,但是使用python request 调用该网站接口报错问题
可能有几种原因导致这种情况.以下是一些常见的问题和可能的解决方法: 证书验证问题: 当你使用mitmproxy抓包时,它通常会生成自签名的SSL证书,以便进行中间人攻击检查.但在Python中使用re ...
- Java表达式引擎选型调研分析
1 简介 我们项目组主要负责面向企业客户的业务系统,企业的需求往往是多样化且复杂的,对接不同企业时会有不同的定制化的业务模型和流程.我们在业务系统中使用表达式引擎,集中配置管理业务规则,并实现实时决策 ...
- 2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵。 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5
2023-11-18:用go语言,如果一个正方形矩阵上下对称并且左右对称,对称的意思是互为镜像, 那么称这个正方形矩阵叫做神奇矩阵. 比如 : 1 5 5 1 6 3 3 6 6 3 3 6 1 5 ...
- 校园社团活动管理系统(适合小白)基础javaweb前端项目实战【包含增删改查,mysql】一
校园社团活动管理系统(20分) 1.项目需求: 校园社团作为高校课外活动的重要组成部分,发展十分迅速,也受到越来越多学生的欢迎,社团规模.数量等都在日益增长,社团活动也更为多样和丰富.然而,大多数高校 ...
- 使用Spring Cache高效处理缓存数据
Spring Cache是Spring框架提供的一种缓存抽象,可以有效地处理缓存数据.使用Spring Cache可以简化开发过程,提高应用程序的性能和可扩展性. 本文将详细介绍如何使用Spring ...
- mysql alter与update的区别
alter是更改表名,字段的 而updata是更改数据的,一定要记住要联合where使用,否则就会全部更改. updata与set联用 alter与change column和add联用
- 踩坑:nacos启动报错提示需要设置JDK环境 ,报错:ERROR: Please set the JAVA_HOME variable in your environment, We need java(x64)! jdk8 or later is better! !!
换了个Windows11的新电脑,因为个人工作.学习需要,就重新下载了Nacos并解压使用,结果就踩了个坑,使用下面命令启动Nacos服务端时: startup.cmd -m standalone 直 ...
- 使用nacos配置,启动服务时一直报 Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. APPLICATION FAILED TO START
报错日志如下: Error starting ApplicationContext. To display the conditions report re-run your application ...
- 算法那么多,AI量化交易策略如何选择最佳算法?
常见算法优劣比较 算法没有最好,只有更好. 这个问题的答案取决于许多因素,例如股票市场的条件,数据集的质量和特征工程的有效等.接下来,我们来看看这些算法的优势和劣势: 神经网络:适用于复杂的非线性问题 ...