diff options
Diffstat (limited to 'chap/chap3.tex')
-rw-r--r-- | chap/chap3.tex | 133 |
1 files changed, 46 insertions, 87 deletions
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} 在条件推测式执行的流水线中,在发射队列中引入了安全冒险检测,以识别具有 |