目录
- 摘要
- 引言
- 贡献
- • 一个不受信任的操作系统的两个新的高分辨率侧通道来攻击受保护的应用程序;
- • 对 libjpeg 的显着改进攻击和针对 VC3 的新攻击;
- • 侧通道攻击对不受信任的操作系统的重要性增加。
- 系统模型
- 背景
- Intel SGX
- 页面错误通道
- 时间限制
- 空间限制
- Prime+Probe缓存侧信道攻击
- 设计
摘要
特征丰富的大众市场操作系统具有较大的可信计算基础(TCBs)和较长的漏洞历史。像 Overshadow、InkTag 或 Haven 这样的系统试图从应用程序的 TCB 中删除操作系统 (OS),同时保留其功能。
然而,不受信任的操作系统对大多数物理资源的控制使其成为比传统非特权侧通道攻击者发起侧通道攻击的更好位置。
最初的攻击集中在页面错误通道上,展示了三个遗留应用程序的显著信息泄漏。
我们为不受信任的操作系统提出了两个新的侧通道,它使用计时器中断和缓存丢失来实现比页面错误通道更高的时间和空间分辨率。
我们利用不受信任的操作系统对硬件的控制来减少侧通道中的噪声,以便在目标的单个运行中成功攻击。我们证明了我们的侧通道支持针对新的SGX应用程序的攻击,如VC3,这些应用程序旨在信任操作系统。我们还展示了对libjpeg的新攻击,该攻击提取的信息比页面错误通道攻击多两个数量级的图像。
引言
传统上,操作系统 (OS) 保护应用程序数据的完整性和机密性,被认为是应用程序可信计算基础 (TCB) 的一部分。然而,数十年的经验表明,保护大型、功能丰富且广泛部署的商品操作系统极难。云托管服务的出现增加了对抗性云运营商的新威胁。
最近,已经提出了像Overshadow[14]、InkTag[27]和Haven[9]这样的系统,通过排除TCB中的操作系统并直接保护应用程序来改变保护范式。这些系统使用受信任的管理程序或硬件为应用程序提供不受不受信任的操作系统保护的内存以及用于在应用程序和不受信任的操作系统之间传输控制的受控机制。Haven还可以保护应用程序免受Iago攻击[13]。
然而,Xu等人[44]证明了对抗性操作系统可以针对运行在SGX上的受保护应用程序发起确定性侧通道攻击。他们的攻击可以从Haven和InkTag保护的三个遗留应用程序的单次运行中窃取JPEG图像的文档和轮廓。攻击比非特权攻击者的传统侧通道攻击更强大,因为不受信任的操作系统保留了大多数硬件的控制。他们利用了应用程序的一些内存访问依赖于秘密数据这一事实。对抗性操作系统通过使页表无法访问的页面来观察这些访问。每个生成的页面错误都会在访问时刻中断应用程序,并揭示操作系统的页面地址,允许对手推断影响内存访问序列的秘密。
无法观察到单个代码页面内的函数(例如,strlen 中的紧循环)和单个页面内的数据访问(例如,索引到小数组),因为页面错误通道的粒度受 4 KB 页面大小的限制。这对基于页面错误的攻击的时间和空间分辨率施加了根本限制。
在本文中,我们提出了两个新的侧通道,显着提高了从对抗操作系统发起的攻击的时间和空间分辨率。我们证明了新的攻击可以针对仅基于页面错误通道对攻击免疫的应用程序发起。为了提高时间分辨率,我们使用高精度计时器来近似单个步进。我们使用缓存侧通道将空间分辨率从4 KB提高到64字节缓存行。
我们的缓存侧通道比非特权攻击者控制的传统缓存侧通道具有更高的精度,因为操作系统控制硬件。OS可以在感兴趣的内存访问之前和之后立即分解为应用程序,并通过对调度的控制来减少缓存污染。
为了证明我们的新侧通道的强大功能,我们为VC3[39]和libjpeg[1]构建了新的攻击。VC3 是一个安全的 MapReduce 框架,它通过在 SGX 飞地中运行来保护分布式 MapReduce 计算的机密性 [29]。在假设操作系统可信的情况下,[44]中攻击未修改的遗留应用程序已经编写。然而,VC3 是设计具有小可信计算基础的新代码,并在对抗操作系统的 SGX 飞地中运行。我们对VC3的攻击是一系列攻击,它从VC3代码的不同部分提取各种信息。仅使用页面错误通道无法执行单个攻击。我们对 VC3 的攻击恢复了 WordCount 应用程序几乎三分之二的输入文档。与对libjpeg[44]的早期攻击相比,我们的新攻击可以提取两个数量级的信息,并恢复细节更丰富的图像。
贡献
我们证明了
• 一个不受信任的操作系统的两个新的高分辨率侧通道来攻击受保护的应用程序;
• 对 libjpeg 的显着改进攻击和针对 VC3 的新攻击;
• 侧通道攻击对不受信任的操作系统的重要性增加。
系统模型
如图1所示,该系统由一个或多个由约束不可信操作系统的监视器移植的应用程序组成。
监视器可以是系统管理程序,也可以是CPU的一部分。它对操作系统施加了以下限制:
1、它保证了可信应用程序的安全内存。操作系统无法读取或写入此类内存。
2.它控制应用程序和操作系统之间的转换,确保操作系统只能在定义良好的入口点调用受保护的代码。这也允许监视器在转换期间保护应用程序不受CPU状态泄漏的影响。在发生意外转换(陷阱、中断)时,监视器会保存并清理CPU寄存器。
3.监视器采取反侧通道措施。
我们假设采取以下反侧通道措施。它是基于SGX[28]的,目前,SGX是唯一一种对侧信道采取严重措施的技术。
页面故障地址的底部12位(指定页面内的偏移量)对OS隐藏。
硬件调试设施(例如,调试寄存器、单步执行)被禁用。
硬件性能计数器已禁用。
Untrusted OS被认为是对抗性的——要么是恶意软件的结果,要么是因为它处于对抗性管理员的控制之下。在监视器施加的限制范围内,它可以采取任何操作损坏应用程序或从中提取信息。它可以访问系统上的所有硬件,监视器禁止的除外。这包括所有未受保护的内存、页表和计时器等系统设备。
应用程序受监视器保护。
我们的目标是处理机密信息并显示依赖于机密信息的内存访问模式的本地应用程序。我们假设应用程序二进制文件的至少某些部分是公共的,要么是因为它们属于未修改的遗留应用程序[9,14,27,44],要么是由于它们是公共应用程序平台的一部分[39]。
背景
我们描述了SGX[29]、页面故障通道[44]以及Prime+Probe缓存侧通道攻击[36]。
Intel SGX
英特尔SGX[6,26,29,34]是英特尔最近推出的一项CPU技术。SGX允许为受CPU保护的应用程序(飞地)构建隔离的内存区域,使其免受系统上运行的所有其他软件(包括操作系统)的影响。就我们的系统模型而言,SGX构成了一个监视器。附件仅限于在用户模式下运行,但由不受信任的操作系统使用新的特权指令构建。远程证明确保应用程序的所有者能够在泄露任何机密之前检测到操作系统的篡改。
SGX在很大程度上保持了操作系统的硬件接口不变,实现了与传统操作系统的兼容性,但也为操作系统提供了一个用于构建侧通道(如页面故障通道)的大型工具箱[44]。
然而,SGX包括一些反侧信道措施。SGX使得无法对飞地使用以下CPU功能:硬件断点寄存器(DR0-DR3)、单步执行(RFLAGS.TF)、最后分支记录(LBR)、基于精确事件的采样(PEBS)和硬件性能计数器。在飞地内发生异常或故障时,SGX屏蔽故障地址的十二个最低有效位。因此,不可信OS仅接收页面细粒度故障信息。
页面错误通道
徐等人描述了基于页面错误的侧通道攻击[44]。这些攻击利用了依赖输入的内存访问的优势以推断应用程序的秘密输入。
例如,如果每个用户登录都增加一个全局变量,那么对手可以计算对该变量的访问次数,以推断登录次数。
为了检测全局变量是否被访问,对手可以使其所在的页面不可访问。对页面的任何访问都将触发页面故障。
在最简单的情况下,对手可以使用故障地址来决定应用程序是否试图访问感兴趣的全局变量。
然而,由于故障地址中的偏移是隐藏的,对手必须推断它。Xu等人提出使用页面故障序列来唯一识别数据访问或控制传输。
基于页面错误序列的攻击仍然面临一个基本限制:页面错误只能在页面粒度下工作。
以下两个示例不受页面故障通道攻击。
时间限制
图2a显示了一个简单的strlen实现。假设二进制代码在单个代码页上,字符串str在单个数据页上。len变量通常在寄存器中进行优化,因此对手无法使用。instrlen的一条指令从数据页读取str的一个字符。要执行它,攻击者必须使代码和数据页都可访问。但在此之后,strlen执行不会导致进一步的页面错误,从而阻止对手计算迭代次数和推断字符串的长度。【在这个循环中不再导致页面错误,这样的攻击的场景存在局限性】
空间限制
假设图2b中的表agentNames位于单个数据页上。由于页面错误地址的偏移量是隐藏的,因此对手无法使用对表的访问来推断变量agentCode的值。【这是粗粒度和偏移量隐藏导致的】
Prime+Probe缓存侧信道攻击
CPU中的小型快速缓存用于减轻内存访问对性能的影响。在存储器访问时,CPU将存储器内容复制到高速缓存中。对同一地址的后续访问可以从高速缓存以低得多的成本提供服务。这种复制以64字节缓存行的粒度进行。
一个内存位置映射到一小群缓存线,基于其一些地址位(本文中使用的Intel L1数据缓存的位6-11)的行。“英特尔一级缓存”使用一组8条缓存线(8路集合关联)。当内存访问当前不在缓存中时,必须收回组中的一行,为新内容腾出空间。
缓存通常由核心上运行的所有代码共享,甚至由整个CPU包共享。攻击者可以进行一系列内存访问,将内容加载到缓存中并完全填充。另一个程序随后的内存访问也会导致数据加载到缓存中,从而驱逐攻击者的一条缓存线。
攻击者可以测量访问他之前加载到缓存中的内存位置以检测此类驱逐所需的时间。访问次数的增加表明被驱逐,不仅告诉攻击者发生了访问,还透露了访问地址的第6-11位。
这个过程被称为Prime+Probe[36]。用攻击者的内容填充缓存称为Prime步骤。测量内存访问时间称为Probe步骤。
设计
本节介绍我们执行同步、高分辨率侧信道攻击的技术。抽象地说,攻击者有两种能力:break,在应用程序上设置条件断点,并进行观察,检查其执行过程中的工件(例如,内存访问)。一种技术也可以同时提供这两种能力。使页面不可访问[44]允许中断(页面故障)和观察(页面故障地址)。
我们引入了两种新技术来克服页面故障通道的限制(第3.2节),并显著拓宽了受侧通道攻击的应用程序代码类别:
一种单步保护应用程序的技术。
高速缓存侧通道,用于观察高速缓存行粒度下的内存访问。
即使攻击者只能观察到单个应用程序的运行,这两种技术也能发挥作用。因此,任何受保护的应用程序都是攻击的潜在目标。
在可能的情况下,我们使用页面错误序列来推断内存访问,使我们能够仅在需要的短时间内部署高开销攻击。
【详细细节见论文】