近日,已发现影响多代 Intel CPU 的新边信道攻击,允许数据通过 EFLAGS 寄存器泄漏。
这种新型攻击不像许多其他侧信道攻击那样依赖缓存系统,而是利用瞬态执行中的一个缺陷,可以通过时序分析从用户内存空间中提取秘密数据。
该攻击是 Meltdown 的旁路,Meltdown 是 2018 年发现的一个严重安全漏洞, 影响了许多基于 x86 的微处理器。
Meltdown 利用称为“推测执行”的性能优化功能,使攻击者能够绕过内存隔离机制来访问存储在内核内存中的秘密,例如密码、加密密钥和其他私有数据。
通过软件补丁、微代码更新和硬件重新设计,Meltdown 已 在很大程度上得到缓解;然而,没有任何解决方案可以 100% 解决问题,最新的攻击方法甚至可以在完全打补丁的系统中发挥作用,具体取决于硬件、软件和补丁配置。
EFLAGS 寄存器是一个 CPU 寄存器,它保存着与处理器状态相关的各种标志,而 JCC 指令是一个 CPU 指令,它允许根据 EFLAGS 寄存器的内容进行条件分支。
攻击分两个阶段进行,第一阶段触发瞬时执行并通过EFLAGS寄存器对秘密数据进行编码,第二阶段测量KCC指令解码数据的执行时间。
攻击概述 (arxiv.org)
实验数据表明,该攻击针对 Intel i7-6700 和 Intel i7-7700 实现了 100% 的数据检索(泄漏),并且对更新的 Intel i9-10980XE CPU 取得了一定的成功。实验在 Ubuntu 22.04 jammy 上进行,Linux 内核版本为 5.15.0。
用于计时瞬态执行攻击的伪代码 (arxiv.org)
由实验数据评估分析得出:“在实验中,我们发现 EFLAGS 寄存器对 Jcc 指令执行时间的影响不像缓存状态那样持久。在瞬态执行后的大约 6-9 个周期内,Jcc 执行时间将不会构建边信道。根据经验,攻击需要重复数千次才能获得更高的准确性。”
研究人员承认,攻击的根本原因仍然难以捉摸,并假设英特尔 CPU 的执行单元中有一个缓冲区,如果执行应该被撤回,则需要时间来恢复,如果随后的指令依赖于该进程,则会导致停顿在缓冲区的目标上。
然而,研究人员仍然提出了一些重要的缓解措施,例如更改 JCC 指令的实现,使对抗性执行在任何情况下都无法测量,或者在瞬态执行后重写 EFLAGS 以减少其对 JCC 指令的影响。
转自 E安全,原文链接:https://mp.weixin.qq.com/s/uPQNKja73QKVT_mi5MHCPg
封面来源于网络,如有侵权请联系删除