From bb46b6237e15f4d7f6ae1bbb96b5675ede9333cb Mon Sep 17 00:00:00 2001
From: Iru Cai <mytbk920423@gmail.com>
Date: Thu, 30 May 2019 11:15:30 +0800
Subject: fixes

---
 chap/chap2.tex | 37 +++++++++++++++++++------------------
 1 file changed, 19 insertions(+), 18 deletions(-)

(limited to 'chap/chap2.tex')

diff --git a/chap/chap2.tex b/chap/chap2.tex
index 52d5410..bcdd020 100644
--- a/chap/chap2.tex
+++ b/chap/chap2.tex
@@ -34,7 +34,7 @@ Diffie-Hellman，RSA 等密码的私钥。\supercite{TimingAttack} 这是最早
 \item Prime+Probe: 受害者运行一段程序后，攻击者访问缓存某一组的每一路，
   观察访问时间是否有变化
 \item Flush+Reload: 攻击者利用 x86 的 clflush 等指令清除一个共享内存地
-  址对应的缓存行，在受害者运行一段程序后，攻击者重新装载该行对应的地址
+  址对应的缓存行，在受害者运行一段程序后，攻击者重新读取该行对应的地址
   的数据，通过测量访问时间推断受害者是否访问了这个共享的地址
 \end{enumerate}
 
@@ -158,7 +158,7 @@ Meltdown 打破了处理器内存隔离功能提供的所有安全保障。这
 其内部运行的代码访问，并且在任何特权级别（包括潜在的恶意操作系统和虚拟
   机管理程序）上运行的软件和所有其他隔离区都无法访问。除了强大的内存隔
 离外，TEE 通常还提供一个证明（attestation）原语，从而可以从本地或远程，
-在运行时从密码学上验证特定的隔离区已经加载到真正的（因而被认为是安全的）
+在运行时从密码学上验证特定的隔离区已经加载到真正的（从而被认为是安全的）
 TEE 处理器上。
 
 2013 年发布的 Intel 软件防护扩展（Software Guard eXtention, SGX）
@@ -172,11 +172,11 @@ Systems 依靠 SGX 在 Signal 网络中实现隐私友好的联系人发现功
 \supercite{sawtooth}技术更是依赖于 SGX 的正确性。
 
 然而，Foreshadow\supercite{foreshadow} 攻击表明，当前的 SGX 实现并没有
-满足它的安全目标。Foreshadow 攻击利用现代 Intel 处理器中的乱序执行机制，
+满足它的安全目标。这种攻击利用现代 Intel 处理器中的乱序执行机制，
 可以从处理器的缓存中泄露明文的隔离区数据。Foreshadow 和 Meltdown 利用
 相似的处理器漏洞，处理器的控制逻辑允许攻击者在暂态的乱序执行指令回滚之
 前，使用未授权的内存访问的结果。和 Meltdown 攻击针对传统的分层保护域不
-同，Foreshadow 考虑了一种非常不同的攻击模型，攻击者的目标不是从用户空
+同，Foreshadow 考虑一种不同的攻击模型，攻击者的目标不是从用户空
 间读取内核内存，而是破坏最先进的地址空间内隔离区保护域，它不在已经部署
 的用于防御 Meltdown 的内核页表隔离技术的保护之内。在 Foreshadow 攻击中，
 无特权的普通用户即可完成基本的攻击，而无需以 root 的身份访问受害者机器。
@@ -189,10 +189,10 @@ SGX 处理器无法保证隔离区的数据保密性，也无法证明隔离区
 但现有的 SGX 处理器甚至无法在没有特权的用户空间攻击者面前保护隔离区中
 的秘密数据。
 
-所有先前已知的针对 SGX 的攻击都依赖于软件特定的侧信道泄露或软件漏洞。
-人们普遍认为，精心编写的隔离区可以通过坚持良好的编码实践，例如不使用依
-赖秘密数据的分支，来防止信息泄露。这些攻击都没有破坏 Intel 定义的 SGX
-的安全保证，防止侧信道攻击应该是隔离区开发者的责任。 然而，Foreshadow
+所有先前的针对 SGX 的攻击都依赖于软件中的侧信道泄露或软件漏洞。
+人们普遍认为，精心编写的隔离区可以通过坚持良好的编码实践防止信息泄露，
+例如不使用依赖秘密数据的分支操作。这些攻击都没有破坏 Intel 定义的 SGX
+的安全保证。 然而，Foreshadow
 否定了这一论点，因为它完全依赖于基本的 Intel x86 处理器的行为，并且不
 利用任何软件漏洞，甚至不需要知道受害者隔离区的源代码。
 
@@ -213,7 +213,7 @@ TLB 中查询对应的物理地址，如果 TLB 中没有这个地址对应的
 一步检查地址翻译的结果，确保这个地址翻译遵守硬件强制的隔离区访问控制限
 制。如果这三个独立的阶段出现了一个访问违例，则处理器抛出一个页错误，控
 制流转向异常处理代码，而在启用了 SGX 的处理器中，大多数的隔离区内存违
-例会被处理器忽视，将内存装载指令得到的值设为 abort page 的值 -1.
+例会被处理器忽视，将内存装载指令得到的值设为放弃页（abort page）的值 -1.
 
 在体系结构层次上，以上的地址翻译过程在文档中有精确的描述。现代处理器为
 了加快地址翻译和内存访问，使用了并行访问和额外的缓存结构。在 Meltdown
@@ -230,16 +230,17 @@ TLB 中查询对应的物理地址，如果 TLB 中没有这个地址对应的
 一级缓存命中，数据返回至处理器的执行单元。
 
 如果启用 SGX 的处理器使用 Meltdown 攻击，攻击者读取未授权的隔离区内存
-时，不会产生异常，而是读出 abort page 值 -1. 但是 abort page 只在页权
-限检查通过后发生，攻击者可以将该页的存在（present）位清除，即将该页设
+时，不会产生异常，而是读出放弃页，但是它只在页权
+限检查通过后发生。攻击者可以将该页的存在（present）位清除，即将该页设
 为不存在，此时处理器便会产生异常，但由于一级缓存使用虚拟地址索引，因此
 仍然可以从一级缓存读取该虚拟地址中的数据，从而暂态指令可以泄露 SGX 隔
 离区中的数据。
 
-% TODO: 在哪些处理器上能用这些攻击
+在 Skylake 微体系结构的 Intel i7-6700 中使用 Foreshadow 攻击，
+可以以 81.14\% 的精确度提取一级缓存行的数据。
 
 通过将一个页设为不存在，绕过地址翻译，从一级缓存读取数据的攻击方式，
-Intel 将其称为L1终端错误（L1 Terminal Fault）\supercite{l1tf}。 利用相
+Intel 称其为L1终端错误（L1 Terminal Fault）\supercite{l1tf}。 利用相
 同的原理，Foreshadow-NG\supercite{foreshadowNG} 新增了Foreshadow-OS 和
 Foreshadow-VMM 两种 Foreshadow 类型的攻击，可以绕过操作系统和虚拟机的
 隔离。
@@ -294,7 +295,7 @@ Foreshadow 攻击使用在可以直接控制客户机器物理地址和一级缓
 
 图 \ref{fig:foreshadow-vmm} 展示了一种情况，一个恶意的虚拟机可以利用暂
 态执行攻击窃取属于同一处理器核的另一个虚拟机中的数据。这种攻击并不局限
-于超线程受害者，因为 Foreshadow-VMM 可以提取处理器物理核心一级数据高速
+于使用 SMT 的情形，因为 Foreshadow-VMM 可以提取处理器物理核心一级数据高速
 缓存中的任何秘密。
 
 
@@ -318,7 +319,7 @@ x87 浮点单元（FPU）是 x86 的处理器的一个扩展，其最初目的
 态，曾经是一个开销很大的操作，因为内存速度慢并且大小有限。此外，那时
 FPU 只在少数程序中被使用。在 FPU 不被所有进程使用的情况下，在每个上下
 文切换时，切换 FPU 状态会产生不必要的开销。为了能够减少这种开销，x86
-处理器引入了一个控制寄存器位 cr0.ts，允许操作系统打开和关闭FPU，当FPU
+处理器引入了一个控制寄存器位 cr0.ts，允许操作系统打开和关闭 FPU，当 FPU
 关闭时，它会保持其状态，但用户和内核代码都无法访问。
 
 利用 cr0.ts 实现的优化称为延迟 FPU 上下文切换（lazy FPU context
@@ -334,7 +335,7 @@ switching）。核心思想是 FPU 寄存器状态仅在必要时进行上下文
 当前进程是否为 FPU 所有者，如果是，则 FPU 寄存器状态属于该进程，操作系
 统启用 FPU，该进程再次可以自由执行 FPU 指令。否则，则操作系统在启用
 FPU 的同时，将当前 FPU 寄存器状态存储到 FPU 所有者进程的状态保存区域，
-并恢复当前进程的FPU 寄存器状态，并将该进程设为 FPU 的所有者。这个算法
+并恢复当前进程的 FPU 寄存器状态，并将该进程设为 FPU 的所有者。这个算法
 在不同操作系统中的实现可能不同，它们的共同点是，使用 FPU 的进程切换到
 不使用 FPU 的进程时，操作系统不需要上下文切换 FPU 寄存器的状态。
 
@@ -398,12 +399,12 @@ Spectre-STL.
 Spectre 攻击使得受害者程序在暂态指令中执行在严格按序执行时不会执行的操
 作，这些操作会将秘密信息通过隐蔽信道泄露给攻击者。
 
-Spectre 攻击通常分为三个阶段。第一个阶段是设置阶段（setup phase），攻
+Spectre 攻击通常分为三个阶段。第一个阶段是设置阶段，攻
 击者执行一些用于训练处理器的操作，使得处理器在后续的阶段中，产生可被攻
 击者利用的错误的推测式执行。此外，在设置阶段中，需要增大推测式执行的窗
 口，使得推测式执行中的指令足够多，从而可以执行攻击者希望处理器执行的指
 令，实现方式包括操作高速缓存状态，从缓存中去除预测的分支所依赖的数据。
-在这个阶段，攻击者还可以进行隐蔽信道的准备，如Flush+Reload 攻击中清除
+在这个阶段，攻击者还可以进行隐蔽信道的准备，如 Flush+Reload 攻击中清除
 探测数组对应缓存行的操作。
 
 在第二个阶段，处理器在推测式执行中，将受害者上下文中的秘密信息，传送至
-- 
cgit v1.2.3

