Software Grand Exposure: SGX Cache Attacks Are Practical【WOOT‘17】

目录

  • 摘要
  • 引言
    • 我们的目标和贡献
      • 贡献
        • 新颖的SGX缓存攻击技术
        • 非加密应用程序泄漏
        • 对策分析
  • 背景
    • Intel SGX
    • 缓存结构
    • 性能监视计数器
  • 系统和威胁模型
    • 对手的能力
    • 进攻目标
  • 攻击设计
    • Prime+Probe
    • Prime+Probe for SGX
    • 挑战

作者:Ferdinand Brasser, Urs M ̈uller, Alexandra Dmitrienko, Kari Kostiainen, Srdjan Capkun, and Ahmad-Reza Sadeghi

摘要

英特尔SGX将安全关键应用程序的内存与不受信任的操作系统隔离开来。

然而,据推测,SGX可能容易受到通过共享缓存进行的侧信道攻击。

我们为SGX开发了新的缓存攻击技术。我们的攻击与其他SGX缓存攻击的不同之处在于,它易于部署并避免了已知的检测方法

我们在两个案例研究中证明了我们攻击的有效性:RSA解密和基因组处理。虽然可以通过使用适当强化的加密库来防止针对RSA和其他加密操作的缓存定时攻击,但对于其他计算(如基因组处理)来说,这是不容易的。因此,我们的第二个案例研究表明,对非加密但对隐私敏感的操作的攻击是一个严重的威胁。我们分析了对抗措施,并表明没有一种已知的防御措施可以消除攻击。

引言

Intel Software Guard Extension(SGX)[14,23]使安全关键应用程序代码(称为飞地)能够与不受信任的系统软件隔离执行。SGX在处理器中提供保护,以防止恶意操作系统在运行时直接读取或修改飞地内存。该架构在云计算应用程序中尤其有用,在云计算中,数据和计算可以外包给外部计算基础设施,而不必完全信任云提供商和整个软件堆栈。

然而,研究人员最近证明,SGX隔离可以通过利用各种(软件)侧通道的信息泄漏来攻击。

一种类型的信息泄漏是基于页面错误:在SGX中,内存管理(包括分页)留给不受信任的操作系统[14]。因此,操作系统可以在包围区执行的任何点强制执行页面故障,并从请求的页面中了解与秘密相关的包围区控制流或数据访问模式[53]。

另一种类型如[14]和Intel[27,35]所指出的,信息泄露的控制是基于监督飞地和不可信软件之间共享的缓存。缓存攻击已经被广泛研究,独立于SGX[43,39,30,36,54,21,20]。最近,许多基于缓存的攻击针对SGX平台[44,38,19]。

针对SGX的信息泄露问题,也提出了不同的对策。

一种很有前途的系统级方法是检测操作系统何时干预飞地执行,如TSGX[46]和D́ej́A Vu[10]中所做的那样。这些解决方案检测页面错误,并允许飞地保护自己免受可能的攻击(即停止执行)。

另一种防止信息泄露的方法显然是Sanctum[15]所采取的硬件重新设计。尽管像Sanctum这样的新硬件设计超出了我们的范围,但我们将在第6节中对此进行详细说明。

我们的目标和贡献

首先,我们探索了为SGX定制的新型缓存攻击技术,这些技术比其他SGX缓存侧通道攻击更容易部署,也更难检测/预防,特别是通过上述最近提出的防御[46,10]。其次,我们证明了信息泄露是一个严重的问题,因为它可能会破坏SGX的核心优势之一,即在不可信的平台上对敏感数据进行安全计算。我们在两个案例研究中展示了这一点:首先是加密原语,然后是非加密隐私保护算法

新颖的攻击技术。

我们的攻击使对手能够同时不间断地运行受害者飞地和自己的进程,从而使受害者飞地不知道攻击,无法采取措施自卫。不间断的攻击执行带来了技术挑战,例如处理缓存监控中的显著噪声。为了在这种情况下有效地实现我们的攻击,我们需要开发一套新颖的攻击技术。例如,我们利用特权对手的能力将受害者进程分配给专用核心,减少良性中断的数量,并使用CPU性能计数器执行精确的高速缓存监控。请注意,SGX对手模型包括操作系统的功能。

我们的攻击在各种方面与最近提出的其他基于缓存的SGX[44,38,19]攻击不同:CacheZoom[38]重复中断受害者,因此可以通过上述对策T-SGX[46]和D́ej́a Vu[10]轻松检测到。Gotzfried等人[19]要求受害者飞地和攻击者之间同步。Schwartz等人[44]对L3缓存进行攻击(即跨核心攻击)。我们的攻击作用于L1缓存(即同核心攻击),不需要受害者和攻击者之间的中断或同步,这使得它在实践中更难检测和部署。我们在第7节中提供了更详细的比较。

案例研究。

我们在两个不同的案例研究中展示了我们的攻击技术的有效性。第一个案例研究是RSA解密的典型例子,其中我们用大约300次重复解密来提取70%的私钥比特(70%足以有效地恢复整个私钥)。

但是,缓存攻击主要可以在应用程序级别得到缓解。特别地,许多最近的加密库提供的实现已经针对缓存监控进行了强化。例如,散射和收集技术[8]是一种广泛部署的保护,其中每个与秘密相关的查找表访问都被手动更改为与所有监控的缓存集相对应的触摸存储器地址。因此,被访问的表元素被有效地向对手隐藏。此外,SGX SDK还包括使用分散-聚集保护的加密算法变体[28]。因此,对加密包围区的缓存攻击在实践中可能不是主要威胁。

另一方面,一个更重要的问题,也是一个过去没有广泛研究的问题,是安全专家没有开发的各种可能更复杂的计算的信息泄露。虽然像分散收集这样的手动防御可以有效地防止缓存攻击,但它们需要开发人员的大量专业知识和努力。假设每个飞地开发人员都意识到可能的信息泄露,并能够针对缓存监控手动强化其实现,这似乎是不现实的。因此,在第二个案例研究中,我们展示了一种名为PRIMEX[34]的基因组索引算法的非加密但对隐私敏感的飞地的信息泄露,该算法使用哈希表对基因组序列进行索引。通过监测依赖于基因组的哈希表访问,我们可以确定处理后的人类基因组(DNA)是否包括通常用于法医分析和基因组指纹识别的特定序列[4]。我们展示了通过索引期间的缓存足以识别其DNA被高概率处理的人。

我们认为,大型SGX飞地,以及许多实际的云计算场景,都容易受到类似信息泄露的影响。我们对现有对抗措施的分析表明,没有一种已知的防御措施能有效地阻止我们的攻击。

贡献

新颖的SGX缓存攻击技术

我们证明了缓存攻击在SGX上是实用的。特别是,我们为SGX开发了新的缓存攻击技术,这些技术更容易部署,也更难检测/预防。

非加密应用程序泄漏

通过对基因组处理飞地的案例研究,我们表明,部署为SGX飞地的非加密但对隐私敏感的应用程序容易受到缓存攻击。

对策分析

我们证明,在实践中,没有一种已知的防御措施可以减轻我们的攻击。

背景

本节提供有关英特尔SGX、缓存体系结构和性能监视计数器的必要背景知识。

Intel SGX

SGX引入了一组新的CPU指令,用于创建和管理被称为飞地的隔离软件组件[37,25],这些组件与系统上运行的所有软件隔离,包括操作系统(OS)和系统管理程序等特权软件。SGX假定CPU本身是系统中唯一值得信赖的硬件组件,即包围区数据仅在CPU内部以明文形式处理。数据未加密地存储在CPU的高速缓存和寄存器中,然而,每当数据从CPU移出(例如,进入DRAM)时,它都会被加密并受到完整性保护

操作系统虽然不受信任,但负责创建和管理飞地它为飞地分配内存,管理飞地内存的虚拟到物理地址转换,并将初始数据和代码复制到飞地中。然而,操作系统的所有操作都由SGX安全记录,并且可以由外部方通过(远程)证明进行验证[3]。SGX密封功能实现了数据的持久安全存储。

在飞地执行期间,操作系统可以像正常进程一样中断和恢复飞地。为了防止信息泄露,SGX处理硬件中飞地的上下文保存,并在将控制权传递给操作系统之前擦除寄存器内容,称为异步飞地退出(AEX)。当飞地恢复时,硬件再次负责恢复飞地的上下文,防止操作。

缓存结构

在下文中,我们提供了英特尔x86缓存体系结构的详细信息[26,24]。我们重点关注英特尔Skylake处理器的生成,即我们用于实现和评估的CPU类型【在撰写本文时,Intel SGX仅在Intel Skylake和Kaby Lake CPU上可用。据我们所知,Skylake和Kaby Lake之间的缓存架构没有差异】。

内存缓存通过在缓存中保留当前处理数据的副本来“隐藏”对系统动态随机存取存储器(DRAM)的内存访问延迟。

当执行内存操作时,缓存控制器检查请求的数据是否已经缓存,如果已经缓存,则从缓存中提供请求,称为缓存命中,否则为缓存未命中

由于成本较高(生产、能耗),缓存比DRAM小几个数量级,并且在任何时间点,缓存中都只能存在内存内容的子集。

高速缓存控制器旨在通过预测CPU接下来使用哪些数据来最大化高速缓存命中率。这种预测是基于存储器访问的时间和空间局部性的假设。

对于每次存储器访问,高速缓存控制器必须检查数据是否存在于高速缓存中。按顺序遍历整个缓存将非常昂贵。因此,高速缓存被划分为高速缓存行,并且对于每个存储器地址,可以快速确定相应的高速缓存行

因此,多个存储器地址映射到同一高速缓存行。每个高速缓存行有一个高速缓存条目会很快导致冲突,并且控制器必须从高速缓存中逐出数据以用新请求的数据替换它。为了最大限度地减少这种冲突,缓存通常是关联的。每个缓存行的多个副本并行存在,也称为缓存集,因此#cachesets来自冲突内存位置的许多数据可以同时留在缓存中

当前的英特尔CPU具有三级缓存层次结构。最后一级缓存(LLC),也称为三级缓存(L3),是最大和最慢的缓存;它在所有CPU核心之间共享。每个CPU内核都有一个专用的L1和L2缓存,但它们在内核的同时多线程(SMT)执行器之间共享单元(也称为超线程)。

一级缓存的一个独特特性是将数据和指令缓存分离。代码获取只会影响指令缓存并使数据缓存保持不变,反之亦然。在L2和L3高速缓存中,代码存储器和数据存储器竞争可用的高速缓存空间。

性能监视计数器

性能监视计数器(PMC)是CPU的一项功能,用于记录硬件事件。他们的主要目标是让软件开发人员深入了解他们的程序对硬件的影响,以便他们优化他们的程序。

CPU有一组PMCs,可以配置为监视不同的事件,例如执行的周期、不同缓存的缓存命中或缓存未命中、预测错误的分支等。通过选择要监视的事件以及操作模式来配置PMCs。这是通过写入特定型号寄存器(MSR)来完成的,这只能由特权软件完成。通过RDPMC指令(读取性能监视计数器)读取PMC,该指令可以配置为在非特权模式下可用。

PMCs记录的硬件事件可能被滥用为侧通道,例如,用于监控受害者进程或飞地的缓存命中或未命中。因此,SGX飞地可以通过激活一种名为“抗侧信道干扰”(ASCI)的功能,在进入时禁用PMC[26]。这将抑制所有线程特定的性能监视,固定周期计数器除外。因此,由包围区触发的硬件事件不能通过PMC功能进行监控。例如,包围区加载的内存的缓存未命中将不会记录在PMCs中。

系统和威胁模型

我们假设一个系统配备了Intel SGX,即一种硬件机制,将软件组件的数据和执行与系统中被认为不可信的其他软件隔离开来。

然而,用于执行隔离组件(或包围区)的资源与系统上的不受信任的软件共享。

系统的资源由不受信任的特权软件(操作系统-OS)管理。图1显示了对手模型的抽象视图,这是一个在操作系统受损的系统上执行的飞地,与攻击者进程共享CPU核心。
Software Grand Exposure: SGX Cache Attacks Are Practical【WOOT‘17】_第1张图片
对手的目标是从包围区学习秘密信息,例如,通过硬件随机数生成器在包围区内生成的秘密密钥,或者在初始化后通过安全通道提供给包围区的敏感数据。

对手的能力

对手控制所有系统软件,除了在Enclave中执行的软件【由于完整性验证,对手无法修改飞地内执行的软件,因为SGX远程认证会显示问题】。

尽管攻击者无法控制飞地内的程序,但他确实知道飞地的初始状态,即飞地的程序代码及其初始数据。特别是,通过地址空间布局随机化(ASLR)等机制进行的随机化对对手来说是可见的。攻击者知道内存地址到缓存线的映射,并且可以重新初始化包围区和重放输入,因此,他可以经常任意运行包围区。此外,由于对手控制着操作系统,他控制着飞地的资源分配,包括执行时间和飞地运行的处理单元(CPU核心)。同样,对手可以任意配置系统硬件,例如,定义系统在中断时的行为,或设置定时器的频率。然而,对手不能直接访问飞地的内存。此外,无论是在飞地执行期间还是在中断时,他都无法检索飞地的寄存器状态

进攻目标

对手的目标是通过观察对其自己程序的缓存可用性的影响来了解受害者的缓存使用情况。

特别地,他利用高速缓存线到存储器位置的映射的知识来推断关于飞地到秘密相关存储器位置的访问模式的信息,这反过来使他能够得出关于受害者处理的敏感数据的结论。在第5节中,我们展示了在基因组处理应用程序中恢复RSA密钥和识别个体的两种具体攻击。

攻击设计

我们的攻击技术基于Prime+Probe缓存监控技术[39]。我们将首先解释Prime+Probe的“经典”变体,然后讨论我们在基本方法之外的改进。

Prime+Probe

Software Grand Exposure: SGX Cache Attacks Are Practical【WOOT‘17】_第2张图片

Prime+Probe攻击的主要步骤如图2所示。

首先,在时间 t 0 t_0 t0,攻击者对缓存进行预处理,即,攻击者访问内存,使整个缓存充满攻击者进程的数据

然后,在时间 t 1 t_1 t1,受害者执行依赖于受害者敏感数据(如加密密钥)的内存访问的代码。受害者根据当前处理的密钥位访问不同的内存位置

在图2中的示例中,关键位为零,因此读取地址X。地址X被映射到高速缓存行2,因此,存储在X的数据被加载到高速缓存中,并且在被逐出之前存在于高速缓存行2中的数据

地址Y处的数据未被访问,因此高速缓存行0中的数据保持不变

在时间 t 2 t_2 t2,攻击者探测他的哪些缓存行被逐出,即受害者使用了哪些缓存行。

检查缓存行逐出的一种常见技术是测量访问时间。攻击者从映射到每个缓存行的内存中读取并测量访问时间

如果攻击者的数据仍在缓存中,则读取操作会快速返回这些数据;如果读取操作耗时较长,则数据会从缓存中逐出。

在图2中,攻击者将观察到缓存行2的访问时间增加。由于攻击者知道受害者的代码和访问模式,他知道受害者的地址X映射到缓存行2,并且敏感密钥位必须为零。

攻击者对受害者处理的每个敏感密钥位重复此循环,直到攻击者了解整个密钥

Prime+Probe for SGX

缓存监控技术,如Prime+Probe,会遇到显著的噪音。因此,以前报道的大多数攻击(例如提取完整的加密密钥)都需要数千甚至数百万次重复执行以平均噪声(例如,[55,56])。我们的目标是建立一种高效的攻击,即一种执行次数少得多的攻击。关键是减少缓存监控通道中的噪声(或污染)。

有两个主要方面指导我们选择可能的降噪技术,并将我们与以前的大多数攻击区分开来。

(1) 我们的目标是构建一种使用最近提出的检测方法无法轻易检测到的攻击[46,10];这一要求限制了我们可以使用的可能的降噪技术(例如,无中断)

(2) 在我们的环境中,对手是特权操作系统;这种情况使我们能够利用攻击者以前无法访问的新方法(例如,性能计数器)。【威胁模型提升了

挑战

鉴于这些条件,我们列出了实现攻击的主要挑战。

1.最大限度地减少其他任务造成的缓存污染。

2.最大限度地减少受害者自身对缓存的污染。

3.不间断的受害者执行,以对抗侧通道保护技术并防止操作系统对缓存的污染。

4.可靠地识别缓存驱逐。

5.以高频率执行高速缓存监控。

接下来,我们将介绍一组新的攻击技术,这些技术是我们为应对上述每一个挑战而开发的。【具体见论文】

你可能感兴趣的:(SGX缓存侧信道,安全,网络,TEE,缓存侧信道)