From 313b40908e4b751b746d993549217fa6352904e6 Mon Sep 17 00:00:00 2001
From: Iru Cai <mytbk920423@gmail.com>
Date: Wed, 24 Apr 2019 16:01:15 +0800
Subject: update

---
 chap/chap2.tex | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)

(limited to 'chap/chap2.tex')

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
-- 
cgit v1.2.3

