CN115906092A - 一种跨合约检测智能合约漏洞的符号执行方法 - Google Patents
一种跨合约检测智能合约漏洞的符号执行方法 Download PDFInfo
- Publication number
- CN115906092A CN115906092A CN202211356631.8A CN202211356631A CN115906092A CN 115906092 A CN115906092 A CN 115906092A CN 202211356631 A CN202211356631 A CN 202211356631A CN 115906092 A CN115906092 A CN 115906092A
- Authority
- CN
- China
- Prior art keywords
- path
- constraint
- search
- module
- contract
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种跨合约检测智能合约漏洞的符号执行方法,本发明首次使用符号执行技术进行智能合约的跨合约漏洞检测,可以更深层次地探索在被测合约间可能存在的漏洞;本发明关注被众多工具所忽视的跨合约漏洞问题,可以更加全面地保障智能合约的安全性;本发明可以跨合约检测的关键在于,在生成控制流图的同时,还通过EVM字节码生成了智能合约间的调用图,从而得到了调用路径供符号执行进行探索、生成约束和约束求解,关注了智能合约漏洞检测领域中众多主流工具忽视的跨合约漏洞问题,不仅使用符号执行技术来深入到了更深的路径分支,还覆盖了更全面的跨合约漏洞,为智能合约提供更加全面的安全保障。
Description
技术领域
本发明涉及跨合约检测智能合约漏洞技术领域,具体为一种跨合约检测智能合约漏洞的符号执行方法。
背景技术
智能合约:智能合约是区块链2.0时代的一大特征,通过在区块链中存储代码,并且一旦部署无法篡改,能够在满足一定条件时运行代码以完成事先定义的行为,包括转账、做决策、与其他合约交互等。基于区块链的特性,智能合约的运行结果是由大量计算机运行并验证以确保可信的。Solidity是目前最热门的智能合约语言,本方法只针对Solidity语言与EVM(以太坊虚拟机)。符号执行:符号执行技术是一项经典的程序静态分析技术,其基本思想是以符号值来代替输入程序的具体数值,并“符号化”地模拟执行每条程序指令,将其解释为语义对等的符号值的具体操作。跨合约漏洞:超过两份智能合约的调用操作执行中存在的漏洞。例如有重入漏洞,委托调用,tx-origin等。
目前,与本发明相似的研究主要有以下一些方案:方案一:研究[1]提出了Clairvoyance,一种跨合约静态分析技术,以检测智能合约中的重入漏洞问题。该方案首次通过跟踪可能受到污染的路径来实现跨合约分析,从而减少误报。此外还总结了五种主要路径保护技术,以支持快速且精确路径可行性检查。方案二:研究[2]提出了Oyente,它是使用符号执行技术测试智能合约的开山作,它将符号执行与Z3SMT求解器[17]结合使用来遍历各个路径,并检测漏洞模式。它还定义、检测了四种漏洞类型。方案三:研究[3]提出了xFuzz,一种由机器学习指导跨合约检测的模糊测试工具。该方案通过训练一个优秀的机器学习模型来过滤搜索空间,并指导计算路径优先级,从而高效地进行跨合约的模糊测试。
现有技术的缺点:方案一:该方案虽是跨合约技术,但实际上只针对重入漏洞进行了检测,未涉及委托调用和tx-origin相关的跨合约漏洞。此外,它会造成冗余的分析,增加额外的开销。方案二:Oyente作为较早的符号执行工具,仅针对单个合约中的漏洞进行检测,无法跨合约。同时,它在路径上的选择是随机的,浪费了大量的执行时间,降低了进行符号执行的效率。方案三:xFuzz虽进行了三种漏洞的跨合约检测,但是它使用的模糊测试技术,而模糊测试通常会被无效的输入所困扰,且很多输入难以深入程序路径,因此影响了效率。为解决上述问题,我们提供一种跨合约检测智能合约漏洞的符号执行方法。
发明内容
本发明的目的在于提供一种跨合约检测智能合约漏洞的符号执行方法,目前,很多用于测试智能合约的工具仅针对单个合约中的漏洞,忽视了跨合约的漏洞问题。本发明使用符号执行技术,即通过静态分析程序来得到可以让特定代码区域执行的输入,为了得到可以触发该个分支的特定值,符号执行会在探索过程中收集与目标分支相对应的路径约束,然后使用约束解算器求解。故只要生成待测合约的调用图来得到合约调用链,再用符号执行探索各条调用链,便可完成跨合约检测。同时,还可根据控制流图得到合约内部的分支路径,检测合约内部漏洞。此外,本发明设定了有关跨合约漏洞的检测规则。
为实现上述目的,本发明提供如下技术方案:一种跨合约检测智能合约漏洞的符号执行方法,包括以下步骤:
步骤1:收集开源的智能合约代码:从Etherscan上收集智能合约的源码作为数据集,将其反编译为EVM字节码作为程序的输入;
步骤2:生成控制流图(CFG)和调用图:此模块分解EVM字节码并重建CFG和调用图,其中包含所有基本块作为节点,以及一些表示跳跃的边,可以通过研究定位相应的源节点来确定目标的跳跃;
步骤3:路径搜索模块:路径搜索是符号执行工具的核心模块,通过搜索扫描第2步中的控制流图和调用图,完成搜集各个路径分支的路径约束和其他数据的分析处理,这里将路径搜索模块分为三个部分;
步骤4:约束求解:约束求解模块使用Z3约束求解器解决路径约束模块传来的组合约束,检测分析是否存在漏洞;
步骤5:输出结果:根据符号执行完成的分析结果,输出漏洞检测结果,此外,本发明还建立了漏洞检测模型,通过分析符号执行产生的结果以发掘智能合约的漏洞,除了常见的智能合约内部漏洞意外,下面主要列举跨合约漏洞以及漏洞特征:
重入漏洞:重入漏洞发生在一个函数通过外部调用另一个合约时,利用该漏洞,攻击者可以执行主函数的递归回调,从而产生重复多次的意外循环,例如,当一个脆弱的智能合约包含撤销功能时,该智能合约可能被攻击者非法调用撤销功能无数次,以耗尽该合同所包含的任何可用余额;
委托调用:代码开发人员利用调用函数(CALL)和委托调用函数(DELEGATECALL)来模块化已编写的代码,DELEGATE操作码由一个类似于CALL消息的函数组成,但是,不同于调用一个智能合约的代码,发送者(msg.sender)和值(msg.value)不会被改变,DELEGATECALL特性表明,在构建自定义库时,可能会引入缺陷,也可能导致新的漏洞;
tx-origin:tx.origin是Solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击,因为攻击者可以使用tx.origin全局变量绕过限制,获取一定的权限。
优选的,在步骤3中,第一部分图维护模块:主要负责在路径探索过程中,控制流图(CFG)和调用图(CG)的更新;
CFG的维护由两个类实现:CFG和CFGNode,CFG中有三个数据成员,root是CFG的开始节点,即实际程序的入口,all_visited为访问标记,默认为false,当所有节点都被访问后,维护模块将其修改为true,也标志着符号执行结束,node是一个映射,CFG中所有节点的名字和指针一一对应,便于快速检索某个节点,CFGNode是CFG中的各个节点,每个CFGNode中有四个数据成员,name为该节点的名字,is_visited为访问标记,默认为false,节点被访问后,维护模块将其修改为true,general_child_num表示其子节点的数量,搜索时会进行遍历或剪枝,child为一个集合,其中包含指向该节点的各个子节点的指针;
CG表示一个程序中子程序之间的调用关系,数据结构与CFG相似,不过CG中的每个节点表示一个函数,每条边(f,g)表示函数f调用函数g,这里主要针对跨合约的函数调用链进行建图,因为合约内部的CFG进行路径探索,若相同路径在CG中也包含,会造成额外开销。
优选的,在步骤3中,第二部分搜索策略模块:进行路径搜索的策略是符号执行效率的关键所在,本发明的策略是综合基于覆盖率优化的启发式搜索和限界深度优先搜索策略,不仅能保证符号执行高路径覆盖率,触发层次较深的分支以捕获漏洞,还能减少程序执行次数,使算法更加高效;
基于覆盖率优化的启发式搜索:启发式搜索是指利用当前与问题有关的信息作为启发式信息,以提升查找效率并减少查找次数,本发明使用的是启发式搜索中的A*算法,A*算法中,评估函数有两部分组成:
f(n)=g(n)+h(n)
其中,g(n)表示的是从起始节点到当前的节点n的开销的代价值;h(n)表示从当前节点n到目标节点路径中所估算的最小开销代价值,因此,评估函数f(n)即是当前已用最小开销g(n)和后续最小开销h(n)的和,只要保证f(n)的值最小,便是最优的,而A*算法通过令h(n)满足可容性和一致性,使得f(n)一定存在最优解;
限界深度优先搜索策略:该策略核心思想是在每次待测程序的符号执行后,可得到一组由满足该路径中各个分支判定条件的、包含符号常量的布尔表达式序列,即本次执行收集的路径约束;路径搜索时,优先对序列前端未发生取反操作的约束进行取反,并与其之前的所有约束相与,利用求解器求解,得到下次符号执行的输入值:
对于输入的数据,首先关注覆盖率,相比于传统的贪心路径搜索策略,启发式搜索可以在更短的时间里覆盖到更多的分支,启发式搜索的输入是路径约束(PC)和更新的CFG、CG,对图进行遍历并将遇到的分支节点加入序列中,最后判断分支节点序列是否为空,若为空,则搜索失败,否则进行分支节点筛选,分支结点筛选的过程是从上一步得到的分支节点序列中,选择满足两个后继节点中有且仅有一个节点被访问过的分支节点依次加入待取反分支节点序列,同样,判断该待取反分支节点序列是否为空,若为空,反馈搜索失败;否则,进行约束匹配以构成新的路径约束;
基于覆盖率优化的启发式搜索有两种输出情况:搜索新路径失败或者得到新的路径约束,若为后者则进行约束求解,然后进入下一轮的路径搜索,否则本策略再调度限界深度优先搜索策略进行更深层次的搜索,因为限界深度优先搜索策略在面对大规模复杂程序时,就会表现出执行效率低,易陷入“路径饥饿”状态等不足,所以将其作为启发式搜索的补充搜索策略存在,此时复杂的程序可能只剩下少部分深层次分支未被访问到;
限界深度优先搜索策略的基本思想在于每次路径搜索的时候,尽可能对符号执行树上层次较浅的分支节点所对应的约束条件取反,即优先取反路径深度较大的约束条件,从而指导符号执行更大程度地探索新的分支节点,同时通过限界来避免一些非最优解,降低开销,若存在这样的约束,进行搜索,并得到新的路径约束,否则路径搜索结束。
优选的,在步骤3中,第三部分路径约束模块:路径约束模块主要负责约束条件取反并组合成新的路径约束,一旦找到新路径,此模块便会符号化执行当前探索的路径分支以收集路径约束,并对相关数据和路径约束进行前期处理,以输入约束求解模块中进行求解;
路径约束模块接收两个输入,一个是本次程序执行的输入值所对应的被取反约束,在原路径约束中的序号;另一个是记录各约束条件的文件,该文件中包含程序执行时收集的路径约束,以及每个约束对应的语句类型和代码块名称,根据路径深度优先的原则,按照约束收集的先后顺序,依次取反并组合成新的路径约束。
优选的,在步骤4中,约束求解模块有两个输入,分别是记录路径约束中使用到的符号常量及其实际数据类型的文件symbolic_file和待求解路径约束PCnew,Z3求解器识别的输入格式为SMT-lib,因此在求解之前先将symbolic_file和PCnew经Transform函数转换成SMT-lib格式,得到z3_input,然后调用Z3的API函数将z3_input加载到求解器z3_solver中;左后通过check函数判断该路径约束是否可解,若不可解,返回“unsat”,否则返回z3_solver求解得到的每个符号常量和其对应解出的具体值,并返回给路径搜索模块,但若是路径搜索模块未能找到新的路径来进行求解,则根据结果进行漏洞分析。
与目前技术相比,本发明的有益效果是:
本发明首次使用符号执行技术进行智能合约的跨合约漏洞检测,可以更深层次地探索在被测合约间可能存在的漏洞;本发明关注被众多工具所忽视的跨合约漏洞问题,可以更加全面地保障智能合约的安全性;本发明可以跨合约检测的关键在于,在生成控制流图的同时,还通过EVM字节码生成了智能合约间的调用图,从而得到了调用路径供符号执行进行探索、生成约束和约束求解,一种跨合约检测智能合约漏洞的符号执行方法,关注了智能合约漏洞检测领域中众多主流工具忽视的跨合约漏洞问题,不仅使用符号执行技术来深入到了更深的路径分支,还覆盖了更全面的跨合约漏洞,为智能合约提供更加全面的安全保障。
附图说明
图1为本发明跨合约检测智能合约漏洞的符号执行技术;
图2为本发明路径搜索策略。
具体实施方式
下面将通过实施例的方式对本发明作更详细的描述,这些实施例仅是举例说明性的而没有任何对本发明范围的限制。
本发明提供一种技术方案:一种跨合约检测智能合约漏洞的符号执行方法,包括以下步骤:
步骤1:收集开源的智能合约代码:从Etherscan上收集智能合约的源码作为数据集,将其反编译为EVM字节码作为程序的输入;
步骤2:生成控制流图(CFG)和调用图:此模块分解EVM字节码并重建CFG和调用图,其中包含所有基本块作为节点,以及一些表示跳跃的边,可以通过研究定位相应的源节点来确定目标的跳跃;
步骤3:路径搜索模块:路径搜索是符号执行工具的核心模块,通过搜索扫描第2步中的控制流图和调用图,完成搜集各个路径分支的路径约束和其他数据的分析处理,这里将路径搜索模块分为三个部分;
步骤4:约束求解:约束求解模块使用Z3约束求解器解决路径约束模块传来的组合约束,检测分析是否存在漏洞;
步骤5:输出结果:根据符号执行完成的分析结果,输出漏洞检测结果,此外,本发明还建立了漏洞检测模型,通过分析符号执行产生的结果以发掘智能合约的漏洞,除了常见的智能合约内部漏洞意外,下面主要列举跨合约漏洞以及漏洞特征:
重入漏洞:重入漏洞发生在一个函数通过外部调用另一个合约时,利用该漏洞,攻击者可以执行主函数的递归回调,从而产生重复多次的意外循环,例如,当一个脆弱的智能合约包含撤销功能时,该智能合约可能被攻击者非法调用撤销功能无数次,以耗尽该合同所包含的任何可用余额;
委托调用:代码开发人员利用调用函数(CALL)和委托调用函数(DELEGATECALL)来模块化已编写的代码,DELEGATE操作码由一个类似于CALL消息的函数组成,但是,不同于调用一个智能合约的代码,发送者(msg.sender)和值(msg.value)不会被改变,DELEGATECALL特性表明,在构建自定义库时,可能会引入缺陷,也可能导致新的漏洞;
tx-origin:tx.origin是Solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击,因为攻击者可以使用tx.origin全局变量绕过限制,获取一定的权限。
实施例一:
收集开源的智能合约代码:从Etherscan上收集智能合约的源码作为数据集,将其反编译为EVM字节码作为程序的输入;生成控制流图(CFG)和调用图:此模块分解EVM字节码并重建CFG和调用图,其中包含所有基本块作为节点,以及一些表示跳跃的边,可以通过研究定位相应的源节点来确定目标的跳跃;路径搜索模块:路径搜索是符号执行工具的核心模块,通过搜索扫描第2步中的控制流图和调用图,完成搜集各个路径分支的路径约束和其他数据的分析处理,这里将路径搜索模块分为三个部分;约束求解:约束求解模块使用Z3约束求解器解决路径约束模块传来的组合约束,检测分析是否存在漏洞;输出结果:根据符号执行完成的分析结果,输出漏洞检测结果,此外,本发明还建立了漏洞检测模型,通过分析符号执行产生的结果以发掘智能合约的漏洞,除了常见的智能合约内部漏洞意外,下面主要列举跨合约漏洞以及漏洞特征:重入漏洞:重入漏洞发生在一个函数通过外部调用另一个合约时,利用该漏洞,攻击者可以执行主函数的递归回调,从而产生重复多次的意外循环,例如,当一个脆弱的智能合约包含撤销功能时,该智能合约可能被攻击者非法调用撤销功能无数次,以耗尽该合同所包含的任何可用余额;委托调用:代码开发人员利用调用函数(CALL)和委托调用函数(DELEGATECALL)来模块化已编写的代码,DELEGATE操作码由一个类似于CALL消息的函数组成,但是,不同于调用一个智能合约的代码,发送者(msg.sender)和值(msg.value)不会被改变,DELEGATECALL特性表明,在构建自定义库时,可能会引入缺陷,也可能导致新的漏洞;tx-origin:tx.origin是Solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击,因为攻击者可以使用tx.origin全局变量绕过限制,获取一定的权限。
实施例二:
在实施例一中,再加上下述工序:
在步骤3中,第一部分图维护模块:主要负责在路径探索过程中,控制流图(CFG)和调用图(CG)的更新;
CFG的维护由两个类实现:CFG和CFGNode,CFG中有三个数据成员,root是CFG的开始节点,即实际程序的入口,all_visited为访问标记,默认为false,当所有节点都被访问后,维护模块将其修改为true,也标志着符号执行结束,node是一个映射,CFG中所有节点的名字和指针一一对应,便于快速检索某个节点,CFGNode是CFG中的各个节点,每个CFGNode中有四个数据成员,name为该节点的名字,is_visited为访问标记,默认为false,节点被访问后,维护模块将其修改为true,general_child_num表示其子节点的数量,搜索时会进行遍历或剪枝,child为一个集合,其中包含指向该节点的各个子节点的指针;
CG表示一个程序中子程序之间的调用关系,数据结构与CFG相似,不过CG中的每个节点表示一个函数,每条边(f,g)表示函数f调用函数g,这里主要针对跨合约的函数调用链进行建图,因为合约内部的CFG进行路径探索,若相同路径在CG中也包含,会造成额外开销。
在步骤3中,第二部分搜索策略模块:进行路径搜索的策略是符号执行效率的关键所在,本发明的策略是综合基于覆盖率优化的启发式搜索和限界深度优先搜索策略,不仅能保证符号执行高路径覆盖率,触发层次较深的分支以捕获漏洞,还能减少程序执行次数,使算法更加高效;
基于覆盖率优化的启发式搜索:启发式搜索是指利用当前与问题有关的信息作为启发式信息,以提升查找效率并减少查找次数,本发明使用的是启发式搜索中的A*算法,A*算法中,评估函数有两部分组成:
f(n)=g(n)+h(n)
其中,g(n)表示的是从起始节点到当前的节点n的开销的代价值;h(n)表示从当前节点n到目标节点路径中所估算的最小开销代价值,因此,评估函数f(n)即是当前已用最小开销g(n)和后续最小开销h(n)的和,只要保证f(n)的值最小,便是最优的,而A*算法通过令h(n)满足可容性和一致性,使得f(n)一定存在最优解;
限界深度优先搜索策略:该策略核心思想是在每次待测程序的符号执行后,可得到一组由满足该路径中各个分支判定条件的、包含符号常量的布尔表达式序列,即本次执行收集的路径约束;路径搜索时,优先对序列前端未发生取反操作的约束进行取反,并与其之前的所有约束相与,利用求解器求解,得到下次符号执行的输入值:
对于输入的数据,首先关注覆盖率,相比于传统的贪心路径搜索策略,启发式搜索可以在更短的时间里覆盖到更多的分支,启发式搜索的输入是路径约束(PC)和更新的CFG、CG,对图进行遍历并将遇到的分支节点加入序列中,最后判断分支节点序列是否为空,若为空,则搜索失败,否则进行分支节点筛选,分支结点筛选的过程是从上一步得到的分支节点序列中,选择满足两个后继节点中有且仅有一个节点被访问过的分支节点依次加入待取反分支节点序列,同样,判断该待取反分支节点序列是否为空,若为空,反馈搜索失败;否则,进行约束匹配以构成新的路径约束;
基于覆盖率优化的启发式搜索有两种输出情况:搜索新路径失败或者得到新的路径约束,若为后者则进行约束求解,然后进入下一轮的路径搜索,否则本策略再调度限界深度优先搜索策略进行更深层次的搜索,因为限界深度优先搜索策略在面对大规模复杂程序时,就会表现出执行效率低,易陷入“路径饥饿”状态等不足,所以将其作为启发式搜索的补充搜索策略存在,此时复杂的程序可能只剩下少部分深层次分支未被访问到;
限界深度优先搜索策略的基本思想在于每次路径搜索的时候,尽可能对符号执行树上层次较浅的分支节点所对应的约束条件取反,即优先取反路径深度较大的约束条件,从而指导符号执行更大程度地探索新的分支节点,同时通过限界来避免一些非最优解,降低开销,若存在这样的约束,进行搜索,并得到新的路径约束,否则路径搜索结束。
在步骤3中,第三部分路径约束模块:路径约束模块主要负责约束条件取反并组合成新的路径约束,一旦找到新路径,此模块便会符号化执行当前探索的路径分支以收集路径约束,并对相关数据和路径约束进行前期处理,以输入约束求解模块中进行求解;
路径约束模块接收两个输入,一个是本次程序执行的输入值所对应的被取反约束,在原路径约束中的序号;另一个是记录各约束条件的文件,该文件中包含程序执行时收集的路径约束,以及每个约束对应的语句类型和代码块名称,根据路径深度优先的原则,按照约束收集的先后顺序,依次取反并组合成新的路径约束
收集开源的智能合约代码:从Etherscan上收集智能合约的源码作为数据集,将其反编译为EVM字节码作为程序的输入;生成控制流图(CFG)和调用图:此模块分解EVM字节码并重建CFG和调用图,其中包含所有基本块作为节点,以及一些表示跳跃的边,可以通过研究定位相应的源节点来确定目标的跳跃;路径搜索模块:路径搜索是符号执行工具的核心模块,通过搜索扫描第2步中的控制流图和调用图,完成搜集各个路径分支的路径约束和其他数据的分析处理,这里将路径搜索模块分为三个部分;第一部分图维护模块:主要负责在路径探索过程中,控制流图(CFG)和调用图(CG)的更新;CFG的维护由两个类实现:CFG和CFGNode,CFG中有三个数据成员,root是CFG的开始节点,即实际程序的入口,all_visited为访问标记,默认为false,当所有节点都被访问后,维护模块将其修改为true,也标志着符号执行结束,node是一个映射,CFG中所有节点的名字和指针一一对应,便于快速检索某个节点,CFGNode是CFG中的各个节点,每个CFGNode中有四个数据成员,name为该节点的名字,is_visited为访问标记,默认为false,节点被访问后,维护模块将其修改为true,general_child_num表示其子节点的数量,搜索时会进行遍历或剪枝,child为一个集合,其中包含指向该节点的各个子节点的指针;CG表示一个程序中子程序之间的调用关系,数据结构与CFG相似,不过CG中的每个节点表示一个函数,每条边(f,g)表示函数f调用函数g,这里主要针对跨合约的函数调用链进行建图,因为合约内部的CFG进行路径探索,若相同路径在CG中也包含,会造成额外开销。第二部分搜索策略模块:进行路径搜索的策略是符号执行效率的关键所在,本发明的策略是综合基于覆盖率优化的启发式搜索和限界深度优先搜索策略,不仅能保证符号执行高路径覆盖率,触发层次较深的分支以捕获漏洞,还能减少程序执行次数,使算法更加高效;基于覆盖率优化的启发式搜索:启发式搜索是指利用当前与问题有关的信息作为启发式信息,以提升查找效率并减少查找次数,本发明使用的是启发式搜索中的A*算法,A*算法中,评估函数有两部分组成:f(n)=g(n)+h(n)其中,g(n)表示的是从起始节点到当前的节点n的开销的代价值;h(n)表示从当前节点n到目标节点路径中所估算的最小开销代价值,因此,评估函数f(n)即是当前已用最小开销g(n)和后续最小开销h(n)的和,只要保证f(n)的值最小,便是最优的,而A*算法通过令h(n)满足可容性和一致性,使得f(n)一定存在最优解;限界深度优先搜索策略:该策略核心思想是在每次待测程序的符号执行后,可得到一组由满足该路径中各个分支判定条件的、包含符号常量的布尔表达式序列,即本次执行收集的路径约束;路径搜索时,优先对序列前端未发生取反操作的约束进行取反,并与其之前的所有约束相与,利用求解器求解,得到下次符号执行的输入值:对于输入的数据,首先关注覆盖率,相比于传统的贪心路径搜索策略,启发式搜索可以在更短的时间里覆盖到更多的分支,启发式搜索的输入是路径约束(PC)和更新的CFG、CG,对图进行遍历并将遇到的分支节点加入序列中,最后判断分支节点序列是否为空,若为空,则搜索失败,否则进行分支节点筛选,分支结点筛选的过程是从上一步得到的分支节点序列中,选择满足两个后继节点中有且仅有一个节点被访问过的分支节点依次加入待取反分支节点序列,同样,判断该待取反分支节点序列是否为空,若为空,反馈搜索失败;否则,进行约束匹配以构成新的路径约束;基于覆盖率优化的启发式搜索有两种输出情况:搜索新路径失败或者得到新的路径约束,若为后者则进行约束求解,然后进入下一轮的路径搜索,否则本策略再调度限界深度优先搜索策略进行更深层次的搜索,因为限界深度优先搜索策略在面对大规模复杂程序时,就会表现出执行效率低,易陷入“路径饥饿”状态等不足,所以将其作为启发式搜索的补充搜索策略存在,此时复杂的程序可能只剩下少部分深层次分支未被访问到;限界深度优先搜索策略的基本思想在于每次路径搜索的时候,尽可能对符号执行树上层次较浅的分支节点所对应的约束条件取反,即优先取反路径深度较大的约束条件,从而指导符号执行更大程度地探索新的分支节点,同时通过限界来避免一些非最优解,降低开销,若存在这样的约束,进行搜索,并得到新的路径约束,否则路径搜索结束。第三部分路径约束模块:路径约束模块主要负责约束条件取反并组合成新的路径约束,一旦找到新路径,此模块便会符号化执行当前探索的路径分支以收集路径约束,并对相关数据和路径约束进行前期处理,以输入约束求解模块中进行求解;路径约束模块接收两个输入,一个是本次程序执行的输入值所对应的被取反约束,在原路径约束中的序号;另一个是记录各约束条件的文件,该文件中包含程序执行时收集的路径约束,以及每个约束对应的语句类型和代码块名称,根据路径深度优先的原则,按照约束收集的先后顺序,依次取反并组合成新的路径约束;约束求解:约束求解模块使用Z3约束求解器解决路径约束模块传来的组合约束,检测分析是否存在漏洞;输出结果:根据符号执行完成的分析结果,输出漏洞检测结果,此外,本发明还建立了漏洞检测模型,通过分析符号执行产生的结果以发掘智能合约的漏洞,除了常见的智能合约内部漏洞意外,下面主要列举跨合约漏洞以及漏洞特征:重入漏洞:重入漏洞发生在一个函数通过外部调用另一个合约时,利用该漏洞,攻击者可以执行主函数的递归回调,从而产生重复多次的意外循环,例如,当一个脆弱的智能合约包含撤销功能时,该智能合约可能被攻击者非法调用撤销功能无数次,以耗尽该合同所包含的任何可用余额;委托调用:代码开发人员利用调用函数(CALL)和委托调用函数(DELEGATECALL)来模块化已编写的代码,DELEGATE操作码由一个类似于CALL消息的函数组成,但是,不同于调用一个智能合约的代码,发送者(msg.sender)和值(msg.value)不会被改变,DELEGATECALL特性表明,在构建自定义库时,可能会引入缺陷,也可能导致新的漏洞;tx-origin:tx.origin是Solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击,因为攻击者可以使用tx.origin全局变量绕过限制,获取一定的权限。
实施例三:
在实施例二中,再加上下述工序:
在步骤4中,约束求解模块有两个输入,分别是记录路径约束中使用到的符号常量及其实际数据类型的文件symbolic_file和待求解路径约束PCnew,Z3求解器识别的输入格式为SMT-lib,因此在求解之前先将symbolic_file和PCnew经Transform函数转换成SMT-lib格式,得到z3_input,然后调用Z3的API函数将z3_input加载到求解器z3_solver中;左后通过check函数判断该路径约束是否可解,若不可解,返回“unsat”,否则返回z3_solver求解得到的每个符号常量和其对应解出的具体值,并返回给路径搜索模块,但若是路径搜索模块未能找到新的路径来进行求解,则根据结果进行漏洞分析。
收集开源的智能合约代码:从Etherscan上收集智能合约的源码作为数据集,将其反编译为EVM字节码作为程序的输入;生成控制流图(CFG)和调用图:此模块分解EVM字节码并重建CFG和调用图,其中包含所有基本块作为节点,以及一些表示跳跃的边,可以通过研究定位相应的源节点来确定目标的跳跃;路径搜索模块:路径搜索是符号执行工具的核心模块,通过搜索扫描第2步中的控制流图和调用图,完成搜集各个路径分支的路径约束和其他数据的分析处理,这里将路径搜索模块分为三个部分;第一部分图维护模块:主要负责在路径探索过程中,控制流图(CFG)和调用图(CG)的更新;CFG的维护由两个类实现:CFG和CFGNode,CFG中有三个数据成员,root是CFG的开始节点,即实际程序的入口,all_visited为访问标记,默认为false,当所有节点都被访问后,维护模块将其修改为true,也标志着符号执行结束,node是一个映射,CFG中所有节点的名字和指针一一对应,便于快速检索某个节点,CFGNode是CFG中的各个节点,每个CFGNode中有四个数据成员,name为该节点的名字,is_visited为访问标记,默认为false,节点被访问后,维护模块将其修改为true,general_child_num表示其子节点的数量,搜索时会进行遍历或剪枝,child为一个集合,其中包含指向该节点的各个子节点的指针;CG表示一个程序中子程序之间的调用关系,数据结构与CFG相似,不过CG中的每个节点表示一个函数,每条边(f,g)表示函数f调用函数g,这里主要针对跨合约的函数调用链进行建图,因为合约内部的CFG进行路径探索,若相同路径在CG中也包含,会造成额外开销。第二部分搜索策略模块:进行路径搜索的策略是符号执行效率的关键所在,本发明的策略是综合基于覆盖率优化的启发式搜索和限界深度优先搜索策略,不仅能保证符号执行高路径覆盖率,触发层次较深的分支以捕获漏洞,还能减少程序执行次数,使算法更加高效;基于覆盖率优化的启发式搜索:启发式搜索是指利用当前与问题有关的信息作为启发式信息,以提升查找效率并减少查找次数,本发明使用的是启发式搜索中的A*算法,A*算法中,评估函数有两部分组成:f(n)=g(n)+h(n)其中,g(n)表示的是从起始节点到当前的节点n的开销的代价值;h(n)表示从当前节点n到目标节点路径中所估算的最小开销代价值,因此,评估函数f(n)即是当前已用最小开销g(n)和后续最小开销h(n)的和,只要保证f(n)的值最小,便是最优的,而A*算法通过令h(n)满足可容性和一致性,使得f(n)一定存在最优解;限界深度优先搜索策略:该策略核心思想是在每次待测程序的符号执行后,可得到一组由满足该路径中各个分支判定条件的、包含符号常量的布尔表达式序列,即本次执行收集的路径约束;路径搜索时,优先对序列前端未发生取反操作的约束进行取反,并与其之前的所有约束相与,利用求解器求解,得到下次符号执行的输入值:对于输入的数据,首先关注覆盖率,相比于传统的贪心路径搜索策略,启发式搜索可以在更短的时间里覆盖到更多的分支,启发式搜索的输入是路径约束(PC)和更新的CFG、CG,对图进行遍历并将遇到的分支节点加入序列中,最后判断分支节点序列是否为空,若为空,则搜索失败,否则进行分支节点筛选,分支结点筛选的过程是从上一步得到的分支节点序列中,选择满足两个后继节点中有且仅有一个节点被访问过的分支节点依次加入待取反分支节点序列,同样,判断该待取反分支节点序列是否为空,若为空,反馈搜索失败;否则,进行约束匹配以构成新的路径约束;基于覆盖率优化的启发式搜索有两种输出情况:搜索新路径失败或者得到新的路径约束,若为后者则进行约束求解,然后进入下一轮的路径搜索,否则本策略再调度限界深度优先搜索策略进行更深层次的搜索,因为限界深度优先搜索策略在面对大规模复杂程序时,就会表现出执行效率低,易陷入“路径饥饿”状态等不足,所以将其作为启发式搜索的补充搜索策略存在,此时复杂的程序可能只剩下少部分深层次分支未被访问到;限界深度优先搜索策略的基本思想在于每次路径搜索的时候,尽可能对符号执行树上层次较浅的分支节点所对应的约束条件取反,即优先取反路径深度较大的约束条件,从而指导符号执行更大程度地探索新的分支节点,同时通过限界来避免一些非最优解,降低开销,若存在这样的约束,进行搜索,并得到新的路径约束,否则路径搜索结束。第三部分路径约束模块:路径约束模块主要负责约束条件取反并组合成新的路径约束,一旦找到新路径,此模块便会符号化执行当前探索的路径分支以收集路径约束,并对相关数据和路径约束进行前期处理,以输入约束求解模块中进行求解;路径约束模块接收两个输入,一个是本次程序执行的输入值所对应的被取反约束,在原路径约束中的序号;另一个是记录各约束条件的文件,该文件中包含程序执行时收集的路径约束,以及每个约束对应的语句类型和代码块名称,根据路径深度优先的原则,按照约束收集的先后顺序,依次取反并组合成新的路径约束;约束求解:约束求解模块使用Z3约束求解器解决路径约束模块传来的组合约束,检测分析是否存在漏洞;约束求解模块有两个输入,分别是记录路径约束中使用到的符号常量及其实际数据类型的文件symbolic_file和待求解路径约束PCnew,Z3求解器识别的输入格式为SMT-lib,因此在求解之前先将symbolic_file和PCnew经Transform函数转换成SMT-lib格式,得到z3_input,然后调用Z3的API函数将z3_input加载到求解器z3_solver中;左后通过check函数判断该路径约束是否可解,若不可解,返回“unsat”,否则返回z3_solver求解得到的每个符号常量和其对应解出的具体值,并返回给路径搜索模块,但若是路径搜索模块未能找到新的路径来进行求解,则根据结果进行漏洞分析,输出结果:根据符号执行完成的分析结果,输出漏洞检测结果,此外,本发明还建立了漏洞检测模型,通过分析符号执行产生的结果以发掘智能合约的漏洞,除了常见的智能合约内部漏洞意外,下面主要列举跨合约漏洞以及漏洞特征:重入漏洞:重入漏洞发生在一个函数通过外部调用另一个合约时,利用该漏洞,攻击者可以执行主函数的递归回调,从而产生重复多次的意外循环,例如,当一个脆弱的智能合约包含撤销功能时,该智能合约可能被攻击者非法调用撤销功能无数次,以耗尽该合同所包含的任何可用余额;委托调用:代码开发人员利用调用函数(CALL)和委托调用函数(DELEGATECALL)来模块化已编写的代码,DELEGATE操作码由一个类似于CALL消息的函数组成,但是,不同于调用一个智能合约的代码,发送者(msg.sender)和值(msg.value)不会被改变,DELEGATECALL特性表明,在构建自定义库时,可能会引入缺陷,也可能导致新的漏洞;tx-origin:tx.origin是Solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击,因为攻击者可以使用tx.origin全局变量绕过限制,获取一定的权限。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (5)
1.一种跨合约检测智能合约漏洞的符号执行方法,其特征在于:包括以下步骤:
步骤1:收集开源的智能合约代码:从Etherscan上收集智能合约的源码作为数据集,将其反编译为EVM字节码作为程序的输入;
步骤2:生成控制流图(CFG)和调用图:此模块分解EVM字节码并重建CFG和调用图,其中包含所有基本块作为节点,以及一些表示跳跃的边,可以通过研究定位相应的源节点来确定目标的跳跃;
步骤3:路径搜索模块:路径搜索是符号执行工具的核心模块,通过搜索扫描第2步中的控制流图和调用图,完成搜集各个路径分支的路径约束和其他数据的分析处理,这里将路径搜索模块分为三个部分;
步骤4:约束求解:约束求解模块使用Z3约束求解器解决路径约束模块传来的组合约束,检测分析是否存在漏洞;
步骤5:输出结果:根据符号执行完成的分析结果,输出漏洞检测结果,此外,本发明还建立了漏洞检测模型,通过分析符号执行产生的结果以发掘智能合约的漏洞,除了常见的智能合约内部漏洞意外,下面主要列举跨合约漏洞以及漏洞特征:
重入漏洞:重入漏洞发生在一个函数通过外部调用另一个合约时,利用该漏洞,攻击者可以执行主函数的递归回调,从而产生重复多次的意外循环,例如,当一个脆弱的智能合约包含撤销功能时,该智能合约可能被攻击者非法调用撤销功能无数次,以耗尽该合同所包含的任何可用余额;
委托调用:代码开发人员利用调用函数(CALL)和委托调用函数(DELEGATECALL)来模块化已编写的代码,DELEGATE操作码由一个类似于CALL消息的函数组成,但是,不同于调用一个智能合约的代码,发送者(msg.sender)和值(msg.value)不会被改变,DELEGATECALL特性表明,在构建自定义库时,可能会引入缺陷,也可能导致新的漏洞;
tx-origin:tx.origin是Solidity中的一个全局变量,它能够遍历调用栈并返回最初发送调用的账户的地址,使用tx.origin变量进行身份验证,会导致合约受到网络钓鱼攻击,因为攻击者可以使用tx.origin全局变量绕过限制,获取一定的权限。
2.根据权利要求1所述的一种跨合约检测智能合约漏洞的符号执行方法,其特征在于:在步骤3中,第一部分图维护模块:主要负责在路径探索过程中,控制流图(CFG)和调用图(CG)的更新;
CFG的维护由两个类实现:CFG和CFGNode,CFG中有三个数据成员,root是CFG的开始节点,即实际程序的入口,all_visited为访问标记,默认为false,当所有节点都被访问后,维护模块将其修改为true,也标志着符号执行结束,node是一个映射,CFG中所有节点的名字和指针一一对应,便于快速检索某个节点,CFGNode是CFG中的各个节点,每个CFGNode中有四个数据成员,name为该节点的名字,is_visited为访问标记,默认为false,节点被访问后,维护模块将其修改为true,general_child_num表示其子节点的数量,搜索时会进行遍历或剪枝,child为一个集合,其中包含指向该节点的各个子节点的指针;
CG表示一个程序中子程序之间的调用关系,数据结构与CFG相似,不过CG中的每个节点表示一个函数,每条边(f,g)表示函数f调用函数g,这里主要针对跨合约的函数调用链进行建图,因为合约内部的CFG进行路径探索,若相同路径在CG中也包含,会造成额外开销。
3.根据权利要求1所述的一种跨合约检测智能合约漏洞的符号执行方法,其特征在于:在步骤3中,第二部分搜索策略模块:进行路径搜索的策略是符号执行效率的关键所在,本发明的策略是综合基于覆盖率优化的启发式搜索和限界深度优先搜索策略,不仅能保证符号执行高路径覆盖率,触发层次较深的分支以捕获漏洞,还能减少程序执行次数,使算法更加高效;
基于覆盖率优化的启发式搜索:启发式搜索是指利用当前与问题有关的信息作为启发式信息,以提升查找效率并减少查找次数,本发明使用的是启发式搜索中的A*算法,A*算法中,评估函数有两部分组成:
f(n)=g(n)+h(n)
其中,g(n)表示的是从起始节点到当前的节点n的开销的代价值;h(n)表示从当前节点n到目标节点路径中所估算的最小开销代价值,因此,评估函数f(n)即是当前已用最小开销g(n)和后续最小开销h(n)的和,只要保证f(n)的值最小,便是最优的,而A*算法通过令h(n)满足可容性和一致性,使得f(n)一定存在最优解;
限界深度优先搜索策略:该策略核心思想是在每次待测程序的符号执行后,可得到一组由满足该路径中各个分支判定条件的、包含符号常量的布尔表达式序列,即本次执行收集的路径约束;路径搜索时,优先对序列前端未发生取反操作的约束进行取反,并与其之前的所有约束相与,利用求解器求解,得到下次符号执行的输入值:
对于输入的数据,首先关注覆盖率,相比于传统的贪心路径搜索策略,启发式搜索可以在更短的时间里覆盖到更多的分支,启发式搜索的输入是路径约束(PC)和更新的CFG、CG,对图进行遍历并将遇到的分支节点加入序列中,最后判断分支节点序列是否为空,若为空,则搜索失败,否则进行分支节点筛选,分支结点筛选的过程是从上一步得到的分支节点序列中,选择满足两个后继节点中有且仅有一个节点被访问过的分支节点依次加入待取反分支节点序列,同样,判断该待取反分支节点序列是否为空,若为空,反馈搜索失败;否则,进行约束匹配以构成新的路径约束;
基于覆盖率优化的启发式搜索有两种输出情况:搜索新路径失败或者得到新的路径约束,若为后者则进行约束求解,然后进入下一轮的路径搜索,否则本策略再调度限界深度优先搜索策略进行更深层次的搜索,因为限界深度优先搜索策略在面对大规模复杂程序时,就会表现出执行效率低,易陷入“路径饥饿”状态等不足,所以将其作为启发式搜索的补充搜索策略存在,此时复杂的程序可能只剩下少部分深层次分支未被访问到;
限界深度优先搜索策略的基本思想在于每次路径搜索的时候,尽可能对符号执行树上层次较浅的分支节点所对应的约束条件取反,即优先取反路径深度较大的约束条件,从而指导符号执行更大程度地探索新的分支节点,同时通过限界来避免一些非最优解,降低开销,若存在这样的约束,进行搜索,并得到新的路径约束,否则路径搜索结束。
4.根据权利要求1所述的一种跨合约检测智能合约漏洞的符号执行方法,其特征在于:在步骤3中,第三部分路径约束模块:路径约束模块主要负责约束条件取反并组合成新的路径约束,一旦找到新路径,此模块便会符号化执行当前探索的路径分支以收集路径约束,并对相关数据和路径约束进行前期处理,以输入约束求解模块中进行求解;
路径约束模块接收两个输入,一个是本次程序执行的输入值所对应的被取反约束,在原路径约束中的序号;另一个是记录各约束条件的文件,该文件中包含程序执行时收集的路径约束,以及每个约束对应的语句类型和代码块名称,根据路径深度优先的原则,按照约束收集的先后顺序,依次取反并组合成新的路径约束。
5.根据权利要求1所述的一种跨合约检测智能合约漏洞的符号执行方法,其特征在于:在步骤4中,约束求解模块有两个输入,分别是记录路径约束中使用到的符号常量及其实际数据类型的文件symbolic_file和待求解路径约束PCnew,Z3求解器识别的输入格式为SMT-lib,因此在求解之前先将symbolic_file和PCnew经Transform函数转换成SMT-lib格式,得到z3_input,然后调用Z3的API函数将z3_input加载到求解器z3_solver中;左后通过check函数判断该路径约束是否可解,若不可解,返回“unsat”,否则返回z3_solver求解得到的每个符号常量和其对应解出的具体值,并返回给路径搜索模块,但若是路径搜索模块未能找到新的路径来进行求解,则根据结果进行漏洞分析。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211356631.8A CN115906092A (zh) | 2022-11-01 | 2022-11-01 | 一种跨合约检测智能合约漏洞的符号执行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211356631.8A CN115906092A (zh) | 2022-11-01 | 2022-11-01 | 一种跨合约检测智能合约漏洞的符号执行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115906092A true CN115906092A (zh) | 2023-04-04 |
Family
ID=86491694
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211356631.8A Pending CN115906092A (zh) | 2022-11-01 | 2022-11-01 | 一种跨合约检测智能合约漏洞的符号执行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115906092A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116933267A (zh) * | 2023-07-18 | 2023-10-24 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
CN117828618A (zh) * | 2024-03-06 | 2024-04-05 | 电子科技大学(深圳)高等研究院 | 许可链智能合约漏洞的检测方法、装置、设备及存储介质 |
-
2022
- 2022-11-01 CN CN202211356631.8A patent/CN115906092A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116933267A (zh) * | 2023-07-18 | 2023-10-24 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
CN116933267B (zh) * | 2023-07-18 | 2024-01-26 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
CN117828618A (zh) * | 2024-03-06 | 2024-04-05 | 电子科技大学(深圳)高等研究院 | 许可链智能合约漏洞的检测方法、装置、设备及存储介质 |
CN117828618B (zh) * | 2024-03-06 | 2024-05-03 | 电子科技大学(深圳)高等研究院 | 许可链智能合约漏洞的检测方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115906092A (zh) | 一种跨合约检测智能合约漏洞的符号执行方法 | |
CN101661543B (zh) | 软件源代码安全漏洞的检测方法及检测装置 | |
Liang et al. | Deepfuzzer: Accelerated deep greybox fuzzing | |
CN104573503B (zh) | 一种内存访问溢出的检测方法及装置 | |
CN101853200B (zh) | 一种高效动态软件漏洞挖掘方法 | |
CN111581106B (zh) | 二进制程序漏洞测试方法、装置及可读存储介质 | |
CN108052825A (zh) | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 | |
CN114996126B (zh) | 一种针对eosio智能合约的漏洞检测方法及系统 | |
CN111723382A (zh) | 动态Android程序漏洞验证方法和装置 | |
Fu et al. | A critical-path-coverage-based vulnerability detection method for smart contracts | |
CN110110525A (zh) | 一种基于机器学习和深度学习的漏洞挖掘方法 | |
CN115017516A (zh) | 一种基于符号执行的模糊测试方法 | |
Amadini et al. | Constraint programming for dynamic symbolic execution of JavaScript | |
CN110162474B (zh) | 一种基于抽象语法树的智能合约重入漏洞检测方法 | |
Zhang et al. | Detecting vulnerabilities in C programs using trace-based testing | |
CN112506564B (zh) | 一种用于建立控制流图的方法、系统和介质 | |
Saumya et al. | Xstressor: Automatic generation of large-scale worst-case test inputs by inferring path conditions | |
Han et al. | An optimized static propositional function model to detect software vulnerability | |
Kang | A review on javascript engine vulnerability mining | |
Hu et al. | SolDetector: Detect Defects Based on Knowledge Graph of Solidity Smart Contract. | |
CN115310095A (zh) | 一种区块链智能合约混合形式化验证方法及系统 | |
Yao et al. | An improved vulnerability detection system of smart contracts based on symbolic execution | |
Moukahal et al. | Boosting grey-box fuzzing for connected autonomous vehicle systems | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression | |
Li et al. | DepTaint: a static taint analysis method based on program dependence |
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 |