竞争条件漏洞
传统的进程执行方式涉及单线程,因此与多线程相比,出现故障的可能性较小。当出现多个线程或进程时,执行任务的顺序可能会混淆或改变。类似地,当同时读取和写入某个特定操作或程序时,就会发生“竞争条件”。这种竞争条件是对系统的一种安全威胁,会导致数据损坏或数据丢失。
竞争条件漏洞
它涉及运行多个线程,多个线程意味着许多进程同时并行运行。在这种情况下,竞争条件漏洞是由检查时间 (TOC) 和使用时间 (TOU) 引起的。在使用资源之前,需要检查资源的可用性状态,而状态根据 TOCTOU 而变化。
检查时间 (TOC) 使用时间 (TOU)
这是一个由竞争条件引起的软件错误。这些条件在UNIX操作系统中很常见,发生在文件操作之间。当此错误进入系统时,它将窃取数据、损坏数据或擦除数据。
竞争条件攻击示例
在授予访问权限之前检查登录凭据的过程中,黑客可以干扰安全系统。攻击是通过在 TOC 和 TOU 之间插入恶意代码来执行的,然后对未经授权的用户进行身份验证以访问系统。
对于临时文件,攻击者将创建或更改具有某些常用名称建议的文件以存储敏感数据。通过这种方式,攻击者可以更改系统的行为,从而导致漏洞。
当用户想要访问任何文件或数据时,系统会提示他们需要权限才能访问该文件。利用这一点,数据和文件可能会导致损坏或丢失。
在更新数据库中员工薪资信息(根据绩效)的情况下,攻击者可能会打开数据库并根据其需要更改数据,他们可以提高低绩效员工的薪资,反之亦然。
多线程
多线程和竞争条件相互关联;竞争条件是在多线程环境中发生的软件漏洞。多线程也称为多线程处理。它是在同一时间并发执行或管理许多进程的过程。此过程涉及共享资源(如设备、文件或数据),当许多进程同时使用时,就会引入“漏洞”这一术语。
由竞争条件漏洞引起的熔断攻击
熔断攻击并非完全是一种竞争条件漏洞,但与其相关。熔断攻击利用处理器中的漏洞,允许它访问不应该访问的内存位置,例如内核内存或其他进程的内存。此漏洞是由称为推测执行的功能引起的,该功能允许处理器提前执行指令以提高性能。但是,此功能还会在指令执行和验证其有效性之间产生竞争条件。
如果指令无效(例如访问受保护的内存位置),处理器将丢弃结果并回滚到先前状态。但是,指令的执行可能会在处理器的缓存或其他组件中留下一些痕迹,这可以通过旁路技术检测到。因此,攻击者可以使用熔断攻击通过推测性地执行访问它们的指令并测量访问它们所需的时间来读取任何位置的内存内容。
竞争条件漏洞的影响
它对安全系统及其功能产生一些严重影响,例如:
系统崩溃导致数据丢失。
系统中的数据已损坏。
导致未经授权的成员使用。
当多个线程尝试锁定同一文件时,会导致死锁情况,在这种情况下,进程没有可用数据。
防御竞争条件漏洞
竞争条件漏洞可以从开发人员端防止,并且需要具备为代码提供安全性和开发设备或系统的适当技能。一些防止竞争条件漏洞的方法包括:
共享资源
资源不必通过多线程技术在设备或进程之间共享。实际上,如果需要共享资源,则必须对其进行同步或访问锁定以确保安全措施。一些锁定方法包括互斥锁、信号量和监视器。
唯一名称
赋予临时文件的名称必须是唯一的,以避免 TOCTOU 攻击的威胁。并且还需要使用安全函数或库来创建资源或临时文件。
跟踪活动
需要监控系统和进程是否存在任何可能导致竞争条件攻击的不必要活动。它还可以使用一些安全测试工具来跟踪和检测竞争条件漏洞。
结论
竞争条件漏洞发生的两种主要方式是:多个进程访问共享资源时。当系统检查文件或资源权限以及系统资源状态在检查和使用之间切换时,也称为检查时间和使用时间窗口。