软件安全知识之漏洞类别-其他漏洞

admin 2023年5月15日00:26:38评论18 views字数 2608阅读8分41秒阅读模式

软件安全知识之漏洞类别-其他漏洞

漏洞类别

争用条件漏洞

当程序访问它与其他并发参与者(同一进程中的其他线程或其他进程)共享的资源(如内存、文件或数据库)时,该程序通常假设这些并发参与者将对这些共享资源执行哪些操作(或不执行哪些操作)。

这些假设可以再次被认为是程序规范的一部分。此规范不再是程序的两个子组件(调用方和被调用方)之间的协定,而是执行程序的参与者与其环境(所有并发参与者)之间的协定,其中契约指定对环境如何与程序的资源。例如,规范可以说程序依赖于对一组资源的特定执行间隔的独占访问:只有执行程序的参与者才能在指定的时间间隔内访问该组资源。

违反此类规范是并发错误,通常也称为争用条件,因为这些错误的后果是程序的行为可能取决于哪个并发参与者首先访问资源(“赢得比赛”)。并发性,以及在存在并发的情况下使程序正确的相应问题,是计算机科学的一个重要子领域,其重要性远远超出了网络安全领域[8]。

但并发错误也可能是安全错误。并发错误通常会引入非确定性:程序的行为将取决于所有并发参与者操作的确切时间或交错。在攻击者控制某些并发参与者的对抗性设置中,攻击者可能充分控制操作的时间,以影响程序的行为,从而违反安全目标。争用条件漏洞是具有此类安全后果的并发bug。一个非常常见的实例是程序检查资源上的条件,然后在使用资源时依赖于该条件。如果攻击者可以交错自己的操作以使检查和使用时间之间的条件无效,则称为检查时间使用时间(TOCTOU)漏洞。

争用条件漏洞与许多不同类型的软件相关。它们发生的两个重要领域是:

文件系统上的争用条件:特权程序(即,以比其调用方更多的权限运行的程序,例如操作系统服务)通常需要检查文件的某些条件,然后才能代表权限较低的用户对该文件执行操作。未能以原子方式执行检查和操作(以便没有并发参与者可以干预)是一个争用条件漏洞:攻击者可以使检查和操作之间的条件无效。

Web应用程序中会话状态的争用:出于性能目的,Web服务器通常是多线程的,连续的HTTP请求可能由不同的线程处理。因此,属于同一HTTP会话的两个HTTP请求可以同时访问会话状态。如果不考虑这一点,则是一个争用条件漏洞,可能导致会话状态损坏。

接口漏洞

应用程序编程接口(API)是一个软件组件与另一个组件(如软件库、操作系统、Web服务等)进行通信的接口。几乎所有软件都是针对一个或多个预先存在的API进行编程的。API附带一个(显式或隐含的)规范/合约,说明它应该如何使用以及它提供什么服务,就像我们在前面的小节中考虑的合约一样,违反这些合约通常会对安全性产生重大影响。如果API的客户端违反合约,软件系统将再次进入错误状态,软件系统的进一步行为将取决于API的实现细节,这可能允许攻击者破坏整个软件系统的安全目标。这本质上是对实现漏洞概念的概括,即从1.1、1.2和1.3小节到任意API合约的合同违规。

当然,某些API比其他API对安全性更敏感。安全敏感的一类广泛的API是实现安全功能(如加密或访问控制逻辑)的库的API。一般来说,软件系统必须以功能正确的方式使用它所依赖的所有“安全组件”,否则可能会违反安全目标。这对于加密库来说尤其具有挑战性:如果加密库提供了灵活的API,那么正确使用该API(从某种意义上说,给定的安全目标已实现)是众所周知的困难。有大量的经验证据表明[9]开发人员在使用加密API时经常犯错误,从而引入漏洞。

安全使用的一个正交问题是加密API的安全实现。密码学的安全实现在密码学CyBOK知识领域[10]中介绍。

侧信道漏洞

程序的执行最终是一个物理过程,通常涉及消耗功率、发出电磁辐射并且需要时间才能完成的数字电子电路。然而,在计算机科学中,抽象地对程序的执行进行建模是很常见的,即在语义被定义的抽象机器上执行代码。数学上(具有不同程度的严谨性)。事实上,在许多不同的抽象级别上对程序的执行进行建模是很常见的,例如,在指定的指令集架构(ISA)上执行汇编代码,在Java虚拟机,或根据Java语言规范执行Java源代码。每个后续的抽象层都是根据较低层实现的,但从该较低层的某些效果或行为中抽象出来层。例如,ISA从某些物理效应(如电磁辐射或功耗)进行抽象,而Java虚拟机从内存管理的详细信息。

侧信道是一种信息信道,它通过程序代码从中抽象出来的效果来传达有关软件程序执行的信息。某些侧通道需要物理访问执行软件程序的硬件。其他侧信道(有时称为基于软件的侧信道)可以从与受攻击的软件程序在同一硬件上运行的软件中使用。

与侧信道密切相关的是隐蔽信道。隐蔽信道是攻击者还控制通过侧信道泄露信息的程序的信息信道,即攻击者使用侧信道有目的地泄露信息。

侧信道在密码学领域发挥着重要作用,其中(1)加密算法的数学(或源代码级别)描述和(2)该算法的物理实现之间的抽象差距已被证明与安全性相关[11]。结果表明,除非实现方式小心防范这种情况,否则基于功耗或执行时间的侧信道很容易泄漏加密算法执行期间使用的加密密钥。这破坏了攻击者模型加密的安全目标,攻击者可以在模型中物理监视加密过程。针对加密实现(以及相应的对策)的侧信道攻击在密码学CyBOK知识领域[10]中进行了讨论。

但侧信道通常与软件安全广泛相关。对于软件以较低层抽象实现的任何场景,都可以研究侧信道,即使该下层抽象本身还不是物理实现。一个重要的例子是在微架构方面实现处理器的指令集架构(ISA)。在ISA中编写的汇编代码的执行将对微体系结构状态产生影响;例如,效果可能是将某些值从主内存复制到缓存。ISA对这些影响进行了抽象,但在攻击者可以观察或影响这些微体系结构效果的攻击者模型中,它们构成了一个侧信道。

侧信道,特别是基于软件的侧信道,通常是机密性威胁:它们将有关软件执行的信息泄露给攻击者,以监控较低抽象层的影响。但是,如果攻击者可以通过依赖较低层的效果来修改软件的执行状态,侧信道也可能构成完整性威胁。此类攻击通常称为故障注入攻击。物理故障注入攻击可以使用电压或时钟毛刺、极端温度或电磁辐射来诱发故障。基于软件的故障注入使用软件驱动系统的硬件组件超出其规格范围,目的是在这些组件中引起故障。一个著名的例子是Rowhammer攻击,它使用恶意制作的内存访问模式来触发高密度DRAM存储单元之间的意外交互,从而导致内存位翻转。

原文始发于微信公众号(河南等级保护测评):软件安全知识之漏洞类别-其他漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年5月15日00:26:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   软件安全知识之漏洞类别-其他漏洞http://cn-sec.com/archives/1732503.html

发表评论

匿名网友 填写信息