一种基于概率预测的嵌入式可变粒度控制流验证方法及系统与流程

文档序号:18755923发布日期:2019-09-24 22:21阅读:133来源:国知局
一种基于概率预测的嵌入式可变粒度控制流验证方法及系统与流程

本发明涉及一种在嵌入式平台上验证软件控制流完整性的方法系统及方法,属于嵌入式终端关键应用的动态度量领域。



背景技术:

随着嵌入式设备的快速发展,特别是物联网(internetofthings,iot)的出现,嵌入式终端关键应用的完整性保护日益受到重视,各种完整性保护的模型和实施方法相应的被提出。在系统和应用运行的过程中,攻击者可以通过各种各样的手段来对系统或者应用进行攻击,破坏这些软件的完整性。例如,控制流攻击(control-flowattack)就是其中一种攻击手段,这种攻击手段非常常见而且能够造成比较大的威胁。控制流攻击会影响程序的运行时行为,表现在于它会劫持程序的控制流到任意的地址空间,从而破坏程序的完整性。对于资源有限的嵌入式设备而言,实时的保护会造成过大的开销,所以远程的验证手段是常用的一种方法。

当前针对嵌入式平台的控制流完整性验证要么是细粒度的验证或者是粗粒度的验证。前者的验证方案会检查程序中所有的控制流转移指令,包括分支指令,函数的调用和返回事件,这种粒度的验证能够保证安全但是会造成较大的开销。而后者的运行开销较小,它只检查函数之间的调用关系(即函数的调用和返回事件),但是它不够安全。



技术实现要素:

本发明的技术解决问题为:克服现有技术的不足,一种基于概率预测的嵌入式可变粒度控制流验证方法及系统,利用机器学习的概率模型来结合这两种不同粒度的验证方法,能够在运行时性能和安全保障之间达到相对的平衡。

本发明的技术解决方案为:一种在嵌入式平台中使用远程证明架构对软件完整性的验证方法和系统,利用trustzone硬件隔离来对应用的执行进行动态完整性度量,包括粗粒度的函数级别验证以及细粒度的控制流指令级别验证。该发明在提高了验证效率的同时,也保障了一定的安全性。

按照本发明所提供的设计方案,本发明的主要目的是针对当前嵌入式平台上软件的控制流完整性验证手段要么是开销过大的细粒度或者不够安全的粗粒度问题,利用机器学习的概率模型来有效结合这两种粒度的验证方法,从而在嵌入式平台上进行完整性验证时能够达到在运行时性能和安全保障之间的相对平衡。控制流完整性(control-flowintegrity,cfi)是一种保护或者验证控制流完整性的有效方案,它的思想是利用控制流图(control-flowgraph,cfg)来限制程序的运行目标范围。本方案提出了基于概率预测的嵌入式可变粒度控制流验证系统,该系统利用远程证明的架构对嵌入式平台的控制流完整性进行验证,该验证需要嵌入式平台带有一个可信的隔离环境,比如arm的trustzone,这样才能够实现可信的动态完整性度量。

控制流攻击,是一种能够劫持原有程序控制流的技术,包括代码注入攻击,代码复用攻击,还有近些年来提出的非控制数据攻击。这些攻击的方法能够改变原有的控制流,从而实现攻击者的攻击意图。

远程证明,是一种有效验证嵌入式平台完整性的系统方案。它包括两个部分:验证端和证明端。验证端通常是一个资源丰富的第三方可信平台(如pc),它主要向证明端发起验证并且对最后的验证报告进行有效性检查。而证明端是一个资源有限的平台,在本方案中指的就是嵌入式平台。它们之间通过一定的协议进行通信,从而达到验证证明端完整性的目的。

插桩,是指在保持程序原有逻辑完整性的基础上在程序中插入一些探针,这些探针的目的是采集函数及代码段的信息。插桩技术可用于记录程序运行时代码的执行路径,从而了解代码的执行情况。

动态度量,就是通过静态分析技术或者动态执行提取应用的行为特征,然后在应用实际运行过程中实时监控应用行为并与行为特征进行匹配,匹配成功则表示应用是可信的,匹配不成功则判定应用行为不可信。

armtrustzone硬件隔离技术,在嵌入式终端构建普通世界和安全世界两个独立的运行环境,并利用处理器的监控模式提供两个环境的切换与数据传输。普通世界与安全世界相互隔离,保证了安全世界中操作的安全性,有效实现应用系统高敏感业务与普通业务的隔离。

控制流图,表示函数内部基本块之间的执行先后关系和控制流关系,每个函数都有一个控制流图,而控制流图是由代码基本块组成。

本发明的一种基于概率预测的嵌入式可变粒度控制流验证系统,包含如下步骤:

步骤1、可信路径特征集构建,对目标源程序中的每个函数进行概率预测,然后对不同概率的函数进行粗细粒度的插桩预处理,接着在验证端利用不同的输入ip获取目标程序所有可能的动态控制流图,在嵌入式中这种动态控制流图的获取是可行的,因为大部分嵌入式软件特点是专用而且比较简单。本发明使用blake2算法计算的哈希值来代替某一个动态的控制流图,不同的控制流图对应不同的哈希值,这些哈希值hs被存储在数据库中。这一步骤在远程证明的验证端进行。

步骤2、动态路径的收集,验证端发送请求c请求给证明端,证明端在接受请求后在正常世界中特定的输入is下运行处理过的目标程序,并在安全世界中收集程序运行过程中的相应控制流转移指令,利用这些指令的信息来计算此次控制流图的哈希值h,计算过程与步骤1中的哈希值计算相同,最后证明端利用密钥k对哈希值进行加密得到签名r并发送给验证端。

步骤3、动态路径的检验,证明端将通过一定的协议将签名发送给验证端,验证端将获得的签名r用密钥k解密得到哈希值h,该哈希值与步骤1中数据库中存储的相应哈希值hs进行匹配,如果能够匹配上说明此次运行正常,否则说明此次运行的控制流遭到了攻击,完整性被破坏。

上述步骤中的安全世界指的是trustzone硬件隔离环境保证的,blake2算法是一种高效而且安全的哈希值算法,从发明至今,还没有人提出破解它的方法。blake2的内部基于的是chacha,而chacha是高度可信任的,它不太可能被破解。(注:chacha是一种由danielj.bernstein设计的流密码,它是tls1.3所使用的三大密码之一,并且符合新的tls标准。)

所述步骤1的可信路径特征集构建具体包含如下步骤:

步骤1.1、概率预测,在这里使用有漏洞的函数和正常函数作为数据,函数特征作为特征来训练得到一个机器学习模型,该模型会对目标程序中的所有函数进行漏洞的概率预测。当然这一步中的训练过程是不需要重复进行的,平常的使用中只需对目标程序中的函数进行概率预测即可。

步骤1.2、粗细粒度插桩,在步骤1.1中,得到了目标程序中所有函数的概率。接下来需要验证端指定一个概率阈值p,这个概率阈值的指定可以根据实际情况来调整。利用这个阈值p对函数进行分类,对于一个函数来说,如果它在步骤1.1中得到的漏洞概率pf≥p,那么这个函数就会被认为是有漏洞的,这一类的函数会被细粒度插桩从而更好的保证它的完整性不被破坏。而如果函数的漏洞概率pf<p,那么它会被认为是正常的函数而被粗粒度插桩,这种粒度牺牲了一定的安全性来保证运行时的性能。通过概率预测的模型将粗细粒度很好的进行了结合。

步骤1.3、可信路径特征集安全存储,经过处理的目标程序在所有可能的输入ip下运行,计算其合法的控制流图的哈希值hs,并将这些哈希值存储在数据库中来构建可信路径特征集。

所述步骤2的动态路径采集具体包含如下步骤:

步骤2.1、动态路径收集,当嵌入式平台接收到验证端发来的请求c后(该请求c包含了目标程序的标识符和随机令牌,随机令牌的作用是为了防止重放攻击),嵌入式平台会在正常世界中特定的输入is下运行经过插桩的目标程序ap。运行过程中,在步骤1.2中被插桩或者重写的控制流指令会被重定向到指定空间进行哈希值的计算,这个计算过程需要有一个安全世界进行隔离,比如arm中trustzone。计算结束控制流将返回源程序。当程序运行结束后,证明端计算得到一个控制流图哈希值h。

步骤2.2、哈希签名,为了防止哈希值被破坏或者篡改,在这一步中证明端会利用存储在安全域的密钥k对哈希值h进行加密,其他的参数还包括请求c,计算得到签名值r,该签名值会发送给验证端进行验证。

所述步骤3的动态路径的检验具体包含如下步骤:

步骤3.1、签名解密,验证端从证明端接收签名r,它利用已知的密钥k对其进行解密,分解出哈希值h和请求c;

步骤3.2、将哈希值h与步骤1.3中得到的可信路径特征集进行比较,如果能够匹配,则说明此次运行正常,否则此次运行可能遭到了控制流的攻击,完整性被破坏。

本发明一种基于概率预测的嵌入式可变粒度控制流验证系统具有以下优点:

(1)本发明提出了基于概率预测的嵌入式可变粒度控制流验证方案,它使用动态产生的控制流图来对控制流完整性进行验证,该验证能够检测控制流攻击。

(2)本发明基于概率预测的嵌入式可变粒度控制流验证方案提供了在嵌入式平台上实施软件完整性验证时,能够平衡运行时效率和安全保障之间关系的解决方案。

(3)本发明设计了机器学习的概率模型来预测程序中所有函数的有漏洞概率,通过这种概率的预测可以将粗细粒度的控制流验证方案结合起来应用在嵌入式的平台上。

附图说明

图1为本发明的整体框架流程图;

图2为本发明的概率预测以及控制流图哈希值的生成示意图;

图3为本发明的证明端收集可信路径的架构图;

图4为本发明中采用的inlinehook原理图。

具体实施方式

本发明是一种基于概率预测的嵌入式可变粒度控制流验证方案,该方案通过结合粗细粒度两种验证方案来对嵌入式平台上的软件完整性进行验证,它能够在运行时性能和安全保障之间达到一个相对的平衡。本发明利用远程证明的架构来有效的证明嵌入式设备的完整性,并且基于trustzone硬件隔离技术可信的计算控制流图的哈希值。本发明具有安全性高,运行时开销低,控制流粒度可变等特点。

为使本发明的目的、优点以及技术方案更加清楚,以下通过具体实施,并结合附图,对本发明进一步详细说明。

图1从整体上描述了该方案实施的总体架构,主要包括以下四部分内容:

一、可信路径特征集构建

在对嵌入式中的软件进行完整性验证前,首先需要对目标程序进行预处理,预处理的过程主要是对程序中函数的概率预测以及可信路径特征集的构建,这个部分是验证端所做的工作,具体包括了图1的这几步。下面结合图2具体分析可信路径特征集是怎样构建的:

(1)概率预测。在图2中,目标程序是一个简单的程序,程序的源代码如图2中中间部分所示,它有三个函数:main,func1和func2。利用概率预测模型以及概率阈值p,对目标程序进行预测。假设main,func1和func2三个函数漏洞概率预测的结果分别为p1,p2,p3,而且这三个概率满足p1≥p,p2,p3<p。根据方案,main函数被预测为有漏洞的,并且被细粒度插桩。而函数func1和func2是正常的,它们会被粗粒度检查。在这里p的制定也是一个值得探讨的问题,对于更加注重安全的应用来说,可以尽量的将阈值设低,这样能够被细粒度分析的函数就会越多,那么整个应用也会更加的安全;对于更加注重性能的应用来说,阈值应尽可能的高。而对于需要平衡这两者关系的应用来说,可以用以下算法进行阈值的求解。首先验证端给出一个最大的的运行时间上限t,并设置0.5为一个默认的阈值,当得到的运行时间大于时间上限t时,此时在阈值范围(0.5,1]之内进行二分搜索来提高阈值从而降低开销。类似的,如果运行时间小于t,那么可以在阈值范围[0,0.5)区间内二分从而降低阈值提高安全性。该算法不会停止直到阈值范围足够小。这样那个可以得到一个最小的概率阈值,使得运行时间满足要求(运行时间小于等于t),而且安全性也足够好。而至于能够达到的安全程度,当概率模型对函数的漏洞概率预测更加准确时,安全程度就越高。这意味着有漏洞的函数会有更高的预测概率,安全问题只跟概率模型的性能表现相关。

(2)粗细粒度插桩。在第一步中对函数漏洞概率进行预测之后,得到了需要细粒度分析的函数main和粗粒度分析的函数func1和func2。无论是粗粒度还是细粒度分析的函数,它们都需要进行函数调用和返回的事件检测,这个检测是通过利用gcc加上-finstrument-functions参数来对源程序进行编译实现的,这种编译参数下得到的程序中每个函数的首尾处都会有hook指令来调用两个特定的函数,只需要实现这两个函数逻辑即可。而在细粒度分析中还需要检查函数内部的其他控制流指令,本发明使用了capstone工具及其python接口来对这些指令进行重写,从而劫持它们的控制流。这种插桩方法也叫做inlinehook,它的原理图如图4所示,即在控制流转移中插入代理,收集运行过程中的控制流信息,然后将控制流恢复。

(3)控制流图的动态哈希计算。main函数中标记出了需要检查的点,比如①点代表该函数的调用指令,分支指令是②和③之,而④是该函数的返回指令,这就是细粒度的验证方案。⑤和⑥是函数func1入口处和出口处的检查点,⑦和⑧是函数func2入口和出口的检查点,这是粗粒度的验证方案。在图2中右边的是该目标程序的控制流图,该程序有两个可能的控制流图,分别能够在n≥0和n<0的情况下产生。控制流图的哈希值利用blake2算法进行计算,这个算法接收两个参数,分别是上一条控制流路径的哈希值以及点的标识符。对于第一条控制流路径来说(它没有上一条路径),第一个参数为0。而点的标识符不是唯一的,只要能够保证不同点的标识符不一致即可。在嵌入式中,大部分情况下程序运行代码占用的内存地址是不变的,所以本发明中采用内存地址对应某个点的方法来表示某个控制流图中的点。这一步需要通过给目标程序不同的输入ip来获取所有可能的控制流图哈希值hs,并且把这些哈希值hs存储在数据库中作为可信路径特征集,以供验证端的匹配。

二、动态路径收集

动态路径的收集过程发生在证明端。在图1中的第步中,验证端发送请求c给证明端,该请求c包括目标程序的标识符和随机数(保证报告的实时性)。在图1的第步中,证明端接收到请求c后在一定的输入下is运行目标程序。图3展示了证明端的架构。该arm的嵌入式平台带有trustzone扩展,故整体的架构被分为正常世界和安全世界。正常世界中有拦截器,而安全世界中有哈希管理器和应答生成器。

当程序开始运行后,被重写的指令控制流会被劫持到拦截器。在图3的正常世界中有六个带标号的箭头,其中1in箭头捕捉到了从指令bla调用粗粒度分析函数a时的控制流事件,该控制流被劫持到拦截器,而拦截器会保持这个控制流,并将需要的信息传递给安全世界中的哈希管理器(控制流转移)。哈希管理器接收到从正常世界的拦截器得到的信息,根据图2所示的哈希方法计算此次控制流事件的哈希值,计算结束后将控制流恢复,最后控制流会从拦截器恢复到源程序,1out捕捉到了这个事件。这个过程的原理也叫inlinehook,其示意图如图4所示,即劫持原来的跳转指令,对其进行验证后返回。同理,2in,2out,3in,3out捕捉到的是函数a的进入和返回事件。

当程序运行结束以后,在图1的第步时哈希管理器会将计算的控制流图哈希值h发送给应答生成器,应答生成器同时接受请求c为参数,图1的第两步中利用存储在trustzone的密钥k来计算最终的验证报告r,并将其发送给验证端进行检验。

三、动态路径检验

当证明端将验证报告r发送给验证端时,验证端首先利用密钥k来对r进行解密,分解出请求c和哈希值h。

最后一步是图1中的第步,这一步针对解密出来的哈希值h进行校验。在数据库中存储的可信路径特征集hs中查找相应输入下对应的哈希值,当哈希值h存在于hs时,说明该目标程序的此次运行没有受到控制流的攻击,即目标平台仍然处于可信状态。否则的话说明此次运行的结果是不可信的,平台的完整性遭到了破坏。

所以,本发明中的动态完整性度量可以在trustzone安全世界的支持下,收集可信的路径信息,并对产生的控制流图哈希值进行检验。

总结来说,本发明是一种基于概率预测的嵌入式可变粒度控制流方法及系统,它能够验证嵌入式平台上软件的完整性,和以前的控制流验证方案相比,该发明的优点在于它能够平衡运行时性能和安全保障之间的关系。

提供以上实施例仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求书限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。

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