一种可抵抗基于flush操作的Spectre攻击的方法及系统与流程

文档序号:22834181发布日期:2020-11-06 16:25阅读:234来源:国知局
一种可抵抗基于flush操作的Spectre攻击的方法及系统与流程

本发明属于信息安全软硬件协同设计技术领域,具体为基于arm-fpga嵌入式soc设计flushapi,提出一种可抵抗基于flush操作的spectre攻击的方法及系统,在保证了高安全性和低性能损失的情况下,可抵御基于flush操作的spectre攻击。



背景技术:

近年来,随着市场对高性能小型电子设备的需求越来越大,soc(systemonchip,片上系统)商品的功能也变得越来越强大、复杂并且个性化。其中,把arm和fpga(field-programmablegatearray,现场可编程门阵列)结合到一起的arm-fpga嵌入式soc,为系统架构师和arm开发工程师提供了一个弹性的平台以满足消费者的个性化需求。该类型soc以xilinx公司的zynq系列为代表,已经被广泛应用到无人机以及高性能嵌入式和物联网设备中。但是,与intel和amd的芯片产品一样,arm-fpga嵌入式soc同样面临着多种多样的安全威胁,以cache攻击为代表的微体系架构攻击就是其中不可忽略的一种类型。

自从kocher和kelsey等人提出cache行为可能构成安全威胁以来,研究人员提出了各种cache攻击方法,例如著名的flush+reload和flush+flush。在提出“flush+reload”攻击之后,flush操作已广泛用于cache攻击中,以降低噪声并提高分辨率。近年来,诸如flush+reload,flush+flush和基于flush的spectre(使用flush+reload进行spectre攻击)之类的缓存攻击都使用flush操作,这种类型的cache攻击可被称为“基于flush的缓存攻击”。特别是于2018年提出的spectre攻击(见p.kocher,j.horn,a.fogh,d.genkin,d.gruss,w.haas,m.hamburg,m.lipp,s.mangard,t.prescher,m.schwarz,y.yarom.spectreattacks:exploitingspeculativeexecution.in40thieeesymposiumonsecurityandprivacy,2019),它把cache攻击技术和分支预测技术结合在一起,大大扩展了cache攻击的数据窃取能力。包括arm平台在内的大多数现代微处理器中都存在推测执行功能,因此spectre攻击已经成为了现代处理器和操作系统的重要安全威胁。大多数现代处理器都具有可以清除缓存层次结构的指令或寄存器,这是清除缓存行的最快,最有效的方法。例如,在x86和armv8-a架构处理器上,用户空间中有直接的指令直接清除所有缓存层次结构中的缓存行。在armv7-a处理器上,cp15协处理器和pl310缓存控制器用于清除缓存。为了确保高速缓存一致性,在运行的系统中快速flush操作至关重要。例如,dma数据传输需要快速flush操作以保持高速缓存的一致性。因此,如何确保快速flush操作可用的同时避免其引起的安全漏洞,已经成为一个工业界和学术界亟待解决的问题。

当前学术界和工业界已经提出了许多检测和防御基于flush操作的spectre攻击的方法。这些方法主要分为三个大类,静态代码检测/分析,限制推测执行和创新微体系结构设计。静态代码检测/修复是一种有效的方法,但通过混淆和打包技术可以使恶意代码有效躲避静态代码分析技术的探测。限制推测执行可以避免不安全的推测执行,但会导致严重的性能损失。第三类方法基于硬件的解决方案来创新微体系结构设计,以保护推测性执行。但这要求主要的处理器供应商将它们整合到商业硬件中,这得花费大量时间。考虑到这点,这类解决方案并不能得到有效推广。



技术实现要素:

本发明的目的在于利用软硬协同技术,提出一种可抵抗基于flush操作的spectre攻击的方法及系统,可以实时监测和记录进程的flush操作,监测该进程是否进行恶意的flush行为,若是监测为恶意进程,便暂时禁用分支预测,阻止cpu进行推测执行,不仅可以抵制攻击者发起的基于flush操作的spectre攻击,而且保证了系统的flush功能的正常使用。

为实现上述目的,本发明采用以下技术方案:

一种可抵抗基于flush操作的spectre攻击的方法,包括以下步骤:

执行进程的flush操作,记录当前进程信息;

计算当前进程相邻两次flush操作的时间间隔,判断该时间间隔是否在恶意flush时间范围内,若在,则判定为恶意flush操作;

若恶意flush操作次数大于一阈值时,则判定为恶意进程;

关闭分支预测功能,休眠该恶意进程,阻止cpu推测执行,以抵抗基于flush操作的spectre攻击。

进一步地,当前进程信息包括进程id、flush操作时间。

进一步地,利用全局计时器查询和存储flush操作时间。

进一步地,预先清除指定地址所在的缓存行,再执行进程flush操作。

进一步地,在关闭分支预测功能和休眠该恶意进程后,将先前记录的恶意flush操作次数和时间数据清零,再由cpu跳入中断服务程序,唤醒恶意进程并重新开启分支预测。

进一步地,对于arm-fpga嵌入式soc,所述阈值小于等于16。

一种可抵抗基于flush操作的spectre攻击的系统,包括用户层、内核层和硬件层,其中,

用户层用于执行进程的flush操作,调用flush-detector接口,记录当前进程信息;

硬件层包括缓存块、定时器和分支预测寄存器,定时器用于定期产生中断信号以中断当前进程并使之进入休眠,分支预测寄存器用于分支预测;

内核层含有flush操作检测器flush-detector,flush-detector包括检测模块和防御模块;检测模块用于计算当前进程相邻两次flush操作的时间间隔,判断该时间间隔是否在恶意flush时间范围内,若在,则判定为恶意flush操作,若恶意flush操作次数大于一阈值时,则判定为恶意进程;防御模块用于针对恶意进程控制定时器来关闭分支预测寄存器的分支预测功能,休眠该恶意进程,阻止cpu推测执行,以抵抗基于flush操作的spectre攻击。

进一步地,检测模块还用于预先清除缓存块的指定地址所在的缓存行来执行进程的flush操作。

进一步地,对于arm-fpga嵌入式soc,清除缓存行是指把对应的l1和l2cache行的数据清除,步骤包括:

设置程序状态寄存器的比特位,关闭irq和fiq中断;

通过设置cache尺寸选择寄存器,选择l1cache,清理对应的l1cache行的数据;

把虚拟地址转换为物理地址;

选择l2cache,通过pa清除l2cache行的数据;

使能cache的写回模式,并且打开缓存行填充功能;

设置程序状态寄存器的比特位,打开irq和fiq终端。

进一步地,防御模块包括定时器和分支预测寄存器,定时器用于定期产生中断信号,来中断当前进程并使之进入休眠,分支预测寄存器用于分支预测。

进一步地,定时器为具有自动递增功能的递增计数器,用于监测flush操作的次数,当达到一设定阈值时,触发中断信号。

本发明与现有技术相比,具有以下有益效果:

第一,本发明在arm-fpga嵌入式soc上设计了一个更安全的flush操作api,即flush-detectorapi,是本发明的核心部分,在抵御基于flush操作的spectre攻击方面,本发明比现有的flushapi设计方法更安全。并且在处理恶意进程时,并不会影响正常flush操作的使用。本发明亦可用于intel和amd的cpu上来抵抗基于flush操作的spectre攻击。

第二,本发明的flush-detectorapi只有在处理恶意进程时,系统才会短暂中断分支预测,因此本发明在基于flush操作的spectre攻击过程中避免了不安全的推测执行,又使得系统在大部分正常运行时间里其推测执行功能是可用的。

第三,本发明优化了flushapi的设计,在大大提高了flushapi的安全性的同时,把性能损失降低到了可接受的范围内。

附图说明

图1为一种可抵抗基于flush操作的spectre攻击的系统框架图;

图2为检测模块的工作流程图;

图3为防御模块的工作流程图;

图4为硬件定时器my_timer的工作方式。

图5为spectre攻击的对比结果图;其中(a)图是秘密数据,(b)图是利用使用原始的flush操作api的spectre攻击结果,(c)图是利用本发明的flush-detectorapi进行spectre攻击的结果;

图6为基于flush操作的spectre攻击成功率与flush-detector阈值alert_threshold的关系图;

图7为本发明的flush-detectorapi操作与原始flushapi操作时间消耗对比图。

具体实施方式

为使本发明的技术方案能更明显易懂,特举实施例并结合附图详细说明如下。

本实施例公开一种可抵抗基于flush操作的spectre攻击的系统,整体架构如图1所示,主要由用户层、内核层和硬件部分三个层面的组件构成。首先在用户层,进程调用flush-detector接口执行刷新操作。l1和l2缓存块、硬件计时器my_timer和分支预测寄存器位于硬件层。本发明的flush-detector位于内核层,按功能分为两个模块,分别为检测模块和防御模块。检测模块根据进程相邻两次flush操作之间的时间间隔记录恶意flush操作的数量,若进程在短时间内执行了多次的flush操作,超过了设定的默认阈值,便可以判定进程在进行恶意flush行为。一旦判定为恶意进程,便会触发防御机制。防御模块控制分支预测寄存器进行分支预测,控制硬件定时器进行计时或中断。当检测到恶意进程时,将暂时禁用分支预测。同时,启动硬件计时器my_timer以生成中断。然后触发中断,并在中断服务程序中重新启用分支预测。本发明flush-detector的检测和防御模块用到的参数如表1所示:

表1:检测和防御模块的参数及解释

检测模块和防御模块是本发明技术方案的核心模块。在检测模块中,首先清除指定地址所在的缓存行以执行flush操作。清理缓存行后,记录当前进程信息,包括进程的pid(processidentification,即进程id)。接下来,计算当前进程当前访问时间和上次访问时间(即相邻两次flush操作)之间的访问间隔。利用当前进程的变量malicious_counter来记录可疑的flush操作次数。如果flush操作的次数达到设置的阈值alert_threshold,则decision=1,可以将其确定为恶意进程。否则decision=0,flush-detector仅提供正常的flush功能。若decision=1,判定为恶意进程,触发防御模块。在防御模块中,flush-detector暂时中断分支预测功能,以阻止cpu的推测执行。

以下实施例在arm-fpga嵌入式soc来实施本发明的技术方案。需指出,本发明的技术方案不限于只在arm-fpga嵌入式soc上,通过修改具体的执行指令,亦可用在intel和amd的cpu上来抵抗基于flush操作的spectre攻击,对指令的修改属于本领域的常规手段,本发明不再赘述,本领域技术人员应可理解。

图2是本发明的检测模块的工作流程。下面详细说明检测模块的操作步骤:

第一步,主要完成flush操作的功能,即把对应的l1和l2cache行的数据清除。具体步骤如下:

步骤1:关闭irq和fiq中断(irq与fiq是arm处理器的两种不同编程模式,irq(interruptrequest)指中断模式,fiq(fastinterruptrequest)指快速中断模式)——把cpsr(程序状态寄存器)的第7位和第8位比特置1,以关闭irq和fiq中断。

步骤2:清理对应的l1cache行的数据——首先设置csselr(cache尺寸选择寄存器)的第2、3、4位为0,以选择l1cache;然后,把虚拟地址写入dccimvac(datacachecleanandinvalidatebymvatopoc,基于mva的数据cache清理和失效,为arm处理器上的指令,可以清除并使数据缓存行无效)以清理对应的l1cache行。

步骤3:把虚拟地址转换为物理地址——用virt_to_phys()把虚拟地址转换成物理地址。

步骤4:清除对应的l2cache行的数据——首先,向pl310控制器里的register15(调试控制寄存器)写入3,以物理地址写入pl310里的register7(通过pa清理cache行)以清除l2cache行的数据;最后,向pl310控制器的register15写入0,以使能cache的write-back(写回)模式并且打开linefills(缓存行填充)功能。

步骤5:打开irq和fiq中断——向cpsr(程序状态寄存器)的第7位和第8位比特置0,以打开irq和fiq中断。

第二步,存储当前进程的信息,包括pid、访问flushapi时间(即flush操作时间)等信息,利用全局计时器查询和存储当前访问时间,计算当前进程相邻两次flush操作的时间间隔time_interval。

第三步,判定当前进程是否在进行恶意flush操作。具体步骤如下:

步骤1:若flush时间间隔time_interval在恶意flush时间范围内,当前进程的恶意flush次数malicious_counter递增加1。

步骤2:若恶意flush次数达到了阈值alert_threshold,则decision=1,判定当前进程为恶意进程,将信号发送到防御模块,触发防御机制。

图3是本发明的防御模块的工作流程。下面详细说明此模块的操作步骤:

第一步:当接收到decision=1信号时,首先关闭分支预测功能。

第二步:使能my_timer定时器中断。

第三步:睡眠当前恶意进程。

第四步:恢复计数器和定时器的状态,将上述记录恶意flush次数的计数器和硬件定时器的数据清零。

第五步:cpu跳入中断服务程序,唤醒当前恶意进程并重新开启分支预测。其中my_timer是本发明专门提出的一种硬件定时器。

图4显示my_timer的工作方式。my_timer是具有自动递增功能的32位递增计数器。定时器频率为50mhz,与总线频率一致,其主要功能是定期产生中断信号。第0位是定时器使能位,默认值为0。将第0位设置为1时,它将自动开始计数。使能定时器,定时器计数器开始计数,当计数器达到设定值时将产生中断信号。

图5是利用flush-detectorapi运行基于flush的spectre攻击的对比结果图。把原始的spectre攻击源代码(见p.kocher,j.horn,a.fogh,d.genkin,d.gruss,w.haas,m.hamburg,m.lipp,s.mangard,t.prescher,m.schwarz,y.yarom.spectreattacks:exploitingspeculativeexecution.in40thieeesymposiumonsecurityandprivacy,2019)移植到arm-fpga嵌入式soc平台上,并将秘密数据改为如图5的(a)图所示。在图5中,(a)图是秘密数据,(b)图是使用原始的flush操作api的spectre攻击结果,(c)图是利用本发明的flush-detectorapi进行spectre攻击的结果。与(a)图相比,很明显,spectre攻击没有得到任何字节的秘密数据。攻击对比结果证明,flush-detector可以成功检测并防御基于flush的spectre攻击。

图6为基于flush操作的spectre攻击成功率与flush-detector参数阈值alert_threshold的关系图。横坐标代表alert_threshold的取值,纵坐标代表spectre攻击的成功率。当alert_threshold设置为16以下时,攻击成功率小于1%,可以有效的抵御基于flush操作的spectre攻击。

为了说明本发明的性能,现给出原始flushapi的和本发明flush-detectorapi操作的时间消耗对比图。图7是两种flush操作api的时间消耗的分布。圆形代表了原始的flush操作api,菱形代表了本发明的flush-detectorapi。与原始的flushapi相比,flush-detector时间消耗大约长17.7%,造成了部分性能损失。但是,考虑到它可以提高flush操作的安全性并抵抗基于flush的spectre攻击,因此其性能损失是可以接受的。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,本发明的保护范围以权利要求所述为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1