From 99fecc3db6e1c0214fcc1ac10655fc60b01d1a36 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Tue, 14 May 2019 17:02:30 +0800 Subject: upd --- chap/chap2.tex | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'chap/chap2.tex') diff --git a/chap/chap2.tex b/chap/chap2.tex index 79a7c6f..3bd6a65 100644 --- a/chap/chap2.tex +++ b/chap/chap2.tex @@ -41,18 +41,18 @@ Diffie-Hellman,RSA 等密码的私钥。\supercite{TimingAttack} 这是最早 \section{Meltdown和Spectre攻击} 处理器在执行指令遇到异常,或者推测式执行了错误的指令后,会回卷错误执行 -的指令,丢弃它们对体系结构状态的修改,这些被回卷的指令称为瞬时指令 +的指令,丢弃它们对体系结构状态的修改,这些被回卷的指令称为暂态指令 (transient instruction)。Meltdown\supercite{meltdown} 和 -Spectre\supercite{spectre} 是最早发现的两个利用瞬时指令的攻击。此后发现 +Spectre\supercite{spectre} 是最早发现的两个利用暂态指令的攻击。此后发现 了更多的 Meltdown 和 Spectre 的变体。为了找出更多的攻击类型和分析它们的 防御方案,Claudio Canella 等人对这些攻击及其防御做了系统性的研 -究\supercite{systematic},将所有瞬时执行攻击分为 Meltdown型攻击 +究\supercite{systematic},将所有暂态执行攻击分为 Meltdown型攻击 和 Spectre 型攻击两类。 \subsection{Meltdown型攻击} -Meltdown 型攻击利用的是处理器异常产生的瞬时指令,这些指令使用了体系结构 +Meltdown 型攻击利用的是处理器异常产生的暂态指令,这些指令使用了体系结构 层次上不可访问的数据,从而绕过硬件的安全策略,泄露体系结构层次上不可访 问的数据。 @@ -128,7 +128,7 @@ Meltdown 打破了处理器内存隔离功能提供的所有安全保障。这 令时,在将虚拟地址翻译为物理地址的时候,检查地址对应的权限位,判断用户 是否可访问该地址。Meltdown攻击中,攻击者让处理器从用户不可访问的内核地 址装载数据至寄存器,由于所有内核地址都可以翻译为合法的物理地址,处理器 -可以读取内核地址空间的数据,在产生异常前,攻击者构造的瞬时指令序列可以 +可以读取内核地址空间的数据,在产生异常前,攻击者构造的暂态指令序列可以 将读取到的数据通过隐蔽信道发送给攻击者。 以下是一段 Meltdown 攻击的示例代码,通过它可以读取内核地址空间的数据: @@ -224,7 +224,7 @@ Foreshadow 对 Intel SGX 所追求的安全模型产生了深远的影响,在 了加快地址翻译和内存访问,使用了并行访问和额外的缓存结构。在 Meltdown类 型的攻击中,可以发现 Intel 的 CPU 将内存访问违例检查放到了指令提交的时 间,使得在页错误发生之前,未授权的内存内容仍然可以到达流水线中其后执行 -的乱序执行的指令。Meltdown 攻击利用了这个时间窗口,在瞬时指令中,将只有 +的乱序执行的指令。Meltdown 攻击利用了这个时间窗口,在暂态指令中,将只有 特权态能访问的内存编码至持久的微架构状态。 现代 Intel 处理器使用虚拟地址索引,物理地址标签的一级缓存。如 @@ -239,7 +239,7 @@ Foreshadow\supercite{foreshadow} 是一种可以读取 Intel SGX enclave 中秘 权的 enclave 内存,不会产生异常,而是读出 abort page 值 -1. 但是 abort page 只在页权限检查通过后发生,攻击者可以将该页 present 位清除,即将该 页设为不存在,此时处理器便会产生异常,但由于一级缓存使用虚拟地址索引, -因此仍然可以从一级缓存读取该虚拟地址中的数据,从而瞬时指令可以泄露 SGX +因此仍然可以从一级缓存读取该虚拟地址中的数据,从而暂态指令可以泄露 SGX enclave 中的数据。 通过将一个页设为不存在,绕过地址翻译,从一级缓存读取数据的攻击方 @@ -259,10 +259,10 @@ Fault)\supercite{l1tf}。Foreshadow-NG\supercite{foreshadowNG} 利用相同 包含敏感数据的有效物理地址。在内核清除相应页表项中的存在位后,从用户空 间解引用未映射的页将导致终端错误。 -Foreshadow-OS 利用了这种错误造成的瞬时执行的指令。虽然访问页表中标记为 +Foreshadow-OS 利用了这种错误造成的暂态执行的指令。虽然访问页表中标记为 不存在的页会触发终端错误存在,在页表项中的元数据表示在缓存中的物理地址 -的情况下,处理器仍然将一级数据高速缓存中未授权数据传递到瞬时乱序执行中。 -然后可以和其他瞬时执行攻击一样,将秘密数据从微架构瞬时执行域带入体系结 +的情况下,处理器仍然将一级数据高速缓存中未授权数据传递到暂态乱序执行中。 +然后可以和其他暂态执行攻击一样,将秘密数据从微架构暂态执行域带入体系结 构状态中,例如,使用基于缓存的隐蔽通道。更糟糕的是,如果操作系统支持大 于 4KB 的页(例如,2MB 或 1GB),攻击者可以通过无意的映射访问最大页面大 小的内存范围。由于所有软件本质上共享相同的物理地址空间,因此元数据创建 @@ -276,7 +276,7 @@ enclave,或 SMM 内存的数据。在操作系统通过 munmap 系统调用释 % foreshadow-VMM 虽然上述 Foreshadow-OS 变体允许无特权的攻击者使用未经授权的物理内存位置 -上的数据进行瞬时计算,但他们无法直接控制访问哪些物理地址。因此, +上的数据进行暂态计算,但他们无法直接控制访问哪些物理地址。因此, Foreshadow 攻击使用在可以直接控制客户机器物理地址和一级缓存标签比较的 不可信虚拟机时时,会变得更有破坏性。这种攻击称为 Foreshadow-VMM. @@ -284,7 +284,7 @@ Foreshadow 攻击使用在可以直接控制客户机器物理地址和一级缓 于 EPT 的转换过程以找到底层主机物理内存地址。英特尔的分 析\supercite{l1tf}显示,终端错误发生时,虚拟地址到物理地址处于早期阶段, 在经过 EPT 转换之前,将转换出来的客户机物理地址传到一级缓存中进行标签比 -较。因此,恶意虚拟机可以控制用于访问一级缓存的瞬时指令的物理地址。特别 +较。因此,恶意虚拟机可以控制用于访问一级缓存的暂态指令的物理地址。特别 的,不可信的恶意客户虚拟机可以在自己的客户页表中修改页表项,指向客户机 物理内存。该地址不会经过 EPT 转换,和一级缓存中的标签进行比较,就像它是 主机物理地址一样。 @@ -310,7 +310,7 @@ LazyFP\supercite{lazyfp} 是一个 Meltdown 类型的攻击,它可以跨越进 拟机的边界,泄露浮点处理单元(FPU)寄存器的状态。这种攻击利用 Intel 处 理器处理设备不可用异常(\Fault{NM})的行为。这个异常用于在操作系统中实 现延迟 FPU 上下文切换的优化。在 LazyFP 攻击中,没有特权的本地执行的代码, -可以利用 \Fault{NM} 异常的瞬时指令,恢复受害者进程的 FPU 寄存器状态。 +可以利用 \Fault{NM} 异常的暂态指令,恢复受害者进程的 FPU 寄存器状态。 由于 AES-NI 的密钥等数据可能存在 FPU 寄存器中,这种攻击导致的数据泄露 对信息安全是个很大的威胁。 @@ -377,7 +377,7 @@ mov rax, dword [mem + rax] 而在处理器结束 movq 指令的执行并产生 \Fault{NM} 之前,已经执行了后续指 令,虽然最终这些指令引起的体系结构状态更改会被丢弃,但在缓存中的状态仍 然保留。这段代码使用了受害者进程的 FPU 寄存器和攻击者进程的通用寄存器 -进行瞬时指令的执行,通过探测 mem 指向的数组的缓存状态,可以恢复 xmm0 +进行暂态指令的执行,通过探测 mem 指向的数组的缓存状态,可以恢复 xmm0 最低位的值。 利用 Intel TSX 等技术处理异常,攻击者可以高效地泄露所有 FPU 寄存器的数 @@ -387,7 +387,7 @@ mov rax, dword [mem + rax] \subsection{Spectre型攻击} Spectre 型攻击利用处理器对控制流或数据流的预测,并进行推测式执行产生的 -瞬时指令。Spectre 型攻击中,瞬时指令访问的是程序在体系结构层面能访问的 +暂态指令。Spectre 型攻击中,暂态指令访问的是程序在体系结构层面能访问的 数据,可以绕过软件定义的安全策略,如边界检查等。 推测式执行的常见形式是控制流的推测式执行。控制流的推测式执行依赖于转移 @@ -729,7 +729,7 @@ Spectre v4 利用的是 load 指令的推测式执行。处理器执行 load 指 果此前有地址未知的 store 指令,会认为这个 load 指令和这些地址未知的 store 指令地址不同,并推测式执行这个 load 指令,将其地址中的值装入目的 寄存器。如果在计算出 store 的地址后,发现和已执行 load 访问了相同数据, -则处理器需要重新执行这个 load 和之后的指令。在推测式执行的过程中,瞬时 +则处理器需要重新执行这个 load 和之后的指令。在推测式执行的过程中,暂态 指令可以泄露这个地址中的旧值。 \section{Meltdown 和 Spectre 的其他形式} -- cgit v1.2.3