现代处理器之所以能高速运行,部分原因在于其"预测"机制。芯片无需等待程序确定走向,而是提前预判可能的执行路径并抢先执行。预测正确时节省时间,预测错误时虽会丢弃结果,但残留痕迹依然存在。自2018年Spectre漏洞披露以来,攻击者已掌握读取这些残留痕迹、从本不应访问的内存中窃取机密的方法。
多年来,芯片制造商和操作系统开发者持续构建防御机制。然而,麻省理工学院计算机科学与人工智能实验室(CSAIL)的一项新研究表明,这些防御机制背后的一个核心假设并不成立。
现有防御措施的工作原理是清除或隔离处理器的预测装置,以消除攻击者可能植入的内容。但正如博士生丹尼尔·特鲁希略和麻省理工学院助理教授颜梦佳所指出的,清除操作与预测结果被使用的时刻之间无法完全同步,始终存在一个间隙——有时仅有数条指令的宽度。任何在这个间隙内运行的代码都可能再次污染预测装置。研究人员将这类攻击命名为"TONTOU"。
抓住间隙
研究团队的核心贡献在于找到了一种可靠的方式,将代码注入这个间隙。计算机会不断暂停当前任务来处理中断——这些小型常规任务由计时器、网络流量和硬件触发。普通程序本身就可以设置这些计时器。通过精确调整计时器,特鲁希略和颜梦佳能让处理器恰好在最不恰当的时刻发生"绕道",而中断执行过程则完成污染操作。他们将这一技术称为"中断注入"。
研究团队对英特尔和AMD的四代处理器进行了测试,均成功触发了错误预测。在英特尔芯片上,该攻击突破了两种不同的保护机制:一种是为旧款芯片构建的软件层防护,另一种是集成在新款芯片硅片内的硬件级防护。值得注意的是,新款防护在某一代英特尔芯片上有效,在另一代上却失效,这表明芯片制造商在实现同一防御机制时存在实质性差异。
AMD的防御机制名为"saferet",其原理是在每次使用预测装置前立即进行清除,理论上仅留下两条指令宽度的漏洞窗口,通常在数十纳秒内执行完毕。研究人员仍然成功发起了攻击——方法是在该特定位置降低处理器速度,从而使目标更易命中。
从错误预测到密码文件
为展示实际危害,研究团队在运行当前Linux内核的AMD系统上构建了一个可运行的漏洞利用程序。他们首先破解了用于打乱操作系统在内存中位置的防御机制,10次尝试全部成功,每次耗时约9分钟。在此基础上,他们以约每秒5字节的速度读取受保护内存——虽然速度较慢,但已足以在半数尝试中定位并复制存储系统root密码哈希值的文件"/etc/shadow"。
研究论文建议在中断结束后对预测装置进行第二次清除。这一方案在AMD上看似可行,但在英特尔上可能适得其反:由于该攻击依赖中断留下稳定状态而非特定状态,标准修复方案反而可能提高攻击的成功率。较新款的英特尔芯片内置了一条专用指令,似乎对此有所帮助。
另一种方案是在漏洞窗口期间屏蔽中断,但这可能带来过高的性能损耗,实用性存疑。
特鲁希略和颜梦佳于2月初通知了AMD和英特尔,并于3月联系了Linux内核维护者,同时与AMD协调,向云服务提供商及其他下游客户发出预警。AMD随后发布了针对该攻击的补丁,用户可通过更新操作系统获取。研究团队的代码已公开发布。
本研究于本月在Black Hat USA和USENIX Security两大安全会议上正式发表。
Q&A
Q1:TONTOU攻击是什么?它如何绕过处理器的防御?
A:TONTOU是麻省理工CSAIL研究人员发现的一类新型处理器攻击方式。现有防御机制会在处理器预测装置使用前对其清除,但清除操作与实际使用之间存在一个极短的时间间隙。TONTOU利用"中断注入"技术,通过精确调整计时器让中断恰好在这个间隙内执行,从而在防御完成后再次污染预测装置,进而读取本不应访问的内存数据。
Q2:TONTOU攻击能造成什么实际危害?
A:研究团队在运行最新Linux内核的AMD系统上演示了真实攻击场景。他们成功破解了内存地址随机化防御,并以每秒约5字节的速度读取受保护内存,在半数测试中成功定位并复制了存储系统root密码哈希值的关键文件"/etc/shadow",证明该攻击具备实际窃取敏感系统凭证的能力。
Q3:AMD和英特尔已经修复TONTOU漏洞了吗?
A:AMD已发布针对该攻击的补丁,用户更新操作系统即可获取修复。英特尔方面,较新款芯片内置了一条专用指令有助于缓解该问题,但研究人员指出,标准修复方案在某些英特尔芯片上可能反而提高攻击成功率,修复效果因芯片世代不同而存在差异。
