美国时间 5 月 14 日,安全研究人员在英特尔芯片中发现了一种新的漏洞,如果利用这种漏洞,可以直接从处理器中窃取敏感信息,详情可见链闻先前收录的文章《Intel 再曝僵尸负载漏洞:直接获取密码、2011 年后电脑都受影响》。英特尔公司和多方研究人员表示,该漏洞暂无影响,无需恐慌。

但是,这种名为「ZombieLoad」的漏洞究竟是什么?这种漏洞是否会对基于 Intel SGX 的可信执行环境(TEE)系统产生影响?要知道,越来越多的区块链项目正在尝试利用基于 TEE 的技术来实现数据隐私保护

为了回答该问题,链闻邀请了提供 Layer-2 隐私计算方案的 TEEX 团队成员撰文,一文说明该漏洞本质,以及可能产生的影响。

撰文: TEEX 团队

什么是 ZombieLoad?

ZombieLoad 是由包括 Intel、格拉茨技术大学、伍斯特理工学院、鲁汶大学在内的多家机构发现的一种新型处理器硬件漏洞。该漏洞目前仅在 Intel 的处理器中被发现。漏洞于美国时间 5 月 14 日披露,同时Intel 也发布了针对该漏洞的修复补丁,包括微软、苹果、谷歌、亚马逊在内的各家公司,都已经对他们提供的操作系统或云服务进行漏洞修复。

ZombieLoad 能做什么?

一句话来说,ZombieLoad 能够窃取到攻击发生时受害者正在访问的内存内容。需要注意的是,ZombieLoad 并不能读取攻击者指定的某个特定内存。其能够读取到的内容完全取决于当前被害者访问了哪些内存。这些内存可能是某些不重要的数据,又或者是程序代码,攻击者不能直接对读到的内容进行区分。

ZombieLoad 的攻击能力有多强?

在漏洞发现者的论文中,ZombieLoad 漏洞被定义为一种数据采样的方法。每次攻击能够从目标程序中采样获得 1 byte 的内容。之后需要通过各种手段从采样数据中过滤无效数据、程序代码等,从而获得部分零散的目标数据。这些数据经过进一步处理分析才能够(可能)得到完整目标数据。因此在实际攻击过程中,攻击者需要对目标程序运行时的所有状态拥有深入、完整的了解,同时需配合如 side-channel 在内的多种其他攻击手段

ZombieLoad 能够绕开进程间隔离机制,虚拟机间隔离机制以及特权级别隔离机制,窃取目标程序正在访问的数据。

我们将 ZombieLoad 与「熔断」漏洞进行比较。「熔断」是近年来最广为人知的处理器漏洞之一,其能够让攻击者在无任何特权的情况下,直接读取任意指定的操作系统内存;而 ZombieLoad 只能作为一种数据采样方法,攻击者需要深入了解被攻击算法、实现方式等,同时结合大量现有攻击手段,才有可能进行数据窃取。因此,ZombieLoad 的攻击难度远高于熔断漏洞;同时 Intel 也已经发布了修复补丁,因此对实际系统的安全影响较为有限。

ZombieLoad 的基本原理是什么?

在 CPU 内部,存在着诸多存储单元,也就是大家知道的 CPU 缓存 (CPU cache)。这些缓存之间会通过一些缓存通信通道(line-fill buffer, LFB)连接。同时在 CPU 内的最末级缓存(Last-Level Cache, LLC)也通过缓存通信通道与 CPU 外部的内存连接。该通道每次能够传递 64 bytes 的数据块,通道中也会缓存有近几次传递的数据块。每个 CPU 核心(CPU core)中都有自己独立的缓存通信通道(LFB)。此次 ZombieLoad 漏洞就是从这些通信通道中窃取数据。

在 CPU 运行的过程中,经常会发生一些异常或者错误。此时 CPU 会将当前正在执行的指令标记为无效,并进行异常处理。对于这些无效指令,CPU 仍然会允许其继续执行,但是会在执行完成之后对其运算结果进行回滚。

在上述过程中,如果无效指令包含一条内存读取指令,那么它将能够从 CPU 内部的缓存通信通道(LFB)中读取到残留的数据块,即使其没有相应的访问权限。之后,攻击者能够利用和「熔断」漏洞相同的侧信道技术,获取该数据内容。由于 CPU 会快速回滚这些无效指令,每次能够窃取的数据量非常有限。漏洞发现者在论文中提到,每次攻击仅能够从 64 bytes 的数据块中窃取 1 byte 的数据。

由于每个 CPU 核心拥有自己的缓存通信通道,因此攻击者必须和受害程序运行在同一个 CPU 核心当中。对于启用了超线程技术的 CPU,攻击者可以运行在和受害程序相同 CPU 核心的不同 CPU 线程当中。

利用 ZombieLoad 的攻击有什么限制?

ZombieLoad 的攻击窗口很小。ZombieLoad 在攻击时只能够读取目标程序正在使用的数据。攻击者必须深入了解目标程序的算法、实现等,并且精确判断目标数据在何时被使用,从而对其进行攻击。

ZombieLoad 要求攻击者和受害程序同时运行在同一 CPU 核心上,从而能够通过 CPU 核心中的缓存通信通道(LFB)窃取数据。

ZombieLoad 无法直接获取目标数据。ZombieLoad 只能够以每次一个 byte 的速率对目标程序进行数据采样。并且没有办法对采样得到的数据进行区分。因此其需要配合诸如 side-channel 在内的各种攻击一同使用。

在通过采样数据逆向真实数据的过程中,往往需要对目标程序算法、实现方式等拥有非常深入的了解。基于 ZombieLoad 的攻击难以对不开源,或者经过代码混淆的二进制程序使用。

目前Intel 已经提供了 ZombieLoad 攻击的修复补丁,并且已经联合各大操作系统提供方,云服务提供方进行了漏洞修复。攻击无法在进行过修复的系统中实现。

ZombieLoad 对基于 Intel SGX 的 TEE 系统有什么影响?

SGX 是目前饱受关注的一项硬件安全技术,其提供了多个称为 enclave 的安全执行环境。漏洞发现者在论文中提到:如果希望利用 ZombieLoad 对 SGX enclave 进行数据采样,唯一的方法是将攻击者的程序和目标 enclave 同时运行在一个 CPU 核心的两个不同线程上

然而,目前 Intel 官方要求:为了安全使用 SGX 技术,必须关闭超线程;同时 Intel 提供了验证 enclave 所运行宿主机是否关闭超线程的方法。因此,在实现远程验证的前提下,ZombieLoad 并不会影响到基于 Intel SGX 的 TEE 系统的安全性。