summaryrefslogtreecommitdiff
path: root/chap/chap2.tex
diff options
context:
space:
mode:
authorIru Cai <mytbk920423@gmail.com>2019-04-24 16:01:15 +0800
committerIru Cai <mytbk920423@gmail.com>2019-04-24 16:01:15 +0800
commit313b40908e4b751b746d993549217fa6352904e6 (patch)
tree9e01d52dd840c6b96f429db7719de63f621b3dae /chap/chap2.tex
parentfb0e8ad0c8747b14ccfec5cb846e9bc6901f5725 (diff)
downloaddissertation-313b40908e4b751b746d993549217fa6352904e6.tar.xz
update
Diffstat (limited to 'chap/chap2.tex')
-rw-r--r--chap/chap2.tex76
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