From 0babd3f3251fc26ea2f1cebdca2b3830ee045a24 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Thu, 2 May 2019 16:41:06 +0800 Subject: related work finished? --- chap/chap2.tex | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 4 deletions(-) (limited to 'chap/chap2.tex') diff --git a/chap/chap2.tex b/chap/chap2.tex index ec9c53f..0326ef9 100644 --- a/chap/chap2.tex +++ b/chap/chap2.tex @@ -3,8 +3,38 @@ \chapter{Meltdown和Spectre攻击} +本章首先介绍侧信道攻击,之后对已有的 Meltdown 和 Spectre 攻击的各种变 +体进行分类讲解,最后简单地介绍已有攻击的其他使用形式。 + \section{侧信道攻击} +侧信道攻击是利用计算的过程对环境产生的影响,从而获取秘密数据的技术。 +1996年,Paul Kocher 发现通过对私钥的操作进行计时,可以找出 +Diffie-Hellman,RSA 等密码的私钥。\supercite{TimingAttack} 这是最早的 +侧信道攻击的研究。之后研究者发现了更多侧信道,如功耗 +\supercite{MOP2010}、电磁辐射\supercite{EMpower}、温度 +\supercite{hutter}、噪声\supercite{acoustic}等。 + +现代计算机系统采用多种优化手段,优化可以作用于处理的数据的值、数据的位 +置、数据存放位置的访问频率等,攻击者可以通过这些优化产生的效果,推断出 +计算机系统处理的秘密数据的值。基于软件的微架构侧信道攻击 +\supercite{gruss}利用微架构优化造成的时间区别,这种攻击不需要物理访问 +计算机系统,只需要在系统上运行代码。 + +高速缓存计时攻击是一种重要的侧信道攻击的方式。当高速缓存中存在一个地址 +的数据时,访问这个地址的时间更短,利用这个性质,攻击者可以得知一个地址 +是否曾经被访问过。缓存计时攻击的常见形式有: + +\begin{itemize} +\item Evict+Time: 攻击者清除一个缓存组,然后对一个算法的运行进行计时, + 检查它的运行时间是否受到影响 +\item Prime+Probe: 受害者运行一段程序后,攻击者访问缓存某一组的每一路, + 观察访问时间是否有变化 +\item Flush+Reload: 攻击者利用 x86 的 clflush 等指令清除一个共享内存地 + 址对应的缓存行,在受害者运行一段程序后,攻击者重新装载该行对应的地址 + 的数据,通过测量访问时间推断受害者是否访问了这个共享的地址 +\end{itemize} + \section{Meltdown和Spectre攻击} Meltdown\supercite{meltdown} 和 Spectre\supercite{spectre} 是最早发现 @@ -51,7 +81,6 @@ Foreshadow-NG\supercite{foreshadowNG} 利用这种攻击方法,可以绕过操 后,触发异常,操作系统才对浮点寄存器进行保存和恢复。 LazyFP\supercite{lazyfp} 攻击利用这个异常,利用这个方法,攻击者可以读 出一个处理器核此前运行的使用了浮点寄存器的程序中的浮点寄存器的值。 -\parencite{lazyfp} \subsection{Spectre型攻击} @@ -59,6 +88,12 @@ Spectre 型攻击利用处理器对控制流或数据流的预测,并进行推 瞬时指令。Spectre 型攻击中,瞬时指令访问的是程序在体系结构层面能访问的 数据,可以绕过软件定义的安全策略,如边界检查等。 +推测式执行的常见形式是控制流的推测式执行。控制流的推测式执行依赖于转移 +预测技术,包含了分支的预测、间接转移目标地址的预测和函数返回地址的预测, +对应于 Spectre 攻击中 Spectre-PHT, Spectre-BTB, Spectre-RSB. 此外,处 +理器预测 load 指令和程序序列之前访问地址未知的 store 指令地址不冲突, +推测式执行这样的 load 指令,它对应 Spectre-STL. + \subsubsection{Spectre-PHT} Spectre-PHT 利用分支预测器,攻击者可以训练转移预测器,使得转移预测器执 @@ -67,7 +102,10 @@ Spectre-PHT 利用分支预测器,攻击者可以训练转移预测器,使 Spectre v1 是 Spectre-PHT 类型的 Spectre 攻击。 推测式缓冲区溢出(Speculative Buffer Overflow) -\supercite{spec-buffer-overflow} 是 Spectre-PHT 的另一种形式。 +\supercite{spec-buffer-overflow} 是 Spectre-PHT 的另一种形式。它可以在 +瞬时执行指令流中绕过边界检查,造成缓冲区溢出,从而攻击者可以用类似于缓 +冲区溢出的方式,使程序在推测式执行的过程中,执行攻击者指定的指令流,泄 +露秘密数据。 \subsubsection{Spectre-BTB} @@ -112,10 +150,23 @@ Prime+Probe 方式进行 Meltdown 和 Spectre 攻击的形式。通过利用缓 \subsection{NetSpectre} -NetSpectre \supercite{netspectre} 是通过网络使用 Spectre 的攻击方法。 +NetSpectre \supercite{netspectre} 是通过网络使用 Spectre 的攻击方法, +这种攻击方式将 Spectre 由本地攻击扩展到远程攻击,使得不会运行攻击者控 +制的代码的设备也受到 Spectre 攻击的威胁。 + +在 NetSpectre 攻击中,攻击者利用两中 NetSpectre 组件,一个是泄露组件 +(leak gadget),通过改变微架构状态,泄露秘密数据;一个是传送组件 +(transmit gadget),它将微架构状态的改变通过网络传送给攻击者,攻击者 +可以通过网络数据包的延迟,推断出微架构状态,从而获取秘密数据。 + +NetSpectre 可以在局域网,或者 Google cloud 等云平台中使用。利用 +Evict+Reload 缓存信道,每小时可以泄露 15 比特。利用基于 AVX 的隐蔽信道, +可以每小时泄露 60 比特。 \subsection{SgxPectre} -\supercite{sgxpectre} +SgxPectre \supercite{sgxpectre} 将 Spectre 攻击用于泄露 Intel SGX 环境 +中的数据。通过在 SGX enclave 之外污染 BTB,可以改变 SGX enclave 中的控 +制流,进行 Spectre-BTB 攻击。 % vim:ts=4:sw=4 -- cgit v1.2.3