本文分享自华为云社区《应用软件的缺陷分类》,作者: Uncle_Tom 。
软件缺陷分类在已知缺陷管理、缺陷现场库建设、静态检查工具的能力覆盖和横向对比中发挥了重要作用。本文参考GB/T-30279, CNNVD , NVD,以及CWE的各种观点,给一个建立了适合自己的缺陷分类方法。
1.软件缺陷分类的作用
最近几个波同事找到我来讨论软件缺陷分类。
- 根据上月底国家漏洞漏洞库CNNVD发布的《2022年度第一个网络安全漏洞报告》显示,2022年度新增漏洞近2万5千个,达到历史记录超高危级漏洞呈现呈现上升趋势,尽管漏洞修复率大幅提升,但漏洞威胁形势依然严峻。同时整体形势出现新变化,呈现高风险漏洞数量突破新高、零日争夺突出攻防新较量、单边漏洞管控扰乱国际秩序、网络霸权主义冲击网空权益等特点,网络安全整体形势更加复杂。缺陷漏洞分类有助于漏洞的统计、研究,从而加强漏洞漏洞评估和手段机制风险建设,以实现高水平漏洞治理。
- 第二波:是为了建立缺陷漏洞库,用于静态分析工具能力的提升。漏洞的分类能够在很大程度上提升巨量场景的管理能力,实现场景对缺陷场景的全面覆盖,从而通过一个指导工具的方向研发和能力覆盖的检测。
- 第三波:是为了静态分析工具选择的分析,每个工具都拥有500-1000+的检查规则,如何了解工具间的差异?使用最少的工具,实现最大的覆盖?这个也可以借助检查缺陷的能力的分类,将静态分析工具的规则按缺陷分类进行分类,就可以清楚地看工具在不同软件缺陷分类问题上所拥有的规则数。基于此粗略数据的得到,工具在软件缺陷问题检查的大体覆盖程度这个方法还可以在缺陷分类的粒度上,降低分析、规则的数量。使分析人员集中在感兴趣的规则分类上,或者让不同的分析小组进行专题的、快速的进行工具间的横向对比。
市面上现在有那些软件缺陷分类可以做为参考,以及如何建立适合自己的缺陷分类?
2.《GB/T 30279-2020 信息安全技术网络安全漏洞分类分级指南》
- 《GB/T 30279-2020 信息安全技术网络安全漏洞分类分级指南》

对于网络安全漏洞,国家在2020年的国标《GB/T 30279-2020信息安全技术网络安全漏洞分类分级指南》,并于2021.06.01大力使用。这个标准的网络安全漏洞分类是基于漏洞产生或触发的技术原因对漏洞进行的划分,分类导图如下图所示。采用标准树形导图对漏洞进行分类,首先从根节点开始,根据漏洞生成因将漏洞归入某个具体的类别,如果该类别类型节点有子类型节点,且漏洞生成因可以归入该子类型,则将漏洞划分为该子类型,如此分层,直至漏洞归入的类型无子类型或漏洞不能归入子类型收益。
- 分类导图

根据本分类标准,国家缺陷漏洞库(CNNVD)将信息安全漏洞划分为26种类型,分别是:配置错误、代码问题、资源管理错误、数字错误、信息泄露、竞争条件、输入验证、缺陷问题、格式化字符串、跨站脚本、路径浏览、后置链接、SQL注入、注入、代码注入、命令注入、网络命令注入、安全特征问题、授权问题、信任管理、加密问题、未充分验证数据通信、跨站请求格式、权限许可和访问控制、访问控制错误、资料不足。
这个分类方式参考了CWE的3.1版本,3.1版本从2018-03-29到2019-01-03使用。目前随着CWE的这几年的快速发展,里面的CWE-16配置错误,CWE-17代码虽然该分类覆盖了网络安全的主要缺陷类型,但也存在分类粒度过大,无法完成缺陷分类的全覆盖的问题。
3.美国国家通用漏洞数据库(NVD)的分类指南
美国国家通用漏洞数据库(NVD)从一开始就参考了CWE的分类方式来发现CVE进行缺陷分类指导。
3.1. 从2008年到2016年
从2008年到2016年,主要参考视图CWE-635 NVD 2008-2016。如下图:
- CWE-635 NVD 2008-2016

这个版本的分类主要有19个分类。国标的分类和这个分类有很大程度的吻合,可以说基本上是一致的。
3.2. 2016年之后
NVD主要参考CWE的1003视图,如下图。
CWE-1003视图包含37个一级节点,总共130个分类节点。
随着各种缺陷的不断发现,CWE的分类一直在不断的完善过程中,特别是这几年,几乎每年都会有3-4个这样的更新,为了使发现的CVE能够得到故障准确的CWE分类,在主页面上特别增加了一个CVEC对应WE的菜单CVE映射CWE指导,帮助完成对应用户任务。
同时这几年CWE也连续发布了各年最危险的25种安全问题,参见:
在进行历年TOP 25的问题的统计过程中,CWE的研究人员也发现了软件问题分类给统计工作带来的困扰,在不断的修改着分类的从属关系,使得保持正交的分类统计方式,避免因问题分类问题导致的缺陷的重复计算。
4.常用CWE分类视图
CWE做为软件缺陷分类的重要标准,对安全研究、安全标准、缺陷管理起到了重要的纽带作用。CWE使代码缺陷不同领域的研究人员在交流安全问题时,能够采用相同的定义,减少了歧义性。
CWE(Common Weakness Enumeration)。CWE被用于以下目的:
- 用语言通用描述和讨论软件和硬件的缺点;
- 检查现有软件和硬件产品中的缺陷;
- 针对这些缺陷评估工具的覆盖范围;
- 利用常见的基准标准来识别、缓解和预防漏洞;
- 在部署之前防止软件和硬件漏洞;
更多的介绍见:
4.1. CWE-699 开发者观点
CWE-699 开发者视图,该视图主要以开发者的角度,围绕软件开发中经常使用或遇到的概念来组织缺陷。这包括软件开发周期的所有方面,包括生命结构和实现。因此,这种观点可以与架构师、开发人员、教育工作者和评估供应商的观点紧密一致。它提供了各种类别,旨在简化导航、浏览和映射。

视图这个包含40个分类,以及399个节点。
4.2. CWE-1000 焦点视图
CWE-1000 透视视图,该视图旨在促进对缺陷的研究,包括缺陷之间的相互依赖,并可用于系统地查找CWE内部的理论差距。该视图面向的是学术研究人员、缺陷分析人员和评估工具厂商。它对缺陷进行了分类,仔细考虑了如何检测它们,它们出现在代码中的什么位置,以及它们何时被引入软件开发生命周期。相反,它主要是根据软件行为的抽象描述的方法。这种分类方法不关心缺陷的检测方法,缺陷在代码中的位置,在软件开发组织生命周期中何时引入缺陷。该视图主要基于对软件行为进行抽象描述的方法并。

这个视图里面包含10个分类,933个节点。这个视图里面有了所有的节点。
4.3. CWE-1400 软件安全分类
研究人员在使用CWE进行软件缺陷分类的过程中,发现分类之间的重合还是会给分类和研究带来很多困惑。大家需要一个类别之间相互共有的分类方法,虽然这样很容易实现,但可以通过增加节点来逐步实现。
于是在CWE4.11版本终于给出了一个建议的参考,这个就是观点:CWE-1400软件安全保障分类,这个观点围绕大规模软件保证研究关注的类别组织缺陷,以支持使用安全语言开发等策略消除缺陷。还可以帮助跟踪公开披露的漏洞数据中的缺陷趋势。这个观点是全面的,因为每个缺陷都包含在其中,而不是像大多数其他只使用缺陷子集的观点。这个观点是由最高级别的类别构成的,只有第二级别的缺陷。焦点视图(CWE-1000)中提出的缺陷之间的关系未显示。每个缺陷只被添加到一个类别中。所有类别相互
关联;相反,任何缺陷都不可能是一个以上类别的成员。虽然缺陷难以仅根据一个特征进行严格的分类,但强制将其归入一个类别可以简化某些类型的分析。
这个分类方式,每个类别的规模可能差异很大,因为:
(1)与领域相比,CWE在某些领域没有得到很好的水果;
(2)分组中CWE的抽象可能会恢复到其他变体级别,而不是其他类型。
-
CWE-1400软件安全分类,如下图:

-
CWE-1400软件安全保障分类在应用软件架构中的分配

5.自定义缺陷分类视图
在早些年,为了能够更好地用于静态分析工具的对比和缺陷序列的整理,追踪代码编码过程的各个序列,对开发者视图(CWE-699)的40个分类进行了顺序调整,对节点数较小的一些分类进行了合并;参考坐标视图(CWE-1000),对开发者视图(CWE-699)同时分类中的节点进行了补充。定义出适合静态分析工具检查和缺陷示例视图中的定义遵循编码、权限、程序间交互,以及程序设计分为31个分类。视图总共包含850个软件CWE缺陷。
-
分类的基本原则:
- 覆盖软件开发的流程主要:设计,开发;
- 覆盖应用软件的主要功能模块:外部交互;应用内部逻辑、算法;加密和权限;
- 分类之间保持正交,不重合;
- 为了查询节点之间的相关性,在分类内部关心的放置类节点的,并保持CW-699,CWE-1000给与的节点之间的关系。
-
自定义缺陷分类

-
自定义视图和其他视图的比较,
从CWE 4.0以后,为了完善缺陷,加入了硬件的缺陷。自定义视图本身包含硬件类缺陷,缺陷缺少的部分主要为硬件类缺陷。
自定义缺陷采用CWE 4.12版本统计、比较。
| CWE 节点类型 | 本视图节点数 | 开发者观点(699) | 焦点视图(1000) | 软件安全保障视图(1400) | CWE节点总数 |
|---|---|---|---|---|---|
| 看法 | 1 | 1 | 1 | 1 | 49 |
| 支柱 | 0 | 0 | 10 | 10 | 10 |
| 类别 | 31 | 40 | 0 | 22 | 第374章 |
| 班级 | 87 | 1 | 105 | 107 | 107 |
| 根据 | 第441章 | 第393章 | 第523章 | 519 | 519 |
| 变体 | 第284章 | 25 | 288 | 290 | 290 |
| 化合物 | 7 | 0 | 7 | 7 | 7 |
| 全部的 | 850 | 第460章 | 第934章 | 第956章 | 第1356章 |
- 自定义缺陷分类在应用软件架构中的分布

六、总结
- 软件缺陷分类能够:
- 管理已知缺陷,加强漏洞挖掘和机制建设;
- 建立完善的示例库,用于提升分析工具的检测和提升覆盖能力;
- 分析静态检查工具的能力覆盖和横向对比,提升多分析工具对问题的整体覆盖能力。
- CWE-1400软件安全保障分类,将软件缺陷拆分了22个大类,并给出了类别相互共有,且包含所有缺陷节点的分类方式;这种分类方式已经非常接近我们期望的放分类方式;
- 在应用过程中,可以根据自己的需要定义分类视图,以便更好地关注自己应用软件的高发问题,文中给出了一个建议的样例。
7. 参考
- 《GB/T 30279-2020 信息安全技术网络安全漏洞分类分级指南》
- 《卓越措施:在预算范围内按时交付可靠的软件》Lawrence H. Putnam,Ware Myers,1991.10
- 正交缺陷分类 - 过程中测量的概念,IEEE Transactions on Software Engineering(卷:18,期:11,1992 年 11 月)
- IEEE Std 1044-1993。IEEE 异常标准分类。电气与电子工程师学会,1993
- 常见弱点枚举
- NVD 2008 年至 2016 年间最初使用的 CWE-635 弱点
- CWE-699 软件开发
- CWE-1000 研究概念
- CWE-1400 软件保障趋势综合分类

21



被折叠的 条评论
为什么被折叠?



