summaryrefslogtreecommitdiff
path: root/chap/chap3.tex
diff options
context:
space:
mode:
Diffstat (limited to 'chap/chap3.tex')
-rw-r--r--chap/chap3.tex61
1 files changed, 54 insertions, 7 deletions
diff --git a/chap/chap3.tex b/chap/chap3.tex
index 3da0ff1..a755996 100644
--- a/chap/chap3.tex
+++ b/chap/chap3.tex
@@ -32,7 +32,7 @@ Intel 和 AMD 都提出了在分支指令后插入 lfence 指令阻止推测式
由于 lfence 性能开销大,LLVM提出推测式装载指令加固(Speculative
Load Hardening)\supercite{spec-load-hardening} 技术,它的做法是将可能
-为 Spectre 组件的代码转为图\ref{fig:SLH}中的代码:
+为 Spectre 组件的代码转为图\ref{fig:SLH}中的代码。
\begin{figure}[htbp]
\centering
@@ -70,7 +70,7 @@ retpoline\supercite{retpoline} 是 Google 提出的防御 Spectre-BTB 的方法
Webkit 在数组访问中使用索引掩码(index masking)\supercite{webkit} 方
法,它让数组下标和一个值进行与操作,去掉下标高位的1,将数组下标控制在
一定范围内,防止处理器在推测式执行中访问数组指定范围之外的数据。Linux
-构造了一个粒度更细的 array\_index\_nospec\supercite{linux-spec},它的
+构造了一个粒度更细的 array\_index\_nospec \supercite{linux-spec},它的
功能如图\ref{fig:array-index-nospec}:
\begin{figure}[htbp]
@@ -130,7 +130,7 @@ SafeSpec\supercite{safespec}提出了一种设计原则保护处理器免受推
\begin{figure}[htbp]
\centering
\includegraphics[width=0.8\textwidth]{safespec.eps}
- \caption{SafeSpec 总体设计\supercite{safespec}}
+ \caption{SafeSpec 总体设计}
\label{fig:safespec}
\end{figure}
@@ -165,8 +165,29 @@ SafeSpec 防止推测式执行的产生的值影响提交状态,从而阻止
%在执行过程中被取消,它的状态需要丢弃。因此,如果一个长延迟指令的结果返回,
%而没有匹配的事务,则丢弃这个结果。
-%\Todo: SafeSpec for caches and TLB
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+SafeSpec 原则可以用于在推测式执行中保护缓存和 TLB,方法是在处理器中加
+入以下影子结构:
+
+\begin{itemize}
+\item 数据缓存:在已有的 Spectre 攻击中都用到了数据缓存作为隐蔽信道。
+ 它的影子结构保存了推测式执行中获取的缓存行。在装载/存储队列中,将获
+ 得了数据的推测式执行的装载指令指向影子结构的对应项,在同一个分支下访
+ 问同一行缓存的指令可以使用影子结构中的内容。指令提交时,缓存行从影子
+ 结构移动至缓存。如果指令被丢弃,则释放影子结构对应的一项。在这种设计
+ 中,被丢弃的推测式执行的装载指令不但不会修改缓存中的内容,也不会改变
+ 缓存替换算法的状态。
+\item 指令缓存:构造一种利用指令缓存的 Spectre 攻击是可能的,因此指令
+ 缓存也需要保护,方法和数据缓存类似。
+\item TLB:TLB 也可以作为隐蔽信道使用,攻击者可以检查访问一个页的时间
+ 判断 TLB 是否命中。现代处理器进行地址翻译是个复杂的过程,在访问页表
+ 时,页表项也会带入数据缓存,这个过程也使用装载存储队列,因此数据缓存
+ 的保护足够保护这个过程。因此对 TLB 的保护只需要添加 TLB 本身的影子结
+ 构。
+\end{itemize}
+
+使用 MARSSx86 模拟上述 SafeSpec 模型,可以发现运行 SPEC2017 有平均 3\%
+的性能提升。性能提升的原因是影子结构增大了有效缓存的容量,避免了错误推
+测式执行路径污染缓存。
\subsubsection{InvisiSpec}
@@ -366,7 +387,14 @@ InvisiSpec 会增大存储系统中各个缓存之间,和缓存和主存之间
内执行的代码,用于访问秘密数据,和一个发送器,用于将秘密传递给攻击者。
这些部分构成了一个数据通道,它基于秘密信息调制这个信道。由攻击者控制,
并在受害者保护域之外的接收器,可以监听信道上的信号,并对其进行解码以确
-定该秘密。
+定该秘密。图\ref{fig:dawg-schema}描述了这种攻击模式。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.8\textwidth]{dawg-schema.eps}
+ \caption{不同安全域间通过隐蔽信道传送秘密数据}
+ \label{fig:dawg-schema}
+\end{figure}
经典的对 RSA 的攻击中,代码使用了一段依赖于秘密的执行序列,将私密信息通
过执行序列传送到了指令缓存状态中,这造成了一个攻击者可以推断秘密数据的
@@ -395,7 +423,26 @@ DAWG(Dynamically Allocated Way Guard)\supercite{dawg} 是利用保护域之
结构添加保护域信息,以提供强隔离。和 Intel CAT 不同,DAWG 不允许跨保护
域发生缓存命中。
-%\Todo: DAWG 的设计
+DAWG 的目标是阻止任何攻击者和受害者安全域之间的基于缓存的信道。实现方
+式是将所有缓存状态的修改隔离在一个保护域内,从而任何受害者域中的传送器
+均不能连接至攻击者域中的接收器,从而阻止了受害者到攻击者的数据泄露。
+
+\begin{figure}[htbp]
+ \centering
+ \includegraphics[width=0.8\textwidth]{dawg-cache.pdf}
+ \caption{DAWG 缓存设计\supercite{dawg}}
+ \label{fig:dawg-cache}
+\end{figure}
+
+组相联缓存包含多个路,每一路是一个直接映射缓存。DAWG 将这些路分组,分
+配到不同的保护域,将缓存请求所属保护域的缓存命中和行替换,限制在所分配
+的路之内。在此之上,缓存所带的元数据,如替换策略的状态,也要在保护域内
+定义,并安全地划分。
+
+图\ref{fig:dawg-cache}展示了 DAWG 缓存的结构。
+
+除了硬件修改之外,DAWG 还需要软件的支持,用于管理程序的保护域,和每个
+域对应的安全策略。
在 zsim 模拟器中使用 SPEC CPU2006, PARSEC, GAPBS 进行模拟,相对于
Intel CAT,在不同的评测程序和划分方式下,大多数程序性能下降为 4\%\~7\%.