APP下载

基于高速缓存的侧信道攻击方法研究

2021-03-07李志峰高玉琢

网络安全技术与应用 2021年9期
关键词:共享内存攻击者受害者

◆李志峰 高玉琢

基于高速缓存的侧信道攻击方法研究

◆李志峰 高玉琢

(宁夏大学信息工程学院 宁夏 750000)

基于高速缓存的侧信道攻击由于其高隐蔽性、高传输性、甚至无须物理接触等特点打破了设备的隔离保护机制,对当今的信息安全产生了重大的威胁,开展侧信道攻击的研究具有重要的国家和社会意义。本文进行了基于高速缓存的侧信道攻击的研究。该攻击所用到的信息包括cache访问轨迹、整体加密时间或者cache访问模式。根据攻击者对目标系统的攻击手段和拥有的权限能力可以将攻击归为三大类:轨迹驱动攻击、时间驱动攻击和访问驱动攻击。本文首先研究cache信息的泄露原理及三大类攻击方法,并指出该类攻击方法的优势,最后对cache侧信道攻击的通用架构及具体的攻击步骤进行详细研究。

高速缓存;侧信道攻击;漏洞;信息泄露

在硬件设备实际应用中,会泄漏出能量、电磁等多种类型的物理信息,这些信息被称为侧信息。侧信息在密码计算过程中是无法避免总会产生的,攻击者通过直接或间接的方式获取密码算法运算过程中的中间值信息,对算法进行攻击,进而恢复出算法密钥,这一类攻击方法统称为侧信道攻击技术。侧信道攻击对信息安全有着重大的安全威胁,对于侧信道攻击的研究具有重要的国家和社会意义。基于高速缓存(Cache)的侧信道攻击方法[1]是在2002年第一次提出的,其利用了密码运算过程中对cache资源访问时泄露的信息来对密码算法实现进行攻击从而获得算法的密钥[2-4]。Cache是CPU内部集成的高速缓存存储器件,CPU通过使用Cache缓存数据来对访问内存进行加速。当CPU读取数据时,访问Cache的速度与访问内存的速度相差约两个数量级[3],从而造成访问数据时由于数据所在位置不同(Cache命中与否)出现显著的时间差异。攻击者通过观察密码系统运行时Cache数据访问时间、密码运算执行时间的差异,分析获取Cache访问状态与密钥数据的关系,进而获取部分或全部密钥信息,是一种非常有效的攻击方法。相比于其他类型侧信道攻击,Cache侧信道攻击无须专用硬件设备,攻击者甚至无须物理接触目标对象,仅通过测量密码运算执行时间或在目标对象上执行攻击程序以获取Cache访问模式,即可获取全部或部分密钥信息,因此Cache侧信道要比其他侧信道的威胁更大,危害更严重。Cache侧信道攻击技术发展至今,已有多种针对不同环境和场景的攻击方法,可以对不同运行环境中的不同密码算法发起攻击。本文将针对当前主流的Cache侧信道攻击方法进行研究,并对攻击的思路和方法进行探究,抽象出Cache侧信道攻击通用的框架模型。

1 Cache信息泄露原理

Cache是位于CPU与主存之间的静态存储器,用以解决CPU与主存之间读取速度不匹配的问题[5]。具有高速存储性质的Cache造价昂贵,因此,现代计算机的Cache大多采用多层次结构,通常为三层。其特点就是越靠近CPU的模块,存储速度越快。当CPU读取数据时,首先查看Cache中是否存在所需数据。如果存在,则直接从Cache中读取数据,即Cache 命中,此时读取速度较快;如果不存在,则需要从内存中读取数据并将数据加载到Cache中,即Cache失效,此时读取速度较慢。Cache和内存在存取速度上存在较大差异,内存的存取速度远小于Cache的存取速度,两者相差约两个数量级,故CPU 访问内存所需的时间远大于访问Cache所需的时间。根据该时间差异,可以判断出数据是否被访问过,如果访问过,则会在Cache 中留下痕迹。

Cache侧信道攻击可以获取Cache信息从而实现攻击的另一个重要原理是共享内存。为防止内存中出现冗余数据,操作系统使用共享内存为不同的程序进程提供共享数据。共享数据的内容包括二进制文件或者程序段,每个程序都能访问共享内存,如果程序对共享数据进行修改,原有的共享内容将继续在各进程中进行共享。因为很多程序拥有共性,比如输入、显示以及一些程序代码。通过以上的方法和过程,能够解决内存数据冗余的问题,同时降低Cache竞争并提高运行速度,但这种共享内存使得Cache计时攻击成为可能。操作系统通过将同一个物理地址空间映射到不同程序的虚拟地址空间,以实现内存共享,其中,不同程序对共享数据的打开与读取操作互不影响。利用间谍程序将受害程序的一段共享二进制映射到内存中,当受害程序运行时,则会直接从物理内存中获取数据,且访问的数据将会停留在Cache中。因为这段共享二进制文件的物理地址对间谍程序透明,间谍程序遍历所有固定地址范围,通过访问数据时的Cache 命中与失效差异,以判断受害程序访问的数据,从而实现对Cache信息获取。

2 Cache侧信道攻击

自2002年Page[1]提出了基于高速缓存的侧信道攻击方法以来,研究者们分析Cache访问时所能利用到的不同信息:Cache访问轨迹、整体加密时间或者Cache访问模式,提出了各种各样的攻击方法,这些方法根据攻击者对目标系统的攻击手段和拥有的权限能力可以分为三大类,分别是:轨迹驱动(trace-driven)的攻击、时间驱动(time-driven)的攻击和访问驱动(access-driven)的攻击。

2.1 Cache侧信道攻击方法

(1)轨迹驱动(trace-driven)攻击。攻击者有能力接触到目标物理机器硬件,通过在密码运算时对Cache和内存的能量、电磁辐射等变化进行物理监听,分析每次密码运算时查找表访问中Cache命中(即查找表在Cache中)与否,对多组不同明文进行监测,通过分析Cache命中与否的序列,获取密钥信息。轨迹驱动Cache侧信道攻击最早由Page[1]提出,通过对DES算法的查找表进行监控,成功降低了DES密钥查找空间。2005年,Bertoni等人成功获取了AES第一轮的Cache命中序列,分析序列得到48bit的AES密钥。2006年,Bonneau将攻击扩展到AES最后一轮,成功获取AES完整密钥。Gallias等人在2010年对轨迹驱动Cache攻击进行了改进,对AES第一轮攻击即可获取98bit的密钥。

(2)时间驱动(time-driven)攻击。攻击者仅能测量密码运算的整体时间,通过统计由Cache命中和未命中所造成的密码运算时间差异,获取密钥信息。对于不同明文输入,由于Cache命中数不同会导致计算时间有明显差异,攻击者通过测量密码运算整体执行时间,统计分析不同明文对应的加密时间可获取密钥信息。时间驱动Cache攻击主要分为两类:内部碰撞攻击[6]和Bernstein攻击[7]。内部碰撞攻击利用同一个Cache line中查找表条目的访问会产生内部碰撞,内部碰撞的发生导致更多的Cache命中,使得执行时间更短,攻击者通过控制输入的明文信息,根据执行时间即可推断出密钥部分比特信息。Bernstein攻击通过在与目标机器完全相同的机器上运行相同的密码算法实现,针对查找表的每个输入,在学习机器上获取加密时间的极值点对应的输入值,以确定目标机器上的密钥信息。

(3)访问驱动(access-driven)攻击。访问驱动攻击要求攻击者能够在目标机器中运行程序以控制Cache并获取Cache访问的精确时间,进而能够获取相应的Cache是否被访问,并分析获取密钥信息。访问驱动攻击的攻击者在目标机器中运行的间谍进程和密码运算进程共享部分Cache资源,间谍进程监控访问自身数据所需的时间,根据访问时间长短判断相应数据是否在Cache中,从而推断出密码运算所访问的Cache line。通过连续的监控,攻击者得到密码运算的Cache访问模式序列,并结合算法特性分析得到密钥的信息。典型的访问驱动攻击包括Prime+Probe和Flush+Reload等[8-10]。

2.2 相比其他攻击方法的优势

相比于其他类型的攻击,基于Cache 的侧信道攻击拥有以下优势:

(1)相比于传统的密码分析,基于Cache 的侧信道攻击在算法实现运行时Cache的使用进行监控,避免了复杂的理论分析,且能够有效获取密码运算关键步骤的信息,进而对密钥信息进行恢复。例如对128位的AES算法,使用Cache侧信道攻击只需要6-7个加密周期就能成功恢复出其密钥。

(2)相比于其他类型的侧信道攻击,Cache侧信道攻击不需要额外的设备对目标系统进行监控。比如能量攻击需要使用设备对目标系统的能量功耗进行测量,电磁泄漏侧信道攻击需要使用特定设备对目标系统散发的电磁信息进行测量。而Cache本身是计算机结构的一部分,攻击者可以直接通过指令获取Cache的访问时间,并不需要特定的装置来测量。

(3)Cache侧信道攻击可以实施跨平台、跨CPU、跨虚拟机的远程攻击,并且攻击程序利用的是对Cache的正常访问机制,攻击过程就是正常的缓存访问过程,在系统中并不会产生异常信息,因此Cache侧信道攻击具有很高的隐蔽性,不易被检测。

3 攻击通用框架

3.1 攻击模型

基于缓存的侧信道攻击模型讨论需攻击者具备以下的条件,而在现代计算机系统中这些条件基本都能够满足:

(1)攻击者要与受害者存在共享的硬件资源,包括缓存、总线等等;

(2)攻击者可以随意访问受害者空间中的内存;

(3)攻击者可以测量访问内存的时间。

一般而言,基于缓存的侧信道攻击可以根据攻击目标及受害者分为针对主机的攻击和针对虚拟机的攻击;根据攻击对象可以分为针对加密算法的攻击、针对操作系统的攻击等。本文后续讨论按照攻击者在实施攻击时对缓存的利用方式区别,把攻击分为基于冲突的缓存侧信道攻击和基于复用的缓存侧信道攻击。基于冲突的缓存侧信道攻击是指,攻击者与受害者不存在共享内存,或有可能存在共享内存,但是“漏洞”不存在于共享内存中,攻击者只能通过对自己的地址空间中的内容访问,影响正常受害者进程中对缓存的使用,从而推断出受害者对某物理地址的访问模式。其中,这里提到的“漏洞”是指可执行程序的某一部分区域,它可以位于代码段,也可以位于数据段,这段代码或数据本身逻辑和设计没有什么问题,但是这部分内存区域与受害者敏感信息相关,攻击者可以利用这段代码的执行情况或数据的访问情况判断出受害者信息,从而造成受害者信息泄露[11-12]。基于复用的缓存侧信道攻击,指攻击者与受害者可以共享内存,例如共享的库、文件等等,且攻击者利用的“漏洞”存在于共享内存中,攻击者可以获取到该区域的内存访问模式。

3.2 攻击步骤

根据攻击者实施基于缓存侧信道攻击所需要采取的具体操作,攻击过程可以分为以下几个步骤:

(1)确定“漏洞”

攻击者在攻击过程中,首先要确定出“漏洞”源,才能对“漏洞”确定的地址进行监视从而获取信息。漏洞主要包括基于指令执行的漏洞和基于数据访问的漏洞。基于指令执行的漏洞是指受害者程序在执行过程中,存在与受害者信息相关的指令控制流,例如转移条件中的分支跳转指令。通过对这些指令的监控,攻击者可以分析出受害者的指令执行过程,之后对获得的信息进行推断;基于数据访问的漏洞是指程序访问的数据与受害者信息相关,例如查找某个地址的数据内容时把受害者信息作为索引。攻击者只需通过观察内存的访问情况,便可以获取出受害者信息。

(2)确定“冲突域”

根据攻击者和受害者共享的层面不同,攻击可以分为跨虚拟机攻击、跨进程攻击、跨处理器核攻击。与其他的攻击方式相比,跨虚拟机的攻击首先要进行“虚拟机同驻”的判断,即判断攻击者和受害者所在的虚拟机之间的关系是处于同一个处理器核,还是在同一个处理器中不同的处理器核上;或者不同的虚拟机运行于不同的处理器上。通过“虚拟机同驻”判断,可以分析出攻击者与受害者之间的共享结构,从而就可以把问题转化为跨进程攻击或者跨处理器核攻击。跨进程攻击是指攻击者和受害者运行于同一个处理器核之上,可以共享的资源包括缓存、内存、内存控制器等资源;跨处理器核攻击是指当攻击者和受害者运行于不同的处理器核之上时,可以共享的资源包括最后一级缓存(LLC,Last Level Cache)、内存等。当攻击者所要利用的“漏洞”存在于共享内存中时,攻击者便可以通过对该“漏洞”对应地址进行直接访问,影响“漏洞”对应内容在缓存中的状态;而假如“漏洞”不存在于共享内存中时,攻击者则需要首先分析出一组“虚拟地址集合”,攻击者通过这个集合影响“漏洞”对应的代码或数据在缓存中的状态,这个虚拟地址集合被称为“冲突域”。具体来讲,冲突域是一组虚拟地址的集合,攻击者可以访问这个集合中的地址。一般来说,通过冲突域的访问可以得到目标地址对应的状态变化,且攻击者需根据缓存的关联程度选择合适大小的冲突域以得到更为精准的受害者信息。

(3)获取信息

攻击者通过“冲突域”对“漏洞”的位置进行监视,从而获得相关区域的装填变化信息,即攻击者窃取的信息,这些信息包括以下几种类别:

1)访问执行时间的差异信息。数据或代码位于不同的存储器层次结构时,访问时间会存在较大的差异。通常访问内存的时间和访问高速缓存的时间相差约两个数量级,通过对执行时间的测量,可以获取到受害者的访存情况信息。

2)引发中断的事件信息。当检测到缓存被驱逐的时候,会引起事务中断,攻击者可以捕捉这些事件,从而对受害者行为进行分析,获取受害者的信息。

3)硬件资源使用情况信息。程序在执行过程中,有可能对硬件单元独占或者锁定,从而导致别的程序不能使用。攻击者可以通过对这些硬件资源的使用情况进行检测,从而分析出受害者正在执行的部分操作。

(3)还原信息

攻击者获取到受害者相关状态信息的变化后,需要根据已有的先验知识同时结合获得的信息进行受害者信息的还原。在还原前需要对获取到的信息进行一些处理,包括噪声消除、控制流信息还原、内存访问情况还原等。通过这些操作及分析,攻击者便可以获取到密钥、受害者行为,内核空间的分布等信息。

4 结束语

基于缓存的侧信道攻击利用Cache相关活动泄露的信息对受害者的信息进行窃取,相比于其他类型侧信道攻击,Cache侧信道攻击无须专用硬件设备,攻击者甚至无须物理接触目标对象,即可获取部分或者全部的受害者信息,因此Cache侧信道要比其他侧信道的威胁更大,危害更严重,对当今的信息安全产生了重大的威胁。本文从Cache信息的泄露原理以及目前主流的Cache侧信道攻击方法及原理进行研究,并针对主流的攻击方法进行分析和与传统的攻击方法进行优势对比,最后总结出Cache侧信道攻击的通用架构,包括攻击模型和具体的攻击步骤。该研究对针对基于缓存的侧信道攻击的防御方法的研究具有重要的意义。

[1]Dan P.Theoretical Use of Cache Memory as a Cryptanalytic Side-Channel. cryptology eprint archive,2002.

[2]Trace-Driven Cache Attacks on AES (Short Paper)[C]// Information and Communications Security,8th International Conference,ICICS 2006,Raleigh,NC,USA,December 4-7, 2006,Proceedings. Springer,Berlin,Heidelberg,2006.

[3]Bonneau J,Mironov I . Cache-Collision Timing Attacks Against AES[J].International Workshop on Cryptographic Hardware and Embedded Systems,2006.

[4]Yarom Y,Falkner K E . FLUSH+RELOAD:a high resolution,low noise,L3 Cache side-channel attack.2014.

[5]程志炜,陈财森,邱雪欢. 基于Flush+Reload的DES算法Cache计时攻击[J]. 计算机工程,2018,495(12):169-173.

[6]Bonneau J,Mironov I . Cache-Collision Timing Attacks Against AES[J]. International Workshop on Cryptographic Hardware and Embedded Systems,2006.

[7]Bernstein D J. Cache-timing attacks on AES[J]. 2005.

[8]Yarom Y,Falkner K E . FLUSH+RELOAD:a high resolution,low noise,L3 Cache side-channel attack. 2014.

[9]Liu F,Yarom Y,Ge Q,et al. Last-Level Cache Side-Channel Attacks are Practical. IEEE Computer Society,2015.

[10]Tromer E,Osvik D A,Shamir A . Efficient Cache Attacks on AES, and Countermeasures[J]. Journal of Cryptology,2010.

[11]王崇,魏帅,张帆,宋克.缓存侧信道防御研究综述[J].计算机研究与发展,2021,58(04):794-810.

[12]苗新亮,蒋烈辉,常瑞.访问驱动下的Cache侧信道攻击研究综述[J].计算机研究与发展,2020,57(04):824-835.

猜你喜欢

共享内存攻击者受害者
机动能力受限的目标-攻击-防御定性微分对策
通过QT实现进程间的通信
正面迎接批判
基于Linux内核的文件服务器模型的研究与构建
基于PCI总线的多处理器协同机制研究
有限次重复博弈下的网络攻击行为研究
受害者敏感性与报复、宽恕的关系:沉思的中介作用
儿童雾霾的长期受害者
一种高效RTAI 共享内存管理层的研究与实现*
关注恐怖主义受害者