新攻击通过故障注入绕过OpenSSH、OpenSSL和MySQL安全检查


一篇题为“混乱:寄存器和堆栈变量的定向损坏”的新论文揭示了一个严重的安全漏洞,该漏洞可能允许黑客绕过 OpenSSH、OpenSSL、MySQL 和 SUDO 等广泛使用的软件中的身份验证检查。

该漏洞使攻击者能够通过名为Rowhammer的技术破坏寄存器和程序堆栈中存储的敏感数据。

 什么是Rowhammer
Rowhammer是一种众所周知的方法,通过快速访问 DRAM 内存芯片中的数据来引发硬件故障。重复激活 DRAM 中的同一行可能会导致相邻行中的位翻转,这种现象称为 Rowhammer 效应。

之前的rowhammer 攻击主要集中于翻转动态分配的内存中的位或从磁盘加载的二进制文件。这种新的攻击首次证明了使用 Rowhammer 的寄存器和堆栈变量的损坏 - 以前被认为不受软件故障注入影响的数据。

堆栈是软件用来存储函数参数和局部变量等数据的临时存储器。寄存器是直接位于 CPU 内部的小型高速存储器。堆栈和寄存器都依赖于快速 SRAM 而不是 DRAM,因此被认为不会受到 Rowhammer 的影响。

然而,研究人员找到了在可预测的时间强制将寄存器值放入堆栈的方法。

该论文演示了几种滥用该向量的实际攻击:

  • 绕过 SUDO 身份验证以获得 root 访问权限
  • 不知道密码的OpenSSH远程登录
  • 破坏 OpenSSL 库中的签名验证
  • 违反 MySQL 用户身份验证中的安全检查

这些概念证明需要在漏洞窗口期间进行 20 分钟到 2 小时的内存分析和Rowhammer,以引发错误的身份验证。影响包括权限升级、敏感数据泄露或通用软件中的远程系统受到损害。

减轻威胁
该研究展示了一种新型的手术式故障注入攻击,它可以可靠地破坏程序安全,构成实际威胁。作者建议缓解技术侧重于添加冗余,以使其更难通过单位翻转影响逻辑:

  • 使用更严格的条件检查逻辑 - 要求安全变量匹配特定值而不仅仅是“非零”
  • 尽可能将安全标志存储在 CPU 寄存器中而不是堆栈中
  • 结合奇偶校验或金丝雀值来检测损坏
  • 从中断处理程序返回后刷新或重新加载敏感数据
  • 避免对安全关键操作进行频繁的上下文切换

研究人员通过针对他们发现的特定 sudo 漏洞提出缓解措施来展示这些原则,该漏洞已发布CVE-2023-42465并在 sudo v1.9.15 中进行了修补。

混乱攻击凸显了一种新兴的外科故障注入攻击,安全社区需要继续研究这种攻击。在可能的情况下添加冗余和随机性似乎是减轻当今威胁的最佳方法。论文 [ PDF ] 对安全工程师应审查的这些技术进行了重要介绍,以了解风险和防御措施。