1.前言

如何对漏洞的脆弱性进行分类,在漏洞情报分析过程中一直都是个头疼的问题。分类太细,可读性差;分类太泛,则分析结果准确率和召回率都会随之下降。

就目前来看,对于漏洞分类的解决方案,绝大多数是以CWE标准为基础,在此之上通过人工筛选的方式,选择一些典型CWE作为自己标准的分类类别,如CNNVD是选取了26个CWE作为漏洞脆弱性分类类别,并以“树”的形式将其分为五个层次。

图 1 CNNVD漏洞分类层次树

然而这样的分类方式,虽然大幅提高了人类的可读性,却牺牲了漏洞脆弱性分类给漏洞情报分析带来的分析收益,换句话就是,牺牲了机器的可读性。比如在做某一组件的历史漏洞原因分析时,使用CWE的分类方式进行分析,可以清晰准确的看到组件的脆弱性分布图,并能够以“未知漏洞预测”、“漏洞成因趋势发展”等项目研究。当然,使用CWE进行这类研究时,也会有需要大量数据支撑(历史漏洞脆弱性分布越广,漏洞数据量需求就越大),分析结果召回率低等问题。但使用简化版的漏洞脆弱性分类标准,则无法构建清晰的脆弱性分布图,主要原因是因为脆弱性划分太粗导致的数据密度过大,无法进行有效识别和判断。

综上,我们尝试使用知识图谱构建CWE实体及内部关系,并基于该图谱对CWE的划分进行实践与应用。以求能够找到一种“划分”而不是“简化”CWE标准的方法。

2.CWE图谱构建

CWE™(Common Weakness Enumeration)是一种软件和硬件漏洞脆弱性描述标准,由MITRE负责运营。CWE对于脆弱性的观察角度分为三个:“Software Development” - 软件开发、“Hardware Design”- 硬件设计、“Research Concepts”- 研究概念。在漏洞研究领域,我们通常更关注的是从第三个观察角度“Research Concepts”所构建的CWE描述体系。因此本文便不再赘述前两个角度的相关信息。

“Research Concepts”视角下,CWE描述体系的构建不再关心脆弱点如何被检测到、它们出现在代码中的什么位置、或者它们何时在开发生命周期中被引入,而是重点研究抽象的脆弱性概念的区别以及之间的相互关联关系,并且该视角下会包含所有的CWE。

CWE的描述文件采用的是XML格式,在“Related_Weaknesses”字段中描述了该CWE与其他CWE之间的关系。

查看原文