安全漏洞导致事故,通常被用来攻击网络空间和关键基础设施。然而,即使是安全专家也只是粗略地使用bug、fault、wakness、vulnerability和fail-ure等概念来定义安全漏洞。在本文中,明确定义了软件安全术语错误、故障、错误、弱点、漏洞和失效,这是在NIST错误框架(BF)工作的一部分。从漏洞开始,依次为弱点、错误和故障,然后是错误、最终错误和失败。将软件安全漏洞建模为一连串导致安全故障的弱点。安全漏洞会造成第一个弱点,从而导致错误。这个错误成为下一个弱点和故障的原因(即故障),并通过后续弱点传播,直到出现最终错误,导致安全故障。
明确定义软件安全中的错误、故障、错误、弱点、漏洞和失效等术语,将使广大软件安全研究人员和从业人员受益匪浅。安全漏洞会导致安全故障,然而,漏洞的构成要素是什么?引发漏洞的软件缺陷是什么?它是如何通过错误传播,直到出现可利用的最终错误的?漏洞的基本弱点与这些传播错误有何关系?软件安全漏洞是一连串因果联系的弱点。它以漏洞开始,以最终错误结束,一旦被利用就会导致安全故障。软件安全漏洞是(漏洞、操作、错误)或(故障、操作、错误)三重。它是弱点类型的一个实例,涉及软件执行的一个不同阶段、该阶段的特定操作以及这些操作的输入所需的操作数。软件安全漏洞是代码或规范缺陷——操作缺陷。软件故障是名称、数据、类型、地址或大小错误,即操作数错误。名称是指已解析或绑定的对象、函数、数据类型或名称空间。其他则是对对象的引用。软件错误是操作错误或操作数错误造成的结果。它将成为下一个故障或最终错误。软件安全最终错误是一种可利用的或未定义的系统行为,会导致安全故障。安全故障是对系统安全要求的违反。一连串的薄弱环节从漏洞开始,通过错误变成故障,最后以最终错误结束。最后的错误就是攻击者利用的安全漏洞。例如,输入验证错误可能会导致整数溢出,继而是缓冲区溢出,如果被利用,可能会导致远程代码执行失败。要解决漏洞问题,必须修复漏洞;而在大多数情况下,修复故障只能缓解漏洞。要修复漏洞(代码或规范缺陷),必须更改代码行或配置文件等。错误是一个具体的错误,是必须更改的错误位序列。修复规范也与代码有关,因为它需要修复规范的实现。安全故障可能是由多个漏洞的最终错误汇聚造成的。必须修复至少一个漏洞链中的错误才能避免故障。利用定义,用清单 1 中的规则将漏洞描述形式化。
图 2 展示了 BF 软件安全漏洞模型。根据弱点、错误、操作、错误和最终错误的定义以及形式化语法(清单 1),漏洞描述使用因果关系形成一连串的基本弱点,从而导致故障。
每个弱点都是一个弱点类型的实例,特定的错误或故障是原因,错误是结果。错误会过渡到另一个弱点或故障。错误总是导致一连串弱点中的第一个弱点1 ;它是一个编码或规范缺陷,如果修复,就能解决漏洞。故障会导致每个中间状态。最后一个弱点总是以导致故障(违反系统安全要求)的最终错误(未定义或可利用的系统行为)结束。过渡是对操作数进行操作的结果。例如,在图 2 中,第一个弱点中的操作 1 有一个错误,导致错误 1,错误 1 成为操作 2 的故障,导致错误 2。这样一环套一环,直到最后一个操作出现最终错误,导致失败。因此,漏洞可以精确地描述为一连串的弱点及其转换。这条链是漏洞软件中一系列不正常状态的序列。每个不正常状态都是一个弱点类型的实例,与漏洞框架(Bugs Framework,BF)类相对应。从初始状态的过渡是通过对正确操作数的不正确操作(存在漏洞的操作)实现的。从中间状态的转换是通过至少一个不正确操作数的正确操作(操作数有问题)。在某些情况下,必须存在多个漏洞,漏洞利用才会产生危害。不同链条产生的最终错误汇聚在一起导致故障(见图 3)。必须修复至少一个链中的漏洞,才能避免失败。
让来看看 BadAlloc,这是一种由 Mi- crosoft 研究人员发现并由网络安全和基础设施安全局 (CISA) 报告的模式,在多个物联网设备中发现了 25 个类似的漏洞。BadAlloc 漏洞模式包括五个连续的弱点(见图 4)。第一个弱点发生在软件执行的数据验证阶段。存在一个错误,例如缺少用于检查数据是否符合允许数值的代码,从而产生了数据验证弱点。这就允许输入一个异常大的数字 2,从而导致在进行算术计算时出现环绕错误(类型计算缺陷)。这个错误会导致内存分配时使用较小的数字,从而导致没有为缓冲区预留足够的内存(内存分配缺陷)。这使得指针可以移动到缓冲区边界之外(内存寻址缺陷),并在写入数据时导致缓冲区溢出最终错误(内存使用缺陷)。最终错误会导致故障,如拒绝服务或远程代码执行。
图 5 展示了 CVE-2021- 21834 中的 BadAlloc 漏洞的弱点链。要查看其完整详细的 BF 描述,请参阅。
ChatGPT 生成的有关特定软件安全概念的解释取决于对话框,但令人惊讶的是,这些解释一开始就错得离谱。例如,图 1 中的查询结果表明,安全漏洞是 "导致不正确或意外结果 "和 "产生安全漏洞 "的 "错误、缺陷、故障或过失"。然后,它利用了人们对漏洞的普遍理解,而不是解释弱点,只是增加了 "弱点是软件设计中的缺陷或问题"。错误不是故障,弱点不是漏洞,缺陷与错误有关,故障与错误有关。这些结果支持了研究结论,即亟需对所有这些概念进行明确定义。漏洞模型(图 2)和定义可以在足够高的抽象水平上用于描述若干漏洞的弱点模式,例如 BadAlloc 模式(图 4)。然而,它们也足够具体,可以提供特定漏洞背后的弱点细节--例如,CVE-2021-21834 链(图 5)。这些方法可以揭示相同类型的弱点链如何形成不同的漏洞,以及代码中的特定漏洞如何导致故障。了解了故障作为弱点链中传播错误的角色,就更容易发现漏洞的最终错误就是被利用的错误。回想一下 BadAlloc 模式和 CVE-2021-21834 的描述,它们都与漏洞模型相吻合:在缓冲区分配时,未经验证的大容量输入会导致使用包裹值作为大小,从而导致缓冲区变小,并允许越界写入。首先,更重要的是,解了漏洞的严重性:写缓冲区溢出可能会导致系统崩溃,甚至更糟,允许远程代码执行。接下来,了解了解决该漏洞应修复的内容:输入验证缺失漏洞。最后,可以推理出缓解漏洞的深度防御措施。例如,使用地址空间布局随机化来缓解动态分配内存的缓冲区溢出,或使用安全整数库来缓解环绕错误。了解了漏洞链,就能做出更好的开发、防御和缓解决策。如果说 CVE-2021-21834 存在缓冲区溢出错误或缓冲区溢出故障,那将是一种误导。如果只说它有缓冲区溢出弱点,也会遗漏很多东西。请注意,BF 漏洞模型侧重于软件内部的弱点。将其嵌入特定的攻击模型(如 NIST Vulntology)中,可以考虑外部原因,如硬件故障、系统配置错误、与其他软件的交互或人为交互。
在本节中,将把 BF 漏洞模型与相关工作进行比较和对比。Chillarege 等人提出了缺陷的因果关系分类思想。对错误的定义与他们对缺陷的定义相似。不过,更深入地将初始缺陷(错误)与传播的错误(故障)区分开来。将所有概念定义为抽象概念,有助于清晰解释从缺陷到故障再到最终安全故障的因果链。促进有关安全漏洞的清晰交流是主要目标。不过,方法从本质上讲也可以自动回溯漏洞。可靠性领域也一直在努力定义软件缺陷、故障、错误和失效等概念。90 年代的几篇论文讨论了这些概念。有些人认为硬件类比很有吸引力,但它有局限性,而且容易引起混淆。取而代之的是,从软件安全漏洞的概念出发,将其定义为安全故障(即安全属性丢失)的原因。失效是由软件安全漏洞打破基本安全原则的非预期功能引发的。Avizienis 等人利用因果关系定义了安全故障、错误和失效。他们解释说,错误会在组件内部传播,从最初的故障直到发生故障。他们将故障定义为 "判定或假设的错误原因",将错误定义为 "可能导致故障的系统总体状态的一部分",这反映了我们对错误和故障的理解。我们也认为故障是导致错误的原因之一,但此外,我们还认为重复发生对于更好地解释错误如何在软件中传播至关重要。例如,一个错误的操作结果可能是下一个操作的错误原因。我们将错误定义为初始不正确状态的错误原因,通过中间状态的错误传播,最终状态的错误导致故障。他们指出,错误传播是通过计算过程进行的,但他们并没有像我们这样深入研究。我们提出了操作(及其操作数)的概念,以解释错误或故障导致的错误如何过渡到故障,从而引发另一个错误。我们指出,一个漏洞是由一连串的弱点组成的,每个弱点都与特定的错误或故障以及导致错误的特定操作相对应。过渡的概念非常重要,因为一个弱点导致的错误可能比下一个弱点的具体故障更抽象。
在本文中,定义了安全故障和软件安全漏洞、弱点、错误和最终错误的基本概念,并详细介绍了软件故障和错误的定义。在创建 NIST Bugs Framework (BF) 软件安全漏洞模型的过程中,不断发展了这些概念。它们有助于推理和创建弱点分类法,从而对现有漏洞进行精确描述。信息技术 (IT) 管理人员、软件开发人员和安全检索人员都将受益于在软件安全背景下对这些术语的清晰理解。对潜在弱点的清晰理解将确保正确识别漏洞,从而缩短修复时间,减少通过补丁引入新漏洞的机会。正式的定义有助于机器处理安全相关信息和生成软件测试报告。ChatGPT 的查询结果表明,我们必须依靠更多的人工智能来辨别概念。在 ChatGPT 的引擎盖下有一个模型,它可以从互联网上的所有信息中学习,包括误解。与古代的德尔菲神谕一样,调用者应做好充分准备,提供正确的问题和上下文;否则,推理可能会产生误导,结果将不堪设想。利用我们的软件安全专业知识,我们提出了越来越多的问题,从而提供了更多的上下文,最终我们让 ChatGPT 至少能部分辨别我们自己的推理。集体知识似乎认可了我们通过 BF 研究的方向。
内容主要整理自相关网站资料。
仅供学习参考,欢迎交流指正。
公众号内回复“DP93”获取下载地址。
Powered by Jspxcms © 2010-2025 Jspxcms All Rights Reserved