摘要
对软件安全漏洞进行标记将大大有利于现代人工智能网络安全研究。国家漏洞数据库(NVD)通过将常见弱点枚举(CWE)条目分配给常见漏洞和暴露(CVE)条目,部分实现了这一目标。在这项工作中,我们探索了利用Bugs Framework(BF)形式来进行系统而全面的CVE标记。我们通过BF弱点指定所有与内存相关的CWE,并检查这些形式主义是否适合描述NVD 映射的相应CVE。我们还确定了CWE 中的相似性和重叠性,这些相似性和重叠性会给NVD的分配带来歧义。
关键词弱点、漏洞、安全故障、漏洞数据集、网络安全攻击、网络安全缓解技术。
通用漏洞和暴露(CVE)[1]库中公开披露的网络安全漏 洞 超过228000个(截至2023年8月),仅 2022 年就记录了25000多个。对这一大批软件安全漏洞进行系统标注,将推动现代人工智能(AI)网络安全研究的发展。目前最先进的技术是国家漏洞数据库(NVD)将CVE 映射到常见弱点列举(CWE)条目,并根据通用漏洞评分系统(CVSS)分配 CVE 严重性分数。)然而,对CWE 条目的深入分析显示,许多CWE条目过于具体、模糊或重叠,从而使 CWE-CVE变得复杂。
软件安全漏洞的精确描述,这有助于深入了解CVE。现有的 NVD 映射虽然存在缺陷,但提供了通过 CWE 深入了解CVE 的机会。将CWE 映射到 BF,然后使用NVD CWE-CVE分配,使我们能够在 CVE 的背景下利用BF的正式模型。应用BF 可以捕捉大量CVE 所表达的主要概念(如重复操作、后果),并最终为基于机器学习(ML)的自动标记方法提供信息。例如,我们可以了解到,数千个 CVE 与错误读取有关,而没有一个与错误重新分配有关。CWE-BF 映射还提供了正式的BF描述,这些描述至少部分符合许多CVE,有助于对它们进行标注。
BF 的形式主义允许我们将每个CWE 指定为一个(原因、操作、结果)BF弱点或一连串 BF 弱点。这些说明揭示了CWE 的基本隐含模型,使我们能够识别CWE 中的相似性和重叠性。后者是将模糊性引入CWE 到CVE 分配的问题的一部分。
这项工作是我们首次探索利用BF-CWE-CVE映射来通过BF指定/标记CVE。我们将重点放在与内存相关的CWE上,因为有许多CWE大量与内存相关的CVE 与相对较少的内存相关 CWE相对应。我们通过BF弱点来说明它们,并检验这些形式主义是否适合描述相应的CVE。我们还讨论了CWE之间已发现的相似性和重叠性,阐明了NVD和安全社区在将CWE分配给CVE时所遇到的困难。
通过 BF 弱点或 BF 弱点链正式确定与内存相关的CWE
CWE 和 BF 都对弱点进行了分类;不过,作为一种正式模型,BF能够将与内存相关的软件弱点的隐性CWE 模型明确化。我们采用BF将弱点正式表述为(原因、操作、后果)三元组、BF漏洞模型和BF内存错误分类法。具体来说,我们使用内存破坏/泄露(_MEM) BF 类类型,它由三个BF类组成:内存寻址(MAD)类处理指针的初始化、重新定位或重新分配;内存管理(MMN)类处理对象的错误分配、取消分配、调整大小或重新分配;内存使用(MUS)类处理对象的初始化、读取、写入和清除。
CWE的网页大多由文字段落组成(即描述、扩展描述、代码片段解释等)。CWE 中许多不同的短语具有几乎相同的含义,段落本身也可能有不同的解释,而且无法保证 CWE 的描述包含了完全理解相应弱点所需的全部信息。作为一种从左到右的最左派生单符号前瞻( LL1) 语法,BF本身不存在歧义,其原因-操作-结果结构意味着它能保证完整描述软件弱点或漏洞。因此,BF 可以澄清和补充CWE条目。
我们从中介绍的CWE 到 BF类映射开始,确定了60个用于标记CVE的内存相关CWE。我们按 BF类操作更新了这些映射,并通过深入分析CWE 的描述、扩展描述、常见后果、示范代码示例和观察到的 CVE 示例,为每个CWE创建了基于(原因、操作、后果)的BF 描述。与记忆相关的 CWE 总共映射到48个不同的 BF 链,这些 BF 链由已识别的 BF(错误、操作、错误)和/或(故障、操作、错误/最终错误)弱点三元组[6]。其中37 个 BF 链映射到单个 CWE,11个映射到多个CWE。这60个 CWE-BF 映射关系见表1、表 2 和表 3。表1显示了具有完全不同BF 描述的CWE。表2和表3显示了在 BF 方面具有相似性的CWE。更具体地说,表2显示了具有相同原因链的CWE 组,表3显示了具有相同 BF 描述的CWE组。请注意,在描述弱点三元组时,我们省略了BF类别名称,因为 BF 类别在操作上是正交的。例如,CWE-562(错误代码、重新赋值、野生指针)与(错误代码、 MAD重新赋值、野生指针)相同。
对于CWE-823、CWE-400和CWE-1325,我们能够识别出多个不同的BF链(如表1所示)。由于每个 CWE 条目应该只描述一个弱点,因此描述多个不同弱点的CWE的存在凸显了CWE内部的重叠。
许多 CWE 都提供了关于前一个弱点的信息,我们将其形式化为BF 的弱点链。因此,一些 BF 规范包含了来自非内存相关BF类的弱点操作,如表1中CWE-823的"验证"(Verify)和"计算"(Calculate),以及CWE-843的"强制"( Coerce)。第一个操作来自输入/输出检查(INP)BF类类型,后两个操作来自数据类型(_DAT) BF类类型 [5]。再比如,CWE-126表面上描述的是缓冲区超读弱点。然而,它还描述了导致指针重新定位不正确的错误计算。这三个弱点构成了(错误代码、计算、错误结果)→(错误索引、重新定位、过界指针)→(过界指针、读取、缓冲区过读)BF链。
有三组与内存相关的CWE(见表2)共享一个或多个相同的 BF 弱点三元组,导致不同的BF弱点三元组。例如,CWE-127、CWE-786 和CWE-124都以(错误代码、计算、错误结果)开头,从而导致(错误索引、重新定位、欠界指针)。这个相同的因果链导致CWE-127、CWE-786和CWE-124的三个不同的主要BF弱点三元组。
通过 BF 规范实现记忆相关CWE的相似性和重叠性
表1:具有不同BF缺陷/缺陷链的内存相关CWE。(顺序按BF内存错误模型操作流程排列。引起缺陷的部分用斜体表示。箭头(→)表示连锁。星号(*)表示未分配给任何CVE的CWE)。省略号(...) 表示许多可能的操作
表 2:具有相同导致BF链的内存相关CWE。(顺序按BF内存错误模型操作流程[7]排列。致因弱点用斜体表示。箭头(→)表示连锁)。
CWE-124,正确区分了这三个条目。此外,还有11组与记忆有关的CWE(见表3)具有相同的BF弱项或一连串弱项,这表明有重复或重叠的地方在CWE 内。
例如,CWE-401描述的是由于已分配对象没有引用而导致的内存泄漏,而CWE-771描述的是错误删除对已分配对象的所有引用。然而,这些弱项非常相似,因为CWE-771中错误删除对已分配对象的所有引用会导致 CWE-401所描述的内存泄漏,而CWE-401所描述的状态是由CWE-771所描述的重新分配操作创建的。在 BF 术语中,这些CWE 条目都被指定为(单一自有地址、重新分配、内存泄漏)。
其他CWE 仅在 BF方面略有不同属性,这些属性只说明弱点的严重程度,而不说明弱点的性质。例如,CWE-121描述的是堆栈上的缓冲区溢出,而CWE-122描述的是堆上的缓冲区溢出。一旦堆栈与堆的区别由BF属性来说明,这两个条目就由BF 弱点类型的同一实例来指定:(过界指针/欠界指针、写入、缓冲区溢出/缓冲区下溢)。
CWE 之间的等级关系(表3第3列)显示,大多数具有相同BF 链的CWE 要么具有ChildOf关系,要么具有PeerOf关系。其中一些,如 CWE 121-122-123和CWE 170-463-464是具有共同父系的同胞兄弟。不过,也有一些没有直接关系的CWE具有相同的链,如CWE-401和CWE-771。一个有趣的现象是,虽然CWE-123、CWE-415和CWE-416 的 BF 弱项三元组非常不同,但它们在CWE 中被列为同级。
值得特别注意的是共享BF 链的父子CWE 对。根据 CWE,父条目应该比子条目更抽象。在BF术语中,这表现为有多种可能的原因、后果和/或操作(例如,缓冲区溢出/缓冲区下溢与仅有缓冲区溢出/缓冲区下溢)、 缓冲 区溢出/缓冲区下溢与仅缓冲区溢出)。我们预计,父/子CWE 的 BF 链会略有不同,或者子CWE的主要弱点会包含在父 CWE 的主要弱点中。例如,(超边界指针、读取、缓冲区超读) 包含 在 包含在 (过界指针/ 欠界指针、读取、缓冲区超读/缓冲区欠读)中。父级和子级具有相同的链条(包括相同的主要弱点和引起弱点),这意味着模糊性中的这种差异是缺失的,并突出了CWE 中的重叠区域。
BF 还能揭示 CWE 内部缺失的关系。仅在BF属性上存在差异的CWE(如CWE-121和CWE-122)应该在CWE内部存在某种关系(如PeerOf)。
表3:具有相同 BF 弱点/BF弱点链的内存相关CWE。(顺序按BF 内存错误模型操作流程[7]排列。列出操作即可,因为BF类在操作上是正交的。引起缺陷的部分用斜体表示。箭头(→)表示连锁);星号(*)表示未分配给任何 CVE 的 CWE。省略号.….)表示许多可能的操作和后果)。
通过 BF 规范标记与内存相关的CVE
截至2023年8月,共有60426个与内存相关的 CVE。我们查询了CVE资源库中由NVD分配了 CWE 的条目,这些CWE 通过主操作映射到BF内存损坏/泄露(_MEM) BF 类类型。我们按照NVD 分配的CVSS严重性分数对它们进行排序,每个操作最多选择10个 CVE,从而将可观察到的CVE 数量减少到91个,以便进行探索性分析。然后,我们检查了映射到CWE 的 CVE 群组和映射到CWE 的CVE 群组,前者具有完全相同的导致 BF链,后者具有完全相同的BF链。从后一组中,我们还找出了映射到具有父子关系的CWE 的 CVE。
分析这个CVE 子集,我们发现它很好地涵盖了BF内存操作:重新定位、重新分配、验证、初始化对象、读取、写入、取消引用、清除和取消分配。然而,尽管可能存在与 BF 内存操作Initialize Pointer、Extend、 Reallocate-Extend、Reduce 和Reallocate-Reduce相关的 CVE,但在整个CVE 资源库中却无法通过CWE识别它们。这表明CWE存在空白或CWE 分配存在问题。无论如何,我们需要不同的方法来识别和指定与这些操作相关的CVE。
在进一步研究这个CVE子集时,我们发现,总体而言,与内存相关的CWE 对CVE 的分配,反映了每个 CVE 的主要弱点,通过BF操作几乎完全正确。例如,映射到CWE-126和CWE-788的CVE(见表2)分别正确区分了只读操作和读/写操作。我们只是偶尔发现按操作将CWE 分配到CVE的错误示例,如将 CWE-123 分配到CVE-2018-1203。这个CVE的困惑肯定与描述中使用"写"有关,而实际上它是一个BF 输入/输出检查(_INP)类类型漏洞:(缺失代码、验证、文件注入)。
然而,在根据CWE BF弱点或弱点链(不仅包括操作,还包括原因和连接序列)检查CVE 时,我们发现这些BF 弱点规范的部分内容可能并不适合所有相应的CVE。例如,BF CWE-126链(见第2 页)完全符合CVE-2014-0160(心脏出血)等CVE 的(过界指针、读取、缓冲区过读)主要弱点,以及它们的(错误索引、重新定位、过界指针)直接原因弱点。然而,大多数分配了CWE-126 的 CVE 都有作为初始弱点的是验证操作中的缺失代码,而不是计算操作中的错误代码--参见[8]中的第一个心脏出血弱点。我们认为,表2中的因果链可能有助于描述某些CVE,但过于具体,不适合其他CVE。这可能是因为 CWE缺乏灵活性,无法描述所有可能的安全弱点--条目可能过于具体,无法重复使用,有些条目可能缺失,有些条目可能重叠。我们必须使用完全不同的方法来识别和指定CVE的BF 描述中不适合分配给该CVE的过于具体的CWE 变体的部分。
我们还发现,在BF规格不同的CWE中(见表1),CWE-586和CWE-568没有被分配给任何CVE。然后,在BF规格相同的CWE组中(见表3),下列CWE根本没有被分配到任何CVE:来自805、806 组的CWE806、来自805、806组的CWE1341和来自805、806组的CWE 1341。415、1341对、CWE 463和CWE 464。
170、463、464三项,以及CWE 224、CWE1239和来自226、224、1239、1272四元组的CWE1272。有趣的是,有些CVE (在表1和表3中用星号*标记)可以更好地描述未使用的CWE。其中一个例子是CVE-2023-38434(虽然不在我们的91个 CVE之列),它描述了关闭网络连接时的双重空闲。NVD将其归类为内存资源的CWE-415(双重释放),而不是更通用的CWE-1341(同一资源或文件的多重释放)。这两个CWE 共享(错误代码、去分配、双重释放)BF弱点三重(见表3);它们的相似性和内存与资源的模糊区别在 CWE-CVE 分配中引入了错误和不确定性,这也会影响我们的CVE标记工作。
其余类似的CWE(见表3)在许多情况下会导致 CWE-CVE 分配不明确。其中一个例子是CVE-2022-0519,它描述了使用不正确长度值访问缓冲区导致缓冲区过度读取的情况。NVD 将此 CVE分配给CWE-119(内存缓冲区范围内操作的不当限制)和CWE-805(具有不正确长度值的缓冲区访问)。然而,CWE-126(缓冲区超读)也比抽象的CWE-119更好、更准CWE 中另一个含糊不清的地方与BF属性有关。例如,CVE-2023-40295描述了堆上的缓冲区溢出。NVD为该 CVE 分配了CWE-787(越界写入),它准确地描述了该漏洞。然而,CWE-122 也是一个合适的赋值,因为它专门描述了堆上的缓冲区溢出。除此以外,虽然CWE-122 和CWE-787有细微差别(在 BF中通过地址相关属性捕获),但它们的主要弱点相同:(过界指针/欠界指针、写入、缓冲区溢出、缓冲区下溢)。虽然 CWE-122是更具体的映射,但其相似性给决定将哪个 CWE 分配给此CVE带来了困难。
在许多情况下,CWE-CVE任务只能捕获漏洞的起因或后果,而不能同时捕获两者。CVE-2022-34399和CVE 2022-32454分别描述了缓冲区超读和缓冲区超写漏洞。CVE-2022-34399的BF链是(缺失代码、验证、不一致值)→(错误索引、重新定位、过写)。(错误索引、 重新定位、越界指针) → (越界指针、MUS写入、缓冲区溢出),而CVE-2022-32454 的BF 链为 是 (缺码、验证、错 误值)→(错误大小、MUS读取、缓冲区超读)。
NVD 将CWE-119(内存缓冲区边界内操作的不当限制)和CWE-805(长度值不正确的缓冲区访问)分配给CVE 2022-34399,将CWE-121(基于堆栈的缓冲区溢出)分配给CVE2022-32454。然而,分配给 CVE2022-34399的CWE 只描述了漏洞的原因,而分配给CVE 2022-32454的CWE 只描述了漏洞的后果。我们必须将CWE-126(缓冲区超读)分配给CVE 2022-34399和CWE-112(缺失XML验证),才能捕捉到该漏洞背后每个弱点的完整故事。在捕捉漏洞的原因或后果方面的这种不一致性使CWE-CVE的分配更加复杂。
这项工作的发现表明,要创建精确的BF CVE 描述,还需要对一些领域进行更多分析。我们必须深入研究与之相关的漏洞报告、带漏洞的源代码、带修复的源代码以及其他可用的相关资源。利用BF 漏洞模型、BF网络安全概念定义和BF 分类定义 [5]和 [6],以及它们的任何同义词,我们可以采用现代ML和 AI方法来自动分析 CVE 并生成BF CVE 规范。
4 结论
对于与网络安全漏洞、攻击和缓解技术相关的高级人工智能研究而言,标签化漏洞描述具有极大的需求。作为一种正式的漏洞/弱点模型,BF能够毫不含糊地描述底层漏洞和弱点的链条。
内容主要整理自相关网站资料。
仅供学习参考,欢迎交流指正。
阅读英文原文
公众号内回复“DP100”
获取《Labeling_Software_Security_Vulnerabilities____IT_Pro__PREPRINT》下载地址
Powered by Jspxcms © 2010-2025 Jspxcms All Rights Reserved