一种可抵抗基于flush操作的cache攻击的软硬协同计时器实现方法和系统与流程

文档序号:19251879发布日期:2019-11-27 20:21阅读:403来源:国知局
一种可抵抗基于flush操作的cache攻击的软硬协同计时器实现方法和系统与流程
本发明属于信息安全软硬件协同设计
技术领域
,具体为基于arm-fpga嵌入式soc的软硬协同计时器的实现方法和系统。本发明在保证了高安全性和低性能损失的情况下,可抵御基于flush操作的cache攻击,是一种高效、安全的计时器实现方法。
背景技术
:近年来,随着市场对高性能小型电子设备的需求越来越大,soc(systemonchip,片上系统)商品的功能也变得越来越强大、复杂并且个性化。其中,把arm和fpga(field-programmablegatearray,现场可编程门阵列)结合到一起的arm-fpga嵌入式soc,为系统架构师和arm开发工程师提供了一个弹性的平台以满足消费者的个性化需求。该类型soc以xilinx公司的zynq系列为代表,已经被广泛应用到无人机以及高性能嵌入式和物联网设备中。但是,与intel和amd的芯片产品一样,arm-fpga嵌入式soc同样面临着多种多样的安全威胁,以cache攻击为代表的微体系架构攻击就是其中不可忽略的一种类型。在过去的十几年里,越来越多的研究人员以cache(高速缓冲存储器)为突破口成功的实现了微体系架构攻击。cache攻击已经成为了现代处理器和操作系统的重要安全威胁。更吸引人注意的是,2018年初,meltdown(见m.lipp,m.schwarz,d.gruss,t.prescher,w.haas,a.fogh,j.horn,s.mangard,p.kocher,d.genkin,y.yarom,m.hamburg.meltdown:readingkernelmemoryfromuserspace.in27thusenixsecuritysymposium,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攻击的数据窃取能力。最近几年,为了降低cache攻击中的噪声并且增加攻击的分辨率,许多研究者已经开始在cache攻击中运用flush操作(清理操作),如flush+reload,flush+flush以及基于flush操作的spectre攻击(利用flush+reload原理的spectre攻击)。我们把这种类型的cache攻击称为“基于flush操作的cache攻击”。大多数类型的现代处理器拥有现成的指令或者与cache相关的控制寄存器,可以执行cache行的flush操作,这也是清理cache行的最高效的方法。由于cache的flush操作在系统中非常有用甚至不可或缺,因此直接关闭flush操作是不可行的。例如,dma数据传输通常需要一个flush操作来确保cache数据中的一致性。另一个例子是没有硬件cache一致性机制的对称多处理器(smp)体系结构是很可能存在的。在这种情况下,一个快速的cache行flush操作是非常有用的。因此,怎样保证快速flush操作可用的同时避免其引起的安全漏洞,已经成为一个工业界和学术界亟待解决的问题。当前学术界和工业界已经提出了许多检测和防御基于flush操作的cache攻击的方法。这些方法主要分为两个大类,静态代码分析/修复方法以及运行时防御方法。静态代码分析/修复对探测基于flush操作的cache攻击非常有效。但是,混淆和打包技术可以使恶意代码有效躲避静态代码分析技术的探测。而且,使用静态代码修复技术会大大增加系统的性能损失。另一大防御类型使运行时防御策略。大部分已提出的运行时防御方案是利用硬件性能计数器来实时的持续的监控恶意程序。但是,这种实时监控策略经常会带来很高的漏报率。另外,这种防御方案由于需要收集一定时间的记录数据,经常无法足够快速的探测恶意进程,因此无法及时杀死它们。还有一点,flush+flush攻击由于其自身的特点,无法被利用性能计数器的防御方案探测到。还有另一种运行时防御策略——永久降低时间接口的分辨率。很多浏览器厂商以及w3c组织已经在这方面做了改进工作。在oren等人成功的在浏览器上实施了cache攻击(见y.oren,v.p.kemerlis,s.sethumadhavan,a.d.keromytis.thespyinthesandbox:practicalcacheattacksinjavascriptandtheirimplications.inproceedingsofthe22ndacmsigsacconferenceoncomputerandcommunicationssecurity,2015)之后,浏览器厂商和w3c把performance.now的分辨率从纳秒级修改为5μs以上。但是,由于高分辨率时间在操作系统的本地应用中非常有用,大部分操作系统厂商没有在用户空间禁用高分辨率时间接口。在intelx86处理器上,rdtsc指令可以在用户空间直接得到高分辨率时间戳,而运行在arm-fpga嵌入式soc上的系统通常会提供高分辨率apis,例如perf_event_open系统调用以及posix函数clock_gettime()。即便高分辨率时间接口在用户空间被禁止,拥有root权限以及计时器物理地址的攻击者仍然可以访问高分辨率计时器。技术实现要素:本发明的目的在于,利用软硬协同技术,在arm-fpga嵌入式soc上设计一个更安全的高分辨率计时器。软硬协同计时器可以根据系统中是否出现flush操作,自适应的调整自己的分辨率。软硬协同计时器不仅可以抵御拥有该计时器访问权限的攻击者发起的基于flush操作的cache攻击,而且保证了系统在flush操作没有出现时,高分辨率时间的可用性。本发明的软硬协同计时器按阶段分为两个阶段,分别为初始化阶段和运行时阶段。按功能模块分,本发明软硬协同计时器又可分为三个模块,分别为初始化软件模块、运行时软件模块和硬件模块。图1展示了软硬协同计时器的整体工作原理图。硬件模块的主要部件是两个计时器,分别为安全低分辨率计时器和高分辨率计时器。根据软硬协同计时器所处阶段的不同,以及系统运行时是否调用了flush操作,硬件模块自适应的使这两个计时器在系统中可访问或不可访问。当进程中出现了flush操作时,安全低分辨率计时器可通过硬件模块首地址访问,而高分辨率计时器不可访问,我们称这种状态为安全低分辨率状态。相对应的,当进程中没有出现flush操作时,高分辨率计时器可通过硬件模块首地址进行访问,而安全低分辨率计时器不可访问,我们称这种状态为高分辨率状态。本发明软硬协同计时器的硬件模块用到的参数如表1所示:表1:硬件模块的参数及解释本发明的硬件模块和软件模块之间通过信号进行通信和协同工作,各信号及解释如下表2所示:表2:软件模块与硬件模块之间的信号及解释信号名称解释降低分辨率信号降低安全低分辨率计时器的1个比特分辨率升高分辨率信号升高安全低分辨率计时器的1个比特分辨率初始化完成信号通知硬件部分,初始化阶段已经完成调用flush操作信号通知硬件部分,flush操作被调用在初始化阶段中,硬件模块的安全低分辨率计时器始终是可访问的,即高分辨率计时器始终不可访问。初始化软件模块利用软硬协同计时器的硬件模块提供的安全低分辨率时间,循环运行已选定的基于flush操作的cache攻击。根据每次循环的结果,初始化软件模块向硬件模块发送信号,以调节安全低分辨率计时器的分辨率safe_resolution。当攻击失败时,初始化软件模块向硬件模块发送升高分辨率信号,以提高安全低分辨率计时器1个比特的分辨率,即safe_relosution-1。当攻击成功时,初始化软件模块向硬件模块发送降低分辨率信号,以降低安全分辨率计时器1个比特的分辨率,即safe_resolution+1。与此同时,初始化软件模块向硬件模块发送初始化完成信号,完成初始化阶段。硬件模块接收到初始化完成信号之后,软硬协同计时器进入运行时阶段。在运行时阶段,软硬协同计时器的硬件模块根据系统是否出现flush操作,自适应的转换分辨率,以达到抵御基于flush操作的cache攻击的目的。当flush操作出现时,软硬协同计时器转换成安全低分辨率计时器状态,持续safe_time个cpu时钟周期后,再恢复到高分辨率状态。当flush操作未出现时,软硬协同计时器则始终为高分辨率状态。具体来说,本发明提供的一种可抵抗基于flush操作的cache攻击的软硬协同计时器实现方法,分为两个工作阶段,分别为初始化阶段和运行时阶段。其中:(1)在初始化阶段,初始化软件模块与硬件模块之间相互协作以测试安全范围内最高的时间分辨率,并把硬件模块中的安全低分辨率计时器调整到该时间分辨率;(2)在运行时阶段,运行时软件模块和硬件模块根据系统进程是否调用了flush操作来自适应的转换时间分辨率。进一步的,所述的(1)初始化阶段,步骤如下:步骤1:循环发起选定的基于flush操作的cache攻击,根据每次循环的攻击结果调节软硬协同计时器硬件模块的安全分辨率safe_resolution。步骤2:当循环攻击成功时,软硬协同计时器的初始化软件模块向硬件模块发送初始化完成信号,软硬协同计时器开始进入运行时阶段。进一步地,所述步骤1中,选定的基于flush操作的cache攻击的操作如下:第一步:分别对在cache内和不在cache内的数据进行多次的访问并记录时间,然后分别计算出两种数据的平均访问时间。第二步:计算两种平均访问时间的差值,当差值小于1个比特时,判定为攻击失败,当差值大于等于1时,判定为攻击成功。进一步地,所述步骤1中,根据每次循环结果调节硬件模块的安全分辨率的操作如下:攻击失败时:初始化软件模块向硬件模块发送升高分辨率信号,使硬件模块的安全低分辨率增大1个比特,然后重新开始攻击。攻击成功时:初始化软件模块向硬件模块发送降低分辨率信号,使硬件模块的安全分辨率降低1个比特。进一步地,所述步骤2中,攻击成功后,初始化软件模块和硬件模块的操作如下:第一步,初始化软件模块向硬件模块发送降低分辨率信号,使硬件模块的安全分辨率降低1个比特。第二步:初始化软件模块向硬件模块发送初始化完成信号。第三步,硬件模块接收初始化完成信号,对信号进行认证。第四步,认证通过后,硬件模块接收初始化完成命令,硬件模块自动的调整为高分辨率计时器状态。进一步地,所述的(2)运行时阶段,步骤如下:步骤1:当fush操作被调用时,运行时软件模块会发送调用flush操作信号给硬件模块。步骤2:硬件模块接收到调用flush操作信号后,从高分辨率计时器状态转换成安全的低分辨率计时器状态,即安全的低分辨率计时器在首地址可访问。步骤3:硬件模块在安全低分辨率计时器状态下持续一定数量的cpu时钟周期之后,自动恢复为高分辨率计时器状态。与上面方法对应地,本发明还提供一种可抵抗基于flush操作的cache攻击的软硬协同计时器系统,包括初始化软件模块、运行时软件模块和硬件模块;硬件模块包含安全低分辨率计时器和高分辨率计时器;在初始化阶段,初始化软件模块与硬件模块之间相互协同,以测试安全范围内最高的时间分辨率,并把硬件模块中的安全低分辨率计时器调整到该时间分辨率;在运行时阶段,运行时软件模块和硬件模块根据系统进程是否调用了flush操作来自适应的转换时间分辨率。本发明还提供一种arm-fpga嵌入式soc,其包含上面所述的可抵抗基于flush操作的cache攻击的软硬协同计时器系统。本发明与现有技术相比,具有以下有益效果:第一,在抵御基于flush操作的cache攻击方面,本发明比现有的高分辨率计时器设计方法更安全。由于该软硬协同计时器的分辨率转换过程是在硬件中实现的,因此攻击者即便拥有root权限和该计时器实际的物理地址,仍然无法获得高分辨率时间。第二,由于软硬协同计时器仅在flush操作出现时才会短暂降低其分辨率,因此本发明在确保了使用flush操作的cache攻击者无法得到其攻击时所必须的高分辨率时间的同时,又使得系统在大部分运行时间里(无flush操作出现)其高分辨率计时器时可用的。第三,本发明优化了计时器的设计,在大大提高了高分辨率计时器安全性的同时,仅增加了微小的访问延时,从而把性能损失降低到了可接受的范围内。附图说明图1为软硬协同计时器的整体工作原理图;图2为初始化软件模块的工作流程图;图3为运行时软件模块的工作流程图;图4为硬件模块的工作流程图;图5为flush+reload攻击的对比结果图;其中(a)图是利用全局计时器进行flush+reload攻击的结果,(b)图是利用pmccntr(性能监控循环计数寄存器)进行flush+reload攻击的结果,(c)图是利用本发明的软硬协同计时器进行flush+reload攻击的结果;图6为基于flush操作的spectre攻击成功率与软硬协同计时器安全分辨率safe_resolution的关系图;图7为修改的flush操作与原始flush操作时间消耗对比图。具体实施方式:下面结合附图,对本发明做进一步的说明。本发明包含两个软件模块和一个硬件模块,分别为初始化软件模块、运行时软件模块和硬件模块。图2是本发明的初始化软件模块的工作流程。下面详细说明初始化软件模块的操作步骤:步骤1:分别对在cache内和不在cache内的数据进行100次访问,并利用软硬协同计时器提供的安全低分辨率时间记录下每次的访问时间,然后计算出cache内数据的平均访问时间t1和不在cache内数据的平均访问时间t2。步骤2:当t1与t2的差值小于1个比特时,判定为攻击失败,初始化软件模块向硬件模块发送升高分辨率信号,使硬件模块的安全低分辨率增大1个比特,然后从步骤1开始重新运行。当t1和t2的差值大于等于1个比特时,判定为攻击成功,初始化软件模块向硬件模块发送降低分辨率信号,使硬件模块的安全分辨率降低1个比特。步骤3:攻击成功发送降低分辨率信号后,初始化软件阶段向硬件模块发送初始化完成信号,结束初始化阶段。图3是本发明硬件模块的详细工作流程。下面详细说明硬件部分的操作步骤:步骤1:在没有收到初始化完成信号之前,硬件模块一直处于安全低分辨率状态,首地址可访问安全低分辨率计时器。在上电之后,安全低分辨率计时器的安全分辨率safe_resolution=16,即最低有效比特位是第16位。此时,硬件模块的分辨率处于绝对安全的范围。步骤2:硬件模块接收来自两个软件模块的32位信号,信号的前8个比特位代表信号的内容,后24个比特位是认证码。步骤3:对后24位认证码进行认证。如果认证失败,则不做任何操作,即忽略信号前8个比特位包含的内容。如果认证成功,则读取前8位信号的内容。步骤4:根据前8个比特位信号内容的不同,硬件模块实现不同的功能。当信号内容是减低分辨率时,硬件模块把安全低分辨率计时器的分辨率降低1个比特;当信号内容是升高分辨率时,硬件模块把安全分辨率计时器的分辨率升高一个比特;当信号内容时初始化完成时,硬件模块使高分辨率计时器对系统可见,即在首地址可访问;当信号内容是调用flush操作时,硬件模块转换成安全低分辨率计时器状态,持续safe_time个cpu时钟周期之后,再恢复高分辨率计时器状态。图4是本发明的运行时软件模块的工作流程,主要完成flush操作的功能,即把对应的l1和l2cache行的数据清除。下面详细说明一下运行时软件模块的操作步骤:步骤1:关闭irq和fiq中断——把cpsr(程序状态寄存器)的第7位和第8位比特置1,以关闭irq和fiq中断。步骤2:清理对应的l1cache行的数据——首先设置csselr(cache尺寸选择寄存器)的第2、3、4位为0,以选择l1cache;然后,把虚拟地址写入dccimvac(基于mva的数据cache清理和失效)以清理对应的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中断。步骤6:向硬件模块发送调用flush操作信号——每次flush操作结束时,都要向硬件模块发送调用flush操作信号,以此来触发硬件模块的分辨率转换。为了说明本发明的可抵抗基于flush操作的cache攻击的效果,首先给出利用不同计时器的flush+reload攻击的对比结果,然后给出基于flush操作的spectre攻击的成功率与软硬协同计时器安全分辨率(safe_resolution)的关系图。在arm处理器上,全局计时器和pmccntr(性能监控循环技术寄存器)是两种常用的高分辨率计时器,高分辨率时间api常常利用这两种底层硬件计时器实现。为了对比软硬协同计时器的防御效果,我们分别为全局计时器、pmccntr以及本发明的软硬协同计时器设计了内核驱动来实现高分辨率时间api,并分别用来运行flush+reload攻击。图5是利用不同的计时器运行flush+reload攻击的对比结果。我们选定的攻击对象是openssl中的aes加密t表实现。在图5中,(a)图是利用全局计时器进行flush+reload攻击的结果,(b)图是利用pmccntr(性能监控循环计数寄存器)进行flush+reload攻击的结果,(c)图是利用本发明的软硬协同计时器进行flush+reload攻击的结果。三幅图的横坐标表示cache行flush操作的索引,纵坐标表示aes加密t表实现中的相对于te0表首地址的偏移地址(/4)。我们在每个cache行索引中的每个偏移地址上都加密了1000次。图中颜色的深浅代表了cache命中的次数。由于密钥key的第一字节k0我们设定为0x00,因此,纵坐标的偏移地址也对应着我们令明文第一字节以16为步长从0增长到255,因此当flush+reload攻击成功时,在主对角线上的cache命中次数应该明显高于其他地方。换句话说,主对角线应该是一条浅色的直线。从图5的三幅图中我们可以看到,使用pmccntr和全局计时器的flush+reload攻击。主对角线是一条非常明显的浅色直线,说明攻击成功。但是,使用软硬协同计时器进行flush+reload攻击,主对角线的颜色分布近似于随机,说明攻击失败。flush+reload攻击的对比结果证明,软硬协同计时器相较于其他两个高分辨率计时器,可非常有效的防御flush+reload攻击。图6是基于flush操作的spectre攻击与软硬协同计时器的安全分辨率safe_resolution的关系图。横坐标代表safe_resolution的取值,纵坐标代表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平台上,并简单的修改其为每次攻击一个字节,破解出正确的字节就代表攻击成功。从图6中可以看到,攻击成功率整体来说是随着safe_resolution的增大而减小的。横坐标的最左边是1,即最低的有效比特位是第1位。它代表着当系统中没有flush操作发生时,软硬协同计时器的高分辨率状态。当横坐标的数值增加到10,即最低的有效比特位位第10位时,攻击成功率降低到接近0。这个数值也就是初始化结束时,safe_resolution参数所在的位置,图6中用红色虚线做了标记。横坐标的最右边是16,即最低有效比特位是第16位,代表初始化之前safe_resolution的状态。从图6中我们可以明显的看到,初始化后的软硬协同计时器可以把攻击成功率降低到接近于0的水平,可以有效的抵御基于flush操作的spectre攻击。为了说明本发明的性能,首先给出上述三种计时器访问时间的对比表格,然后给出原始的和修改后的flush操作的时间消耗对比图。下面的表3是不同计时器的平均访问延时对比,所有的延时都归一化为667mhz的cpu时钟。表3:不同计时器的平均访问延时计时器种类平均访问延时全局计时器509pmccntr442软硬协同计时器484从表3可以看出,本发明的软硬协同计时器访问延时比pmccntr慢了9.5%,但是比全局计时器快了5%。这说明软硬协同计时器的访问延时与全局计时器和pmccntr相比,并没有明显的增加。图7是两种flush操作api的时间消耗的分布。三角代表了原始的flush操作api,黑色方块代表了专为本发明的软硬协同计时器修改的flush操作api。整体来说,修改后的flush操作api比原始的flush操作api的时间消耗多了12%。这主要是因为本发明的flush操作api比原始的flush操作api多了一个iowrite32()的函数,以实现与硬件模块的通信。本发明另一实施例提供一种arm-fpga嵌入式soc,其包含上面所述的可抵抗基于flush操作的cache攻击的软硬协同计时器系统。该软硬协同计时器系统,包括初始化软件模块、运行时软件模块和硬件模块;硬件模块包含安全低分辨率计时器和高分辨率计时器;在初始化阶段,初始化软件模块与硬件模块之间相互协同,以测试安全范围内最高的时间分辨率,并把硬件模块中的安全低分辨率计时器调整到该时间分辨率;在运行时阶段,运行时软件模块和硬件模块根据系统进程是否调用了flush操作来自适应的转换时间分辨率。以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1