summaryrefslogtreecommitdiff
path: root/chap/chap4.tex
diff options
context:
space:
mode:
Diffstat (limited to 'chap/chap4.tex')
-rw-r--r--chap/chap4.tex71
1 files changed, 65 insertions, 6 deletions
diff --git a/chap/chap4.tex b/chap/chap4.tex
index 406655a..d6df685 100644
--- a/chap/chap4.tex
+++ b/chap/chap4.tex
@@ -4,6 +4,11 @@
踪的方法,检测 Spectre 组件指令流中可能泄露秘密数据的访存指令,并使用
InvisiSpec 的方法执行这些访存指令。
+%这个设计有如下特点:
+%\begin{itemize}
+%\item 它不需要任何软件修改
+%\item
+
\section{威胁模型}
本文对攻击者做如下假设:攻击者知道受害者程序的代码、进程中的地址分布信
@@ -45,11 +50,65 @@ CSF\supercite{context-sensitive-fencing} 中的译码级信息流追踪框架 DI
则这条指令为不安全的 load
\end{itemize}
-\section{InvisiSpec的详细设计}
+以上 DIFT 实现只考虑了泄露的 load 指令和读取秘密数据的 load 指令存在数
+据相关,此外还要考虑控制相关的情形,如以下例子\supercite{msvc}:
+
+\begin{minted}{C}
+void victim(size_t x, uint8_t k) {
+ if (x < array1_size) {
+ if (array1[x] == k)
+ temp &= array2[0];
+ }
+}
+\end{minted}
+
+这个例子读取的 \verb|array1[x]| 和攻击者猜测的值 \verb|k| 进行比较,如
+果两个值相等,则会访问 \verb|array2[0]|,即访问 \verb|array2[0]| 的指
+令和访问 \verb|array1[x]| 的指令存在控制相关,对 \verb|array2[0]| 的访
+问可能泄露 \verb|array1[x]| 的数据。因此,如果一条控制指令依赖于被标记
+的寄存器,则对它进行标记,其后的所有 load 指令都认为不安全。
+
+\section{可抵抗 Spectre 攻击的微架构的实现}
+
+以下介绍这种可抵抗 Spectre 攻击的微架构在 gem5 模拟器中的实现。首先分
+析 gem5 中乱序执行处理器的实现,然后分别介绍 InvisiSpec 和本文使用的
+DIFT 方案在 gem5 中的实现。
+
+\subsection{gem5 的乱序执行处理器}
+
+gem5 的乱序执行处理器实现在 FullO3CPU 类中,它又用类实现类处理器的以下
+流水级:取指(Fetch)、译码(Decode)、重命名(Rename)、发射/执行/回
+写(IEW)、提交(Commit)。
+
+gem5 的取指和译码阶段由 DefaultFetch 和 DefaultDecode 两个类实现。在
+DefaultFetch 中,取指部件从指令缓存中取出处理器 PC 位置的指令,并用指
+令系统对应的译码器进行译码,再取出指令对应的微指令,将微指令传至译码阶
+段,译码阶段再将其传到重命名阶段。取指阶段取出的指令在 DynInst 类的实
+例中保存。
+
+gem5 的重命名阶段由 DefaultRename 类实现,它对指令的源寄存器和目的寄存
+器进行重命名。重命名后,指令的 DynInst 实例中的源寄存器和目的寄存器均
+保存它们对应的物理寄存器,同时还保存目的寄存器原来对应的物理寄存器用于
+恢复。
+
+gem5 的发射、执行和回写三个阶段由一个类 DefaultIEW 实现,它模拟了处理
+器将指令发射至功能单元和处理器执行指令的过程。gem5 中用一个专门的语言
+定义了每个指令系统的指令的语义,为每个指令和微指令生成一个 StaticInst
+类,里面定义了指令的执行方式。对于存储访问类指令,gem5 用 LSQ 类定义处
+理器中的装载和存储指令队列,这些指令在执行时添加至队列中,进行存储访问
+操作。
+
+gem5 的提交阶段由 DefaultCommit 类实现,它提交 ROB 队列头部的指令,更
+新 ROB 的状态。
+
+\subsection{InvisiSpec 的实现}
+
+% 本文使用 InvisiSpec 执行检测为不安全的 load 指令。相对于阻止该 load 指
+% 令的执行,使用 InvisiSpec 执行该指令,可以使依赖于这个指令的指令可以继
+% 续执行,减少性能损失。以下分析 InvisiSpec 的详细设计,在下一节中分析将
+% xSpectre 检测技术和 InvisiSpec 结合的方法。
-本文使用 InvisiSpec 执行检测为不安全的 load 指令。相对于阻止该 load 指
-令的执行,使用 InvisiSpec 执行该指令,可以使依赖于这个指令的指令可以继
-续执行,减少性能损失。以下分析 InvisiSpec 的详细设计,在下一节中分析将
-Spectre 检测技术和 InvisiSpec 结合的方法。
+% InvisiSpec 使用推测式执行缓冲区保存推测式执行中 load 指令得到的数据,
+% 这部分代码在。
-\section{可抵抗Spectre攻击的微架构的实现}
+\subsection{动态信息流追踪的实现}