Collide+Power是一种基于软件的通用型攻击,针对搭载英特尔、AMD 或 Arm 处理器的设备,它适用于任何应用程序和任何类型的数据。芯片制造商们正在发布各自的安全公告,该漏洞已被命名为 CVE-2023-20583。
然而研究人员指出,Collide+Power 不是一个真正的处理器漏洞,它利用一些 CPU 部件旨在共享来自不同安全域的数据这一点大做文章。
攻击者可以利用这些共享的 CPU 部件将自己的数据与来自用户应用程序的数据结合起来。攻击者在改变他们控制的数据时,可以数千次迭代测量 CPU 功耗,这使他们能够确定与用户应用程序关联的数据。
没有特权的攻击者(比如通过在目标设备上植入恶意软件)可以利用 Collide+Power 攻击,获得有价值的数据,比如密码或加密密钥。
研究人员特别指出,Collide+Power 攻击增强了其他功率侧信道信号,比如 PLATYPUS 和 Hertzbleed 攻击中使用的信号。
研究人员解释道:“PLATYPUS 和 Hertzbleed 等以前基于软件的功率侧信道攻击针对加密算法,需要确切了解目标机器上执行的算法或受害者程序。相比之下,Collide+Power 针对的是 CPU 内存子系统,内存子系统把精确的实现抽取出来,因为所有程序都以某种方式需要内存子系统。此外,任何反映功耗的信号都可以被使用,因为 Collide+Power 利用了基本的功率泄漏。”
研究人员发表了一篇详细介绍其研究工作的论文,还推出了 Collide+Power 网站,专门介绍这一研究发现。
他们描述了 Collide+Power 攻击的两种变体。在要求启用超线程机制的第一种变体中,攻击目标是与不断访问秘密数据(比如加密密钥)的应用程序相关的数据。
“在此过程中,受害者不断将秘密数据重新加载到被攻击的共享 CPU 部件中。在同一物理核心上运行线程的攻击者现在可以利用 Collide+Power,强制秘密数据与攻击者控制的数据之间发生碰撞。
攻击的第二种变体不需要超线程机制,也不需要目标不断访问秘密数据。
专家们表示:“攻击者在这里利用了操作系统中一个所谓的预读取小装置。这个预读取小装置可以用来将任意数据引入到共享的 CPU 部件中,再次强行造成数据碰撞,并找回数据。”
虽然从理论上来说这种攻击方法可能会产生重大影响,但在实践中,数据泄漏率比较低,这种方法也不太可能在短期内被用来攻击最终用户。
研究人员已经在这种场景下设法实现了每小时泄漏 4.82 比特的数据:被攻击的应用程序不断访问秘密信息,攻击者可以通过直接报告 CPU 功耗情况的运行平均功率限制(RAPL)接口,直接读取 CPU 功耗数值。按照这个泄漏率,攻击者需要几个小时才能获得密码,需要几天才能获得加密密钥。
研究人员发现,在特殊场景下,攻击者可以大大提高数据泄漏率,最高每小时可泄漏 188 比特的数据。
格拉茨科技大学参与这个项目的研究人员之一 Andreas Kogler 告诉安全外媒:“攻击者可以达到每小时 188 比特的泄漏率,具体取决于被攻击的应用程序和内存中的秘密数据。比如说,密钥或密码是否多次出现在缓存行中。”
另一方面,在实际环境的攻击模拟中,研究人员遇到了实际限制,这大大降低了泄漏率 —— 如果采用遏制手段,泄露每比特就需要一年多。
尽管目前这种攻击带来的风险比较小,但 Collide+Power 研究强调了潜在的问题,并为未来的研究铺平了道路。
至于缓解措施,在硬件层面防止这类数据碰撞并非易事,需要重新设计通用 CPU。另一方面,可以通过确保攻击者无法观察到与功率相关的信号来阻止攻击,这种类型的缓解措施适用于所有的功率侧信道攻击。