一、CWE是什么?
图1 CWE Logo
CWE全称CommonWeakness Enumeration,是一个通用的在线计算机软件缺陷字典,由MITRE公司运行和维护。MITRE组织了来自企业、学术机构和政府部门的多个国际专家组编写和更新CWE,从而确保内容的广度和深度。图2为CWE参与机构列表。
图2 CWE参与机构列表
CWE是一种通用的标准化术语,是软件安全工具的衡量标准,也是识别、修复和预防缺陷的基准。对于服务提供商,在发现特定的潜在缺陷时,可以借助CWE通知用户并提出解决建议方案;对于软件买家,可以利用CWE比较多个厂商提供的相似产品;对于开发人员,可以学习利用其中的内容,尽可能地避免引入代码缺陷。
二、CWE List的版本演变
MITRE从2006年3月开始编撰CWE List,期间草案经历九次修改,才最终在2008年9月确定第一个版本。
从2008年至今,MITRE对CWE List不断优化更新,版本经过多次的迭代,现在最新的版本为2019年9月发布的3.4.1版本。最新的版本包含808条缺陷条目,295个类目,38个视图。其中,视图又分为Navigate CWE视图,外部映射视图(ExternalMappings),有用的视图(Helpful Views)和弃用的视图(ObsoleteViews)。
据MITRE最新发布的消息,他们正着手研究将硬件缺陷纳入CWEList中,所以不远的将来,新的CWE List版本将会扩展包含硬件缺陷类型。
三、NavigateCWE视图
MITRE基于不同的概念为Navigate CWE视图设计了研究(Research Concepts)、开发(Development Concepts)和架构(Architectural Concepts)三种类型视图,见图3。
图3 Navigate CWE视图分类
每种CWE视图都是一个多层次的树状体系,见下表。
3.1 研究概念视图
第一类研究概念视图,见图4。
图4 研究概念视图
CWE-1000研究概念视图共有808个缺陷条目,涵盖了所有的CWE类型。该视图面向的是学术研究人员、漏洞分析人员和评估工具厂商,旨在促进对缺陷的研究,包括它们之间的相互依赖关系。这种分类方法不关心缺陷的检测方法,缺陷在代码中的位置,在软件开发生命周期中何时引入缺陷。该视图主要基于对软件行为进行抽象描述的方法组织归类。
图5 研究概念视图指标
如图4所示,在研究概念视图中,CWE共有11个类别(Class),每个类别下又分别包含基础缺陷和变体缺陷等,以视图中的CWE-118为例,见图6。
图6 研究概念视图层次示例
视图中的每个CWE条目都有独立的解释页面,详细地阐述每个CWE条目包含的内容,下面以CWE-369除零错误为例进行介绍。这里需要说明的是,每个CWE缺陷条目内容页面提供的信息字段并不是完全相同的,此处仅以CWE-369条目内容页面为例。
图7 CWE条目内容示例
CWE-369除零错误内容页面中提供了以下信息:
1) 描述(Description):对缺陷的初步说明,例:产品将某个值除以零。
2) 扩展描述(ExtendedDescription):对缺陷的进一步解释,例:此缺陷一般是在向产品提供一个非预期的值时发生,或当未能恰当检测到某个发生的错误时发生。在计算大小,长,宽和高等物理维度时经常发生该缺陷。
3)关系(Relationships): 以表格形式显示该缺陷与其他缺陷的关联以及层次关系,以ChildOf(子级)、ParentOf(父级)、MemberOf(成员)等来表示,例如CWE-369除零错误在研究概念视图中的关系,见图8。
图8 关系示例
再回到研究概念树状视图,可以发现CWE-369除零错误为CWE-682计算错误的子类,见图9。
图9 视图对映关系示例
4)引入模式(Modes Of Introduction):介绍该缺陷被引入到产品的方式和阶段,以表格形式呈现,Phase(阶段)一栏给出在软件生命周期内可能引入该缺陷的阶段;Note(备注)一栏描述在该阶段与引入该缺陷相关的典型场景,如图10。
图10 引入模式示例
图10说明CWE-369可能在实现阶段被引入到产品中,但是没有给出具体的场景。
5)常见后果(Common Consequences):描述该缺陷可能造成的各种后果,以表格形式呈现,共三栏。第一栏范围(Scope)表示受到影响的应用程序安全范围;第二栏影响(Impact)描述该缺陷遭到成功利用会造成的负面技术影响;第三栏可能性(Likelihood)显示出现特定后果的可能性,如图11。
图11 常见后果表格示例
通过图11的表格示例,可看出CWE-369除零错误会影响产品的可用性(Availability),一般会造成崩溃、退出或重启,可被用于实施拒绝服务攻击。
6) 利用的可能性(LikelihoodOf Exploit):该缺陷遭到利用的可能性。
7)展示性缺陷示例(Demonstrative Examples):有关该缺陷的,演示性的不良代码和好的代码示例。如图12和图13。
图12 不良代码示例
图13 好的代码示例
8)观察到的缺陷示例(ObservedExamples):与该缺陷相关联的CVE漏洞,以表格形式呈现,如图14。
图14 观察到的缺陷表格示例
需注意,这里给出的是示例,而不是与之相关联的所有CVE漏洞。
9)成员关系(Memberships):展示包含该缺陷的其他CWE类目和视图,以表格方式呈现,如图15所示。
图15 成员关系表格示例
10)分类映射(Taxonomy Mappings):以表格形式说明该缺陷与其他排行榜和编码标准的分类映射关系,如图16。
图16 分类映射表格示例
11) 内容历史(Content History):对该条目内容的编辑更新记录。
3.2 开发概念视图
第二类开发概念视图,见图17。
图17 开发概念视图
CWE-699开发概念视图共有42个类目,799个缺陷条目。该视图面向的是软件开发人员,教育人员和评估工具厂商,分类基础是软件开发中经常使用和碰到的概念。
每个类目(Category)都具有多层次的结构,如图18所示。
图18 开发概念视图层次结构示例
从图中可以看出,开发概念视图类目(Category)可以包含其他的类目,类别,基础缺陷和变体缺陷等。
CWE为每个类目创建了内容页面,如图19所示。
图19 类目内容页面示例
图19是CWE-19类目“数据处理错误”的内容页面,在该页面中主要包含以下信息:
1) 概要(Summary):对该类目的概要说明。例:此类条目中的缺陷一般存在于处理数据的功能中。
2)成员关系(Membership):展示该类目与视图、其他类目、类别和基础缺陷等的关系,以表格方式呈现,如图20所示。
图20 类目成员关系示例
3)内容历史(Content History):对该类目内容的编辑更新记录。
3.3 架构概念视图
第三类架构概念视图,见图21。
图21 架构概念视图
MITRE在2017年11月更新3.0版本时新增了架构概念视图。架构概念视图共包含12个类目,223个缺陷条目。该视图的分类基础是常见的架构安全策略,旨在帮助架构人员识别软件设计过程中可能造成的错误。
架构概念视图下的类目层次结构如图22所示。
图22 架构概念视图类目层次示例
架构概念视图类目层次一般只有两层,结构较为简单。
如前所述,最新版的CWE List包含了38个视图,本文只简单介绍了其中的NavigateCWE视图。MITRE基于不同的概念,从各自特定的角度出发对缺陷类型进行归纳组织,设计创建了不同的视图,方便相关领域的人理解,以便CWE List得到更好的利用和运用。