摘要: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 质量测量标准等。

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

  • 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视图的层次定义和解析方式的更多相关文章

  1. 剖析非同质化代币ERC721-全面解析ERC721标准

    什么是ERC-721?现在我们看到的各种加密猫猫狗狗都是基于ERC-721创造出来的,每只都是一个独一无二的ERC-721代币,不过ERC-721在区块链世界远不止猫猫狗狗,它更大的想象空间在于将物理 ...

  2. webapi返回json格式,并定义日期解析格式

    1.webapi返回json格式 var json = config.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferen ...

  3. mysql视图和存储过程定义者修改脚本(懒人专用)

    前言: 在实际工作中mysql数据库的迁移.备份恢复.数据库重命名等一系列涉及到视图和存储过程定义者问题都会需要修改,每次都要从基础表获取数据,然后手工整理做脚本,十分麻烦,所以简单写了个过程,以后可 ...

  4. 标准JSON格式定义与解析注意点

    标准JSON格式定义与解析注意点 在JS.IOS.Android中都内置了JSON的序列化.反序列化SDK.JEE中也可以使用第三方的JSON解析库,如GSON.虽然在JSON格式被定义出来的时候并没 ...

  5. django类视图简单使用和源码解析

    django的类视图,CBV: 我们在开始接触django的时候,习惯于使用函数编写视图,即FBV.使用FBV时,我们只需要在路由匹配时,对应的路由下找到这个函数就可以了,这样做看似很和谐,但是有的时 ...

  6. Java开发笔记(一百零九)XML报文的定义和解析

    前面介绍了JSON格式的报文解析,虽然json串短小精悍,也能有效表达层次结构,但是每个元素只能找到对应的元素值,不能体现更丰富的样式特征.比如某个元素除了要传输它的字符串文本,还想传输该文本的类型. ...

  7. 四种xml的解析方式

    这篇文章是我上网找资料,加上自己总结了一些而得 资料来源: http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html http ...

  8. XML基础+Java解析XML +几种解析方式的性能比较

    XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...

  9. xml的四种解析方式(转载)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  10. Javascript学习笔记:3种定义函数的方式

    ①使用函数声明语法定义函数 function sum(num1,num2){ return num1+num2; } ②使用函数表达式定义函数 var sum=function(num1,num2){ ...

随机推荐

  1. 数据库系列:MySQL引擎MyISAM和InnoDB的比较

    1.数据库核心知识点 数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高 ...

  2. Unity学习笔记--基础

    基础 3D数学 Mathf函数库 print(Mathf.PI); print(Mathf.Abs(-10)); print(Mathf.CeilToInt(1.2f));//向上取整 print(M ...

  3. SharedArrayBuffer is not defined 问题的解决以及服务器https证书的配置

    问题 前端使用了ffmpeg压缩组件,在运行项目出现 SharedArrayBuffer is not defined的问题,使项目不能正常运行,经过网上查询,需要在response加入以下的head ...

  4. 通过HTML和JavaScript实现随机抽取幸运员工

    需求描述: 公司经常会要求IT部门做一个随机抽取员工页面,今天我们通过HTML和JavaScript来实现 HTML 结构 首先,我们需要编写 HTML 代码来定义页面结构和元素.下面是 HTML 代 ...

  5. git 忽略已提交(commit)的文件/文件夹

    git 忽略已提交的文件或文件夹 最好是在工程一开始就编辑好 .gitignore 文件, 在第一次提交的时候仔细检查避免添加那些无用的文件 因为 .gitignore 只能对未提交过的文件起效, 也 ...

  6. 聊聊魔塔社区MGeo模型的部署与运行

    从现今与今后的发展来看,单一的业务不再仅仅依靠于传统的技术开发,而是应该结合AI模型来应用.实践.只有这样,才能更数智化,更高效化,更贴合时代的发展. 魔塔 社区就类似国外的Hugging Face, ...

  7. 计算网络之IPv6配置DHCP服务及acl

    一.DHCPv6服务 DHCP即动态主机地址分配协议,在前面已经启动过IPv4的动态主机分配了, 还是来介绍两种方式 接口模式 全局模式 现在需要了解的就是DHCHv6,即基于IPv6的动态主机地址分 ...

  8. OpenAI宫斗,尘埃落定,微软成最大赢家

    周末被OpenAI董事会闹剧刷屏,ChatGPT之父Sam Altman前一天被踢出董事会,免职CEO,后一天重返OpenAI,目前结局未知. 很多同学想要围观,缺少背景知识,这里老章为大家简单介绍前 ...

  9. nmap命令说明

    目录 主机发现 扫描技术 端口规格和扫描顺序 服务/版本检测 脚本扫描 操作系统检测 时间和性能: 防火墙/IDS的逃避和欺骗 输出 杂项 平时看到别人的nmap命令都是一大串,根本看不懂为什么,自己 ...

  10. 【vue】【外包杯】jtl和html文件的区别

    ftl(freemaker) jsp(jstl) 举例:html ftl