针对源代码的自动化形式化建模与验证的方法与系统

文档序号:29562227发布日期:2022-04-09 01:19阅读:302来源:国知局
针对源代码的自动化形式化建模与验证的方法与系统

1.本发明涉及计算机系统软、硬件自动化安全分析领域,尤其涉及一种针对源代码的自动化形式化建模与验证的方法与系统。


背景技术:

2.现如今,形式化建模与验证技术已在软件、硬件、安全协议等领域广泛应用。
3.在c语言程序验证领域,cpachecker(beyer d,keremoglu m e.cpachecker:a tool for configurable software verification[c]//international conference on computer aided verification.springer,berlin,heidelberg,2011:184-190.)是一个基于可配置程序分析的思想的模型检测工具;cbmc(kroening d,tautschnig m.cbmc

c bounded model checker[c]//international conference on tools and algorithms for the construction and analysis of systems.springer,berlin,heidelberg,2014:389-391.)利用了有界模型检测算法,在验证过程中限定了程序循环结构的展开上界;nusmv(cimatti a,clarke e,giunchiglia f,et al.nusmv:a new symbolic model verifier[c]//international conference on computer aided verification.springer,berlin,heidelberg,1999:495-499.)采用符号模型检测算法,在一定程度上压缩了待验证的状态空间。但是,上述工具对状态空间的缩减能力有限,且均使用了较为低效的状态空间搜索策略,这导致其难以在有限时间内完成对较大规模程序的验证工作。
[0004]
在智能合约验证领域,smartpulse(stephens j,ferles k,mariano b,et al.smartpulse:automated checking of temporal properties in smart contracts[c]//ieee s&p.2021.)可以将智能合约转换为buchi自动机并自动验证给定的时序属性;verx(permenev a,dimitrov d,tsankov p,et al.verx:safety verification of smart contracts[c]//2020ieee symposium on security and privacy(sp).ieee,2020:1661-1677.)使用符号执行和抽象解释技术验证人工定义的时序安全规范。这两个工作的问题在于需要人工提供智能合约的安全属性或规范,很难应用于智能合约的大规模自动验证。
[0005]
在安全协议验证领域,proverif(blanchet b.an efficient cryptographic protocol verifier based on prolog rules[c]//csfw.2001,1:82-96.)基于逻辑编程语言prolog规则,支持无限轮数协议的验证;maude-npa(escobar s,meadows c,meseguer j.maude-npa:cryptographic protocol analysis modulo equational properties[m]//foundations of security analysis and design v.springer,berlin,heidelberg,2009:1-50.)支持无限会话模型,不仅可以实现攻击和漏洞搜索,还可以实现安全性证明;tamarin(meier s,schmidt b,cremers c,et al.the tamarin prover for the symbolic analysis of security protocols[c]//international conference on computer aided verification.springer,berlin,heidelberg,2013:696-701.)基于多重集合改写规则描述协议流程,利用一阶逻辑量化协议消息和时间节点,从而实现对协议属性的描述,支持对
具有复杂控制流的协议的验证。这几类工具存在的主要问题在于其验证过程均基于静态策略,对于特定协议会出现证明无法终止的情况。
[0006]
在硬件验证领域,btormc(arminbiere,ainaniemetz,mathiaspreiner,et al.btor2,btormc and boolector3.0[j].international conference on computer aided verification,2018.)使用有界模型检测技术解决字级别的不变式问题;cosa(mattarei c,mann m,barrett c,et al.cosa:integrated verification for agile hardware design[c]//conference on formal methods in computer aided design.0.)基于k-归纳、等价性检查等技术验证安全性属性和活性属性;ebmc(mukherjee r,d kroening,melham t.hardware verification using software analyzers[c]//vlsi.ieee,2015.)将硬件描述语言翻译成等效的字级别ansi-c程序,使用基于路径的符号模拟和谓词抽象等验证指定的属性。这些工具主要验证硬件的功能性属性,缺乏对硬件安全属性的支持,同时所待验证的属性需要人为设置,无法自动生成。另外,它们仅适用于小规模的电路验证,对于上亿门级规模的电路将难以验证。


技术实现要素:

[0007]
本发明的目的是提供一种针对源代码的自动化形式化建模与验证的方法与系统,它是一种面向计算机系统软、硬件的通用且自动的形式化建模与验证方案,无需人工干预,可根据安全属性对目标软、硬件模型的状态空间进行有效压缩,并采用智能状态空间搜索算法,保证在有限时间内获得正确的验证结果。
[0008]
本发明的目的是通过以下技术方案实现的:
[0009]
(与权利要求相对应,暂略)
[0010]
由上述本发明提供的技术方案可以看出,整个过程都自动化进行,无需人工进行干预;具体而言,通过对状态空间的有效压缩和高效搜索,可在一定程度上解决状态空间爆炸的问题,进而可在有限时间内完成针对较大规模软、硬件源代码的形式化验证工作。
附图说明
[0011]
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他附图。
[0012]
图1为本发明实施例提供的一种针对源代码的自动化形式化建模与验证的方法的流程图;
[0013]
图2为本发明实施例提供的智能合约代码的示意图;
[0014]
图3为本发明实施例提供的一种c语言代码的示意图;
[0015]
图4为本发明实施例提供的一种针对源代码的自动化形式化建模与验证的系统的示意图;
[0016]
图5为本发明实施例提供的一种处理设备的示意图。
具体实施方式
[0017]
下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。
[0018]
首先对本文中可能使用的术语进行如下说明:
[0019]
术语“包括”、“包含”、“含有”、“具有”或其它类似语义的描述,应被解释为非排它性的包括。例如:包括某技术特征要素(如原料、组分、成分、载体、剂型、材料、尺寸、零件、部件、机构、装置、步骤、工序、方法、反应条件、加工条件、参数、算法、信号、数据、产品或制品等),应被解释为不仅包括明确列出的某技术特征要素,还可以包括未明确列出的本领域公知的其它技术特征要素。
[0020]
下面对本发明所提供的一种针对源代码的自动化形式化建模与验证的方法进行详细描述。本发明实施例中未作详细描述的内容属于本领域专业技术人员公知的现有技术。本发明实施例中未注明具体条件者,按照本领域常规条件或制造商建议的条件进行。
[0021]
如图1所示,一种针对源代码的自动化形式化建模与验证的方法,主要包括如下步骤:
[0022]
步骤1、获取待验证的源代码。
[0023]
本发明实施例中提供的是一种面向计算机系统软、硬件的通用且自动的形式化建模与验证方案,源代码包括但不限于通用软件语言、硬件描述语言、网络协议语言等,如c,c++,java,verilog,智能合约语言等。
[0024]
步骤2、结合给定的抽象策略抽象源代码运行过程,获得描述源代码执行时所有运行路径的属性无关模型。
[0025]
如图1所示,本步骤可通过通用形式化模型生成器实现。所述通用形式化模型生成器对源代码运行过程进行抽象,获得属性无关模型,并利用给定的抽象策略对属性无关模型的相关变量进行消减,获得最终的属性无关模型。具体来说:
[0026]
1)所生成的属性无关模型与具体的安全属性无关:属性无关模型仅代表抽象后的源代码运行过程,没有根据安全属性做进一步的抽象。该属性无关模型不能直接用于某个安全属性的安全性验证。
[0027]
2)对源代码的运行过程进行了抽象:根据已给定的抽象策略,生成器将属性无关模型中的相关变量进行消减,从而减少模型的状态空间。
[0028]
本发明实施例中,属性无关模型为一种形式化模型,包括但不限于如下模型:kripke结构模型、霍尔三元组模型、状态转移机模型、图灵机模型等。该属性无关模型描述了代码执行时的所有可能运行路径。
[0029]
本发明实施例中,所述抽象策略作为外部信息输入至所述通用形式化模型生成器中,或者将所述抽象策略内嵌固定在所述通用形式化模型生成器中。图1展示了抽象策略作为外部信息输入至所述通用形式化模型生成器情况下的示例。
[0030]
步骤3、结合给定的属性生成策略与源代码内容,获得安全属性集合。
[0031]
如图1所示,本步骤可通过安全属性生成器实现。所述安全属性生成器根据源代码的上下文智能判断是否存在安全风险,根据判断结果设定相应的安全属性,并结合给定的
属性生成策略对设定的安全属性进行缩减,获得安全属性集合。具体来说:
[0032]
1)根据源代码的上下文智能判断可能存在的安全风险,从而设定安全属性:例如,利用已有的关键词来判断可能存在的风险,如出现malloc关键词等,则生成相关的堆属性;如出现send关键词等,则生成相关并发属性或网络安全属性等。例如,判断模块间的耦合关系,从而判断是否设定局部属性或全局属性等。此处主要目的是减少无用的属性,以提高形式化验证的判断效率,并减少误报的可能。
[0033]
2)已给定的属性生成策略用于进一步缩减无用的安全属性。例如:若某源代码仅关注内存堆的安全,则属性生成策略仅包含该安全属性的设定,安全属性生成器可根据属性生成策略排除其它无关的策略。因此,属性生成策略进一步减少无用的属性,提高自动化验证效率。
[0034]
本发明实施例中,安全属性指代程序运行的某个时刻或运行结束后所需要满足的要求,如可达性、私密性等等,安全属性的表达方式包括但不限于ltl、ctl等约束表达式。
[0035]
本发明实施例中,所述属性生成策略作为外部信息输入至所述安全属性生成器中,或者将所述属性生成策略内嵌固定在所述安全属性生成器中。图1展示了属性生成策略作为外部信息输入至所述安全属性生成器情况下的示例。
[0036]
步骤4、结合所述属性无关模型与安全属性集合,获得一系列约束求解问题。
[0037]
如图1所示,本步骤可通过属性相关模型生成器实现。所述属性相关模型生成器利用安全属性集合对所述属性无关模型进行抽象,获得一系列约束求解问题,并且降低所述属性无关模型的状态空间,从而降低某个安全属性的验证难度。
[0038]
本发明实施例中,约束求解问题描述了一个包含多个变量的系统,变量之间存在多个约束关系,问题的求解目标为判定是否存在一组关于这些变量的解,以满足所有的约束关系。一般而言,如果约束求解问题存在解,则对应的某个安全属性不成立,该解即为违背其安全属性的一个反例;反之,若不存在解,则安全属性成立。约束关系表达方式包括但不限于如下形式:命题逻辑、一阶逻辑、高阶逻辑、时态逻辑等。
[0039]
步骤5、对每一约束求解问题进行验证,将所有验证结果汇总作为源代码的验证结果。
[0040]
如图1所示,本步骤可通过验证器实现;每一验证器对应的输入单个约束求解问题,所有验证器的输出最终汇总(即所有的验证结果列在一起),构成源代码的验证结果。
[0041]
本发明实施例中,每一验证器均包括:选项生成器和选择引擎;其中:
[0042]
1)选项生成器输入约束求解问题,输出一种树结构;树根代表验证目标所对应的命题,每个节点的子节点代表验证相应节点是否成立时可用的一个选项命题,叶子节点为假设一定成立的命题;
[0043]
本发明实施例中,树结构的生成过程是按需的。当需要获取某个节点的所有子节点时,才需要计算得出其子节点,具体的在树的游走过程中,当需要探索某个节点的子节点时,需要构建相关子节点,然后用于探索。该过程的目的是降低树生成过程的计算和内存开销。
[0044]
2)选择引擎的输入为树结构和当前所探索节点的子节点(作为备选项),输出为选项,即验证结果;选定当前所探索节点的子节点后,相当于探索了一步,不断使用选择引擎,使得不断进行探索,最终到达叶子节点后,所形成的探索路径即为验证结果。
[0045]
本发明实施例中,选择引擎的选择算法可利用机器学习算法进行选择,包括但不限于dqn等深度学习或强化学习等算法。
[0046]
本发明实施例上述方案,全过程都自动化进行,无需人工进行干预。具体而言,通过对状态空间的有效压缩和高效搜索,可在一定程度上解决状态空间爆炸的问题,进而可在有限时间内完成针对较大规模软、硬件源代码的形式化验证工作。
[0047]
为了便于理解,下面结合两个具体示例对本发明上述方案进行说明。
[0048]
示例1
[0049]
如图2所示,为本示例获取的智能合约代码,参照前述方案执行如下步骤:
[0050]
1、通用形式化模型生成器:输入源代码和已给定的抽象策略,输出一个多重集合复写系统(即属性无关模型)来描述代码执行时的所有可能运行路径。该多重集合复写系统中对源代码中的相关变量进行了符号化。
[0051]
2、安全属性生成器:首先根据代码第15行的关键词transfer,生成不变式属性,要求交易执行中保持各个账户的amount之和加上以太币余额之和保持不变。接着,根据gift函数以及withdraw函数对全局变量存在的读写静态,生成等价属性,要求调用这两个函数的交易执行顺序不影响各个账户的以太币余额。最后,假设给定属性生成策略是关注以太币余额安全,则上述安全属性都被保留。
[0052]
3、属性相关模型生成器:输入属性无关模型和安全属性集合,输出一系列约束求解问题。根据不变式属性以及等价属性以交易为单位的特性,对属性无关模型模拟的无限轮次交易执行进行修改,使得最终模型每次只模拟一次或有限次交易执行。接着,将已有模型的验证目标转化为可达性问题,即不变式属性或等价属性不成立的前提下,withdraw函数以及gift函数是否可以执行完成。若可以,则求解对应执行路径上的约束是否可以被同时满足。
[0053]
4、验证器:多个验证器同时求解上述可达性问题及约束求解问题。每个验证器的选择生成器输入约束求解问题,输出一种树结构。树根代表验证目标所对应的命题,每个节点的子节点代表验证该节点是否成立时所可用的一个选项命题,叶子节点为约束系统中假设一定成立的命题。选择引擎使用dqn,在上述树结构中选择一个叶子节点继续进行选项生成,直到陷入死循环,此时选择引擎为当前树上的路径赋负奖励值,并重新根据起始目标生成树结构,直到完成问题求解,获得验证结果。
[0054]
示例2
[0055]
如图3所示,为本示例获取的c语言代码,参照前述方案执行如下步骤:
[0056]
1、通用形式化模型生成器:输入源代码和已给定的抽象策略,输出一个以程序控制流和数据流为基础的自动机模型(即属性无关模型)。
[0057]
2、安全属性生成器:根据代码的第15行和第16行的运算规律,得出该循环的目的是确保largest大于array[x]中的每一个元素,而array[]的长度为size。因此,为验证第14行至第18行的循环体是否可以被正确运行,需生成如下断言:
[0058]
int x;
[0059]
for(x=0;x《size;x++){
[0060]
__verifier_assert(largest》=array[x]);
[0061]
}
[0062]
上述断言即为生成的安全属性,将上述断言置于代码尾部,将对上述c语言程序的验证问题转化为assertion中的条件是否可达的问题。
[0063]
3、属性相关模型生成器:输入属性无关模型和安全属性集合,输出一系列约束求解问题。为降低目标程序待验证模型的状态空间规模,生成器根据assertion中的关键变量largest以及array[x]对上述c语言程序进行纵向切片与横向分块。接下来,分别将每一个程序块以及切片片段转化为一个约束求解式,进而计算上述约束求解式组是否可解,即沿着不同的控制流路径,程序中的assertion是否可达。
[0064]
4、验证器:多个验证器同时求解上述可达性问题及约束求解问题。每个验证器的选择生成器输入一个约束求解问题,输出一种树结构。树根代表验证目标所对应的命题,每个节点的子节点代表验证该节点是否成立时所可用的一个选项命题,叶子节点为约束系统中假设一定成立的命题。选择引擎使用a3c网络,在上述树结构中选择一个叶子节点继续进行选项生成。若验证过程中出现了虚假反例(spurious counterexample),此时选择引擎为当前树上的路径赋负奖励值,并重新根据起始目标生成树结构,直到完成问题求解,生成正确的验证结果。
[0065]
本发明另一实施例还提供一种针对源代码的自动化形式化建模与验证的系统,其主要用于实现前述实施例提供的方法,如图4所示,该系统主要包括:
[0066]
源代码获取单元,用于获取待验证的源代码;
[0067]
通用形式化模型生成器,用于结合给定的抽象策略抽象源代码运行过程,获得描述源代码执行时所有运行路径的属性无关模型;
[0068]
安全属性生成器,用于结合给定的属性生成策略与源代码内容,获得安全属性集合;
[0069]
属性相关模型生成器,用于结合所述属性无关模型与安全属性集合,获得一系列约束求解问题;
[0070]
验证器,用于对每一约束求解问题进行验证,将所有验证结果汇总作为源代码的验证结果。
[0071]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
[0072]
需要说明的是,上述系统所涉及的主要技术细节在之前的方法实施例中已经做了详细的介绍,故不再赘述。
[0073]
本发明另一实施例还提供一种处理设备,如图5所示,其主要包括:一个或多个处理器;存储器,用于存储一个或多个程序;其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现前述实施例提供的方法。
[0074]
进一步的,所述处理设备还包括至少一个输入设备与至少一个输出设备;在所述处理设备中,处理器、存储器、输入设备、输出设备之间通过总线连接。
[0075]
本发明实施例中,所述存储器、输入设备与输出设备的具体类型不做限定;例如:
[0076]
输入设备可以为触摸屏、图像采集设备、物理按键或者鼠标等;
[0077]
输出设备可以为显示终端;
[0078]
存储器可以为随机存取存储器(random access memory,ram),也可为非不稳定的存储器(non-volatile memory),例如磁盘存储器。
[0079]
本发明另一实施例还提供一种可读存储介质,存储有计算机程序,当计算机程序被处理器执行时实现前述实施例提供的方法。
[0080]
本发明实施例中可读存储介质作为计算机可读存储介质,可以设置于前述处理设备中,例如,作为处理设备中的存储器。此外,所述可读存储介质也可以是u盘、移动硬盘、只读存储器(read-only memory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。
[0081]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1