From 33eed330c57290e7834702e1d719538640e4bea9 Mon Sep 17 00:00:00 2001 From: Iru Cai 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