diff options
author | Iru Cai <mytbk920423@gmail.com> | 2019-04-24 16:01:15 +0800 |
---|---|---|
committer | Iru Cai <mytbk920423@gmail.com> | 2019-04-24 16:01:15 +0800 |
commit | 313b40908e4b751b746d993549217fa6352904e6 (patch) | |
tree | 9e01d52dd840c6b96f429db7719de63f621b3dae /chap/chap2.tex | |
parent | fb0e8ad0c8747b14ccfec5cb846e9bc6901f5725 (diff) | |
download | dissertation-313b40908e4b751b746d993549217fa6352904e6.tar.xz |
update
Diffstat (limited to 'chap/chap2.tex')
-rw-r--r-- | chap/chap2.tex | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/chap/chap2.tex b/chap/chap2.tex index 8283046..db31b04 100644 --- a/chap/chap2.tex +++ b/chap/chap2.tex @@ -7,14 +7,90 @@ \section{Meltdown和Spectre攻击} +Meltdown\supercite{meltdown} 和 Spectre\supercite{spectre} 是最早发现 +的两个利用瞬时指令的攻击。此后发现了更多的 Meltdown 和 Spectre 的变体。 +为了找出更多的攻击类型和分析它们的防御方案,Claudio Canella 等人对这些 +攻击及其防御做了系统性的研究\supercite{systematic},将所有瞬时执行攻击 +分为 Meltdown型攻击和 Spectre 型攻击两类。 + \subsection{Meltdown型攻击} +Meltdown型攻击利用的是处理器异常产生的瞬时指令,这些指令使用了体系结构 +层次上不可访问的数据,从而绕过硬件的安全策略,泄露体系结构层次上不可访 +问的数据。 + \subsubsection{Meltdown} +操作系统将内核地址空间映射至每个用户进程的地址空间中。处理器执行访存指 +令时,在将虚拟地址翻译为物理地址的时候,检查地址对应的权限位,判断用户 +是否可访问该地址。Meltdown攻击中,攻击者让处理器从用户不可访问的内核地 +址装载数据至寄存器,由于所有内核地址都可以翻译为合法的物理地址,处理器 +可以读取内核地址空间的数据,在产生异常前,攻击者构造的瞬时指令序列可以 +将读取到的数据通过隐蔽信道发送给攻击者。 + \subsubsection{Foreshadow} +Foreshadow\supercite{foreshadow} 是一种可以读取 Intel SGX enclave 中秘 +密数据的Meltdown 型攻击。如果对 SGX 使用 Meltdown 攻击,攻击者读取未授 +权的 enclave 内存,不会产生异常,而是读出 abort page 值 -1. 但是 abort +page 只在页权限检查通过后发生,攻击者可以将该页 present 位清除,即将该 +页设为不存在,此时处理器便会产生异常,但由于一级缓存使用虚拟地址索引, +因此仍然可以从一级缓存读取该虚拟地址中的数据,从而瞬时指令可以泄露 SGX +enclave 中的数据。 + +通过将一个页设为不存在,绕过地址翻译,从一级缓存读取数据的攻击方式, +Intel 将其称为L1终端错误(L1 Terminal Fault)\supercite{l1tf}。 +Foreshadow-NG\supercite{foreshadowNG} 利用这种攻击方法,可以绕过操作系 +统和虚拟机的隔离。 + \subsubsection{LazyFP} +\supercite{lazyfp} + \subsection{Spectre型攻击} +Spectre 型攻击利用处理器对控制流或数据流的预测,并进行推测式执行产生的 +瞬时指令。Spectre 型攻击中,瞬时指令访问的是程序在体系结构层面能访问的 +数据,可以绕过软件定义的安全策略,如边界检查等。 + +\subsubsection{Spectre-PHT} + +Spectre-PHT 利用分支预测器,攻击者可以训练转移预测器,使得转移预测器执 +行一个分支,该分支的指令序列可以泄露受害者地址空间或寄存器的信息。 + +Spectre v1 是 Spectre-PHT 类型的 Spectre 攻击。 + +推测式缓冲区溢出(Speculative Buffer Overflow) +\supercite{spec-buffer-overflow} 是 Spectre-PHT 的另一种形式。 + +\subsubsection{Spectre-BTB} + +Spectre-BTB 利用间接转移,包含的攻击为 Spectre v2. 攻击者寻找受害者地 +址空间中的一个组件(gadget),它可以通过隐蔽信道泄露受害者地址空间中的 +数据。攻击者训练处理器的 BTB 使得受害者的间接转移指令的预测的目标地址 +为该组件的地址,从而受害者推测式执行这个组件的指令。训练 BTB 的过程可 +以在攻击者的地址空间中进行。 + +\subsubsection{Spectre-RSB} + +返回栈(RSB)用于预测程序函数调用的返回地址。如果 RSB 中的返回地址和实 +际返回地址不同,则会产生错误的推测式执行, +SpectreRSB\supercite{spectre-returns}\supercite{ret2spec} 利用了这种错 +误的推测式执行进行攻击。 + +Spectre-RSB 的利用方式包括使 RSB 溢出,及污染 RSB. RSB 的大小为普通程 +序函数调用深度,调用深度超过 RSB 的大小时,会造成RSB 溢出,覆盖其中最 +老的条目,在函数返回时,会发生 RSB 下溢出。而有的处理器在 RSB 为空时, +使用 BTB 进行转移预测,攻击者可以用 Spectre-BTB 的攻击方式进行攻击。污 +染 RSB 的方法包括在处理器的不同上下文中使用 RSB,推测式污染 RSB 等。 + +\subsubsection{Spectre-STL} + +Spectre v4 利用的是 load 指令的推测式执行。处理器执行 load 指令时,如 +果此前有地址未知的 store 指令,会认为这个 load 指令和这些地址未知的 +store 指令地址不同,并推测式执行这个 load 指令,将其地址中的值装入目的 +寄存器。如果在计算出 store 的地址后,发现和已执行 load 访问了相同数据, +则处理器需要重新执行这个 load 和之后的指令。在推测式执行的过程中,瞬时 +指令可以泄露这个地址中的旧值。 + % vim:ts=4:sw=4 |