From 256aad6ceba41c3a65d9076021599545df3ed9b6 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Thu, 16 May 2019 10:02:30 +0800 Subject: upd --- chap/chap2.tex | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'chap/chap2.tex') diff --git a/chap/chap2.tex b/chap/chap2.tex index 0f68d0e..c8afa39 100644 --- a/chap/chap2.tex +++ b/chap/chap2.tex @@ -20,8 +20,8 @@ Diffie-Hellman,RSA 等密码的私钥。\supercite{TimingAttack} 这是最早 现代计算机系统采用多种优化手段,优化可以作用于处理的数据的值、数据的位 置、数据存放位置的访问频率等,攻击者可以通过这些优化产生的效果,推断出 -计算机系统处理的秘密数据的值。基于软件的微架构侧信道攻击 -\supercite{gruss}利用微架构优化造成的时间区别,这种攻击不需要物理访问 +计算机系统处理的秘密数据的值。基于软件的微体系结构侧信道攻击 +\supercite{gruss}利用微体系结构优化造成的时间区别,这种攻击不需要物理访问 计算机系统,只需要在系统上运行代码。 高速缓存计时攻击是一种重要的侧信道攻击的方式。当高速缓存中存在一个地址 @@ -92,8 +92,8 @@ Meltdown 型攻击利用的是处理器异常产生的暂态指令,这些指 但是,乱序执行中的内存访问会影响缓存,而缓存的状态又可以通过缓存侧通道 进行检测。因此,攻击者可以通过在乱序执行的指令流中,读取特权态的内存来, -来得到整个内核内存的数据,并通过微架构隐蔽通道传送出来,然后攻击者在隐 -蔽信道的接收端,找出这个临时寄存器的值。因此,在微架构层次,即实际的 +来得到整个内核内存的数据,并通过微体系结构隐蔽通道传送出来,然后攻击者在隐 +蔽信道的接收端,找出这个临时寄存器的值。因此,在微体系结构层次,即实际的 硬件实现中,存在可利用的安全性问题。 % background: address spaces @@ -227,7 +227,7 @@ Foreshadow 对 Intel SGX 所追求的安全模型产生了深远的影响,在 型的攻击中,可以发现 Intel 的 CPU 将内存访问违例检查放到了指令提交的时 间,使得在页错误发生之前,未授权的内存内容仍然可以到达流水线中其后执行 的乱序执行的指令。Meltdown 攻击利用了这个时间窗口,在暂态指令中,将只有 -特权态能访问的内存编码至持久的微架构状态。 +特权态能访问的内存编码至持久的微体系结构状态。 现代 Intel 处理器使用虚拟地址索引,物理地址标签的一级缓存。如 图\ref{fig:addr-tran} 所示,这种缓存索引方式使得地址翻译可以和一级缓存 @@ -264,7 +264,7 @@ Fault)\supercite{l1tf}。Foreshadow-NG\supercite{foreshadowNG} 利用相同 Foreshadow-OS 利用了这种错误造成的暂态执行的指令。虽然访问页表中标记为 不存在的页会触发终端错误存在,在页表项中的元数据表示在缓存中的物理地址 的情况下,处理器仍然将一级数据高速缓存中未授权数据传递到暂态乱序执行中。 -然后可以和其他暂态执行攻击一样,将秘密数据从微架构暂态执行域带入体系结 +然后可以和其他暂态执行攻击一样,将秘密数据从微体系结构暂态执行域带入体系结 构状态中,例如,使用基于缓存的隐蔽通道。更糟糕的是,如果操作系统支持大 于 4KB 的页(例如,2MB 或 1GB),攻击者可以通过无意的映射访问最大页面大 小的内存范围。由于所有软件本质上共享相同的物理地址空间,因此元数据创建 @@ -455,7 +455,7 @@ Spectre 攻击通常从设置阶段(setup phase)开始,攻击者执行一 Flush+Reload 攻击中清除探测数组对应缓存行的操作。 在第二个阶段,处理器在推测式执行中,将受害者上下文中的秘密信息,传送至 -微架构隐蔽信道。攻击者向受害者通过系统调用等方式发送请求,以出发这个推 +微体系结构隐蔽信道。攻击者向受害者通过系统调用等方式发送请求,以出发这个推 测式执行。攻击者也可以通过自身代码的推测式执行,从同一进程获取敏感信息, 例如在利用 JIT 编译器的环境中,攻击者可以泄露这个环境中不希望其中执行 的代码访问的数据。 @@ -542,7 +542,7 @@ if (x < array1_size) 行的代码可以将一个比较结果泄露到一个固定的地址。上述缓存状态在限制更多 的情形,如 \verb|array1_size| 在缓存中时,攻击也可能可以进行。 -这种攻击已经在 Intel, AMD 的多个处理器微架构,和一些支持推测式执行的 +这种攻击已经在 Intel, AMD 的多个处理器微体系结构,和一些支持推测式执行的 ARM 处理器上进行验证,确认它们受 Spectre v1 的影响。 除了使用原生的机器指令,利用 JavaScript 和 Linux 内核的 eBPF 的 JIT 编 @@ -742,11 +742,11 @@ Spectre-RSB\supercite{spectre-returns}\supercite{ret2spec} 利用了 RSB \subsubsection{Spectre-STL} -Spectre v4 利用的是 load 指令的推测式执行。处理器执行 load 指令时,如 -果此前有地址未知的 store 指令,会认为这个 load 指令和这些地址未知的 -store 指令地址不同,并推测式执行这个 load 指令,将其地址中的值装入目的 -寄存器。如果在计算出 store 的地址后,发现和已执行 load 访问了相同数据, -则处理器需要重新执行这个 load 和之后的指令。在推测式执行的过程中,暂态 +Spectre v4 利用的是装载指令的推测式执行。处理器执行装载指令时,如 +果此前有地址未知的存储指令,会认为这个装载指令和这些地址未知的 +存储指令地址不同,并推测式执行这个装载指令,将其地址中的值装入目的 +寄存器。如果在计算出存储的地址后,发现和已执行装载访问了相同数据, +则处理器需要重新执行这个装载和之后的指令。在推测式执行的过程中,暂态 指令可以泄露这个地址中的旧值。 \section{Meltdown 和 Spectre 的其他形式} @@ -782,8 +782,8 @@ NetSpectre不会跨越进程边界,而是通过将有效和无效值交替地 在 NetSpectre 攻击中,攻击者需要利用两个 Spectre 组件:泄露组件和传输 组件,这些组件在收到网络数据包时执行。泄漏组件在攻击者控制的内存地址处 -访问数据,并根据访问的数据改变一些微架构状态。传输组件可以进行任意操作, -它的运行时间取决于泄露组件修改的微架构状态。这些组件可以存在于网络驱动 +访问数据,并根据访问的数据改变一些微体系结构状态。传输组件可以进行任意操作, +它的运行时间取决于泄露组件修改的微体系结构状态。这些组件可以存在于网络驱动 程序,以及网络协议和网络服务的实现。 图 \ref{fig:netspectre_leak} 是一个 Spectre v1 组件,它是处理网络数据 @@ -800,7 +800,7 @@ if (x < bitstream_length) \label{fig:netspectre_leak} \end{figure} -为了在远程攻击中使目标系统在推测式执行中改变微架构状态,攻击者采用原始 +为了在远程攻击中使目标系统在推测式执行中改变微体系结构状态,攻击者采用原始 Spectre 的方法。为了触发远程系统的推测式执行,攻击者进行以下操作: \begin{enumerate} @@ -822,11 +822,11 @@ flag 的缓存状态会发生变化。如果 \verb|bitstream[x]| 为 1,则 flag 要完成 NetSpectre 攻击,攻击者需要测量一个秘密值泄露时的网络响应时间。 由于响应时间的差异在纳秒级,因此攻击者需要进行大量的测量,此时可以得到 -明显的微架构状态差异。 +明显的微体系结构状态差异。 \begin{figure}[htbp] \centering - \includegraphics[width=0.8\textwidth]{netspectre.eps} + \includegraphics[width=0.5\textwidth]{netspectre.eps} \caption{NetSpectre 的泄露组件和传输组件\supercite{netspectre}} \label{fig:netspectre_gadgets} \end{figure} -- cgit v1.2.3