本发明专利技术公开了面向C源码的自动化形式化验证工具及方法,将编写好的代码功能规范插入C源码中,然后将功能规范和C源码自动转换成程序验证器可处理的中间表示,接着程序验证器将中间表示转换成中间验证语言代码,供形式化验证输入使用;采用形式化方法,可对转换的源代码进行自动化的形式化验证,以验证源代码的功能性和安全性。在各接口函数通过代码功能正确性验证的基础上,利用行为建模语言和组合验证技术构建抽象模型;然后利用模型仿真引擎和属性检测引擎模拟交互行为,验证安全属性,判断代码是否满足安全属性规范。本发明专利技术能够以自动化的形式,实现对C源码的形式化验证,其中使用的中间表示生成器可以自动化生成中间表示,程序验证器可以自动化生成中间验证语言代码,模型仿真引擎和属性检测引擎可以自动化验证安全属性,这些措施可以极大的提高C源码验证的效率,减少人工参与度。减少人工参与度。减少人工参与度。
【技术实现步骤摘要】
面向C源码的自动化形式化验证工具及方法
[0001]本专利技术涉及C语言源代码安全
,具体涉及面向C源码的自动化形式化验证工具及方法。
技术介绍
[0002]形式化验证方法是使用数学的公式、定理和系统来验证一个系统的正确性。形式化验证过程可以证明一个系统不存在某个缺陷或符合某个或某些属性。软件测试无法证明系统不存在缺陷,也不能证明它符合一定的属性。系统无法被证明或测试为无缺陷,这是因为不可能形式地规定什么是“没有缺陷”。所有可以做的,就是证明一个系统没有任何可以想到的缺陷,并且满足所有的功能规范和安全属性。
[0003]C语言是一种通用的编程语言,由于具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐,应用于许多重点领域。如果C语言程序设计出现漏洞,或将产生重大损失。形式化验证方法可以很好的检验和验证C语言代码的漏洞,但传统的形式化验证方法主要依赖于手工验证,工作量大,效率较低,并且对使用形式化验证方法的程序员要求较高。
技术实现思路
[0004]本专利技术的目的在于提供一种面向C源码的自动化形式化验证工具及方法,解决上述C语言代码面临的安全问题以及传统形式化验证工作量大、验证效率低的问题。
[0005]本专利技术通过下述技术方案实现:面向C源码的自动化形式化验证工具,包括:中间表示生成器:用于将C源码和插入的功能规范转换成中间表示,并输入到程序验证器;程序验证器:用于接收中间表示,并将中间表示转换成C代码类型、语义一致的中间验证语言代码,并输入到自动化验证模块,由自动化验证模块的自动化验证器对该中间验证语言代码进行自动化的形式化验证,得出验证结果;自动化验证模块:用于提供多种自动化验证器,可根据用户的输入参数对自动化验证进行配置;抽象模型编译器:用于接收建模语言编写的代码,并将建模代码编译成为抽象模型;模型仿真引擎:用于根据仿真的输入参数对抽象模型进行仿真模拟,输出仿真模拟的过程中抽象模型的各种状态和属性;属性检测引擎:用于接收用特定语法编写的安全属性公式,并利用模型仿真引擎和生成的抽象模型模拟交互行为,验证安全属性公式定义的安全属性,得出验证结果。
[0006]本专利技术面向C源码的自动化形式化验证工具,将C源码和根据其功能要求编写的功能规范导入形式化验证工具的中间表示生成器,能够自动化地生成程序验证器所需的中间表示,程序验证器接收中间表示后自动转换成中间验证语言代码,然后输入到自动化验证
模块进行验证,能够得出代码功能正确性的验证结果;在各接口函数通过代码功能正确性验证的基础上,利用行为建模语言编写建模代码,输入到抽象模型编译器中生成抽象模型,然后利用模型仿真引擎和属性检测引擎模拟交互行为,验证安全属性,能够判断代码是否满足安全属性规范。本专利技术工具能够以较高程度的自动化,对C源码进行形式化安全验证,其中使用的中间表示生成器可以自动化生成中间表示,程序验证器可以自动化生成中间验证语言代码,模型仿真引擎和属性检测引擎可以自动化验证安全属性,这些措施可以极大的提高C源码验证的效率,减少人工参与度。
[0007]面向C源码的自动化形式化验证方法,包括以下步骤:步骤001:使用自然语言编写C源码的功能需求描述文档,C源码的功能需求描述文档包括目标C源码功能规范描述和安全属性描述;步骤002:根据C源码函数之间的交互关系,抽象出一个有限状态机;步骤003:借助步骤001中文档描述的目标C源码功能规范和霍尔逻辑,生成C语言描述的C源码功能规范;步骤004:将C语言描述的C源码功能规范插入C源码中,然后进行代码功能正确性自动化形式化验证,得到功能正确性验证报告;步骤005:在各接口函数通过功能正确性验证的基础上,借助步骤002中所得到的有限状态机,定义出状态变量和转移关系,然后用建模语言编写建模代码;步骤006:借助步骤001中文档描述的安全属性,利用线性时序逻辑(LTL)构建安全属性公式;步骤007:借助步骤005中得到的建模代码和步骤006中得到的安全属性公式,进行安全属性自动化形式化验证,得到安全属性验证报告。
[0008]进一步地,代码功能正确性验证的自动化形式化验证步骤包括:步骤101:接收插入功能规范后的C源码,并将其输入到中间表示生成器,以生成中间表示;步骤102:将步骤101中产生的中间表示导入到程序验证器中,转换成C代码类型、语义一致的中间验证语言代码,并输入到自动化验证器模块中;步骤103:由自动化验证器根据输入参数的配置对步骤102中生成的中间验证语言代码进行验证,如果验证失败,生成验证失败报告,给出反例,说明该C源码不符合功能规范,再修改源代码,然后从步骤101开始重新对代码进行功能正确性验证;如果验证成功,则生成验证成功的结果,如果验证失败,再次重复此步骤,直到验证通过,生成正确的验证结果为止。
[0009]进一步地,安全属性验证的自动化形式化验证步骤包括:步骤201:接收建模代码,并将其输入到抽象模型编译器,生成抽象模型;步骤202:将步骤201中产生的抽象模型导入模拟仿真引擎中;步骤203:将安全属性公式输入到属性检测引擎中,属性检测引擎会调用模拟仿真引擎对抽象模型进行模拟仿真,并在仿真模拟过程中验证公式定义的安全属性,如果验证失败,说明该C源码不符合安全属性的定义,再修改源代码,然后从步骤201开始重新对代码进行安全属性验证;如果验证成功,则生成验证成功的结果,如果验证失败,再次重复此步骤,直到验证通过,生成正确的验证结果为止。
[0010]进一步讲所述步骤203是:属性检测引擎接收人工编写的安全属性公式,判断该安全属性公式是否符合公式的语法要求,然后接收待检测的抽象模型,该抽象模型是由根据待检测代码的抽象状态机编写的建模代码编译而来。为提高验证效率,属性检测引擎会调用仿真模拟引擎来模拟抽象模型的交互行为,在用户设定的模拟参数下检测抽象模型的每一个状态转移路径是否满足安全属性定义,如果在检测的所有状态转移路径中安全属性的定义都被满足,则表明被验证的程序符合所期望的验证属性,会生成一个验证属性为真的验证结果;否则验证失败,说明源程序不符合用户设定的安全属性,存在安全问题。对于验证失败的情况,将重新修改C源码程序,并重新修改建模代码重新生成抽象模型,并重新验证,多次反复,直到验证通过为止。
[0011]本专利技术与现有技术相比,具有如下的优点和有益效果:1、本专利技术面向C源码的自动化形式化验证系统,能够以较高程度的自动化,实现对C源码的形式化验证,其中使用中间表示生成器能够自动化生成程序验证器所需要的中间表示,程序验证器则能够自动生成中间验证语言供自动化验证器进行验证,属性验证引擎能够自动调用模拟仿真引擎模拟抽象模型的交互行为以自动化的检测程序的安全属性,这些措施能够极大的提高C源码形式化验证的效率,减少人工参与度;2、本专利技术面向C源码的自动化形式化验证方法,能够对转换后的中间验证语言代码进行自动化的验证,证明源码的功能性是否符合预期,并且证明源代码是否存在逻辑漏洞,同时还能够利用抽象建模和安全属性检测证明源代码的实现是否符合安全属本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.面向C源码的自动化形式化验证工具,其特征在于包括:中间表示生成器:用于将C源码和插入的功能规范转换成中间表示,并输入到程序验证器;程序验证器:用于接收中间表示,并将中间表示转换成C代码类型、语义一致的中间验证语言代码,并输入到自动化验证模块,由自动化验证模块的自动化验证器对该中间验证语言代码进行自动化的形式化验证,得出验证结果;自动化验证模块:用于提供多种自动化验证器,可根据用户的输入参数对自动化验证进行配置;抽象模型编译器:用于接收建模语言编写的代码,并将建模代码编译成为抽象模型;模型仿真引擎:用于根据仿真的输入参数对抽象模型进行仿真模拟,输出仿真模拟的过程中抽象模型的各种状态和属性;属性检测引擎:用于接收用特定语法编写的安全属性公式,并利用模型仿真引擎和生成的抽象模型模拟交互行为,验证安全属性公式定义的安全属性,得出验证结果。2.根据权利要求1所述面向C源码的自动化形式化验证工具,其特征在于所述程序验证器包括:高精度的内存建模:进行C源码验证时,程序验证器处理内存访问的最小粒度为字节级别,可对源码中常见的整形溢出、缓冲区溢出、类型安全等安全漏洞进行自动检测验证。3.根据权利要求1所述面向C源码的自动化形式化验证工具,其特征在于所述抽象模型编译器包括:交互验证:进行抽象模型建模时,可以引用C源码中的定义,实现交互验证,降低验证复杂度。4.面向C源码的自动化形式化验证方法,其特征在于包括以下步骤:步骤001:使用自然语言编写C源码的功能需求描述文档,C源码的功能需求描述文档包括目标C源码功能规范描述和安全属性描述;步骤002:根据C源码函数之间的交互关系,抽象出一个有限状态机;步骤003:借助步骤001中文档描述的目标C源码功能规范和霍尔逻辑,生成C语言描述的C源码功能规范;步骤004:将C语言描述的C源码功能规范插入C源码中,然后进行功能正确性自动化形式化验证,得到功能正确性验证报告;步骤005:在...
【专利技术属性】
技术研发人员:杨霞,郭文生,张冯博,卢秀台,高扬,熊宇,万俊,闫哲,林珍珍,任超,郑旭东,
申请(专利权)人:电子科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。