0x00 前言
这篇文章是发表在NDSS2020上,有关于微架构侧信道攻击的一篇文章。一作来自于英特尔公司,先前在硬件和底层上有比较多的研究。文章标题中的几个关键词,也在文章中有一定的体现,比如自动化、黑盒,合成等,这些都与一些现有的工作有比较大的差异。
0x01 背景知识
CPU组件存在大量的侧信道攻击,但现有的每一种侧信道攻击方式,奇热几乎都基于白盒分析的方法。通常情况下,需要3步来完成:
· 首先需要能够识别出这一特定的CPU组件。
· 然后需要在特定的微架构上对其做逆向分析。
· 最后通过逆向分析得到的内容,人工构造指令序列,用以侧信道泄露信息。
但这些方法通常都存在一些弊端,由于现有的侧信道攻击需要人工构造指令序列,而CPU会使用微架构组件来实现其指令集,并且这些微架构组件的底层细节不可见,因此需要逆向工程进行分析。随着CPU的更新换代,这些组件的数量,大小,复杂性都在增加,同时这些组件的属性可以在CPU版本之间发生变化,因此会对侧信道研究人员带来新的且冗长的逆向工作。
同时,除去对于逆向工程的复杂性,当想要对目标程序进行侧信道攻击时,还需要对该软件有比较好的了解,清楚感兴趣的内容,其代码执行路径在何处。这一切都对攻击者有比较高的要求。除此之外,由于这些方法基于已有信息,那么对于那些未知的共享资源或者信息,则无法进行攻击。
在此基础上,作者提出了黑盒分析的思路,他们将CPU组件当做黑盒,无需进行逆向分析。并且可以自动的找到目标软件可能感兴趣的内容的代码执行路径。文章的核心思路利用了共享资源被争用和不被争用时,会存在可测量的性能差异这一现象进行侧信道分析。
同时本篇文章的工作可以自动的优化出在侧信道获取信息时,性能表现最好的指令序列,无需人工参与构造指令序列,并可以利用神经网络从侧信道攻击的结果中恢复密钥。
0x02 工具设计
作者以从受害者进程或者虚拟机中泄露诸如密钥等敏感数据为目的,提出了这样一种威胁模型:
· 攻击者可以在受害者的机器上执行代码
· 攻击者和受害者位于同一CPU核心上执行代码
· 所有最先进的侧信道保护都已启用
· 目标软件存在侧信道攻击的威胁
由于作者提出的侧信道攻击的核心思路是利用共享资源在被争用和不被争用时,会存在可测量的性能差异。
对于2条可能存在资源争用的指令,作者将写指令称为A指令,读指令称为B指令,通过使用A指令来尝试引起B指令的延迟变化,用以判断是否存在资源争用的情况。
如下图,在writer指令执行时和不执行时,reader指令信号会存在明显的差异性。
这里作者尝试找出2条存在可观察的资源争用信号的指令,与以往工作中人工精心挑选指令不同,这里作者通过遍历X86_64指令集来寻找最合适用于侧信道攻击的指令。这里的指令集来自于uops.info的项目。
为了评估结果,作者建立了一个矩阵,用来反应指令B在指令A的影响下所出现的延迟相较于指令B在空指令下的延迟比例。如果延迟比大于1,那么说明指令A和B会存在资源争用的情况。
作者对指令列表中的指令进行了一次二层嵌套for循环,用以寻找所有指令两两之间延迟比大于1的情况,从而找到所有存在资源竞争的指令对。
为了将结果