From 33eed330c57290e7834702e1d719538640e4bea9 Mon Sep 17 00:00:00 2001
From: Iru Cai <mytbk920423@gmail.com>
Date: Wed, 8 May 2019 16:11:05 +0800
Subject: upd

---
 chap/chap2.tex | 34 ++++++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

(limited to 'chap/chap2.tex')

diff --git a/chap/chap2.tex b/chap/chap2.tex
index df129b4..0dd4296 100644
--- a/chap/chap2.tex
+++ b/chap/chap2.tex
@@ -37,15 +37,19 @@ Diffie-Hellman，RSA 等密码的私钥。\supercite{TimingAttack} 这是最早
 
 \section{Meltdown和Spectre攻击}
 
-Meltdown\supercite{meltdown} 和 Spectre\supercite{spectre} 是最早发现
-的两个利用瞬时指令的攻击。此后发现了更多的 Meltdown 和 Spectre 的变体。
-为了找出更多的攻击类型和分析它们的防御方案，Claudio Canella 等人对这些
-攻击及其防御做了系统性的研究\supercite{systematic}，将所有瞬时执行攻击
-分为 Meltdown型攻击和 Spectre 型攻击两类。
+处理器在执行指令遇到异常，或者推测式执行了错误的指令后，会回卷错误执行
+的指令，丢弃它们对体系结构状态的修改，这些被回卷的指令称为瞬时指令
+（transient
+instruction）。Meltdown\supercite{meltdown} 和
+Spectre\supercite{spectre} 是最早发现的两个利用瞬时指令的攻击。此后发现
+了更多的 Meltdown 和 Spectre 的变体。为了找出更多的攻击类型和分析它们的
+防御方案，Claudio Canella 等人对这些攻击及其防御做了系统性的研
+究\supercite{systematic}，将所有瞬时执行攻击分为 Meltdown型攻击
+和 Spectre 型攻击两类。
 
 \subsection{Meltdown型攻击}
 
-Meltdown型攻击利用的是处理器异常产生的瞬时指令，这些指令使用了体系结构
+Meltdown 型攻击利用的是处理器异常产生的瞬时指令，这些指令使用了体系结构
 层次上不可访问的数据，从而绕过硬件的安全策略，泄露体系结构层次上不可访
 问的数据。
 
@@ -58,6 +62,24 @@ Meltdown型攻击利用的是处理器异常产生的瞬时指令，这些指令
 可以读取内核地址空间的数据，在产生异常前，攻击者构造的瞬时指令序列可以
 将读取到的数据通过隐蔽信道发送给攻击者。
 
+以下是一段 Meltdown 攻击的示例代码，通过它可以读取内核地址空间的数据：
+
+\begin{minted}{nasm}
+xor rax, rax
+retry:
+mov al, byte [rcx] ; 读取内核空间的数据
+shl rax, 0xc
+jz retry
+mov rbx, qword [rbx + rax] ; 访问探测数组
+\end{minted}
+
+以上 X86 指令读取了以 rcx 为地址的内核空间的数据，在用户态下，这个读取
+内核空间数据的指令会产生异常，但是在处理器产生异常之前，这条指令可以将
+内核空间的数据读至寄存器，并且其后的指令也会执行，访问 rbx 指向的探测数
+组。在处理器回卷了产生异常的指令和其后执行的指令后，高速缓存中仍然保留
+了探测数组和内核数据相关的元素，从而攻击者可以通过扫描探测数组的每一
+项，观察访问时间，以推测内核空间数据的值。
+
 \subsubsection{Foreshadow}
 
 Foreshadow\supercite{foreshadow} 是一种可以读取 Intel SGX enclave 中秘
-- 
cgit v1.2.3

