CN116933267A - 一种符号执行的智能合约漏洞检测方法、系统和设备 - Google Patents

一种符号执行的智能合约漏洞检测方法、系统和设备 Download PDF

Info

Publication number
CN116933267A
CN116933267A CN202310880953.0A CN202310880953A CN116933267A CN 116933267 A CN116933267 A CN 116933267A CN 202310880953 A CN202310880953 A CN 202310880953A CN 116933267 A CN116933267 A CN 116933267A
Authority
CN
China
Prior art keywords
block
basic
control flow
intelligent contract
flow graph
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.)
Granted
Application number
CN202310880953.0A
Other languages
English (en)
Other versions
CN116933267B (zh
Inventor
赵相福
何龙
王奕辰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Yantai University
Original Assignee
Yantai University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Yantai University filed Critical Yantai University
Priority to CN202310880953.0A priority Critical patent/CN116933267B/zh
Publication of CN116933267A publication Critical patent/CN116933267A/zh
Application granted granted Critical
Publication of CN116933267B publication Critical patent/CN116933267B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及网络安全技术领域,具体为一种符号执行的智能合约漏洞检测方法、系统和设备;检测方法中,特征提取智能合约后得到能够构建基本块的特征输入,以及能够对基本块进行初步分类标记的潜在问题特征;自定义构建控制流图时的操作码语义,基于特征输入和潜在问题特征,完成基本块的构建和标记,并构建基本块之间的边关系得到控制流图;接着,根据叶子块与问题块的关系,对控制流图进行简化,使用简化后的控制流图进行符号执行分析,能够大大减小计算的复杂度,提高计算效率。

Description

一种符号执行的智能合约漏洞检测方法、系统和设备
技术领域
本发明涉及网络安全技术领域,具体为一种符号执行的智能合约漏洞检测方法、系统和设备。
背景技术
由于区块链的不可纂改和不可逆性,智能合约一旦部署便不能被修改。因此,若承载着大量数字资产的智能合约存在漏洞可能会导致不可逆转的经济损失。频发的安全事件已经严重的危害了区块链的信誉系统。因此,智能合约部署之前进行漏洞检测必不可少。
目前,智能合约漏洞检测的主要方法包括:符号执行、使用F*框架和KEVM框架的形式化验证,并且一些检测方法已经被公开发行。Oyente是最早使用符号执行检测智能合约漏洞的静态检测方法,它使用Z3求解器在控制流图的基础之上进行符号执行来检测智能合约漏洞。Mythri是以太坊官方推荐的智能合约漏洞检测方法,它实现了对Oyente漏洞检测数量的增强,目前检测漏洞的数量接近240种。说明书附图中的图1展示了一个使用Solidity编写的简单库合约的例子,在这个库合约中存在一个整数溢出漏洞,在代码的第十行,代码将库合约赋值给self.map[_name]变量,此时,攻击者可以通过超出32位无符号整型范围的赋值操作来发起一个整数溢出漏洞。目前,使用Oyente和Mythril分别测试图1的智能合约分别需要103秒和255秒,显然这两种检测智能合约的方法比较耗时,检测效率低。
发明内容
本发明的目的是提供了一种耗时少,检测效率高的符号执行的智能合约漏洞检测方法、系统和设备。
本发明技术方案如下:
一种符号执行的智能合约漏洞检测方法,包括如下操作:
S1获取智能合约,所述智能合约经特征提取,得到特征输入和潜在问题特征;
S2形式化操作语义,根据所述特征输入对应的指令,得到基本块;基于潜在问题特征,所述基本块经标记处理,得到标签基本块;基于所述标签基本块,构建边关系,得到控制流图;
S3所述控制流图经边集信息提取处理,得到叶子块;删除不属于所述标签基本块中问题块子集的叶子块,得到精简控制流图;
S4所述精简控制流图经符号执行处理,得到智能合约漏洞检测结果。
如上所述的智能合约漏洞检测方法,所述S2中得到标签基本块的操作具体为:初始化所述基本块为正常块,判断所述正常块中是否存在与潜在问题特征相对应的指令;若存在,标记所述正常块为问题块;若不存在,不改变所述正常块的标签。
如上所述的智能合约漏洞检测方法,所述S2中构建边关系的操作中,包括构建相邻标签基本块的边关系,以及构建非相邻标签基本块之间的边关系,
所述构建相邻标签基本块的边关系中,若当前标签基本块是终止块或无条件跳转块,建立当前标签基本块和相邻标签基本块之间的边。
所述构建非相邻标签基本块之间的边关系中,若当前标签基本块不是终止块和无效块,获取当前标签基本块跳转到非相邻标签基本块的地址,基于所述地址,建立当前标签基本块和非相邻标签基本块之间的边。
如上所述的智能合约漏洞检测方法,所述S3中得到叶子块的操作具体为:
所述控制流图经边集信息提取,得到边关系;
判断当前标签基本块是否存在边关系;若不存在,所述当前标签基本块为孤立块;若存在,所述当前标签基本块为非孤立块;
判断当前非孤立块是否存在下一级边关系;若不存在,所述当前非孤立块为叶子块;若存在,所述当前非孤立块为非叶子块。
如上所述的智能合约漏洞检测方法,所述S3中得到精简控制流图的操作中,还包括:
删除所述控制流图中叶子块上一级不是问题块的标签基本块;
删除所述控制流图中不存在边关系的标签基本块;
删除所述控制流图中与环状结构有关的标签基本块。
如上所述的智能合约漏洞检测方法,所述特征输入包括源映射关系;
所述源映射关系具体为:全局变量名、函数调用名、函数名和参数映射;函数调用对;函数与函数签名映射。
如上所述的智能合约漏洞检测方法,若所述智能合约的数量为若干个,所述若干个智能合约经同一个第一处理器执行所述S1的操作;经若干个第二处理器并行执行所述S2、S3、S4中的操作,得到的若干个智能合约漏洞检测结果放置在同一个储存器中。
一种符号执行的智能合约漏洞检测系统,包括:
特征输入和潜在问题特征生成模块,用于获取智能合约,所述智能合约经特征提取,得到特征输入和潜在问题特征;
控制流图生成模块,用于形式化操作语义,根据所述特征输入对应的指令,得到基本块;基于潜在问题特征,所述基本块经标记处理,得到标签基本块;基于所述标签基本块,构建边关系,得到控制流图;
精简控制流图生成模块,用于所述控制流图经边集信息提取处理,得到叶子块;删除不属于所述标签基本块中问题块子集的叶子块,得到精简控制流图;
智能合约漏洞检测结果生成模块,用于所述精简控制流图经符号执行处理,得到智能合约漏洞检测结果。
一种符号执行的智能合约漏洞检测设备,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现上述的符号执行的智能合约漏洞检测方法。
一种计算机可读存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现上述的符号执行的智能合约漏洞检测方法。
本发明的有益效果在于:
本发明提供一种符号执行的智能合约漏洞检测方法,特征提取智能合约后得到能够构建基本块的特征输入,以及能够对基本块进行初步分类标记的潜在问题特征;自定义构建控制流图时的操作码语义,基于特征输入和潜在问题特征,完成基本块的构建和标记,并构建基本块之间的边关系得到控制流图;接着,根据叶子块与问题块的关系,对控制流图进行简化,使用简化后的控制流图进行符号执行分析,能够大大减小计算的复杂度,提高计算效率;
本发明提供一种符号执行的智能合约漏洞检测方法,使用同一个第一处理器对多个智能合约进行特征提取,得到的多个输入特征经不同第二处理器并行执行分析,缓解数据传输通道堵塞,提高计算效率;
本发明提供一种符号执行的智能合约漏洞检测方法,能够更加快速、高效和准确地检测整数溢出漏洞、重入漏洞、交易顺序依赖漏洞、时间戳依赖漏洞、自毁漏洞和委托调用漏洞,且漏洞检测的准确率高、效率高。
附图说明
通过阅读下文优选实施方式的详细描述,本申请的方案和优点对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。
在附图中:
图1为Solidity编写的库合约的代码图;
图2为实施例中检测方法的流程示意图;
图3为实施例中特征提取的流程示意图;
图4为实施例中构建和标记基本块的代码图;
图5为实施例中构建边关系的代码图;
图6为实施例中获取叶节点的代码图;
图7为实施例中控制流图的结构示意图;
图8为实施例中简化控制流图的代码图;
图9为实施例中并行处理过程的流程示意图;
图10为实施例中三种检测方法检测错误的合约数量图;
图11为实施例中检测系统的结构示意图;
图12为实施例中检测设备的结构示意图。
具体实施方式
下面将结合附图更详细地描述本公开的示例性实施方式。
本实施例提供了一种符号执行的智能合约漏洞检测方法,参见图2,包括如下操作:
S1获取智能合约,所述智能合约经特征提取,得到特征输入和潜在问题特征;
S2形式化操作语义,根据所述特征输入对应的指令,得到基本块;基于潜在问题特征,所述基本块经标记处理,得到标签基本块;基于所述标签基本块,构建边关系,得到控制流图;
S3所述控制流图经边集信息提取处理,得到叶子块;删除不属于所述标签基本块中问题块子集的叶子块,得到精简控制流图;
S4所述精简控制流图经符号执行处理,得到智能合约漏洞检测结果。S1获取智能合约,智能合约经特征提取,得到特征输入和潜在问题特征。
参见图3,特征输入作为符号执行的约束,包括版本、运行时字节码和源映射关系。由于版本的快速更新,不同的智能合约之间存在差异。在处理智能合约之前,首先需要根据待测试的智能合约切换solc编译器的版本(solc是一个常见的Solidiy命令行编译器)。第二,使用相应版本的编译器获取符号执行输入的重要信息Runtimebin,即运行时字节码。由于不同版本的智能合约使用不同的编译器,智能合约的有效运行时字节码长度也有所不同。例如,当solc编译器版本为0.4.19时,字节码长度为422位,但当solc编译器版本为0.5.17时,字节码长度为396位。另外,获取Runtimebin时,还需删除“auxdata”部分的代码,以便参与符号执行。
获取源映射关系时,源映射关系的内容具体为:全局变量名、函数调用名、函数名和参数映射;函数调用对;函数与函数签名映射。获取全局变量名、函数调用名、函数名和参数映射,以及函数调用对时,需要AST(Abstract Syntax Tree,抽象语法树)与源代码和位置映射的帮助。但是,对于不同版本的智能合约,AST的定义不同。在版本0.8以下的智能合约和版本0.8+的智能合约之间的差异中尤为明显,需要区分它们的差异,以获取所需信息。但是函数与函数签名映射可以直接获取,因为solc编译器版本已经根据智能合约切换了。
另外,S1中特征提取的操作之后,还包括预检测智能合约;预检测智能合约的操作具体为:特征输入中的源映射关系经提取处理,得到抽象语法树、源代码和位置映射;基于抽象语法树、源代码和位置映射,判断智能合约中是否存在风险关键词;若存在,智能合约中存在漏洞;若不存在,智能合约中不存在漏洞。在获取输入特征时,根据抽象语法树、源代码和位置映射的特征,如关键词“Selfdestruct”、“Timestamp”和“Now”,预先确定智能合约是否存在“Timestamp”和“Selfdestruct”漏洞风险。相反,如果源代码中没有出现相应的关键词,则可以提前排除相应的漏洞。
S2形式化操作语义,根据特征输入对应的指令,得到基本块;基于潜在问题特征,基本块经标记处理,得到标签基本块;基于标签基本块,构建边关系,得到控制流图。
形式化操作语义。为便于构建基本块,基于指令,在表1中定义了指令、块、边的形式化规则,便于匹配到正确的操作码。这些形式化规则主要包括三个部分。在指令定义中,“abnormal”指的是异常指令,即可能存在漏洞的指令,例如,“ADD”可能与整数溢出有关。由于构建基本块时需要块开始指令,将“begin”定义为程序和块的开始指令。在“begin”中,“memory[PC[0]]”表示程序开始执行的指令,而“memory[PC[(terminal)+1]]”表示结束指令后的下一条指令。在块定义中,“block”表示指令和块的连接。“block(abnormal)”表示正常命令和正常块的连接。“block(abnormal)”表示正常指令“normal*”与异常指令和块的连接。最后,在边定义中,“edge<block1,block2>”表示从“block1”到“block2”的边。而“edge(block1,block2)”表示从“block1”到“block2”和从“block2”到“block1”的环形边结构。
表1:形式化操作语义
得到基本块。特征输入对应的指令可以直接映射为操作码,基于操作码,建立基本块,建立基本块的原则包括:当程序或子程序中遇到的第一条指令或语句时,则结束当前基本块,并使该语句成为新块的第一条语句。当遇到跳转语句、分支语句或循环语句时,该语句被视为当前块的最后一条语句,并且结束当前块。当遇到其他语句时,它们会直接添加到当前的基本块中。
得到标签基本块:初始化基本块为正常块,判断正常块中是否存在与潜在问题特征相对应的指令;若存在,则标记正常块为问题块;若不存在,不改变正常块的标签。
具体过程参见图4,图4描述了根据构建基本块的三个原则进行划分的详细过程。与传统的基本块构造的不同之处在于,在构建基本块的过程中,代码的第4–6行实现了对基本块的标记。首先,在第2行将当前块初始化为正常块block(normal)。然后,在第4-6行判断当前块中的指令。如果当前块存在与潜在问题特征相对应的指令(异常命令),则将该块标记为问题块block(abnormal)。
得到控制流图。构建边关系的操作中,包括构建相邻标签基本块的边关系,以及构建非相邻标签基本块之间的边关系。构建相邻标签基本块的边关系中,若当前标签基本块是终止块或无条件跳转块,建立当前标签基本块和相邻标签基本块之间的边。构建非相邻标签基本块之间的边关系中,若当前标签基本块不是终止块和无效块,获取当前标签基本块跳转的非相邻标签基本块的地址,基于地址,建立当前标签基本块和非相邻标签基本块之间的边。
具体过程参见图5,图5中代码的第2-3行是静态构造控制流图(Control FlowGraph,CFG),即构建相邻标签基本块的边关系。如果当前标签基本块是终止块或无条件跳转块,则建立当前标签基本块和相邻下一标签基本块之间的边。第4-6行是动态构造CFG,即构建非相邻标签基本块之间的边关系。如果当前标签基本块不是终止块和无效块,可以动态获取当前标签基本块跳转的非相邻标签基本块的地址,并在它们之间建立边。其他符号执行检测方法时,只在约束求解过程中动态构建边,例如Oyente。本实施例与其他符号执行检测方法的区别在于,为了简化CFG路径的操作,提前构建动态边,动态构造CFG不会增加算法的时间复杂度。
S3控制流图经边集信息提取处理,得到叶子块;删除不属于标签基本块中问题块子集的叶子块,得到精简控制流图。
得到叶子块的操作为:控制流图经边集信息提取,得到边关系;判断当前标签基本块是否存在边关系;若不存在,当前标签基本块为孤立块;若存在,当前标签基本块为非孤立块;判断当前非孤立块是否存在下一级边关系;若不存在,当前非孤立块为叶子块;若存在,当前非孤立块为非叶子块。
具体过程参见图6,图6中代码的第2-4行是根据CFG中的边关系获取非孤立块。代码的第5-9行是遍历非孤立块,并判断它们是否存在的下一级的边关系,若不存在,当前非孤立块为叶子块。
得到精简控制流图的操作中,还包括:删除控制流图中叶子块上一级不是问题块的标签基本块;删除控制流图中不存在边关系的标签基本块;删除控制流图中与环状结构有关的标签基本块。
完整的CFG如图7的左侧所示,简化后的精简CFG如图7的右侧所示。图7中,斜线框为问题块,例如Block 13(块13),竖线框为孤立块(不存在边关系的标签基本块),例如Block 187(块187),灰色框为叶子块,例如Block 76(块76),白色框为正常块,例如Block65(块65),智能合约的CFG中有大量的正常块,这些没有漏洞问题的正常块经常在符号执行中消耗大量时间,因此,为了提高符号执行的检测效率,在符号执行过程中需要删除与问题块无关的路径上的块。
具体过程参见图8,图8展示了一种自下而上的精简策略,从叶子块到根块(程序执行时首先被处理分析的基本块)来简化CFG。图8中代码的第1-2行使用问题块作为递归退出的叶子块的子集,第4-17行采用自下而上的策略根据叶子块与问题块的关系,删除正常块,当叶子块不属于问题块的子集时,删除叶子块及其上一级的正常块。第7行是删除正常块之间的边关系,第8-13行是解决类似于图7左侧所示的块368和块390之间形成的环状结构的情况,需删除与环状结构相关的正常块。经过一轮简化后,图8中代码的第19行调用图5中的代码更新叶子块,以便下一次可以递归简化CFG。第20行调用自身代码的递归操作。从图8可以看出,其时间复杂度为O(n^3),与z3解析器的求解过程和每个智能合约中基本块的有限数量相比,该算法的时间消耗非常小。
S4精简控制流图经符号执行处理,得到智能合约漏洞检测结果。
本实施例使用z3求解器进行符号执行处理,得到智能合约漏洞检测结果。与大多数符号执行检测方法类似,CFG调用z3求解器进行符号执行。但是,不同之处在于本实施例的CFG是完全构建和简化的,可以减小z3求解器处理时间,提高计算效率。
当智能合约为若干个时,如果若干个智能合约被放入一个处理器中进行计算,会造成数据传输通道堵塞,降低计算效率。为解决该技术问题,若干个智能合约经同一个第一处理器执行S1的操作;经若干个第二处理器并行执行S2、S3、S4中的操作,得到的若干个智能合约漏洞检测结果放置在同一个储存器中。
具体过程参见图9,图9展示了并行处理的简化过程,实线表示处理流程,虚线表示数据传输。首先将待检测的若干个智能合约引入到主进程中,从起点到并行点A属于若干个智能合约一起被特征提取处理。因单个Solidity代码文件可能包含多个智能合约,这使得特征提取的“输入特征”可能包含多个需要符号执行的输入。考虑到这种常见情况,在点A传输多个“输入特征”信息。然后,在点B和C并行开始每个CPU核(CPU核包括CPU Core 0、CPUCore 1、CPU Core 2)的符号执行过程。一旦每个CPU核的处理完成,处理结果将保存在由共享队列实现的共享内存中,以确保数据顺序。当所有CPU核都处理完毕时,CPU核0是主进程,它从共享内存点D获取智能合约检测结果。
为证明本实施例提高的检测方法的效果,使用真实数据集进行实验。首先,使用Smartbugs中的一小组经过验证的数据来验证本实施例检测方法的效果,并使用TP、TN、FP、FN和Precision等指标来展示本实施例检测方法的“精确度”。其次,使用来自以太坊的真实大数据集进行大量测试,以验证本实施例检测方法检测效率。最后,对小数据集和大数据集的测试结果进行统计,以检测本实施例检测方法能够支持处理智能合约版本的范围。
实验设置。实验环境描述参见表2。
表2实验环境
测试设置。该数据集包括两部分。第一部分来自已在Smartbugs上验证过的小型数据集。第二部分是截至2022年12月从官方Ethereum网站获取的1,500个真实智能合约。
表3数据集1描述
数据集1一个小型数据集,如表3示,其中包含50个Solidity文件,描述了六种漏洞的具体数量。
表4多合约文件数量统计
数据集2截至2022年12月的官方Ethereum网站上的1,500个实际合约。数据集存储位置的链接为“https://github.com/xxxx/Test-sets”。数据集2是一个大数据集,由于大数据集中的智能合约实际存在并在Ethereum上实际运行,统计了数据集2中包含多个合约并导入其他合约或库合约的Solidity文件的数量。统计结果如表4示。在1,500个Solidity文件中,有1,482个Solidity文件包含多个合约或导入其他合约。包含多个合约的Solidity文件占比超过98%。因此,本实施例检测方法采用的并行方法可以大大提高检测效率。
数据集1测试。Oyente、Mythril和本实施例检测方法在数据集1上的测试指标结果如表5所示。本实施例检测方法的准确率为92.50%,准确率较好。
表5三种检测方法在数据集1上的测试结果
三种检测方法的FP和TP结果如图10所示。FP表示错误检测为正的样本数量,FN表示漏检的正样本数量,FP和FN之和表示检测出错误的合约数量。从图10中,可以直观地得到本实施例检测方法检测错误的合约数量为8个,介于Mythril和Oyente之间。
通过对数据集1的测试和结果的统计分析,可以看出本实施例检测方法具有很好的漏洞检测能力。
数据集2测试。测试结果如表6所示。Oyente、Mythril和本实施例检测方法对每个Solidity文件的平均测试时间分别为113.50秒、238.91秒和58.02秒。在单个Solidity文件的平均检测时间方面,本实施例检测方法比Oyente快55秒,比Mythril快180秒。但在测试1,500个智能合约的过程中,本实施例检测方法比Oyente快23小时,比Mythril快75小时。因此,本实施例检测方法的检测时间效率在单个合约和批量测试方面均明显优于Oyente和Mythril。本实施例检测方法对智能合约漏洞的检测效率是Oyente的1.9倍,是Mythril的3.8倍。
表6数据集2的测试时间统计
版本支持度统计。基于数据集1、2的测试,三种检测方法对不同Solidity版本的支持程度如表7所示。本实施例检测方法支持检测所有Solidity文件版本。然而,Oyente只支持版本低于0.4.19的智能合约检测。虽然Mythril也支持检测所有版本的Solidity文件,但是它是通过将高版本智能合约强制转换为低版本智能合约,然后执行检测来实现的。不同Solidity文件中高版本的语法与低版本不兼容,所以强制转换可能会导致检测结果出现一些问题。
表7是否支持检测所有版本的智能合约
本实施例提出了一种并行和CFG路径简化方法,用于加速智能合约漏洞检测。首先,总结了不同智能合约版本的关键信息,以便检测Solidity的所有版本。其次,提出了一种基于单个Solidity文件中的多个合约的并行处理方法,以提高漏洞检测的效率。然后,介绍了基于潜在问题块的路径简化算法,实现了CFG简化,进一步降低了时间成本。最后,提出了一种基于共享队列的方法,以确保在每个合约由不同进程处理后,检测结果的顺序。实验结果表明,本实施例检测方法可以检测从0.4-0.8版本的智能合约,检测效率分别是Oyente和Mythril的1.9倍和3.8倍。
本实施例提供一种符号执行的智能合约漏洞检测系统,参见图11,包括:
特征输入和潜在问题特征生成模块,用于获取智能合约,智能合约经特征提取,得到特征输入和潜在问题特征;
控制流图生成模块,用于形式化操作语义,根据特征输入对应的指令,得到基本块;基于潜在问题特征,基本块经标记处理,得到标签基本块;基于标签基本块,构建边关系,得到控制流图;
精简控制流图生成模块,用于控制流图经边集信息提取处理,得到叶子块;删除不属于标签基本块中问题块子集的叶子块,得到精简控制流图;
智能合约漏洞检测结果生成模块,用于精简控制流图经符号执行处理,得到智能合约漏洞检测结果。
本实施例提供一种符号执行的智能合约漏洞检测设备,参见图12,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现上述的符号执行的智能合约漏洞检测方法。
本实施例提供一种计算机可读存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现上述的符号执行的智能合约漏洞检测方法。
本实施例提供的一种符号执行的智能合约漏洞检测方法,特征提取智能合约后得到能够构建基本块的特征输入,以及能够对基本块进行初步分类标记的潜在问题特征;自定义构建控制流图时的操作码语义,基于特征输入和潜在问题特征,完成基本块的构建和标记,并构建基本块之间的边关系得到控制流图;接着,根据叶子块与问题块的关系,对控制流图进行简化,使用简化后的控制流图进行符号执行分析,能够大大减小计算的复杂度,提高计算效率。
本实施例提供的一种符号执行的智能合约漏洞检测方法,使用同一个第一处理器对多个智能合约进行特征提取,得到的多个输入特征经不同第二处理器并行执行分析,缓解数据传输通道堵塞,提高计算效率。
本实施例提供的一种符号执行的智能合约漏洞检测方法,能够更加快速、高效和准确地检测整数溢出漏洞、重入漏洞、交易顺序依赖漏洞、时间戳依赖漏洞、自毁漏洞和委托调用漏洞,且漏洞检测的准确率高、效率高。

Claims (10)

1.一种符号执行的智能合约漏洞检测方法,其特征在于,包括如下操作:
S1获取智能合约,所述智能合约经特征提取,得到特征输入和潜在问题特征;
S2形式化操作语义,根据所述特征输入对应的指令,得到基本块;基于潜在问题特征,所述基本块经标记处理,得到标签基本块;基于所述标签基本块,构建边关系,得到控制流图;
S3所述控制流图经边集信息提取处理,得到叶子块;删除不属于所述标签基本块中问题块子集的叶子块,得到精简控制流图;
S4所述精简控制流图经符号执行处理,得到智能合约漏洞检测结果。
2.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S2中得到标签基本块的操作具体为:
初始化所述基本块为正常块,判断所述正常块中是否存在与潜在问题特征相对应的指令;若存在,标记所述正常块为问题块;若不存在,不改变所述正常块的标签。
3.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S2中构建边关系的操作中,包括构建相邻标签基本块的边关系,以及构建非相邻标签基本块之间的边关系,
所述构建相邻标签基本块的边关系中,若当前标签基本块是终止块或无条件跳转块,建立当前标签基本块和相邻标签基本块之间的边。
所述构建非相邻标签基本块之间的边关系中,若当前标签基本块不是终止块和无效块,获取当前标签基本块跳转到非相邻标签基本块的地址,基于所述地址,建立当前标签基本块和非相邻标签基本块之间的边。
4.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S3中得到叶子块的操作具体为:
所述控制流图经边集信息提取,得到边关系;
判断当前标签基本块是否存在边关系;若不存在,所述当前标签基本块为孤立块;若存在,所述当前标签基本块为非孤立块;
判断当前非孤立块是否存在下一级边关系;若不存在,所述当前非孤立块为叶子块;若存在,所述当前非孤立块为非叶子块。
5.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S3中得到精简控制流图的操作中,还包括:
删除所述控制流图中叶子块上一级不是问题块的标签基本块;
删除所述控制流图中不存在边关系的标签基本块;
删除所述控制流图中与环状结构有关的标签基本块。
6.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述特征输入包括源映射关系;
所述源映射关系具体为:全局变量名、函数调用名、函数名和参数映射;函数调用对;函数与函数签名映射。
7.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,若所述智能合约的数量为若干个,所述若干个智能合约经同一个第一处理器执行所述S1的操作;经若干个第二处理器并行执行所述S2、S3、S4中的操作,得到的若干个智能合约漏洞检测结果放置在同一个储存器中。
8.一种符号执行的智能合约漏洞检测系统,其特征在于,包括:
特征输入和潜在问题特征生成模块,用于获取智能合约,所述智能合约经特征提取,得到特征输入和潜在问题特征;
控制流图生成模块,用于形式化操作语义,根据所述特征输入对应的指令,得到基本块;基于潜在问题特征,所述基本块经标记处理,得到标签基本块;基于所述标签基本块,构建边关系,得到控制流图;
精简控制流图生成模块,用于所述控制流图经边集信息提取处理,得到叶子块;删除不属于所述标签基本块中问题块子集的叶子块,得到精简控制流图;
智能合约漏洞检测结果生成模块,用于所述精简控制流图经符号执行处理,得到智能合约漏洞检测结果。
9.一种符号执行的智能合约漏洞检测设备,其特征在于,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现如权利要求1-7任一项所述的符号执行的智能合约漏洞检测方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的符号执行的智能合约漏洞检测方法。
CN202310880953.0A 2023-07-18 2023-07-18 一种符号执行的智能合约漏洞检测方法、系统和设备 Active CN116933267B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310880953.0A CN116933267B (zh) 2023-07-18 2023-07-18 一种符号执行的智能合约漏洞检测方法、系统和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310880953.0A CN116933267B (zh) 2023-07-18 2023-07-18 一种符号执行的智能合约漏洞检测方法、系统和设备

Publications (2)

Publication Number Publication Date
CN116933267A true CN116933267A (zh) 2023-10-24
CN116933267B CN116933267B (zh) 2024-01-26

Family

ID=88393607

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310880953.0A Active CN116933267B (zh) 2023-07-18 2023-07-18 一种符号执行的智能合约漏洞检测方法、系统和设备

Country Status (1)

Country Link
CN (1) CN116933267B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117614681A (zh) * 2023-11-24 2024-02-27 烟台大学 智能合约的重入漏洞检测方法、系统、设备和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115828264A (zh) * 2022-12-19 2023-03-21 杭州云象网络技术有限公司 智能合约漏洞检测方法、系统及电子设备
CN115906092A (zh) * 2022-11-01 2023-04-04 广东启链科技有限公司 一种跨合约检测智能合约漏洞的符号执行方法
CN116361810A (zh) * 2023-03-29 2023-06-30 中国石油大学(华东) 一种基于符号执行的智能合约漏洞检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115906092A (zh) * 2022-11-01 2023-04-04 广东启链科技有限公司 一种跨合约检测智能合约漏洞的符号执行方法
CN115828264A (zh) * 2022-12-19 2023-03-21 杭州云象网络技术有限公司 智能合约漏洞检测方法、系统及电子设备
CN116361810A (zh) * 2023-03-29 2023-06-30 中国石油大学(华东) 一种基于符号执行的智能合约漏洞检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王泽丽: "面向以太坊智能合约的漏洞安全防护机制研究", 博士学位论文全文库, pages 5 - 24 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117614681A (zh) * 2023-11-24 2024-02-27 烟台大学 智能合约的重入漏洞检测方法、系统、设备和存储介质
CN117614681B (zh) * 2023-11-24 2024-05-24 烟台大学 智能合约的重入漏洞检测方法、系统、设备和存储介质

Also Published As

Publication number Publication date
CN116933267B (zh) 2024-01-26

Similar Documents

Publication Publication Date Title
CN110162296B (zh) 应用程序编程接口文档的生成方法、装置及终端设备
CN107832619B (zh) Android平台下应用程序漏洞自动化挖掘系统及方法
US8286149B2 (en) Apparatus for and method of implementing feedback directed dependency analysis of software applications
US8589888B2 (en) Demand-driven analysis of pointers for software program analysis and debugging
CN116933267B (zh) 一种符号执行的智能合约漏洞检测方法、系统和设备
CN111158741A (zh) 监控业务模块对第三方类库依赖关系变化的方法及装置
CN112948828A (zh) 一种二进制程序恶意代码检测方法、终端设备及存储介质
CN113419960A (zh) 用于可信操作系统内核模糊测试的种子生成方法及系统
CN115022026A (zh) 一种区块链智能合约威胁检测装置及方法
CN115640578A (zh) 应用程序的漏洞可达性分析方法、装置、设备及介质
CN111709026A (zh) 静态安全检测方法、装置、计算机设备和存储介质
CN113626823B (zh) 一种基于可达性分析的组件间交互威胁检测方法及装置
CN116305131B (zh) 脚本静态去混淆方法及系统
US20230141948A1 (en) Analysis and Testing of Embedded Code
CN116432185B (zh) 一种异常检测方法、装置、可读存储介质及电子设备
CN107451050B (zh) 函数获取方法和装置、服务器
CN112417020B (zh) 业务扩展的实现方法、装置、计算机设备和存储介质
CN114077737A (zh) 基于污点分析的Android组件间通信数据流检测方法
Feng et al. Bintaint: a static taint analysis method for binary vulnerability mining
CN113139184A (zh) 基于静态分析的Binder通信过载漏洞的检测方法
CN116775040B (zh) 实现代码疫苗的插桩方法及基于代码疫苗的应用测试方法
CN118502732B (zh) 字节码程序的分析方法、装置、设备和介质
CN112765676B (zh) 一种智能合约执行方法、智能合约执行装置及节点设备
CN116700840B (zh) 文件执行方法、装置、电子设备及可读存储介质
CN118171250A (zh) 一种代码指纹溯源识别方法、系统、终端及存储介质

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
GR01 Patent grant
GR01 Patent grant