From 29f78286a4a82782661c6e9f8ecc1d70939cbe56 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Wed, 15 May 2019 13:34:15 +0800 Subject: upd --- chap/abs.tex | 62 ++++++++++++++++++++++++++- chap/chap2.tex | 27 +++++++++--- chap/chap3.tex | 133 ++++++++++++++++++++------------------------------------- chap/chap4.tex | 6 ++- chap/chap5.tex | 3 +- chap/chap6.tex | 34 +++++++++++++++ thesis.tex | 7 ++- 7 files changed, 172 insertions(+), 100 deletions(-) diff --git a/chap/abs.tex b/chap/abs.tex index 8dc8efc..107c77e 100644 --- a/chap/abs.tex +++ b/chap/abs.tex @@ -2,11 +2,69 @@ % Public domain. \begin{cabstract} - %\pkuthssffaq % 中文测试文字。 + 现代微处理器设计主要考虑性能和功耗。随着软硬件变得越来越复杂,安全在 + 计算机系统的设计中逐渐受到重视。Meltdown 和 Spectre 攻击的发现,表明 + 处理器微架构的优化,虽然不影响程序的正确运行,但是可能破坏系统的安全 + 性。其中 Spectre 攻击利用处理器的推测式执行,通过暂态指令的执行构造隐 + 蔽信道,将程序中的秘密信息泄露给攻击者,破坏了程序的安全保证和系统的 + 隔离性。由于推测式执行是处理器优化执行性能的重要手段,在防御 Spectre + 攻击的同时,减少防御手段带来的性能下降,是一个复杂的问题。 + + 本文基于 gem5 模拟平台,设计了一种用于防御 Spectre 攻击的微架构,并 + 对其进行评估。主要工作内容如下: + \begin{enumerate} + \item 调研现有的侧信道攻击、Meltdown 和 Spectre 攻击技术,深入分析这 + 些攻击技术的原理。 + \item 调研现有的 Meltdown 和 Spectre 防御方案,分析这些方案的设计思 + 想、实现方法、安全性和开销 + \item 设计一种用于防御 Spectre 攻击的微架构,并在 gem5 中模拟。该微架 + 构基于动态信息流追踪技术,它用于检测推测式执行中的指令是否直接或间 + 接依赖一个推测式执行中从内存装载的值,进而可能泄露数据。本文将这种 + 技术和已有的安全装载数据的方案 InvisiSpec 结合使用,并在 gem5 中实 + 现了这些模型。 + \item 评测这种微架构的安全性和性能。在 gem5 中模拟这种微架构,用构造 + 的验证程序进行测试,表明设计的微架构满足本文的安全特性。用 SPEC + CPU2006 进行性能评测,平均性能开销为 8.5\%,优于只使用动态信息流追 + 踪检测技术或只使用 InvisiSpec 的模型的性能。 + \end{enumerate} \end{cabstract} \begin{eabstract} - %Test of the English abstract. + Performance and power consumption are the main factors of modern + processor design. As software and hardware become more and more + complex, security is becoming important in computer system + design. The disclosure of Meltdown and Spectre shows that + microarchitecture optimizations can break the security of the + system, although the programs still run correctly. Spectre exploits + speculative execution, constructing covert channel with transient + instructions, and leak secret information to the attacker, breaking + the security guarentee of the program and system isolation. Since + speculative execution is an important method to optimize the + execution, it's complex to defend against Spectre attack, while + minimize the performance loss of the defense. + + This thesis designs a microarchitecture to defend against Spectre + attack, based on the gem5 simulation platform, and evaluates the + design. The contribution of this thesis is as follows: + \begin{enumerate} + \item Investigate on current side-channel attack, Meltdown and + Spectre attack, and analyze how these attacks work + \item Investigate on current defenses of Meltdown and Spectre + attack, analyze their idea, implementation, security and overhead + \item Design a microarchitecture to defend against spectre attack + and simulate it on gem5. This microarchitecture is based on + dynamic information flow tracking, which detects whether a + speculating instruction directly or indirectly depends on a value + loaded from memory, which may result in a leakage. This thesis + combines this method with InvisiSpec, a scheme to execute + speculating load safely, and implement these models on gem5. + \item Evaluate the security and performance of this + microarchitecture. Tested with a constructed proof of concept code + on gem5, this microarchitecture design has the expected security + feature. Evaluated with SPEC CPU2006, this microarchitecture has + an average performance overhead of 8.5\%, better than using DIFT + or InvisiSpec only. + \end{enumerate} \end{eabstract} % vim:ts=4:sw=4 diff --git a/chap/chap2.tex b/chap/chap2.tex index 69d32d0..1dcfdf2 100644 --- a/chap/chap2.tex +++ b/chap/chap2.tex @@ -133,6 +133,8 @@ Meltdown 打破了处理器内存隔离功能提供的所有安全保障。这 以下是一段 Meltdown 攻击的示例代码,通过它可以读取内核地址空间的数据: +\begin{figure} + \centering \begin{minted}{nasm} xor rax, rax retry: @@ -141,6 +143,9 @@ shl rax, 0xc jz retry mov rbx, qword [rbx + rax] ; 访问探测数组 \end{minted} +\caption{Meltdown 示例代码} +\label{lst:meltdown} +\end{figure} 以上 X86 指令读取了以 rcx 为地址的内核空间的数据,在用户态下,这个读取 内核空间数据的指令会产生异常,但是在处理器产生异常之前,这条指令可以将 @@ -204,8 +209,7 @@ Foreshadow 对 Intel SGX 所追求的安全模型产生了深远的影响,在 \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{addr-trans.eps} - \caption{CPU 的地址翻译过程和 L1 终端错误的原理:图片的下半部分为文 - 档描述的地址翻译过程,上半部分是微架构的行为。\supercite{foreshadowNG}} + \caption{地址翻译过程和 L1 终端错误的原理\supercite{foreshadowNG}} \label{fig:addr-tran} \end{figure} @@ -292,8 +296,7 @@ Foreshadow 攻击使用在可以直接控制客户机器物理地址和一级缓 \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{foreshadow-vmm.eps} - \caption{Foreshadow VMM 的一种使用场景。同一物理核上的虚拟机共享一级 - 缓存,攻击者可以操作其内存访问,读取受害者虚拟机在一级缓存的内容。\supercite{foreshadowNG}} + \caption{Foreshadow VMM 的一种使用场景\supercite{foreshadowNG}} \label{fig:foreshadow-vmm} \end{figure} @@ -363,12 +366,17 @@ switching)。核心思想是 FPU 寄存器状态仅在必要时进行上下文 攻击者获取同一处理器硬件线程中 FPU 寄存器的数据。以下简单的例子可以泄 露1比特的数据。 +\begin{figure} + \centering \begin{minted}{nasm} movq rax, xmm0 and rax, 1 shl rax, 6 mov rax, dword [mem + rax] \end{minted} +\caption{LazyFP 示例代码} +\label{lst:lazyfp} +\end{figure} 在以上代码片段中,由于进程中 FPU 寄存器被禁用,movq 指令产 生 \Fault{NM} 异常。操作系统会用对应用程序透明的方式处理该异常,恢复进 @@ -469,6 +477,7 @@ Spectre v1 是最早提出的 Spectre 攻击,属于 Spectre-PHT 类型。它 害者程序中的分支,一个例子如下: \begin{figure}[htbp] +\centering \begin{minted}[frame=single,linenos=true]{C} if (x < array1_size) y = array2[array1[x] * 4096]; @@ -492,9 +501,7 @@ if (x < array1_size) \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{spectre_v1.eps} - \caption{在得出边界检查的正确结果之前,分支预测器使程序从最可能的分 - 支目标继续运行,如果预测结果正确,则可以得到性能提升。但是,如果边 - 界检查预测错误,攻击者在一些情形可以泄露秘密数据。\supercite{spectre}} + \caption{边界检查结果和分支预测方向的可能情形\supercite{spectre}} \label{fig:spectre_v1} \end{figure} @@ -609,10 +616,15 @@ ARM 处理器上进行验证,确认它们受 Spectre v1 的影响。 以将缓冲区中的数据转发给需要的指令。推测式缓冲区溢出利用了这个特性,例 如以下程序: +\begin{figure} + \centering + \caption{推测式缓冲区溢出} + \label{lst:spec-buf-overflow} \begin{minted}{C} if (x < len) a[x] = z; \end{minted} +\end{figure} 攻击者给出一个超过数组 \verb|a| 大小的 \verb|x| 时,在推测式执行时,会 将 \verb|a[x]| 的地址和攻击者输入的值 \verb|z| 写入至存储缓冲区。如果 @@ -769,6 +781,7 @@ NetSpectre不会跨越进程边界,而是通过将有效和无效值交替地 包的程序的一部分,其中 x 由攻击者控制,它构成了 NetSpectre 的泄露组件。 \begin{figure}[htbp] + \centering \begin{minted}{C} if (x < bitstream_length) if (bitstream[x]) diff --git a/chap/chap3.tex b/chap/chap3.tex index 85885cd..3da0ff1 100644 --- a/chap/chap3.tex +++ b/chap/chap3.tex @@ -35,6 +35,7 @@ Load Hardening)\supercite{spec-load-hardening} 技术,它的做法是将可 为 Spectre 组件的代码转为图\ref{fig:SLH}中的代码: \begin{figure}[htbp] + \centering \begin{minted}[frame=single]{C} if (condition) { // ?: 的实现可以用无分支的 cmov @@ -73,13 +74,14 @@ Webkit 在数组访问中使用索引掩码(index masking)\supercite{webkit} 功能如图\ref{fig:array-index-nospec}: \begin{figure}[htbp] + \centering \begin{minted}[frame=single]{C} size_t array_index_nospec(size_t index, size_t size) { mask = ~(signed long)(index | (size - 1 - index)) >> 63; return (index & mask); } \end{minted} -\caption{array\_index\_nospec} +\caption{Linux 中的索引掩码} \label{fig:array-index-nospec} \end{figure} @@ -95,7 +97,7 @@ Webkit 还使用了指针投毒(pointer poisoning)\supercite{webkit}的方 方法,程序在推测式执行中无法通过这种指针访问到程序中的数据,从而避免了 秘密数据的泄露。 -% site isolation, \Fixme: needs citing +% site isolation Google 为 Chrome 浏览器使用了站点隔离(site isolation)技术,使得浏览 器用不同的进程访问不同的网站,从而攻击者无法通过用 Javascript 通过侧信 道攻击获取另一站点相关的数据。\supercite{here-to-stay} @@ -113,10 +115,8 @@ Google 为 Chrome 浏览器使用了站点隔离(site isolation)技术,使 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% gtran %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\Todo: SafeSpec III. SAFESPEC :LEAKAGE - FREE SPECULATION 一章,包含一 -些设计选择 - -\Fixme: 需要重新翻译 +%\Todo: SafeSpec III. SAFESPEC :LEAKAGE - FREE SPECULATION 一章,包含一 +%\Fixme: 需要重新翻译 SafeSpec\supercite{safespec}提出了一种设计原则保护处理器免受推测式执行 攻击,同时保持推测式执行带来的性能提升。SafeSpec 的总体设计如图 @@ -205,6 +205,7 @@ Speculative Store Bypass & 装载指令和更早的存储指令地址别名\tabu \end{tabular} \caption{暂态指令的来源} \label{tab:transient_insn} +\centering \end{table} InvisiSpec 的微架构基于两种机制。第一个机制中,不安全的推测式执行的装载 @@ -360,87 +361,41 @@ InvisiSpec 会增大存储系统中各个缓存之间,和缓存和主存之间 \subsubsection{DAWG} -\Todo: DAWG introduction - -\Fixme: 重新翻译 - -在一个设计良好的系统中,无法在架构上观察到这个秘密,因为秘密应该 -局限于一个保护域,阻止其他程序在架构上观察它。但是,当攻击者可以通过软 -件方式观察执行的副作用时,可能存在漏洞。 - -进行这种观察的机制称为软件侧信道。必须根据受害者保护域中的活动来调制这 -些信道,即它们的状态改变,并且攻击者必须能够检测那些状态变化。目前,最 -广泛探索的渠道基于共享缓存的状态。例如,如果攻击者观察到地址上的命中, -则该地址必须已经缓存,这意味着某个方(可能是受害者)最近访问过该地址, -并且尚未被替换。确定访问是否是命中可以通过测量程序进行特定引用所花费的 -时间来完成。 - -隐蔽通信信道在不允许通过现有保护机制进行通信的进程之间传输信息。例如, -当侧信道用于向攻击者传达“秘密”时,攻击将包括受害者保护域内用于访问秘密 -的代码和用于将秘密传递给攻击者的发送器。它们一起形成数据抽头,将根据秘 -密调制信道。由攻击者控制并在受害者保护域之外的接收器将监听信道上的信号 -并对其进行解码以确定该秘密。这在图1中以图示的方式示出。 - -对RSA的经典攻击依赖于这种情况[9]。具体地,现有RSA代码遵循作为秘密的函 -数的条件执行序列,并且通过根据该执行序列修改指令高速缓存状态而无意地发 -送私有信息。这导致了一个隐蔽的通信,让观察对手确定秘密的位。在这种情况 -下,访问秘密的代码和传送秘密的发送器预先存在于RSA代码中。因此,共享 -icache的攻击者仅需要提供可以解调通过基于缓存标签状态的信道传送的秘密的 -接收器。最近的工作表明,广泛的可行攻击通过共享缓存渗透信息。 - -最近,多个安全研究人员(例如,[22],[31],[35])已经找到了攻击者在受害 -者中创建新数据管道的方法。这里,攻击者能够在受害者的域中创建数据抽头和 -/或影响数据抽头以访问和传输所选择的秘密。 Spectre和Meltdown利用了这样 -一个事实,即推测性地执行的代码可以完全访问任何秘密。 - -虽然广泛定义了投机执行,但我们关注的是本文中的控制流量推测。现代处理器 -不按顺序执行指令,只要保留依赖性,就允许下游指令在上游指令之前执行。现 -代无序处理器上的大多数指令也是推测性的,即,它们创建检查点并沿着预测路 -径执行,同时一个或多个先前条件分支正在等待解决。预测被解析为正确丢弃检 -查点状态,而不正确一个强制处理器回滚到检查点并沿正确的路径继续。一段时 -间内执行了错误预测的指令,但不修改架构状态。然而,诸如高速缓存标签状态 -的微体系结构状态由于(不正确的)推测性执行而被修改,从而导致信道被调制, -这可能允许秘密泄漏。 - -通过利用错误推测的执行,攻击者可以执行通常无法访问的代码路径,从而绕过 -软件不变量。一个例子是攻击者推测性地执行非法访问秘密的数据抽头代码,并 -在异常发生之前通过微架构副作用引起传输[35]。另一个例子是攻击者强制分支 -预测器状态以鼓励沿着攻击者选择的代码路径的错误推测,这实现了受害者域中 -的数据抽头。因此,有三种创建数据点击的方法: -1)数据抽头预先存在于受害者的代码中,我们在RSA攻击[9]中描述过。 -2)攻击者明确编程数据点击。 Meltdown [35]就是一个例子。 -3)攻击者合成受害者现有代码中的数据抽头 - 例如幽灵变种[22],[30],[31]。 - -例如,该框架可以应用于除缓存状态之外的侧通道,描述通过分支预测器逻辑或 -TLB状态的泄漏。鉴于对这种新攻击类的变体的研究兴趣越来越浓,我们也想象 -出可以构建数据抽头的新方法。因此,我们希望设计一种针对广泛的当前和未来 -攻击的防御。 - -已经提出了可以仅在软件中实现的防御机制(例如,[11],[43])。不幸的是, -这些机制看起来非常具有攻击性:例如,编译器分析[43]确定了一些易受幽灵变 -种1影响的代码实例;微码更新或编译器和链接器修复减少了对Spectre Variant -2的暴露[11]。已经引入了关闭脆弱区域中的推测的指令(例如,[2]),供将来 -的编译器使用。在本文中,我们针对硬件进行了最小程度的修改,以抵御广泛的 -侧通道攻击,包括那些基于推测的攻击,其目标是通过改变缓存状态来消除与渗 -透相关的整个攻击面。 - -为了防止泄漏,我们需要保护域之间的强隔离,这可以防止任何发送器/接收器 -对共享相同的通道。缓存分区是一种实现隔离的吸引人的机制。不幸的是,设置 -(例如,页面着色[29],[50])和方式(例如,英特尔的高速缓存分配技术 -(CAT)[21],[23])当今处理器中可用的分区机制要么性能低要么要么不高提 -供隔离。 - -我们提出了DAWG,动态分配方式保护,一种用于包括高速缓存的集合关联结构的 -安全方式分区的通用机制。 DAWG赋予一组关联结构和保护域概念,以提供强大 -的隔离。与CAT等现有机制不同,DAWG不允许跨保护域点击。这会影响命中路径 -和缓存一致性[42],DAWG通过对现代操作系统的最小修改来处理这些问题,同时 -将操作系统的攻击面减少到一小部分带注释的部分,其中数据跨越保护域,或者 -域是调整/重新分配。只有在这些少数例程中,DAWG保护才会放松,并且根据需 -要应用其他防御机制,例如投机围栏。我们使用体系结构仿真和实际硬件的组合 -来评估DAWG的性能影响,并与传统的服务质量分区缓存进行比较。我们得出结论, -DAWG提供了强大的隔离和合理的性能开销。 - -\Todo: DAWG 的设计 +隐蔽信道是在已有的保护机制下,在不允许通信的进程之间传输信息的信道。例 +如,当侧信道用于向攻击者传送秘密数据时,这种攻击包含一段在受害者保护域 +内执行的代码,用于访问秘密数据,和一个发送器,用于将秘密传递给攻击者。 +这些部分构成了一个数据通道,它基于秘密信息调制这个信道。由攻击者控制, +并在受害者保护域之外的接收器,可以监听信道上的信号,并对其进行解码以确 +定该秘密。 + +经典的对 RSA 的攻击中,代码使用了一段依赖于秘密的执行序列,将私密信息通 +过执行序列传送到了指令缓存状态中,这造成了一个攻击者可以推断秘密数据的 +隐蔽信道。在这种情况中,访问秘密数据和传送秘密数据的代码均在已有的 RSA +代码中。共享指令缓存的攻击者可以用一个接收器解码来自缓存信道的信息。 + +Meltdown 和 Spectre 提供了新了构造数据通道的方式。通过利用错误的推测式 +执行,攻击者可以使处理器执行通常无法访问的代码路径。在 Meltdown 中,攻 +击者推测式执行一段代码,作为数据通道,它可以非法访问秘密数据,并在异常 +发生之前通过微架构副作用传输至接受者。在 Spectre 中,攻击者使分支预测器 +预测错误,使处理器沿着攻击者选择的路径推测式执行,这在受害者中形成了数 +据通道。因此,构建数据通道有三种方法: + +\begin{enumerate} +\item 数据通道在受害者的代码中已经存在,例如对 RSA 的攻击 +\item 攻击者编写了这个数据通道,如 Meltdown +\item 攻击者从受害者已有的代码中合成数据通道 +\end{enumerate} + +这个框架可以用于除缓存状态之外的侧通道,描述通过分支预测器或 TLB 状态造 +成的数据泄露。在未来,可能有更多种类的构造数据通道的方法。 + +DAWG(Dynamically Allocated Way Guard)\supercite{dawg} 是利用保护域之 +间的强隔离防止数据提取的方法,它阻止了任何一对发送器/接收器共享相同的信 +道。这是一种用于缓存等组相联结构设计的的安全路划分机制。DAWG 为组相联的 +结构添加保护域信息,以提供强隔离。和 Intel CAT 不同,DAWG 不允许跨保护 +域发生缓存命中。 + +%\Todo: DAWG 的设计 在 zsim 模拟器中使用 SPEC CPU2006, PARSEC, GAPBS 进行模拟,相对于 Intel CAT,在不同的评测程序和划分方式下,大多数程序性能下降为 4\%\~7\%. @@ -507,6 +462,7 @@ CSF 由以下几个关键部件组成: 有所不同。 \begin{table} + \centering \begin{tabular}{cccccc} \hline fence & 作用位置 & 严格/宽松 & 不允许的指令 & 防御的攻击种类\tabularnewline @@ -520,6 +476,7 @@ CFENCE & 缓存控制器 & 宽松 & 无 & v1\tabularnewline \end{tabular} \caption{CSF 新定义的三种 fence} \label{tab:csffence} +\centering \end{table} @@ -547,6 +504,7 @@ dependence)的概念,类似于数据依赖和控制依赖,这种新的依 Spectre 攻击的安全依赖性来自两种情况,访存-访存推测和分支-访存推测。 \begin{table} + \centering \begin{tabular}{|c|c|c|} \hline Spectre 变体 & 指令 $i$ & 指令 $j$\tabularnewline @@ -563,6 +521,7 @@ SpectrePrime & 条件分支 & 访存\tabularnewline \end{tabular} \caption{Spectre 攻击中的安全依赖} \label{tab:secdep} +\centering \end{table} 在条件推测式执行的流水线中,在发射队列中引入了安全冒险检测,以识别具有 diff --git a/chap/chap4.tex b/chap/chap4.tex index 04ed1c6..16726d3 100644 --- a/chap/chap4.tex +++ b/chap/chap4.tex @@ -74,6 +74,7 @@ DIFT 可以作为 Spectre 攻击的检测手段之一。Spectre 的论文中指 \end{minted} \caption{Spectre 组件的汇编代码} \label{lst:spectre_v1_asm} +\centering \end{figure} 上述 Spectre v1 的组件代码可以产生图\ref{lst:spectre_v1_asm}所示的指令。 @@ -106,6 +107,7 @@ lea rdx, {[}rip + 0x2b425d{]} & rdx <- rip + 0x2b425d & T{[}rdx{]} <- T{[}rip{]} \end{tabular} \caption{分支中代码产生的 DIFT 行为} \label{tab:spectre_dift} +\centering \end{table} 以下描述这个检测方法的具体细节。 @@ -159,6 +161,7 @@ void victim(size_t x, uint8_t k) { \end{minted} \caption{泄露数据的指令和内存中的数据存在控制相关的情形} \label{lst:victim_v10} +\centering \end{figure} 这个例子读取的 \verb|array1[x]| 和攻击者猜测的值 \verb|k| 进行比较,如 @@ -213,7 +216,7 @@ DIFT 方案在 gem5 中的实现。 \subsection{gem5 的乱序执行处理器} -\Todo: 做一个 gem5 流水线的示意图? +%\Todo: 做一个 gem5 流水线的示意图? gem5 的乱序执行处理器实现在 FullO3CPU 类中,它又用类实现类处理器的以下 流水级:取指(Fetch)、译码(Decode)、重命名(Rename)、发射/执行/回 @@ -352,6 +355,7 @@ FenceDelay & 指令被阻止执行,直到确认安全,在 InvisiSpec 之外 \end{tabular} \caption{新增的指令状态} \label{tab:inst_status} +\centering \end{table} 在每一周期,处理器扫描 ROB 中的每条指令,更新流水线中每条指令的 diff --git a/chap/chap5.tex b/chap/chap5.tex index bbda05d..be1ff57 100644 --- a/chap/chap5.tex +++ b/chap/chap5.tex @@ -11,6 +11,7 @@ InvisiSpec的方案执行,Fence+DIFT 和 IS+DIFT 则是使用动态信息流 表\ref{tab:gem5_conf}中列出了所有处理器配置的基本配置。 \begin{table} +\centering \caption{模拟的处理器的基本配置} \label{tab:gem5_conf} \begin{tabular}{|c|c|} @@ -176,7 +177,7 @@ Baseline 的运行时间。 案中 SpecLoad 请求的数量。 \begin{table} -\center +\centering \begin{tabular}{|c|c|c|c|} \hline 基准测试 & IS & IS+DIFT & SpecLoad 减少量\tabularnewline diff --git a/chap/chap6.tex b/chap/chap6.tex index be70854..cedcc8b 100644 --- a/chap/chap6.tex +++ b/chap/chap6.tex @@ -2,4 +2,38 @@ \section{本文工作总结} +计算机系统的安全越来越受到重视,基于软件的微架构侧信道攻击是对计算机系 +统安全的威胁之一,它不依赖于软件漏洞,难以被检测与防 +范。Meltdown 和Spectre 利用暂态指令形成的侧信道,展示了一种新的攻击方式。 +其中 Spectre利用了现代微处理器的推测式执行机制,而推测式执行是提高指令 +级并行性的重要手段,如何在防御 Spectre 的同时保持推测式执行带来的性能提 +升,是一个值得研究的问题。只通过软件的修改难以防御多种类型的 Spectre +攻击,因此需要通过改进微架构的设计,以解决 Spectre 攻击的问题。本文主 +要工作如下: +\begin{enumerate} +\item 首先调研已有的 Meltdown 和 Spectre 的攻击变体,包括 + 对 Meltdown 和 Spectre 的分类,各类攻击的原理,和它们的利用方式。 +\item 调研已有的 Meltdown 和 Spectre 的防御方法,包括软件防御、硬件防御 + 和软硬件结合的防御方法。其中最重要的是硬件防御方法,主要介 + 绍InvisiSpec 和 Conditional Speculation 两种,并分析了各种防御方案设 + 计特点,可防御的攻击种类,和它们的优缺点。 +\item 设计一种防御防御 Spectre 攻击的微架构,并在 gem5 中进行实现。这种 + 防御方案利用动态信息流追踪技术检测指令流中可能被用于 Spectre 攻击泄露 + 数据的装载指令,并采用 InvisiSpec 方案执行检测为不安全的装载指令。 +\item 最后对实现的 Spectre 防御方案进行评估,首先构造了一个能用于 gem5 + 的概念性验证程序,用于测试所实现的微架构的安全性。为了评估这种微架构 + 的性能开销,使用 SPEC CPU2006 评测了这种微架构的性能,和原有的不安全 + 的处理器相比,性能开销为 8.5\%,优于只用 InvisiSpec 执行推测式执行的 + 指令或阻止检测出的不安全指令的方法。 +\end{enumerate} + \section{未来工作展望} + +本文实现了一种 Spectre 攻击中泄露数据指令的检测技术,并结合已有 +的InvisiSpec 方案,实现了一种可防御 Spectre 攻击的微架构。当前的工作只 +考虑了利用控制流推测式执行的 Spectre 攻击,后续的工作可以加入 +对 Spectre-STL 攻击的防御,再评估此模型的性能开销。 + +此外,本工作只在模拟器中进行模拟,而未在真实的处理器中实现。后续的工作 +可以在 RISC-V BOOM 等真实处理器上实现这种微架构设计,以评估这种设计在 +实现中的可行性,和对真实处理器性能、功耗的影响。 diff --git a/thesis.tex b/thesis.tex index 407fb93..13db638 100644 --- a/thesis.tex +++ b/thesis.tex @@ -28,6 +28,7 @@ \usepackage{multirow} \usepackage{tabulary} +\setminted{frame=single,linenos=true} % 对于 linespread 值的计算过程有兴趣的同学可以参考 pkuthss.cls。 \renewcommand*{\bibfont}{\zihao{5}\linespread{1.27}\selectfont} % 按学校要求设定参考文献列表的段间距。 @@ -36,7 +37,9 @@ % 设定文档的基本信息。 \pkuthssinfo{ cthesisname = {硕士研究生学位论文}, ethesisname = {Master Thesis}, - ctitle = {针对推测式执行侧信道攻击的微处理器的优化设计}, etitle = {}, + ctitle = {针对推测式执行侧信道攻击的微处理器的优化设计}, + etitle = {A Microprocessor Design to Defend against + Speculative Execution Side-channel Attacks}, cauthor = {蔡思培}, eauthor = {Cai Sipei}, studentid = {1601214426}, @@ -44,7 +47,7 @@ school = {信息科学技术学院}, cmajor = {计算机系统结构}, emajor = {Computer Architecture}, direction = {指令级并行处理和线程级并行处理}, - cmentor = {程旭教授}, ementor = {Prof.\ Cheng Xu}, + cmentor = {程旭 教授}, ementor = {Prof.\ Cheng Xu}, ckeywords = {侧信道攻击,推测式执行,Spectre攻击}, ekeywords = {Side-channel Attack, Speculative Execution, Spectre Attack} } % 载入参考文献数据库(注意不要省略“.bib”)。 -- cgit v1.2.3