CN115310095A - 一种区块链智能合约混合形式化验证方法及系统 - Google Patents
一种区块链智能合约混合形式化验证方法及系统 Download PDFInfo
- Publication number
- CN115310095A CN115310095A CN202210947911.XA CN202210947911A CN115310095A CN 115310095 A CN115310095 A CN 115310095A CN 202210947911 A CN202210947911 A CN 202210947911A CN 115310095 A CN115310095 A CN 115310095A
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- code
- function
- library
- source code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Abstract
本发明公开了一种区块链智能合约混合形式化验证方法及系统,通过对智能合约依赖库以及智能合约源码模型进行插装编译,使智能合约依赖库以及智能合约源码模型具备了符号执行能力;相比传统源码级插装代码验证分析将受益于编译优化性能提升,节约了传统符号执行引擎解释执行时对符号表达式的处理时间;相比传统动态字节码或机器码插装,极大地降低了动态执行时对于不同测试输入而重复插装造成的系统性能损失,从而提高了执行效率。本发明通过生成新的测试用例,以快速测试不同的程序路径,提高复杂逻辑智能合约的代码缺陷检测精确度。本发明通过设置多种执行策略,当达到触发条件时,则执行对应的执行策略,从而提高验证效率。
Description
技术领域
本发明涉及区块链智能合约安全技术领域,具体涉及一种区块链智能合约混合形式化验证方法及系统。
背景技术
在区块链技术背景下,智能合约是指运行在区块链上,能够执行某些功能的程序代码。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可追踪且不可篡改。由于区块链不可篡改特性,一旦因自身设计的缺陷,导致智能合约遭受攻击,或将产生不可逆转的重大损失。
随着区块链技术在金融以及政务等领域的逐渐产业化落地,区块链智能合约的业务逻辑呈现出多样化和复杂化的发展趋势。为满足业务需求,智能合约需要实现更复杂的逻辑并依赖大量的特定功能库,进行大量的计算密集型运算。在现有技术中,常常需要对智能合约进行验证,获取其代码缺陷,以使工作人员对智能合约代码进行优化。但是,现有技术验证时,执行效率低,难以在合理时间内得到高精度的代码缺陷验证结果。
发明内容
本申请的目的在于提供一种区块链智能合约混合形式化验证方法及系统,解决了现有技术执行效率低的问题。
本发明通过下述技术方案实现:
第一方面,本发明提供一种区块链智能合约混合形式化验证方法,包括:
获取区块链智能合约对应的功能规范文档、安全属性规范文档以及智能合约源代码;
将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型;
获取智能合约源码模型所需要的智能合约依赖库,所述智能合约依赖库表示执行智能合约源码模型所需要的程序库或者数据库;
将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码,所述依赖库码以及智能合约码均为机器码或者字节码;
获取测试用例,所述测试用例用于表征执行智能合约码时的输入数据;
以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果;
根据所述漏洞验证结果,获取智能合约漏洞验证文档。
进一步地,所述功能规范文档包括智能合约源代码中函数的前置功能规范以及后置功能规范,安全属性规范文档包括智能合约源代码中函数的前置安全规范以及后置安全规范;
将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型,包括:
将功能规范文档、安全属性规范文档以及智能合约源代码顺次解析为抽象语法树,得到功能规范抽象语法树、安全属性规范抽象语法树以及智能合约抽象语法树;
将功能规范抽象语法树中前置功能规范对应部分嵌入智能合约抽象语法树中函数的入口后,将功能规范抽象语法树中后置功能规范对应部分嵌入智能合约抽象语法树中函数的出口前;
将安全属性规范抽象语法树中前置安全规范对应部分嵌入智能合约抽象语法树中函数的入口后,将安全属性规范抽象语法树中后置安全规范对应部分嵌入智能合约抽象语法树中函数的出口前,得到智能合约源码模型。
进一步地,将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码,包括:
将智能合约依赖库以及智能合约源码模型编译为机器码或者字节码,分别得到第一数据码以及第二数据码;
确定第一数据码和/或第二数据码中符号约束所在的目标位置,并在目标位置插入符号约束构建求解函数的调用函数,分别得到依赖库码以及智能合约码。
进一步地,以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果,包括:
以依赖库码为支持,以测试用例为输入,执行智能合约码,获取违反安全属性规范和/或功能规范的程序路径;
将程序路径以及程序路径对应的测试用例作为漏洞验证结果。
进一步地,执行智能合约码时,若存在符号约束,则根据该符号约束对应的符号约束构建求解函数的调用函数,从符号约束构建求解库中调用对应的符号约束构建求解函数,并进行符号求解。
进一步地,执行智能合约码时,判断执行过程是否触发执行策略对应的触发条件,若是,则执行对应的执行策略,否则不进行操作,按原策略继续执行智能合约码;
其中,所述执行策略与触发条件一一对应。
进一步地,执行智能合约码后,还包括:
根据智能合约码执行的程序路径以及符号求解结果,确定新的测试用例,所述新的测试用例用于探索尚未执行的程序路径;
以依赖库码为支持,以新的测试用例为输入,执行智能合约码,获取漏洞验证结果。
第二方面,本发明提供一种区块链智能合约混合形式化验证系统,包括源码建模器、插装编译模块、模糊测试模块、混合执行模块以及智能合约漏洞验证文档生成器;
所述源码建模器用于,获取区块链智能合约对应的功能规范文档、安全属性规范文档以及智能合约源代码,将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型;所述功能规范文档以及安全属性规范文档所采用的编写语言与智能合约源代码所采用的编写语言相同;
所述插装编译模块用于,获取智能合约源码模型所需要的智能合约依赖库,所述智能合约依赖库表示执行智能合约源码模型所需要的程序库或者数据库;将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码;
所述模糊测试模块用于,生成以及存储测试用例;
所述混合执行模块用于,获取测试用例,所述测试用例用于表征执行智能合约码时的输入数据;以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果;
所述智能合约漏洞验证文档生成器用于,根据所述漏洞验证结果,获取智能合约漏洞验证文档。
进一步地,所述插装编译模块包括编译配置单元、常规编译单元以及插装单元;
所述编译配置单元用于,获取智能合约源码模型所需要的智能合约依赖库;
所述常规编译单元用于,将智能合约依赖库以及智能合约源码模型编译为机器码或者字节码,分别得到第一数据码以及第二数据码;
所述插装单元用于,确定第一数据码和/或第二数据码中符号约束所在的目标位置,并在目标位置插入符号约束构建求解函数的调用函数,分别得到依赖库码以及智能合约码。
进一步地,所述混合执行模块包括指令执行单元、符号约束构建求解库以及启发策略库;
所述指令执行单元用于,以依赖库码为支持,以测试用例为输入,执行智能合约码,获取违反安全属性规范和/或功能规范的程序路径;将程序路径以及程序路径对应的测试用例作为漏洞验证结果;
所述符号约束构建求解库用于,执行智能合约码时,若存在符号约束,则根据该符号约束对应的符号约束构建求解函数的调用函数,从符号约束构建求解库中调用对应的符号约束构建求解函数,并进行符号求解;
所述启发策略库用于,执行智能合约码时,判断执行过程是否触发执行策略对应的触发条件,若是,则执行对应的执行策略,否则不进行操作,按原策略继续执行智能合约码;其中,所述执行策略与触发条件一一对应。
本发明与现有技术相比,具有如下的优点和有益效果:
(1)本发明提供了一种区块链智能合约混合形式化验证方法及系统,通过对智能合约依赖库以及智能合约源码模型进行插装编译,使智能合约依赖库以及智能合约源码模型具备了符号执行能力;相比传统源码级插装代码验证分析将受益于编译优化性能提升,节约了传统符号执行引擎解释执行时对符号表达式的处理时间;相比传统动态字节码或机器码插装,极大地降低了动态执行时对于不同测试输入而重复插装造成的系统性能损失,从而提高了执行效率。
(2)本发明通过生成新的测试用例,以快速测试不同的程序路径,提高复杂逻辑智能合约的代码缺陷检测精确度。
(3)本发明通过设置多种执行策略,当达到触发条件时,则执行对应的执行策略,从而提高验证效率。
附图说明
为了更清楚地说明本发明示例性实施方式的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。在附图中:
图1为本发明实施例提供的一种区块链智能合约混合形式化验证方法的流程图;
图2为本发明实施例提供的一种区块链智能合约混合形式化验证系统的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明作进一步的详细说明,本发明的示意性实施方式及其说明仅用于解释本发明,并不作为对本发明的限定。
实施例1
如图1所示,本发明提供一种区块链智能合约混合形式化验证方法,包括:
S11、获取区块链智能合约对应的功能规范文档、安全属性规范文档以及智能合约源代码,功能规范文档以及安全属性规范文档所采用的编写语言与智能合约源代码所采用的编写语言相同。
若功能规范文档以及安全属性规范文档所采用的编写语言与智能合约源代码所采用的编写语言不同,则先将功能规范文档以及安全属性规范文档进行转换,使功能规范文档以及安全属性规范文档所采用的编写语言与智能合约源代码所采用的编写语言相同。
S12、将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型。
例如:功能性规范通过匹配函数名,将规范的前后置条件分别嵌入函数的入口后和出口前;全局不变量安全属性嵌入到所有函数的入口后和出口前,即保证任意函数执行前后都需要满足的安全属性;函数相关安全属性,则只需嵌入到相关函数的入口后和出口前。
S13、获取智能合约源码模型所需要的智能合约依赖库,智能合约依赖库表示执行智能合约源码模型所需要的程序库或者数据库。
智能合约依赖库为第三方程序库或者数据库,例如:字符串处理库或安全数学库等,即智能合约代码所需要的库。
S14、将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码,依赖库码以及智能合约码均为机器码或者字节码。
可以通过以下方式将智能合约依赖库以及智能合约源码模型进行插装编译:先将智能合约依赖库以及智能合约源码模型翻译为目标机器码,再对目标机器码执行符号化插装,使目标机器码具备符号处理能力,得到依赖库码以及智能合约码。
目标机器码可以是指目标设备运行智能合约码所采用的语言。
S15、获取测试用例,测试用例用于表征执行智能合约码时的输入数据。
S16、以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果。
S17、根据漏洞验证结果,获取智能合约漏洞验证文档。
在本实施例中,功能规范文档包括智能合约源代码中函数的前置功能规范以及后置功能规范,安全属性规范文档包括智能合约源代码中函数的前置安全规范以及后置安全规范。
值得注意的是,与功能规范不同,安全属性规范有一种特殊情况,即安全属性规范的前置安全规范和后置安全规范可以完全相同,即安全属性不变量,也是需要分别插入函数的入口和出口处,保证执行前后都要满足的属性。
将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型,包括:
将功能规范文档、安全属性规范文档以及智能合约源代码顺次解析为抽象语法树,得到功能规范抽象语法树、安全属性规范抽象语法树以及智能合约抽象语法树。
将功能规范抽象语法树中前置功能规范对应部分嵌入智能合约抽象语法树中函数的入口后,将功能规范抽象语法树中后置功能规范对应部分嵌入智能合约抽象语法树中函数的出口前。
将安全属性规范抽象语法树中前置安全规范对应部分嵌入智能合约抽象语法树中函数的入口后,将安全属性规范抽象语法树中后置安全规范对应部分嵌入智能合约抽象语法树中函数的出口前,得到智能合约源码模型。
在本实施例中,将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码,包括:
将智能合约依赖库以及智能合约源码模型编译为机器码或者字节码,分别得到第一数据码以及第二数据码。
确定第一数据码和/或第二数据码中符号约束所在的目标位置,并在目标位置插入符号约束构建求解函数的调用函数,分别得到依赖库码以及智能合约码。
通过插入符号约束构建求解函数的调用函数,可以调用符号约束构建求解函数,因此符号执行能力被编译进了目标程序,成为目标程序的一部分,可以使混合执行引擎性能得益于CPU的性能优化(如,缓存、分支预测优化)提升。同时,相比传统源码级插装代码验证分析将受益于编译优化性能提升,节约了传统符号执行引擎解释执行时对符号表达式的处理时间,相比传统动态字节码或机器码插装,极大地降低了动态执行时对于不同测试输入而重复插装造成的系统性能损失。
值得说明的是,可以根据实际需求,选择部分智能合约依赖库和/或部分智能合约源码模型进行插装编译,而不插装的程序模块则真实执行,可以有效解决约束求解器被堵塞在个别求解难题中而无法继续探索其他程序路径,导致混合验证系统整体程序路径覆盖率低以及漏报率高的问题。
得到依赖库码以及智能合约码之后,可以链接智能合约码以及依赖库码,生成完整的可执行的组合机器码,然后就可以对该组合机器码进行验证。
在本实施例中,以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果,包括:
以依赖库码为支持,以测试用例为输入,执行智能合约码,获取违反安全属性规范和/或功能规范的程序路径;
将程序路径以及程序路径对应的测试用例作为漏洞验证结果。
例如:如果一条路径违反了功能规范或安全属性规范则会报告该条路径并给出可到达该路径的测试用例。例如:规范为assert(a>10);如果某条路径能使a的值变为9(不大于10),并且该路径经过了assert(a>10)规范断言,那么就违反了规范。
智能合约依赖库或者智能合约码可能包含多个函数或者子程序,在输入参数不同时,执行的函数或者子程序不同,被执行过的函数或者子程序组合起来就可以认为是一条程序路径。
在本实施例中,执行智能合约码时,若存在符号约束,则根据该符号约束对应的符号约束构建求解函数的调用函数,从符号约束构建求解库中调用对应的符号约束构建求解函数,并进行符号求解。
在本实施例中,执行智能合约码时,判断执行过程是否触发执行策略对应的触发条件,若是,则执行对应的执行策略,否则不进行操作,按原策略继续执行智能合约码;其中,执行策略与触发条件一一对应。
例如:对长时间无法求解的约束,可以选择约束表达式的一部分进行求解。
在本实施例中,执行智能合约码后,还包括:
根据智能合约码执行的程序路径以及符号求解结果,确定新的测试用例,所述新的测试用例用于探索尚未执行的程序路径。
以依赖库码为支持,以新的测试用例为输入,执行智能合约码,获取漏洞验证结果。
可选的,还可以对新的测试用例进行过滤或者变异操作,过滤操作可以包括:将已有的测试用例与新的测试用例进行对比,若新的测试用例与已有的测试用例相同,则滤除该新的测试用例。变异操作可以包括:将新的测试用例进行变化,得到更多的测试用例,以覆盖新的程序路径。
实施例2
如图2所示,本发明提供一种区块链智能合约混合形式化验证系统,包括源码建模器、插装编译模块、模糊测试模块、混合执行模块以及智能合约漏洞验证文档生成器。
源码建模器用于,获取区块链智能合约对应的功能规范文档、安全属性规范文档以及智能合约源代码,将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型;功能规范文档以及安全属性规范文档所采用的编写语言与智能合约源代码所采用的编写语言相同。
例如:获取响应于人机交互的功能规范文档和安全属性规范文档,并将待验证Fabric-go智能合约源码一起输入到源码建模器。源码建模器首先分别将安全属性规范文档、功能规范文档和智能合约源代码解析成抽象语法树形式,然后将安全性以及功能性规范抽象语法树嵌入到智能合约抽象语法树中,最后转换生成插装编译模块可接收的包含形式化规范的Fabric-go智能合约源码模型。
插装编译模块用于,获取智能合约源码模型所需要的智能合约依赖库,智能合约依赖库表示执行智能合约源码模型所需要的程序库或者数据库;将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码。
例如:根据形式化验证需求,使用插装编译模块中的编译配置单元功能在Fabric-go智能合约源码模型和智能合约依赖库中选择需要符号插装的程序模块。可以将Fabric-go智能合约源码模型选为插装模块,而智能合约依赖库选为非插装模块。编译配置完成后,插装编译模块中的插装单元在编译阶段对Fabric-go对应的x86机器码插入符号约束构建求解的函数调用接口,完成符号化插装,得到已插装的x86机器码。插装编译模块中的常规编译单元将非插装模块直接编译成x86机器码并且链接已插装的x86机器码,最终生成完整的可执行x86机器码。
模糊测试模块用于,生成以及存储测试用例。
混合执行模块用于,获取测试用例,测试用例用于表征执行智能合约码时的输入数据;以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果。
智能合约漏洞验证文档生成器用于,根据漏洞验证结果,获取智能合约漏洞验证文档。
在本实施例中,插装编译模块包括编译配置单元、常规编译单元以及插装单元。
编译配置单元用于,获取智能合约源码模型所需要的智能合约依赖库。
常规编译单元用于,将智能合约依赖库以及智能合约源码模型编译为机器码或者字节码,分别得到第一数据码以及第二数据码。
插装单元用于,确定第一数据码和/或第二数据码中符号约束所在的目标位置,并在目标位置插入符号约束构建求解函数的调用函数,分别得到依赖库码以及智能合约码。
在本实施例中,混合执行模块包括指令执行单元、符号约束构建求解库以及启发策略库;
指令执行单元用于,以依赖库码为支持,以测试用例为输入,执行智能合约码,获取违反安全属性规范和/或功能规范的程序路径;将程序路径以及程序路径对应的测试用例作为漏洞验证结果;
符号约束构建求解库用于,执行智能合约码时,若存在符号约束,则根据该符号约束对应的符号约束构建求解函数的调用函数,从符号约束构建求解库中调用对应的符号约束构建求解函数,并进行符号求解。
启发策略库用于,执行智能合约码时,判断执行过程是否触发执行策略对应的触发条件,若是,则执行对应的执行策略,否则不进行操作,按原策略继续执行智能合约码;其中,执行策略与触发条件一一对应。
启发策略库还用于执行对应的执行策略时,生成新的测试用例,并将新的测试用例反馈给模糊测试模块。模糊测试模块还用于对所反馈测试用例进行过滤只留下之前未曾生成过的新测试用例,并且基于新测试用例进行变异以得到更多感兴趣的新测试用例,用于探索与目标安全属性规范或功能规范相关的感兴趣程序路径。
假设当前路径是x>0,当前测试用例是10。两种方式生成新的测试用例:
1、符号约束求解:如果已执行的程序路径存在符号约束(如x>0)则直接通过符号约束求一个反解(!(x>0))得到使x<=0成立的新测试用例(如:0)。
2、模糊测试模块生成:模糊测试模块重点对已执行程序路径对应的测试用例进行变异操作,生成新的测试用例。上述两种方式生成的新测试用例均先归集到模糊测试模块,然后由模糊测试模块输入到智能合约码执行模块。
值得说明的是,这里“新的测试用例用于探索尚未执行的程序路径”是指可大概率探索尚未执行的程序路径并非绝对。因为方法1生成的测试用例是绝对能探索新的程序路径,但是方法2变异生成的新测试用例仍然有执行老程序路径的可能(例如:对10进行变异可能得到-1也可能得到11,这里-1可以探索新的路径,而11仍然走已执行过的路径)。
本实施例中的指令执行单元是本地操作系统,模糊测试模块为可执行x86机器码提供测试输入并接收反馈回的新测试用例。可执行x86机器码开始本地执行,执行过程中遇到符号约束构建求解函数调用,则由符号约束构建求解库提供相应的符号执行功能支持,用于新测试用例的生成。启发策略库会对执行过程中遇到的难以完整求解的约束表达式进行修剪,转而对部分约束表达式进行求解,得到的新测试用例会反馈给模糊测试模块进行验证,如果测试用例可产生新的路径则模糊测试模块会对该测试用例做进一步变异,以尝试生成能够探索更多新路径的测试用例,否则模糊测试模块会忽略本次测试用例反馈。
执行x86机器码在本地执行过程中,如果遇到违反安全性或功能性规范的路径,则将对应的测试用例和程序执行等信息发送给智能合约漏洞检测文档生成器,以生成智能合约漏洞检测文档。
本发明提供了一种区块链智能合约混合形式化验证方法及系统,通过对智能合约依赖库以及智能合约源码模型进行插装编译,使智能合约依赖库以及智能合约源码模型具备了符号执行能力;相比传统源码级插装代码验证分析将受益于编译优化性能提升,节约了传统符号执行引擎解释执行时对符号表达式的处理时间;相比传统动态字节码或机器码插装,极大地降低了动态执行时对于不同测试输入而重复插装造成的系统性能损失,从而提高了执行效率。本发明通过生成新的测试用例,以快速测试不同的程序路径,提高复杂逻辑智能合约的代码缺陷检测精确度。本发明通过设置多种执行策略,当达到触发条件时,则执行对应的执行策略,从而提高验证效率。
以上的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种区块链智能合约混合形式化验证方法,其特征在于,包括:
获取区块链智能合约对应的功能规范文档、安全属性规范文档以及智能合约源代码;
将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型;
获取智能合约源码模型所需要的智能合约依赖库,所述智能合约依赖库表示执行智能合约源码模型所需要的程序库或者数据库;
将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码,所述依赖库码以及智能合约码均为机器码或者字节码;
获取测试用例,所述测试用例用于表征执行智能合约码时的输入数据;
以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果;
根据所述漏洞验证结果,获取智能合约漏洞验证文档。
2.根据权利要求1所述的区块链智能合约混合形式化验证方法,其特征在于,所述功能规范文档包括智能合约源代码中函数的前置功能规范以及后置功能规范,安全属性规范文档包括智能合约源代码中函数的前置安全规范以及后置安全规范;
将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型,包括:
将功能规范文档、安全属性规范文档以及智能合约源代码顺次解析为抽象语法树,得到功能规范抽象语法树、安全属性规范抽象语法树以及智能合约抽象语法树;
将功能规范抽象语法树中前置功能规范对应部分嵌入智能合约抽象语法树中函数的入口后,将功能规范抽象语法树中后置功能规范对应部分嵌入智能合约抽象语法树中函数的出口前;
将安全属性规范抽象语法树中前置安全规范对应部分嵌入智能合约抽象语法树中函数的入口后,将安全属性规范抽象语法树中后置安全规范对应部分嵌入智能合约抽象语法树中函数的出口前,得到智能合约源码模型。
3.根据权利要求2所述的区块链智能合约混合形式化验证方法,其特征在于,将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码,包括:
将智能合约依赖库以及智能合约源码模型编译为机器码或者字节码,分别得到第一数据码以及第二数据码;
确定第一数据码和/或第二数据码中符号约束所在的目标位置,并在目标位置插入符号约束构建求解函数的调用函数,分别得到依赖库码以及智能合约码。
4.根据权利要求3所述的区块链智能合约混合形式化验证方法,其特征在于,以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果,包括:
以依赖库码为支持,以测试用例为输入,执行智能合约码,获取违反安全属性规范和/或功能规范的程序路径;
将程序路径以及程序路径对应的测试用例作为漏洞验证结果。
5.根据权利要求4所述的区块链智能合约混合形式化验证方法,其特征在于,执行智能合约码时,若存在符号约束,则根据该符号约束对应的符号约束构建求解函数的调用函数,从符号约束构建求解库中调用对应的符号约束构建求解函数,并进行符号求解。
6.根据权利要求5所述的区块链智能合约混合形式化验证方法,其特征在于,执行智能合约码时,判断执行过程是否触发执行策略对应的触发条件,若是,则执行对应的执行策略,否则不进行操作,按原策略继续执行智能合约码;
其中,所述执行策略与触发条件一一对应。
7.根据权利要求6所述的区块链智能合约混合形式化验证方法,其特征在于,执行智能合约码后,还包括:
根据智能合约码执行的程序路径以及符号求解结果,确定新的测试用例,所述新的测试用例用于探索尚未执行的程序路径;
以依赖库码为支持,以新的测试用例为输入,执行智能合约码,获取漏洞验证结果。
8.一种区块链智能合约混合形式化验证系统,其特征在于,包括源码建模器、插装编译模块、模糊测试模块、混合执行模块以及智能合约漏洞验证文档生成器;
所述源码建模器用于,获取区块链智能合约对应的功能规范文档、安全属性规范文档以及智能合约源代码,将功能规范文档以及安全属性规范文档嵌入智能合约源代码中,获取智能合约源码模型;所述功能规范文档以及安全属性规范文档所采用的编写语言与智能合约源代码所采用的编写语言相同;
所述插装编译模块用于,获取智能合约源码模型所需要的智能合约依赖库,所述智能合约依赖库表示执行智能合约源码模型所需要的程序库或者数据库;将智能合约依赖库以及智能合约源码模型进行插装编译,得到依赖库码以及智能合约码;
所述模糊测试模块用于,生成以及存储测试用例;
所述混合执行模块用于,获取测试用例,所述测试用例用于表征执行智能合约码时的输入数据;以依赖库码为支持,以测试用例为输入,执行智能合约码,获取漏洞验证结果;
所述智能合约漏洞验证文档生成器用于,根据所述漏洞验证结果,获取智能合约漏洞验证文档。
9.根据权利要求8所述的区块链智能合约混合形式化验证系统,其特征在于,所述插装编译模块包括编译配置单元、常规编译单元以及插装单元;
所述编译配置单元用于,获取智能合约源码模型所需要的智能合约依赖库;
所述常规编译单元用于,将智能合约依赖库以及智能合约源码模型编译为机器码或者字节码,分别得到第一数据码以及第二数据码;
所述插装单元用于,确定第一数据码和/或第二数据码中符号约束所在的目标位置,并在目标位置插入符号约束构建求解函数的调用函数,分别得到依赖库码以及智能合约码。
10.根据权利要求9所述的区块链智能合约混合形式化验证系统,其特征在于,所述混合执行模块包括指令执行单元、符号约束构建求解库以及启发策略库;
所述指令执行单元用于,以依赖库码为支持,以测试用例为输入,执行智能合约码,获取违反安全属性规范和/或功能规范的程序路径;将程序路径以及程序路径对应的测试用例作为漏洞验证结果;
所述符号约束构建求解库用于,执行智能合约码时,若存在符号约束,则根据该符号约束对应的符号约束构建求解函数的调用函数,从符号约束构建求解库中调用对应的符号约束构建求解函数,并进行符号求解;
所述启发策略库用于,执行智能合约码时,判断执行过程是否触发执行策略对应的触发条件,若是,则执行对应的执行策略,否则不进行操作,按原策略继续执行智能合约码;其中,所述执行策略与触发条件一一对应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210947911.XA CN115310095A (zh) | 2022-08-08 | 2022-08-08 | 一种区块链智能合约混合形式化验证方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210947911.XA CN115310095A (zh) | 2022-08-08 | 2022-08-08 | 一种区块链智能合约混合形式化验证方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115310095A true CN115310095A (zh) | 2022-11-08 |
Family
ID=83861625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210947911.XA Pending CN115310095A (zh) | 2022-08-08 | 2022-08-08 | 一种区块链智能合约混合形式化验证方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115310095A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115658549A (zh) * | 2022-12-08 | 2023-01-31 | 浙江望安科技有限公司 | 一种对源代码形式化验证方法 |
-
2022
- 2022-08-08 CN CN202210947911.XA patent/CN115310095A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115658549A (zh) * | 2022-12-08 | 2023-01-31 | 浙江望安科技有限公司 | 一种对源代码形式化验证方法 |
CN115658549B (zh) * | 2022-12-08 | 2023-03-07 | 浙江望安科技有限公司 | 一种对源代码形式化验证方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gargantini et al. | A metamodel-based language and a simulation engine for abstract state machines. | |
Xu et al. | VFix: Value-flow-guided precise program repair for null pointer dereferences | |
US20020100022A1 (en) | Method and apparatus for automatic verification of properties of a concurrent software system | |
Mottu et al. | Static analysis of model transformations for effective test generation | |
CN110989997A (zh) | 基于定理证明的形式化验证方法 | |
CN108763064B (zh) | 一种基于黑盒函数与机器学习的代码测试生成方法和装置 | |
CN111694746A (zh) | 面向编译型语言AS3的Flash缺陷模糊测评工具 | |
Delahaye et al. | Explanation-based generalization of infeasible path | |
CN114036072B (zh) | 一种支持自动化检测程序缺陷的方法和系统 | |
Whalen et al. | An approach to automatic code generation for safety-critical systems | |
Engberts et al. | Concept recognition-based program transformation | |
CN115310095A (zh) | 一种区块链智能合约混合形式化验证方法及系统 | |
CN113868136A (zh) | 一种基于Go语言可执行形式化语义的程序漏洞分析方法 | |
Mian et al. | Model transformation for analyzing dependability of AADL model by using HiP-HOPS | |
CN111488276B (zh) | 基于代码跟踪的软件可靠性测试方法和装置 | |
CN111222141B (zh) | 一种汽车电控单元代码漏洞分析方法和系统 | |
Mottu et al. | Discovering model transformation pre-conditions using automatically generated test models | |
Nokovic et al. | Verification and code generation for timed transitions in pCharts | |
Liu et al. | Identifying change patterns of API misuses from code changes | |
EP2535813B1 (en) | Method and device for generating an alert during an analysis of performance of a computer application | |
CN115098355A (zh) | 基于历史数据驱动的jvm测试程序生成方法 | |
CN114462043A (zh) | 基于强化学习的Java反序列化漏洞检测系统及方法 | |
CN113849814A (zh) | 一种可配置系统漏洞复现系统以及复现方法 | |
Ali et al. | Identification and Optimisation of Type-Level Model Queries | |
Sallai et al. | Towards evaluating size reduction techniques for software model checking |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |