一种新型攻击绕过了计算机处理器内置的最新防御系统
现代处理器之所以速度快,部分原因在于它们会进行猜测。它们无需等待确定程序的分支方向,而是预测可能的路径并提前执行。猜测正确时,就能节省时间;猜错时,相关工作会被丢弃,但这些操作的痕迹仍会残留。自 2018 年幽灵漏洞被披露以来,攻击者就已掌握如何读取这些痕迹,从本无权访问的内存中窃取机密信息。
芯片制造商和操作系统开发者已花费多年时间构建防御体系。麻省理工学院计算机科学与人工智能实验室(CSAIL)的一项新研究表明,其中许多防御体系背后的一个核心假设并不成立。
这种防御机制的工作原理是清除或隔离处理器的预测机制,清除攻击者可能植入的任何内容。麻省理工学院电气工程与计算机科学(EECS)博士研究生丹尼尔·特鲁希略和电气工程与计算机科学(EECS)副教授孟佳燕指出,其中的关键问题在于,清除操作与预测结果被使用的时刻无法在同一瞬间完成。两者之间始终存在间隔——有时仅相隔几条指令。在这一间隔内运行的任何程序都可能再次污染预测机制。研究人员将这类攻击命名为TONTOU。
他们的研究成果为填补这一空白提供了可靠的方法。计算机会不断暂停正在执行的任务,以处理中断:这类由计时器、网络流量和硬件触发的小型常规任务。普通程序可以自行设置这些计时器。特鲁希略和严通过以足够高的精度调整计时器,能够让处理器在恰好错误的时刻偏离原本的执行路径,而中断执行过程则完成了污染操作。他们将这种技术称为中断注入。
该团队测试了英特尔和AMD的四代处理器,在两者上均发现了误预测现象。在英特尔芯片上,此次攻击突破了两种不同的防护机制:一种是为老旧芯片设计的软件防护,另一种则是集成在新款芯片硬件中的防护。值得注意的是,新款防护机制在一代英特尔芯片上表现稳固,而在另一代却失效,这表明芯片制造商以显著不同的方式实现了名义上相同的防护措施。
AMD的防御机制名为saferet,它会在每次使用前立即清理预测机制,仅留下一个仅2条指令宽的脆弱窗口,这些指令通常在数十纳秒内即可执行完毕。研究人员还是成功攻破了这一防御——他们在该精确位置降低处理器速度,让目标更容易被攻击。
从一次错误猜测到密码文件
为了展示这在实际中意味着什么,该团队在运行最新版 Linux 内核的 AMD 系统上构建了一个可运行的漏洞利用程序。他们首先破解了一项会打乱操作系统在内存中位置的防御机制,十次尝试全部成功,每次耗时约九分钟。这让他们得以以每秒约五个字节的速度读取受保护的内存——速度虽慢,但足以在半数尝试中定位并复制/etc/shadow 文件,该文件存储着系统的根密码哈希值。
该论文建议在中断完成后再次清理预测机制。这在 AMD 芯片上似乎可行,但在英特尔芯片上可能适得其反:因为该攻击依赖于中断留下一致的状态而非特定状态,标准修复方法可能会让攻击变得更可靠,而非更难实施。较新的英特尔芯片配备了一条专用指令,似乎能提供帮助。
另一种选择是在易受攻击的窗口期间屏蔽中断,但这可能会造成过大的性能损耗,从而不具备实际可行性。
特鲁希略和严在2月初通知了AMD和英特尔,并在3月联系了Linux内核维护者,他们与AMD合作向云服务提供商及其他下游客户发出了预警。AMD随后发布了一款可缓解该攻击的补丁,更新操作系统即可获取该补丁。相关代码已公开发布。
本研究部分得到了美国空军科学研究办公室通过国防部授予的奖项支持,同时也得到了DARPA资助项目JUMP 2.0旗下七大中心之一ACE的支持。该研究成果将于本月在美国黑帽大会和USENIX安全研讨会上发布。
原文:https://www.csail.mit.edu/news/new-attack-slips-past-latest-defenses-built-your-computers-processor