CN116361810A - 一种基于符号执行的智能合约漏洞检测方法 - Google Patents
一种基于符号执行的智能合约漏洞检测方法 Download PDFInfo
- Publication number
- CN116361810A CN116361810A CN202310325434.8A CN202310325434A CN116361810A CN 116361810 A CN116361810 A CN 116361810A CN 202310325434 A CN202310325434 A CN 202310325434A CN 116361810 A CN116361810 A CN 116361810A
- Authority
- CN
- China
- Prior art keywords
- instruction
- path
- jump
- instructions
- key
- 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
- 238000001514 detection method Methods 0.000 title claims abstract description 30
- 238000000034 method Methods 0.000 claims abstract description 33
- 238000012795 verification Methods 0.000 claims abstract description 9
- 230000008569 process Effects 0.000 claims description 13
- 230000006870 function Effects 0.000 claims description 11
- 238000012546 transfer Methods 0.000 claims description 8
- 230000014509 gene expression Effects 0.000 claims description 4
- 238000012545 processing Methods 0.000 claims description 3
- 230000008859 change Effects 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 description 5
- 238000004880 explosion Methods 0.000 description 5
- 230000007547 defect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 201000004569 Blindness Diseases 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
-
- 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
-
- 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/53—Decompilation; Disassembly
-
- 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
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Evolutionary Computation (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于符号执行的智能合约漏洞检测方法,该方法包含:对原始数据集进行分类,使用编译器编译Solidity源码文件,获取runtime字节码,获得统一的字节码类型的数据集;反编译字节码,获取其对应的EVM指令集;利用后向切片法构建控制流图,定义关键指令并获取关键路径,符号执行关键路径并收集路径约束;使用约束求解器对关键路径的路径约束进行求解,求解出导致关键路径执行的漏洞输入交易列表;最后搭建私链对求解出的交易进行验证,并输出验证结果。本发明的方法能够实现对现实以太坊网络中的智能合约进行可重入漏洞检测,可以生成导致合约漏洞的交易实例,并对其进行验证,显著提高了漏洞检测的准确率和效率。
Description
技术领域
本发明属于网络安全技术领域,涉及一种基于符号执行的智能合约漏洞检测方法。
背景技术
然而,智能合约同样带来了严重的安全问题,原因可分为以下三点:一、以太坊智能合约由图灵完备的高级语言Solidity编写,图灵完备虽然意味着更高的智能性,但安全性方面的表现远远不及图灵不完备语言。Solidity语言自身设计的缺陷,以及开发人员在开发过程中引入的错误,都使得智能合约的安全性受到威胁;二、智能合约功能强大,在区块链上不仅仅是一段可自动触发执行的计算机程序,还可以接收和回应消息、收发数字货币,一个合约的执行往往会导致状态变量和账户余额的变化。智能合约包含巨大的经济价值,成为攻击者长期觊觎的目标;三、由于区块链不可更改的特性,智能合约一旦被部署上链,即使由开发人员发现了合约中的漏洞,也无法对其进行更改或升级。
历史上曾发生过多起智能合约相关安全事件,造成了巨额的经济损失,也损害了人们对区块链的信任,智能合约的安全问题成为研究者和开发者共同关注的焦点。
现有的智能合约漏洞检测方法大致包括形式化验证、符号执行、模糊测试、程序静态分析和机器学习五大类,其中基于符号执行的智能合约漏洞检测方法准确率较高、检测效果较优,成为该领域内最受欢迎的研究技术之一。但是现有的符号执行技术仍存在一些缺陷,在遍历控制流图进行路径探索时,这些技术大多盲目且随机的选择一条路径进行探索,在有限的探索时间内往往无法实现较高的代码覆盖率。尤其当程序代码量较大或者程序中包含多层循环时,很容易发生路径爆炸的问题。
本发明为了克服上述缺陷,提出了一种基于符号执行的智能合约漏洞检测方法,本发明具体步骤如下:
S1,对数据集进行分类,根据输入智能合约的文件类型分为Solidity源代码和EVM字节码两种类型;
S2,根据字节码和汇编指令的对应关系,将字节码反汇编为EVM指令序列;
S3,将EVM指令序列划分为若干基本块,根据基本块之间的跳转关系构建边,构建控制流图;
S4,定义漏洞的关键指令和相应的检测规则,在控制流图中定位关键指令,根据关键指令在控制流图中提取出关键路径,符号执行搜集到的关键路径,在执行过程中记录关键路径的路径约束;
S5,使用约束求解器对关键路径的路径约束进行求解,将约束求解产生的交易实例输出,报告漏洞;
S6,在本地网络搭建以太坊私链,创建必要的账户并进行转账,将待验证的合约部署到私链,向合约发送约束求解器产生的交易实例,观察交易结束后合约的账户余额变化,并输出验证结果。
本发明的技术方案特征和改进为:
对于步骤S1,本发明需要对对输入的智能合约进行分类。以太坊网络中所有的智能合约都是公开的,但是绝大多数智能合约公开的是其字节码,因此对已经部署上链的智能合约进行检测大多是检测其字节码文件。尚未部署上链的以太坊智能合约使用Solidity语言编写,因此对未部署上链的智能合约进行检测大多是检测其Solidity源码文件。本发明对两种文件类型的智能合约进行检测,如果输入的智能合约是Solidity源码文件,使用编译器对其进行编译,获取并保留编译之后的runtime字节码,如果输入的智能合约是EVM字节码文件,则转入下一步进行反汇编处理。
对于步骤S2,本发明需要将EVM字节码反汇编为EVM汇编指令。以太坊字节码由144个操作码组成,每个操作码被编码为一个字节,以十六进制格式表示,并且每个操作码都有固定的参数长度,设计一个字节码和操作码指令的对应表,加上每个操作码指令与其参数长度的对应表,实现由EVM字节码到EVM指令序列的汇编指令生成过程。
对于步骤S3,本发明需要构建控制流图。首先将EVM指令序列划分为基本块,每个基本块以非跳转指令或JUMPDEST指令作为起点,以跳转指令或STOP、RETURN、SELFDESTRUCT指令作为结束。完成基本块的划分之后,根据指令间的跳转关系初步构建边。EVM只提供间接跳转的控制流指令,无条件跳转指令JUMP和有条件跳转指令JUMPI都读取栈顶元素以确定跳转地目标地址。有些情况下,跳转目标可以简单访问获取,但在其他情况下,跳转指令的跳转目标在函数调用前就被写入栈中,因此不可直接访问。对此,本发明采用后向切片法迭代重建控制流图。最初,控制流图只包含简单的边,连接这些边的JUMP指令和JUMPI指令被标记为已访问,其他的JUMP指令和JUMPI指令被标记为未访问。接下来,选择一个未被访问的JUMP指令或JUMPI指令,计算其跳转目标的后向切片集,如果能够找到一个完整的后向切片,就执行该切片上的指令集,计算出跳转目标。此时,一条新的边会被加入到控制流图中,对应的JUMP指令或JUMPI指令被标记为已访问。由于引入新的跳转关系可能会导致构建的控制流图子图中出现新的跳转指令,因此该控制流图子图中的所有的跳转指令再次标记为未访问,重复上述过程,直到所有的跳转指令都被标记为已访问。
对于步骤S4,本发明主要针对可重入漏洞进行分析,每一种漏洞都有特征以及与其特征相关的EVM指令,定义这些指令为关键指令,并提出相应的检测规则。在以太坊交易中,有三种主要方式实现转账,分别是transfer()、send()和call(),在EVM中,这三每个函数都会被编译成CALL指令,其中,使用call方法转账会传递所有可用的gas进行交易。此外,只有fallback函数标记为payable的智能合约才有接收以太币的功能,如果合约没有fallback函数,则不能接收外界发送的以太币。可重入漏洞的特点是,当智能合约的转账功能是通过call()函数来实现时,所有的可用gas都会被用来执行这次交易,这使得攻击者有足够的gas利用fallback函数多次回调被攻击合约。因此,针对可重入漏洞,本发明定义的关键指令为CALL指令和算数运算指令。对可重入漏洞的检测规则定义为,对于函数A,检查其EVM底层的CALL指令调用链,然后检查CALL指令的第一个堆栈参数gas和第三个堆栈参数value。
定义好关键指令和漏洞的检测规则后,要在控制流图中提取出关键路径。首先扫描控制流图,在其中定位关键指令,获取关键指令集。在探索路径时,本发明采用A*算法,该算法将路径的代价定义为路径在控制流图中经过的分支数。探索路径时,在关键指令集中选择一个关键指令,使用A*算法探索路径,每操作一步,检查关键指令集中是否存在当前路径可达的其他关键指令,若不存在,则放弃该条路径的探索。
生成关键路径集合后,通过符号执行这些路径收集路径约束。将程序的输入以符号量代替,并将与程序相关的符号变量和输出以符号表达式的方式表示。程序中存在众多分支指令,当遇到分支指令时,符号执行会探索每条分支路径,同时保存分支的约束条件。在探索不同的分支路径时,符号执行会利用约束求解器对约束条件进行求解,如果约束条件可解则说明路径可达,符号执行继续深入探索该条可解分支。在路径探索过程中保存一个状态信息:
(pc,π,σ)
其中,pc是程序计数器,用来寻找下一条语句,π是约束条件,表示执行到当前路径收集到的约束信息,其初始值是π=true,σ是一个符号量的集合,包括和输入相关的符号量和表达式。
在具体执行过程中,存在的输入x,y等,会分别以符号量α,β表示,同时约束条件初始化为true。此时的状态如公式(1)所示:
σ:{x→α,y→β};π=true (1)
当遇到分支语句如if(x>2)时,将产生两条分支路径:true路径和false路径,true路径产生的状态如公式(2)所示:
if(x>2)→σ:{x→α,y→β};π:α>2 (2)
false路径产生的状态如公式(3)所示:
if(x≤2)→σ:{x→α,y→β};π:α≤2 (3)
随机选择一条路径进行探索,遇到新的分支语句时同样会再产生两条分支路径,直到路径结束,与符号量相关的所有操作执行完毕。
在对智能合约符号执行时,路径探索由关键路径上的第一个基本块开始,在遍历到每个基本块时,依次执行基本块中的EVM指令。本发明构建stack/memory/storage等EVM执行过程需要的结构,并根据EVM所有指令的语义模拟各个指令在stack/memory/storage上的操作。
对于步骤S5,本发明使用Z3求解器对关键路径的约束状态进行求解,得到的解为到达该路径输入的值,即以太坊交易的具体参数。
对于步骤S6,在本地网络上搭建以太坊私链,并在私链上创建账户。在真实以太坊网络中,有些智能合约不允许陌生账户对其转账,因此,在本地的以太坊私链上进行验证时,首先向创建的账户进行转账,使其账户内余额不为零。将待验证的智能合约部署到本地以太坊私链,执行步骤S5产生的交易实例,并输出验证结果。
本发明基于符号执行的智能合约漏洞检测方法,解决了现有技术存在路径爆炸和检测效率低的问题,具有以下优点:
(1)本发明使用后向切片法构建控制流图,与之前已有的控制流图构建方法相比能够更准确的建立基本块之间的联系,并且能够以更短的时间完成控制流图构建。
(2)本发明能够应用于现实以太坊网络中的智能合约,能够针对可重入漏洞对智能合约进行检测,并且在检测出漏洞之后在本地私链进行验证,避免了以往符号执行技术存在的误报率高的问题。
(3)本发明定义了漏洞相关的关键指令,提取出特定的关键路径进行符号执行,有效解决了传统符号执行技术盲目选择搜素路径所带来的检测效率低和路径爆炸的问题,结合本发明所设计的智能合约漏洞检测模型,能够将本发明应用于现实中实现对以太坊智能合约可重入漏洞的检测。
附图说明
图1为本发明中基于符号执行的智能合约漏洞检测方法的检测流程图。
图2为本发明中构建控制流图方法的流程图。
图3为本发明中符号执行关键路径的流程图。
具体实施方式
下面结合附图以及具体实施方式对本发明作进一步详细说明:
一种基于符号执行的智能合约漏洞检测方法,该方法包含:
S1,从SolidiFI Benchmark数据集中下载存在可重入漏洞的智能合约数据集,对数据集进行分类,根据文件类型分为Solidity源代码文件和EVM字节码文件两种类型。如果输入的智能合约是Solidity源码文件,使用solc编译器对其进行编译,获取并保留编译之后的runtime字节码,如果输入的智能合约是EVM字节码文件,则转入下一步进行反汇编处理。
S2,反汇编字节码文件,获取EVM操作码指令集合。反汇编算法首先加载智能合约字节码code,之后从code中解析一个指令op,并根据相应指令长度解析后面的参数,直到所有字节码code都完成解析。
S3,首先将EVM指令序列划分为基本块,每个基本块以非跳转指令或JUMPDEST指令作为起点,以跳转指令或STOP、RETURN、SELFDESTRUCT指令作为结束。完成基本块的划分之后,根据指令间的跳转关系初步构建边。EVM只提供间接跳转的控制流指令,无条件跳转指令JUMP和有条件跳转指令JUMPI都读取栈顶元素以确定跳转地目标地址。有些情况下,跳转目标可以简单访问获取,但在其他情况下,跳转指令的跳转目标在函数调用前就被写入栈中,因此不可直接访问。对此,本发明采用后向切片法迭代重建控制流图。最初,控制流图只包含简单的边,连接这些边的JUMP指令和JUMPI指令被标记为已访问,其他的JUMP指令和JUMPI指令被标记为未访问。接下来,选择一个未被访问的JUMP指令或JUMPI指令,计算其跳转目标的后向切片集,如果能够找到一个完整的后向切片,就执行该切片上的指令集,计算出跳转目标。此时,一条新的边会被加入到控制流图中,对应的JUMP指令或JUMPI指令被标记为已访问。由于引入新的跳转关系可能会导致构建的控制流图子图中出现新的跳转指令,因此该控制流图子图中的所有的跳转指令再次标记为未访问,重复上述过程,直到所有的跳转指令都被标记为已访问。
S4,定义CALL指令和算数运算指令为关键指令,并据此定义针对可重入漏洞的检测规则。扫描控制流图,定位关键指令,使用A*算法进行路径探索,生成关键路径集合,通过动态符号执行关键路径获取路径的状态约束条件。
S5,使用Z3求解器对关键路径的约束状态进行求解,得到触发可重入漏洞的具体交易。
S6,在本地网络上搭建以太坊私链,使用web3工具连接私链,在私链上创建账户,并向创建的账户进行转账,使其账户内余额不为零。将待验证的智能合约部署到本地以太坊私链,执行步骤S5产生的交易实例。
S7,对可重入漏洞检测结果和验证结果进行记录展示。
综上所述,本发明的基于符号执行的智能合约漏洞检测方法适用于真实以太坊网络中针对可重入漏洞进行检测。已有的符号执行技术代码覆盖率低、检测速度慢、存在路径爆炸的问题,而本发明通过后向切片技术重构控制流图,并定义关键指令和检测方案,提取关键路径进行符号执行,避免了符号执行路径探索的盲目性,提高了检测效率,并且有效避免了路径爆炸的问题。
尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。
Claims (7)
1.一种基于符号执行的智能合约漏洞检测方法,其特征及具体步骤如下:
S1,对数据集进行分类,根据输入智能合约的文件类型分为Solidity源代码和EVM字节码两种类型;
S2,根据字节码和汇编指令的对应关系,将字节码反汇编为EVM指令序列;
S3,将EVM指令序列划分为若干基本块,根据基本块之间的跳转关系构建边,构建控制流图;
S4,定义关键指令,在控制流图中定位关键指令,根据关键指令在控制流图中提取出关键路径,符号执行搜集到的关键路径,在执行过程中记录关键路径的路径约束;
S5,使用约束求解器对关键路径的路径约束进行求解,将约束求解产生的交易实例输出,报告漏洞;
S6,在本地网络搭建以太坊私链,创建必要的账户并进行转账,将待验证的合约部署到私链,向合约发送约束求解器产生的交易实例,观察交易结束后合约的账户余额变化,并输出验证结果。
2.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S1,本发明需要对输入的智能合约进行分类,如果输入的智能合约是Solidity源码文件,使用编译器对其进行编译,获取并保留编译之后的runtime字节码,如果输入的智能合约是EVM字节码文件,则转入下一步进行反汇编处理。
3.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S2,本发明需要将EVM字节码反汇编为EVM汇编指令,以太坊字节码由144个操作码组成,每个操作码被编码为一个字节,以十六进制格式表示,并且每个指令都有固定的参数长度,设计一个字节码和操作码指令的对应表,加上每个指令与其参数长度的对应表,设计一个智能合约字节码反汇编算法,实现由EVM字节码到EVM指令序列的汇编指令生成过程。
4.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S3,本发明需要构建控制流图,首先将EVM指令序列划分为基本块,每个基本块以非跳转指令或JUMPDEST指令作为起点,以跳转指令或STOP、RETURN、SELFDESTRUCT指令作为结束,完成基本块的划分之后,根据指令间的跳转关系初步构建边,EVM只提供间接跳转的控制流指令,无条件跳转指令JUMP和有条件跳转指令JUMPI都读取栈顶元素以确定跳转地目标地址,有些情况下,跳转目标可以简单访问获取,但在其他情况下,跳转指令的跳转目标在函数调用前就被写入栈中,因此不可直接访问,对此,本发明采用后向切片法迭代重建控制流图,最初,控制流图只包含简单的边,连接这些边的JUMP指令和JUMPI指令被标记为已访问,其他的JUMP指令和JUMPI指令被标记为未访问,接下来,选择一个未被访问的JUMP指令或JUMPI指令,计算其跳转目标的后向切片集,如果能够找到一个完整的后向切片,就执行该切片上的指令集,计算出跳转目标,此时,一条新的边会被加入到控制流图中,对应的JUMP指令或JUMPI指令被标记为已访问,由于引入新的跳转关系可能会导致构建的控制流图子图中出现新的跳转指令,因此该控制流图子图中的所有的跳转指令再次标记为未访问,重复上述过程,直到所有的跳转指令都被标记为已访问。
5.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S4,本发明定义了CALL指令和算术运算指令为关键指令,并据此定义可重入漏洞的检测规则,扫描控制流图,在其中定位关键指令,获取关键指令集,探索路径时,在关键指令集中选择一个关键指令,使用A*算法探索路径,每操作一步,检查关键指令集中是否存在当前路径可达的其他关键指令,若不存在,则放弃该条路径的探索,符号执行生成的关键路径,将程序的输入以符号量代替,并将与程序相关的符号变量和输出以符号表达式的方式表示,程序中存在众多分支指令,当遇到分支指令时,符号执行会探索每条分支路径,同时保存分支的约束条件,在探索不同的分支路径时,符号执行会利用约束求解器对约束条件进行求解,如果约束条件可解则说明路径可达,符号执行继续深入探索该条可解分支,在路径探索过程中保存一个状态信息:
(pc,π,σ)
其中,pc是程序计数器,用来寻找下一条语句,π是约束条件,表示执行到当前路径收集到的约束信息,其初始值是π=true,σ是一个符号量的集合,包括和输入相关的符号量和表达式。
在具体执行过程中,存在的输入x,y等,会分别以符号量α,β表示,同时约束条件初始化为true,此时的状态如公式(1)所示:
σ:{x→α,y→β};π=true (1)
当遇到分支语句如if(x>2)时,将产生两条分支路径:true路径和false路径,true路径产生的状态如公式(2)所示:
if(x>2)→σ:{x→α,y→β};π:α>2 (2)
false路径产生的状态如公式(3)所示:
if(x≤2)→σ:{x→α,y→β};π:α≤2 (3)
随机选择一条路径进行探索,遇到新的分支语句时同样会再产生两条分支路径,直到路径结束,与符号量相关的所有操作执行完毕。
在对智能合约符号执行时,路径探索由关键路径上的第一个基本块开始,在遍历到每个基本块时,依次执行基本块中的EVM指令,本发明构建stack/memory/storage等EVM执行过程需要的结构,并根据EVM所有指令的语义模拟各个指令在stack/memory/storage上的操作。
6.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S5,本发明使用Z3求解器对关键路径的约束状态进行求解,得到的解为到达该路径输入的值,即以太坊交易的具体参数。
7.根据权利要求1所述的一种基于符号执行的智能合约漏洞检测方法,其特征在于,对于步骤S6,在本地网络上搭建以太坊私链,并在私链上创建账户,在真实以太坊网络中,有些智能合约不允许陌生账户对其转账,因此,在本地的以太坊私链上进行验证时,首先向创建的账户进行转账,使其账户内余额不为零,将待验证的智能合约部署到本地以太坊私链,执行步骤S5产生的交易实例,并输出验证结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310325434.8A CN116361810A (zh) | 2023-03-29 | 2023-03-29 | 一种基于符号执行的智能合约漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310325434.8A CN116361810A (zh) | 2023-03-29 | 2023-03-29 | 一种基于符号执行的智能合约漏洞检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116361810A true CN116361810A (zh) | 2023-06-30 |
Family
ID=86930135
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310325434.8A Pending CN116361810A (zh) | 2023-03-29 | 2023-03-29 | 一种基于符号执行的智能合约漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116361810A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116627502A (zh) * | 2023-07-21 | 2023-08-22 | 紫光同芯微电子有限公司 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
CN116820405A (zh) * | 2023-08-31 | 2023-09-29 | 浙江大学 | 一种基于复用分析的evm字节码控制流图构建方法 |
CN116933267A (zh) * | 2023-07-18 | 2023-10-24 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
CN117828618A (zh) * | 2024-03-06 | 2024-04-05 | 电子科技大学(深圳)高等研究院 | 许可链智能合约漏洞的检测方法、装置、设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112711760A (zh) * | 2020-12-29 | 2021-04-27 | 华南师范大学 | 检测智能合约恶意消除重入影响漏洞的检测方法和装置 |
CN112990941A (zh) * | 2021-03-10 | 2021-06-18 | 武汉大学 | 一种针对智能合约中庞氏骗局的漏洞检测方法及系统 |
CN113051574A (zh) * | 2021-03-11 | 2021-06-29 | 哈尔滨工程大学 | 一种智能合约二进制代码的漏洞检测方法 |
CN115408689A (zh) * | 2021-05-26 | 2022-11-29 | 北京大学 | 一种重入漏洞的检测与修复方法、系统 |
-
2023
- 2023-03-29 CN CN202310325434.8A patent/CN116361810A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112711760A (zh) * | 2020-12-29 | 2021-04-27 | 华南师范大学 | 检测智能合约恶意消除重入影响漏洞的检测方法和装置 |
CN112990941A (zh) * | 2021-03-10 | 2021-06-18 | 武汉大学 | 一种针对智能合约中庞氏骗局的漏洞检测方法及系统 |
CN113051574A (zh) * | 2021-03-11 | 2021-06-29 | 哈尔滨工程大学 | 一种智能合约二进制代码的漏洞检测方法 |
CN115408689A (zh) * | 2021-05-26 | 2022-11-29 | 北京大学 | 一种重入漏洞的检测与修复方法、系统 |
Non-Patent Citations (1)
Title |
---|
陈文轩: "基于符号执行的智能合约漏洞检测技术研究", 《万方数据》, pages 28 - 31 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116933267A (zh) * | 2023-07-18 | 2023-10-24 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
CN116933267B (zh) * | 2023-07-18 | 2024-01-26 | 烟台大学 | 一种符号执行的智能合约漏洞检测方法、系统和设备 |
CN116627502A (zh) * | 2023-07-21 | 2023-08-22 | 紫光同芯微电子有限公司 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
CN116627502B (zh) * | 2023-07-21 | 2023-11-14 | 紫光同芯微电子有限公司 | 跳转指令的优化方法、指令的跳转方法、装置、电子设备 |
CN116820405A (zh) * | 2023-08-31 | 2023-09-29 | 浙江大学 | 一种基于复用分析的evm字节码控制流图构建方法 |
CN116820405B (zh) * | 2023-08-31 | 2023-12-01 | 浙江大学 | 一种基于复用分析的evm字节码控制流图构建方法 |
CN117828618A (zh) * | 2024-03-06 | 2024-04-05 | 电子科技大学(深圳)高等研究院 | 许可链智能合约漏洞的检测方法、装置、设备及存储介质 |
CN117828618B (zh) * | 2024-03-06 | 2024-05-03 | 电子科技大学(深圳)高等研究院 | 许可链智能合约漏洞的检测方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chen et al. | Defining smart contract defects on ethereum | |
CN116361810A (zh) | 一种基于符号执行的智能合约漏洞检测方法 | |
Meng et al. | Identifying multiple authors in a binary program | |
Huang et al. | Hunting vulnerable smart contracts via graph embedding based bytecode matching | |
Chen et al. | Dataether: Data exploration framework for ethereum | |
CN109948345A (zh) | 一种智能合约漏洞检测的方法、系统 | |
Zhang et al. | BDA: practical dependence analysis for binary executables by unbiased whole-program path sampling and per-path abstract interpretation | |
CN114996126A (zh) | 一种针对eosio智能合约的漏洞检测方法及系统 | |
Alrabaee et al. | On leveraging coding habits for effective binary authorship attribution | |
US20230050691A1 (en) | System for detecting malicious programmable logic controller code | |
CN115017516A (zh) | 一种基于符号执行的模糊测试方法 | |
CN116383833A (zh) | 软件程序代码的测试方法及其装置、电子设备、存储介质 | |
Yuste et al. | Optimization of code caves in malware binaries to evade machine learning detectors | |
EP3467691A1 (en) | Method of selecting software files | |
Alrabaee | A stratified approach to function fingerprinting in program binaries using diverse features | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
CN112767155B (zh) | 智能合约安全交易序列生成方法、装置、介质和设备 | |
CN113886832A (zh) | 智能合约漏洞检测方法、系统、计算机设备和存储介质 | |
Tian et al. | Enhancing vulnerability detection via AST decomposition and neural sub-tree encoding | |
CN113868136A (zh) | 一种基于Go语言可执行形式化语义的程序漏洞分析方法 | |
CN114707151B (zh) | 一种基于api调用和网络行为的僵尸软件检测方法 | |
CN116361806A (zh) | 基于多示例和注意力机制的智能合约分析方法及装置 | |
CN115758388A (zh) | 一种基于低维字节码特征的智能合约的漏洞检测方法 | |
Xu et al. | Mining executable specifications of web applications from selenium ide tests | |
He et al. | Mining of probabilistic controlling behavior model from dynamic software execution trace |
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 |