据BleepingComputer消息,近日在Arxiv.org上发表的一篇技术论文揭示了一种针对多代英特尔CPU的攻击手法——利用新的侧信道攻击,让数据通过EFLAGS寄存器泄露。该攻击是由清华大学、马里兰大学和中国教育部计算机实验室(BUPT)的研究人员发现的。
与大多数其他侧信道攻击不同,这种新型攻击并不像许多其他侧信道攻击那样依赖缓存系统,而是利用瞬态执行中EFLAGS寄存器(是一个CPU寄存器,保存着与处理器状态相关的各种标志)变化的缺陷,影响JCC(条件代码跳转)指令的时序,通过时序分析从用户内存空间中提取秘密数据。
对攻击的概述(来源:arxiv.org)
攻击分两个阶段进行,第一阶段触发瞬时执行并通过EFLAGS寄存器对秘密数据进行编码,第二阶段测量KCC指令解码数据的执行时间。实验数据表明,该攻击针对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指令的影响。但该攻击作为Meltdown(Meltdown是2018年发现的一个关键安全漏洞,影响到许多基于x86的微处理器。)的旁路,与Meltdown相似,虽然通过软件补丁、微代码更新和硬件重新设计,已在很大程度上得到缓解,可是没有任何可以100%解决问题的方案。最新的攻击方法甚至可以在完全打补丁的系统中发挥作用,具体取决于硬件、软件和补丁配置。