AMD针对Spectre v2的Safe RET防御方案被曝出存在两指令窗口的中断漏洞,Zen1到Zen4架构均在受影响范围,对应Linux内核补丁已推送,几乎无性能损耗,多租户服务器需优先升级,普通单用户桌面风险较低。
最近一项在黑帽美国大会公开的安全研究显示,AMD处理器现有Spectre v2漏洞防御体系存在被绕过的可能,使用Zen架构处理器的Linux设备用户,尤其是多租户云服务运营方需要重点关注。
Safe RET防御出现两指令攻击窗口
Safe RET是2023年起Linux系统应对推测性返回栈溢出的默认方案,也是针对2023年AMD Inception(CVE-2023-20569)漏洞的核心防护手段。
它的运行逻辑是在内核返回前立即清理分支预测器,默认假设清理和返回之间不会有恶意代码运行。
MIT CSAIL的两名研究人员Daniël Trujillo和Mengjia Yan证实这个假设并不成立,利用Linux对所有用户开放的中断机制就能插入恶意操作,这类漏洞被命名为TONTOU,对应清理到使用之间的时间差攻击,和软件领域存在数十年的TOCTOU竞争漏洞逻辑类似。
该研究成果已经在黑帽美国大会上做了展示,完整论文后续将在巴尔的摩举办的USENIX Security会议上发布。
AMD在8月6日发布了编号为AMD-SB-7061的安全公告,将问题归因于Linux的防护实现而非芯片硬件设计,Zen1到Zen4全系列架构均被列入受影响范围。
漏洞可稳定泄露内核敏感数据
Zen2架构的攻击窗口宽度为两条指令共6字节,攻击者可以通过申请高精度纳秒级高频定时器中断,配合超线程兄弟核心的缓存淘汰操作提升触发概率,同时选择特定系统调用保留两个寄存器的控制权,最终中断落在窗口内的概率为5%到12%。
攻击流程触发后,中断处理程序会成为训练工具,利用的正是Safe RET原本要防护的Inception漏洞。
在搭载Zen2处理器、运行Linux6.14系统且开启所有默认Spectre v2防护的设备上,漏洞可以每秒泄露5.47字节内核内存,准确率达91.97%,10次尝试中有5次能成功读取系统影子密码文件。
每秒5.47字节的泄露速度并不算快,但已经足够支撑攻击者定位并读取系统核心敏感数据。
目前Zen1、Zen2的漏洞利用已经得到验证,AMD表示Zen3和Zen4也可能受影响,只是相关利用尚未得到演示。
内核补丁已上线 几乎无性能损耗
对应的修复补丁由AMD工程师Borislav Petkov撰写,与David Kaplan联合开发,已于6月2日提交,修复逻辑是模拟完整序列执行的寄存器状态,中断返还控制权时直接跳过返回操作。
之前第一次回推尝试在提交当天就被撤回,最终正式推送的版本8月7日正式进入各LTS内核版本,覆盖5.10.264、5.15.215、6.1.182、6.6.150、6.12.102多个分支,用户只要正常更新内核就能获得防护。
补丁仅在中断触发的罕见路径执行额外操作,几乎不会产生性能开销。
目前该漏洞尚未分配CVE编号,AMD发布的安全公告仅列出了受影响的处理器型号,没有提供更多排查相关的指引。
管理员需要查找对应提交主题为「Make Safe-RET robust against interrupt injection」的补丁,才能确认内核是否已经完成修复。
Intel和Arm均表示现有Spectre v2防护方案可以覆盖该漏洞,研究人员的测试显示,在Arrow Lake和Cascade Lake Refresh处理器上分别观测到0.22%和0.037%的预测错误概率,搭配已知的内核泄露工具链即可完成攻击,和两家厂商的官方表态存在差异。
风险层面,单用户桌面设备受影响概率极低,普通单用户游戏桌面设备不需要过度紧张,只要正常跟着发行版推送更新系统即可,共享服务器、VPS等多租户Zen架构设备需要优先更新内核。