From c79b4d4861bfc2a83769094d83da6440d5a4babd Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Fri, 26 Apr 2019 11:16:19 +0800 Subject: update --- chap/chap2.tex | 8 +++++++- chap/chap3.tex | 25 ++++++++++++++++++++++--- thesis.bib | 5 +++++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/chap/chap2.tex b/chap/chap2.tex index db31b04..7470ae6 100644 --- a/chap/chap2.tex +++ b/chap/chap2.tex @@ -45,7 +45,13 @@ Foreshadow-NG\supercite{foreshadowNG} 利用这种攻击方法,可以绕过操 \subsubsection{LazyFP} -\supercite{lazyfp} +由于浮点寄存器和内存交换数据进行操作有一定开销,大部分应用程序不做浮点 +运算,因此部分操作系统在进行上下文切换时不保存浮点寄存器。操作系统在恢 +复用户态程序的运行之前,对处理器设置禁用浮点寄存器,程序使用了浮点指令 +后,触发异常,操作系统才对浮点寄存器进行保存和恢复。 +LazyFP\supercite{lazyfp} 攻击利用这个异常,利用这个方法,攻击者可以读 +出一个处理器核此前运行的使用了浮点寄存器的程序中的浮点寄存器的值。 +\parencite{lazyfp} \subsection{Spectre型攻击} diff --git a/chap/chap3.tex b/chap/chap3.tex index 4d792a8..b0cd193 100644 --- a/chap/chap3.tex +++ b/chap/chap3.tex @@ -3,6 +3,10 @@ \chapter{Meltdown和Spectre攻击的防御方案分析} +Meltdown 和 Spectre 及其多种变体被发现后,研究者提出了多种减轻这些攻击 +的防御方法,它们需要对软件或硬件进行修改。也有研究者提出通过修改现有的 +指令系统,使得用这种指令系统的程序不受 Spectre 攻击的影响。 + \section{Meltdown型攻击的防御} Meltdown型攻击利用了瞬时指令可以读取体系结构层次上不可访问的数据,并且用此数据做计算。因此一种防御方式是使体系结构层次上不可访问的数据,在微架构层次上仍然不可访问。 @@ -11,12 +15,15 @@ KAISER\supercite{kaiser}是一种已经部署在 Linux 内核上的一种防御 Meltdown 攻击的方案。它的作用是在用户空间中去除内核空间的地址映射,使 得用户空间的执行的指令无法访问内核空间的存储区域。 -防御 Meltdown 型攻击的第二种方法是阻止异常的产生。 +防御 Meltdown 型攻击的第二种方法是阻止异常的产生。例如对于 LazyFP,最 +新的 Linux 内核在上下文切换时,对所有进程都会保存和恢复浮点寄存器,从 +而用户程序使用浮点寄存器都不会产生异常,从而消除这种攻击。 \section{Spectre型攻击的防御} Spectre 型攻击的防御方案可以分为三类:阻止推测式执行、防止瞬时指令访问 -秘密数据、切断隐蔽信道或降低隐蔽信道的精度。 +秘密数据、切断隐蔽信道或降低隐蔽信道的精度。研究者在软件和硬件方面都提 +出了防御方案。 \subsection{软件防御方案} @@ -30,18 +37,30 @@ retpoline\supercite{retpoline} 是 Google 提出的防御 Spectre-BTB 的方法 完成跳转,从而使用 RSB 而不是 BTB 来进行间接转移的转移预测。 % index masking +Linux 在使用了数组边界检查的条件代码块中使用 array\_index\_nospec 宏 +\supercite{linux-spec},使得在推测式执行的过程中,数组的索引始终在界内, +避免了推测式的访问秘密数据。 % poison value % site isolation +Google 为 Chrome 浏览器使用了站点隔离(site isolation)技术,使得浏览 +器用不同的进程访问不同的网站,从而攻击者无法通过用 Javascript 通过侧信 +道攻击获取另一站点相关的数据。 % timer reduction +降低计时器精度可以降低计时攻击所用侧信道的精度,具体方式包括降低 +Javascript 引擎的计时器的精度。 + \subsection{硬件防御方案} \subsubsection{SafeSpec} -\supercite{safespec} +\supercite{safespec} 提出了一种设计准则:使用临时结构保存推测式执行产 +生的状态,而不影响处理器的主要微架构状态。在实现中,SafeSpec 为缓存和 +TLB 添加了影子结构,推测式执行的指令对缓存和 TLB 修改临时写入至相应的 +影子结构,直到此前分支正确或指令提交时,再将影子结构的数据更新至主结构。 \subsubsection{InvisiSpec} diff --git a/thesis.bib b/thesis.bib index a6fe84c..a12f58e 100644 --- a/thesis.bib +++ b/thesis.bib @@ -166,6 +166,11 @@ url={https://releases.llvm.org/8.0.0/docs/SpeculativeLoadHardening.html} } +@online{linux-spec, + url={https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/speculation.txt}, + year={2018}, + } + % looks like there's some useful references @article{safespec, -- cgit v1.2.3