这篇文章介绍我们课题组发表在ASPDAC2022上的工作,主要针对当前热门的Spectre攻击进行防御。该工作通过引入物理不可克隆函数(PUF)设计了一个轻量级的安全分支预测器(称为LS-BP),为同地址空间和跨地址空间的不同分支表项提供轻量级的硬件隔离,从而使攻击者不能创建分支冲突来毒化受害者分支,达到缓解Spectre攻击的目的。
在介绍我们的防御思路之前,需要先回顾一下Spectre的攻击过程。图1是一个Spectre攻击的代码片段,攻击者通过操纵x的输入来窃取受害者的秘密。具体来说,攻击包括三个阶段:
-
毒化阶段:攻击者执行多次目标分支的影子分支或同余分支,将模式历史表PHT(记录了分支的跳转历史)的状态误训练为强采取,如图2a;
-
执行阶段:由于PHT在前一阶段被训练为强采取,受害者将执行该分支即使x的值大于T_size,因此,攻击者可以恶意构造x的值来指向一个秘密,将秘密值作为Probe数组的索引标记在缓存中,如图2b;
-
测量阶段:攻击者利用缓存侧信道攻击,例如Flush+Reload测量重载Probe每一项的时间,加载时间短的项对应的索引即为秘密值,如图2c。
由上面的介绍可知,攻击者要实现Spectre攻击需要两个必不可少的过程,分支误训练和侧信道攻击。有两个因素导致攻击者可以对受害者分支轻易的训练和感知,如图3所示:
我们的防御从防止分支毒化的角度设计了一个安全分支预测器(LS-BP)。LS-BP的微架构如图4所示。
具体来说,完整的分支地址位和进程标识PID被异或作为激励输入PUF,然后PUF的响应被用作一个新的分支索引。
接下来,CPU根据新的索引找到相应的分支条目,并将该分支条目的标记(Tag)位与源分支地址进行比较。如果匹配,CPU根据方向预测或目标预测继续执行。否则,无法执行分支预测优化,CPU将等待流水线执行分支指令。
最后,CPU将源分支地址和跳转方向或目标地址更新到分支预测器(BP)中。
基于LS-BP的安全分支预测器可以在同地址空间和跨地址空间中缓解Spectre攻击变体,包括Spectre-BTB和Spectre-PHT,如图5所示。
跨地址空间误训练。在这种情况下,为了错误训练受害分支,攻击者需要搜索受害分支的影子分支(相同位置)或映射到相同BP条目(不同位置)的同余分支。然而,在LS-BP中,由于上下文切换是在填充阶段和探测阶段之间进行的,在添加PID后,前一阶段的进程分支预测状态在后一阶段中不可用。因此,攻击者不能误训练和感知受害者的分支。
同地址空间误训练。为了在同一地址空间中误训练受害者分支,攻击者只能查找受害分支的同余分支。然而,LS-BP中不再使用部分虚拟地址位的寻址方案,而是使用全部虚拟地址位进行分支寻址。在这种情况下,没有与受害分支同余的分支,因为所有分支都位于不同的虚拟地址。此外,Tag部分将是不同的,间谍进程永远无法在BP中放置与受害分支冲突的数据,从而有效缓解同进程分支误训练。
首先,与传统的映射方案不同,每一个PUF都有自己特有的映射关系,即使攻击者攻破了某一设备的分支映射关系,也无法直接将其用于其他设备。因此,PUF的不可克隆特性增强了我们设计的安全性。
其次,PUF是一个单向加密函数,对PUF输入不同激励,会输出一个唯一且不可预测的响应。即PUF的激励不同,相应的输出响应不可预测,于是攻击者难以创建受害者分支冲突,从而无法毒化预测器。
最后,PUF的响应实时生成,无需存储密钥,这使得我们的方案具有更高的安全性来抵抗基于内存的攻击。
我们在一个gem5模拟器上评估了LS-BP的性能开销,在4种不同的分支预测器上测试发现整体性能开销不超过3%,如图6所示。
虽然分支预测器极大地提高了处理器的IPC,但也带来了严重的安全问题,比如Spectre攻击。
我们设计了一种轻量级的安全分支预测器(LS-BP),为同地址空间和跨地址空间的分支提供安全隔离。所提出的LS-BP可以有效地缓解基于BTB和PHT的Spectre攻击。
在四个分支预测器上的实验结果表明,LS-BP的性能开销小于3%。我们相信这种安全分支预测器的设计将成为未来处理器发展中不可或缺的一部分。
https://mp.weixin.qq.com/s/yXmOi7epr_7gEKObq5b5Sg
原文始发于微信公众号(山石网科安全技术研究院):针对Spectre攻击的轻量级安全分支预测器设计