CN116663012A - 一种跨合约漏洞的检测方法、***和设备 - Google Patents
一种跨合约漏洞的检测方法、***和设备 Download PDFInfo
- Publication number
- CN116663012A CN116663012A CN202310627115.2A CN202310627115A CN116663012A CN 116663012 A CN116663012 A CN 116663012A CN 202310627115 A CN202310627115 A CN 202310627115A CN 116663012 A CN116663012 A CN 116663012A
- Authority
- CN
- China
- Prior art keywords
- attack
- contract
- function
- cross
- candidate
- 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
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 128
- 238000000034 method Methods 0.000 claims abstract description 26
- 230000006870 function Effects 0.000 claims description 119
- 238000004590 computer program Methods 0.000 claims description 9
- 238000011156 evaluation Methods 0.000 abstract description 4
- RTZKZFJDLAIYFH-UHFFFAOYSA-N Diethyl ether Chemical compound CCOCC RTZKZFJDLAIYFH-UHFFFAOYSA-N 0.000 description 20
- 238000004458 analytical method Methods 0.000 description 15
- 238000002474 experimental method Methods 0.000 description 11
- 230000003068 static effect Effects 0.000 description 11
- 238000012360 testing method Methods 0.000 description 10
- 238000004422 calculation algorithm Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 9
- 208000020990 adrenal cortex carcinoma Diseases 0.000 description 7
- 150000002170 ethers Chemical class 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 239000003607 modifier Substances 0.000 description 4
- 238000010801 machine learning Methods 0.000 description 2
- 238000005259 measurement Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 206010010144 Completed suicide Diseases 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003556 assay Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000009792 diffusion process Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000036962 time dependent Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1433—Vulnerability analysis
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/14—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
- H04L63/1408—Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic by monitoring network traffic
- H04L63/1416—Event detection, e.g. attack signature detection
-
- 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
- Y04—INFORMATION OR COMMUNICATION TECHNOLOGIES HAVING AN IMPACT ON OTHER TECHNOLOGY AREAS
- Y04S—SYSTEMS INTEGRATING TECHNOLOGIES RELATED TO POWER NETWORK OPERATION, COMMUNICATION OR INFORMATION TECHNOLOGIES FOR IMPROVING THE ELECTRICAL POWER GENERATION, TRANSMISSION, DISTRIBUTION, MANAGEMENT OR USAGE, i.e. SMART GRIDS
- Y04S40/00—Systems for electrical power generation, transmission, distribution or end-user application management characterised by the use of communication or information technologies, or communication or information technology specific aspects supporting them
- Y04S40/20—Information technology specific aspects, e.g. CAD, simulation, modelling, system security
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及网络安全技术领域,具体为一种跨合约漏洞的检测方法、***和设备,静态的抽象了智能合约的主要信息,获取能够指定攻击方向候选攻击对序,将候选攻击对序与带有攻击性的模板合约结合,生成攻击合约,使用攻击合约动态攻击智能合约,根据不同攻击结果,检测智能合约当中的跨合约漏洞,该检测方法能有效的检测智能合约中是否存在这重入漏洞或者委托调用漏洞。实验结果显示,该检测方法具有高精确率和综合测评率、0误报率和低时间开销。
Description
技术领域
本发明涉及网络安全技术领域,具体为一种跨合约漏洞的检测方法、***和设备。
背景技术
由于智能合约的不可篡改性且涉及到大量的资金流动,因此智能合约的安全性就显得尤为重要。近些年来,智能合约漏洞被攻击者所利用的事件频发,给许多企业带来巨大的经济损失。若能在智能合约部署之前就发现其存在的漏洞,可以帮助开发者及时的纠正合约中存在的漏洞,避免该漏洞造成经济损失。为此,大量的研究者针对智能合约漏洞的原理进行探究。到目前为止,开发者设计了超过70余个智能合约检测方法。
静态的智能合约检测方法使用的方法主要为:符号执行法、形式化证明法、中间表示法和深度学习法。符号执行是目前智能合约检测方法中最热门的方法,其核心思想是通过构造约束路径来进行约束求解。Oyente是基于符号执行开发的智能合约漏洞检测方法,其可以检测整数溢出漏洞、栈溢出漏洞、交易顺序依赖漏洞、重入漏洞。但缺点是:路径***,即产生的路径数量过多,使得空间和时间开销成指数级增长,最终导致工作空间无法支持该开销。理论上,形式化证明是精确率最高的检测方法。目前已经有一些针对智能合约漏洞检测的形式化证明框架,如F*和Isabelle/HOL。但是形式化证明的最大问题就是逻辑复杂,一般需要特定的专家参与进行建模。中间表示法的缺点是从智能合约向中间语言转换的过程中会带来信息的缺失,通常是低逻辑性的。机器学习法在近几年来已经作为一种新方法被广泛使用,其可以极大的提升智能合约漏洞检测的时间效率。但是,机器学习方法存在一定的上限,因为它依赖于其他检测方法的分类的结果。
相较于静态智能合约检测方法,动态地智能合约检测方法罕见的多。主要的动态智能合约检测方法为:污点分析和模糊测试。污点分析法是指对问题进行标注,而后探究污点的分布。Esayflow是一个开源的使用污点分析技术的动态智能合约检测方法,其将函数的输入作为一个污点,通过研究该污点的扩散特征来检测整数溢出漏洞。然而,对于一些逻辑上的漏洞,污点分析技术难以去应用。
模糊测试是一个动态地智能合约漏洞检测方法,其着重于通过生成大量的测试用例,对合约进行大规模的测试。高时间开销和低路径覆盖率是其主要问题,同时也是模糊测试研究的主要关注点。
上述方法都可以用于智能合约检测。然而,这些检测方法。这些规则可能适用于具有简单逻辑或明显关键字的漏洞,但在用于检测逻辑复杂的漏洞,特别是跨合约漏洞时,检测能力有限,有很高的误报率。例如,Mythril等检测方法分析了139,424个智能合约以检测重入漏洞后,发现只有34个合约存在重入漏洞,但在测试报告中存在21,212个重入合约,其中21,178个合约是误报,即这些无漏洞的合约被错误地报告为漏洞合约。这意味着许多现有检测方法无法可靠地检测近年来出现的越来越复杂的智能合约。
发明内容
本发明提供了一种跨合约漏洞的检测方法、***和设备。
本发明技术方案如下:
一种跨合约漏洞的检测方法,包括如下操作:
S1获取智能合约中接收其他地址以太币的函数,以及目标函数,将所述用于接收其他地址以太币的函数与目标函数结合,赋值给序列后,得到候选攻击对序;
S2将所述候选攻击对序与模板合约结合,得到攻击合约;
S3使用所述攻击合约攻击智能合约;
若攻击成功,则所述智能合约存在跨合约漏洞;
若攻击不成功,则所述智能合约不存在跨合约漏洞。
如上所述的检测方法,所述S1中结合的操作具体为:
分别获取所述智能合约中所有接收其他地址以太币的函数和目标函数,组成接收函数序列和目标函数序列,经双重循环后,得到函数对,将所述函数对赋值给序列,得到所述候选攻击对序。
所述目标函数为转移以太币到其他地址的函数;
将所述转移以太币到其他地址的函数与接收其他地址以太币的函数结合,赋值给序列后,得到第一候选攻击对序;
所述第一候选攻击对序依次执行所述S2、S3,
若攻击成功,则所述智能合约存在跨合约漏洞中的重入漏洞;
若攻击不成功,则所述智能合约不存在跨合约漏洞中的重入漏洞。
所述攻击成功为:攻击合约的攻击后余额大于攻击前余额;
所属攻击不成功为:攻击合约的攻击后余额不大于攻击前余额。
所述第一候选攻击对序执行所述S2后,得到第一攻击合约,在所述第一攻击合约中部署以太币,继续执行所述S3的操作。
如上所述的检测方法,其特征在于,所述目标函数为检测关键字delegatecall是否存在的函数;
将所述检测关键字delegatecall是否存在的函数与接收其他地址以太币的函数结合,赋值给序列后,得到第二候选攻击对序;
所述第二候选攻击对序依次执行所述S2、S3,
若攻击成功,则所述智能合约存在跨合约漏洞中的委托调用漏洞;
若攻击不成功,则所述智能合约不存在跨合约漏洞中的委托调用漏洞。
所述攻击成功为:所述第二候选攻击对序执行所述S2得到的第二攻击合约中存在余额;
所述攻击不成功为:所述第二候选攻击对序执行所述S2得到的第二攻击合约中不存在余额。
一种跨合约漏洞的检测***,包括:
候选攻击对序生成模块,用于获取智能合约中接收其他地址以太币的函数,以及目标函数,将所述用于接收其他地址以太币的函数与目标函数结合,赋值给序列后,得到候选攻击对序;
攻击合约生成模块,用于将所述候选攻击对序与模板合约结合,得到攻击合约;
攻击检测模块,用于使用所述攻击合约攻击智能合约;若攻击成功,则所述智能合约存在跨合约漏洞;若攻击不成功,则所述智能合约不存在跨合约漏洞。
一种跨合约漏洞的检测设备,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现上述的一种跨合约漏洞的检测方法。
一种计算机可读存储介质,其特征在于,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现上述的一种跨合约漏洞的检测方法。
本发明的有益效果在于:
本发明提供了一种跨合约漏洞检测方法,静态的抽象了智能合约的主要信息,获取能够指定攻击方向候选攻击对序,将候选攻击对序与带有攻击性的模板合约结合,生成攻击合约,使用攻击合约动态攻击智能合约,根据不同攻击结果,检测智能合约当中的跨合约漏洞,该检测方法能有效的检测智能合约中是否存在这重入漏洞或者委托调用漏洞。实验结果显示,该检测方法具有高精确率和综合测评率、0误报率和低时间开销。
附图说明
通过阅读下文优选实施方式的详细描述,本申请的方案和优点对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。
在附图中:
图1为实施例中检测方法的流程示意图;
图2为实施例中检测方法的整体算法框架图;
图3为实施例中重入检测算法图;
图4为实施例中向已部署的攻击合约转账失败的原因示意图;
图5为实施例中委托调用检测算法图;
图6为实施例中数据集1重入漏洞检测结果图;
图7为实施例中一个特殊的重入漏洞合约算法图;
图8为实施例中数据集1委托调用漏洞检测结果图;
图9为实施例中四种检测方法的准确率和综合测评率统计图;
图10为实施例中检测***的结构示意图;
图11为实施例中检测设备的结构示意图。
具体实施方式
下面将结合附图更详细地描述本公开的示例性实施方式。
本实施例提供一种跨合约漏洞的检测方法,参见图1,包括如下操作:
S1获取智能合约中接收其他地址以太币的函数,以及目标函数,将所述用于接收其他地址以太币的函数与目标函数结合,赋值给序列后,得到候选攻击对序;
S2将所述候选攻击对序与模板合约结合,得到攻击合约;
S3使用所述攻击合约攻击智能合约;
若攻击成功,则所述智能合约存在跨合约漏洞;
若攻击不成功,则所述智能合约不存在跨合约漏洞。
具体为:
S1获取智能合约中接收其他地址以太币的函数,以及目标函数,将用于接收其他地址以太币的函数与目标函数结合,赋值给序列后,得到候选攻击对序。
语言模型。为了更好的研究Solidity(一门高级编程语言)中的信息,形式化其部分内容,形式化的语法定义如下:
c:=(cname,funs,add,bal) (1)
f:=(fname,p,s,d,x) (2)
x:=add·x|uint·x|else·x|null (3)
公式(1)抽象出了一个由合约名称cname、函数序列funs、合约的部署地址add和智能合约余额bal组成的智能合约c。前两者是合约的内置属性,后两者是部署状态属性。如公式(2)所示,智能合约中的函数由函数名称fname,三个谓词p、s和d,以及参数x组成。p、s和d都是Solidity所特有的修饰词,其中p检查是否使用关键词payable对f进行声明,s检查函数是否使用关键字call发送以太币,d检查函数是否使用关键字delegatecall。在转移资金时,最重要的两个参数是amount和address,因此在公式(3)中递归定义了函数的参数,当然由于函数定义的形式多种多样,所以将其他类型的参数定义为else。最后用null代表了该递归定义的截止符。
为了更好地描述智能合约c中的内容,总结了出现的符号,详见表1。
表1智能合约c中符号含义
结合的操作具体为:分别获取智能合约中所有接收其他地址以太币的函数和目标函数,组成接收函数序列和目标函数序列,经双重循环后,得到函数对,将函数对赋值给序列,得到候选攻击对序。
S2将候选攻击对序与模板合约结合,得到攻击合约。
S2中结合的操作具体为:获取具有攻击能力的模板合约,将模板合约与候选攻击对序结合,候选攻击对序定向模板合约的攻击目标,得到攻击合约。
本实施例提供的检测方法整体框架参见图2,输入是一个Solidity智能合约c,输出是一个报告R,报告显示智能合约是否为漏洞合约。该检测方法由静态分析步骤(见图2中第1-9行)和动态攻击阶段(见图2中第10-12行)组成。
静态分析阶段。为了获得关于智能合约的关键信息,扫描智能合约(见图2中第1行),并从c(见图2中第2行)中抽象出函数f。使用f中的p来判断合约是否可以通过这个函数接收以太币(以下简称Ether),f中s来描述函数是否能够将代币传输给其他函数。获取接收其他地址Ether的函数fpayable,其形式为(_,True,_,_,_),以及能够和fpayable结合且用于限制不同类型漏洞检测条件的目标函数,其形式为(_,_,True,_,_),将接收其他地址Ether的函数fpayable和目标函数结合,在图2中第6-7行进入一个两级循环,得到函数对,接着赋值给序列后(见图2中第8行),得到候选攻击对序A,给定带有攻击功能的模板合约c',并将候选攻击对序A与模板合约c'结合后,生成了可以攻击智能合约的攻击合约c*(见图2中第9行)。
动态攻击阶段。经过静态分析,成功生成攻击合约c*。通过web3部署智能合约c和攻击合约c*,并在第10行,使用攻击合约c*检测智能c中的漏洞。其中,RDA(),即Reentrancy DetectionAlgorithm,为重入检测算法,具体算法参见图3,用于检测智能合约中的重入漏洞;DDA(),即Delegatecall Detection Algorithm,为委托调用检测算法,具体算法参见图5,用于检测智能合约中的委托调用。接着记录攻击的结果r',并将r'追加到报告r(见图2中第11-12行)。因此,r是一个包含由A生成的合约的所有测试结果的序列。检查r中的所有元素,并获得重入漏洞的最终检测报告R(见图2中第15-16行)。
框架整体评估。设m和n分别表示funpayable和funcall的长度,则A的个数可表示为m*n。因此,检测方法会生成m*n个攻击合约c*来攻击智能合约c,因此,检测方法的时间复杂度为O(m*n)。检测方法可以检查重入漏洞(包括:简单重入、修改器重入和故障状态锁重入),以及委托调用漏洞,这是由于该检测方法模拟了真实的重入攻击,简单的重入漏洞和bug锁定的重入漏洞之间的差异对检测结果没有影响。至于modifier重入,检测方法只需要将modifier函数视为普通函数即可。
S3使用攻击合约攻击智能合约;若攻击成功,则所述智能合约存在跨合约漏洞;若攻击不成功,则所述智能合约不存在跨合约漏洞。
下面结合跨合约漏洞中经典的重入漏洞和委托调用漏洞,对上述检测方法做进一步详细解释说明。
重入漏洞检测。为检测智能合约中的重入漏洞,目标函数为转移Ether到其他地址的函数;将转移Ether到其他地址的函数与接收其他地址Ether的函数结合,赋值给序列后,得到第一候选攻击对序;第一候选攻击对序依次执行S2、S3,若攻击成功,则智能合约存在跨合约漏洞中的重入漏洞;若攻击不成功,则智能合约不存在跨合约漏洞中的重入漏洞。攻击成功为:攻击合约的攻击后余额大于攻击前余额;攻击不成功为:攻击合约的攻击后余额不大于攻击前余额。且第一候选攻击对序执行S2后,得到第一攻击合约,在第一攻击合约中部署以太币,继续执行所述S3的操作。具体内容如下。
静态分析。获取智能合约中接收其他地址Ether的函数fpayable其形式为(_,True,_,_,_),以及转移Ether到其他地址的函数fcall,其形式为(_,_,True,_,_),虽然重入漏洞只出现在fcall中,但fcall的前提条件是与fpayable相关的。因此,需要组合fpayable和fcall,以便枚举可重入的所有可能场景。收集所有fpayable,将其排列成为一个payable的函数序列funpayable,并收集所有fcall以生成call函数序列funcall(见图2中第3-4行),将funpayable和funcall进行一个两级循环后(见图2中第6-7行),并将其赋值给序列,得到第一候选攻击对序A(见图2中第8行),给定带有攻击功能的模板合约c',并将第一候选攻击对序A与模板合约c'结合后,生成了可以攻击智能合约的第一攻击合约c*。
动态攻击。经过静态分析,成功生成第一攻击合约c*,通过web3部署智能合约c'和第一攻击合约c*,并使用第一攻击合约c*检测智能合约中的漏洞(见图2中第10行中的RDA()。连接以太坊测试网络以动态检测智能合约c中的重入漏洞(见图3中第1行),接着创建一个交易来部署智能合约c(见图3中第2行),因此智能合约c的初始化状态为(_,_,_,0)。如图4所示,不能首先部署第一攻击合约c*,然后将Ether移动到第一攻击合约c*。这是因为在由于转账操作而执行交易时,会自动调用第一攻击合约c*的fallback函数。而为了攻击受害合约,第一攻击合约c*的回退函数是非空的,并且指向智能合约c中的fcall。然而,fcall中的断言阻止了该交易并抛出异常,这将导致整个交易的回滚。因此,在部署第一攻击合约c*(参见图3中第3行)时,必须在交易中一起携带Ether到参见图3中第一攻击合约c*中,因此第一攻击合约c*被初始化为(_,_,_,n)。为了确保重入的正常攻击,将2*n个Ether传输到智能合约c中(见图3中第4行)。太多Ether可能会使得在一次重入攻击中由于gas耗尽而导致交易回滚,但太少Ether会由于合约中的资金不足而无法检测到重入攻击。在此之后,第一攻击合约c*通过调用智能合约c中的fpayable将Ether转移到c(见图3中第5行),因此智能合约c中的局部变量会记录第一攻击合约c*的信息,避免了智能合约c中fcall的断言失败导致交易回滚。此时,智能合约c的状态变为(_,_,_,3*n),第一攻击合约c*变为(_,_,_,0)。最后,创建一个交易,在图3中第6行从第一攻击合约c*攻击智能合约c。在第7行至第11行,分析了重入攻击的攻击结果。如果第一攻击合约c*攻击智能合约c后,攻击合约的余额大于其攻击之前的余额,则智能合约中存在重入漏洞;如果完成攻击后,攻击合约的余额不大于其攻击之前的余额,则智能合约中不存在重入漏洞。
从理论上讲,该方法可以准确地检测智能合约中的重入漏洞,因为它模拟了黑客攻击受害者合约的过程。换句话说,无漏洞合约不可能会被误认为是漏洞合约,因为无漏洞的合约是不可能被成功攻击的。
委托调用漏洞检测。为检测智能合约中的委托调用漏洞,目标函数为检测关键字delegatecall是否存在的函数;将检测关键字delegatecall是否存在的函数与接收其他地址Ether的函数结合,赋值给序列后,得到第二候选攻击对序;第二候选攻击对序依次执行S2、S3,若攻击成功,则智能合约存在跨合约漏洞中的委托调用漏洞;若攻击不成功,则智能合约不存在跨合约漏洞中的委托调用漏洞。攻击成功为:第二候选攻击对序执行S2得到的第二攻击合约中存在余额;攻击不成功为:第二候选攻击对序执行S2得到的第二攻击合约中不存在余额。具体内容如下。
委托调用漏洞是一个异常高风险的漏洞。为了检测委托调用漏洞,引入了一个变量d来表示关键字delegatecall是否存在于函数中。公式(4)和式(5)是包含委托漏洞的主要函数形式。公式(4)是一类不包含目标合约地址的委托调用函数,这意味着目标合约的信息已经固定在合约中。在这种情况下,由于目标合约的确定性,委托调用漏洞是否存在取决于目标合约是否安全。事实上,关键字delegatecall应该只在合约开发者认为目标合约是绝对安全的时候使用。另外,存在漏洞并不总是意味着它们可能会被黑客利用。因此,在这种情况下不存在委托调用漏洞。公式(5)是另一种具有未知目标合约的委托调用函数。换句话说,目标合约的信息以函数参数的形式传递到函数中。在这种情况下,黑客可以做任何他想做的事情,只要用关键字delegatecall成功地调用了函数。如果黑客使用包含自毁功能的合约攻击智能c,这将会导致智能合约c***并窃取智能合约c中的所有Ether。
Type1:fdcall=f(fname,p,s,d,else·x) (4)
Type2:fdcall=f(fname,p,s,d,add·else·x) (5)
静态分析。静态分析的整体流程和上述重入漏洞检测的静态分析过程,为节省篇幅,这里仅做简单叙述,将检测关键字delegatecall是否存在的函数fdcall,其形式为(_,_,True,_,_),以及fdcall生成call函数序列fundcall,分别替换掉重入漏洞检测中的fcall和funcall,最终生成了第二攻击合约c*。
动态攻击。经过静态分析,成功生成第二攻击合约c*,通过web3部署智能合约c'和第二攻击合约c*,并使用第二攻击合约c*检测智能合约中的漏洞(见图2中第10行中的DDA())。首先连接到以太坊测试网络并部署智能合约c和第二攻击合约c*(见图5中第1-2行)。然后,从默认帐户(见图5中第3行)转移n个Ether,并使用第二攻击合约c*使智能合约c自毁(见图5第4行)。如果智能合约c成功自毁,智能合约c中的所有Ether将转移到第二攻击合约c*。因此,检查第二攻击合约c*中的余额,若第二攻击合约c*中存在余额,则攻击成功,智能合约c中存在委托调用漏洞;若第二攻击合约c*中不存在余额,则攻击失败,智能合约c中不存在委托调用漏洞(见图5第5-9行),并报告结果(见图5第10行)。从本质上讲,委托调用检测算法是检测公式(5)中所示的典型的委托调用漏洞。该框架模拟了委托调用攻击,可以较为准确检测委托调用漏洞。尽管已经扩展了之前的重入检测框架以检测委托调用漏洞,但时间复杂度仍然是O(m*n)。
为验证本实施例提供的检测方法的可靠性,对检测方法进行了相关实验。包括讨论了实验和下面列出的研究问题(RQ)的结果。
RQ1:本实施例提供的检测方法能精准的区分看似有漏洞的智能合约和真正有漏洞的合约吗?
RQ2:本实施例提供的检测方法能正确的检测真实世界的漏洞合约吗?
RQ3:本实施例提供的检测方法相较于其他智能合约检测方法更省时吗?
RQ4:本实施例提供的检测方法支持检测最新版本版本的智能合约吗?
实验设置。所有实验都是在一台运行Ubuntu 22.04的PC机上进行的,该PC配有Intel i54核CPU和8GB内存。使用web3.py 5.30.0部署受害者合约和攻击合约,使用Ganache构建私有区块链。实验环境如表2所示。
表2实验的环境配置
实验的数据集。为了评估本实施例提供的检测方法的性能,使用两个数据集进行测试,数据集详情参见表3和表4。
表3数据集1
表4数据集2
第一个数据集由25个具有可重入漏洞的合约、25个看似具有可重入漏洞但安全的合约、5个具有delegatecall漏洞的合约和5个具有关键字delegatecall的无漏洞合约组成。
第二个数据集是来自以太坊的2177个随机的真实智能合约,这些合约已经过验证。这些合约是可靠的、权威的、可理解的。在数据集2中,只有7个合约存在重入漏洞,没有合约存在委托调用漏洞。
从数据集2中,可以观察到可重入性和委托调用漏洞在现实世界的智能合约中发生的概率都很低,但这两者在出现时都是非常危险的。因此,从Smartbugs等,收集的数据集1可以更好地估计智能合约检测方法的精准性。数据集2中的合约都是来自以太坊的真实合约,因此使用数据集2来评估智能合约检测方法在检测真实合约时的正确性。
实验的指标。采用四个指标来比较不同智能合约检测方法的性能。在实验中,收集了四种测量值:真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)。检测方法能够正确检测到的漏洞合约的数量用TP表示。检测方法能够正确检测到的无漏洞合约的数量用TN表示。FP是被检测方法错误地判断成漏洞合约的安全合约的数量,而FN是被错误地判断为安全合约的漏洞合约的数量。基于这些测量,可以计算出四个指标来评估检测方法的有效性:
公式(6)定义ACC,ACC用来衡量结果的正确性。公式(7)中的FPR体现了检测方法检测脆弱(漏洞)合约的精度,而公式(8)中的FNR表示将安全合约错误检测为漏洞合约的概率。考虑到数据集2中数据的不平衡,通过F1对实验结果进行评价是很重要的。F1较高,FPR和FNR较低时对应的检测方法是较好的。
精准性。由于Oyente无法检测委托调用漏洞,将第一个数据集分为两部分。一部分用于重入漏洞检测,如图6所示。另一部分用于delegatecall漏洞检测,如图7所示。
重入漏洞检测结果:从图7中,可以看到,本实施例提供的检测方法在检测50个合约中只有1个FN和0个FP,这比其他检测方法要少得多。虽然Oyente和Mythril都是符号执行检测方法,但Mythril的性能略好于Oyente。Smartcheck的FP为25,这意味着Smartcheck无法区分重入漏洞合约和伪装的重入漏洞合约。
Smartcheck检测智能合约的Solidity源代码。Smartcheck中定义的规则意味着,只要关键字call出现在Solidity源代码中,就会存在重入漏洞。显然,这个判断过于粗糙,因为关键字.call的出现只意味着外部调用操作,而不一定是可重入漏洞。一些重入保护措施会使Smartcheck的FP激增。Oyente和Mythril检测智能合约的字节码,智能合约通过以下两个标准检测可重入漏洞:
1.call操作码的gas_limit>2300
2.在堆栈上重新执行call命令是可行的。
第一个标准背后的原因是,如果gas_limit小于2300,则不会发生重入,因为2300gas只能承受一次Ether转移。第二个标准比较模糊,这就是为什么带有状态锁的安全合约可能被误认为是漏洞合约的原因。与其他检测方法不同,本实施例提供的检测方法通过部署一个合约来实际攻击原始合约,从而识别可重入漏洞,使其FP一定为0。
由于合约重入漏洞的复杂性和多样性,本实施例提供的检测方法不可避免地有一个FN。图7显示了一个具有重入漏洞的特殊合约,其重入的条件是时间相关的。在第10行,关键字的使用now定义了一个时间标准。该标准限制在特定时间进行转账,阻止了本实施例提供的检测方法攻击,导致了一个FN。
委托调用漏洞检测结果。如图8所示,本实施例提供的检测方法通过检测delegatecall漏洞得到2个FN和0个FP,而其他检测方法都得到5个FP和0个FN。这是因为本实施例提供的检测方法只检查了委托调用漏洞的一种情况,即关于目标合约的信息必须作为函数变量而不是作为受害者合约中的局部变量输入。含有关键字为delegatecall的合约是否有漏洞取决于目标合约是否安全。因此,仅分析受害者合约并不能直接判定其安全性。然而,Mythril和Smartcheck认为带有关键字delegatecall的合约就是漏洞合约,这导致实验结果中的5FP。
实验一的综合分析。表5是针对数据集1上的实验一的总结。在第一个实验中,本实施例提供的检测方法的FPR为0,这意味着本实施例提供的检测方法完全能够区分漏洞合约和看起来有漏洞的安全合约。Mythril可以将部分漏洞合约与看似漏洞的安全合约区分开来,但Smartcheck根本无法区分。当分析FNR时,可以看到三个检测方法都有漏报,并且FNR都很低。因此,在类似FNR接近的情况下,FPR为0的本实施例优于其他检测方法。
表5基于数据集1的实验结果
正确性。本节用数据集2上的实验回答RQ2。为了验证本实施例提供的检测方法的正确性,分析了2177个真实世界的合约,并将ACC和F1与其他检测方法进行了比较。
表6基于数据集2的实验结果
数据集2的结果如表6示,图6显示了从表6计算这四种检测方法的ACC和F1。在表6中,可以看到,最高TN是由本实施例提供的检测方法实现的。Oyente的表现与Mythril相似,后者在2177份合约中只有5份FPs。四种方法中,Sarmtcheck的FP最高。当分析这四种检测方法的ACC时,发现这些检测方法的ACC都很高。最低的Smartcheck是99.993%。这意味着这四种检测方法都有能力检测现实世界合约中的漏洞。然而,四种检测方法之间的ACC差异非常小,当面对不平衡的数据集时,F1比ACC更好。Smartcheck的F1仅为0.3。Oyente和Mythil都低于0.8。本实施例提供的检测方法有超过0.9的F1,因此使用本实施例提供的检测方法来检测以太坊上的真实合约是足够值得信赖的。
高效性。在本节中,继续使用数据集2来进一步评估本实施例提供的检测方法并回答RQ3。测量了使用各种检测方法检测2177个真实智能合约所花费的时间,并评估了它们的效率。
表7四种检测方法的时间开销
各检测方法所用时间如表7所示。Oyente分析数据集2需要超过16个小时,单个合约的平均检测时间为27.63秒。Mythril具有最高的检测时间消耗,总时间超过20小时,单份合约平均检测时间为34.06秒。Oyente和Mythril都是热门的符号执行检测方法。因为符号执行需要很高的路径覆盖以确保可靠性,所以时间消耗是最高的。Smartcheck的速度是四种中最快的,但它牺牲了准确性作为代价。本实施例提供的检测方法检查一个合约的平均时间为0.38秒,最长为71.30秒,最短为0.10秒。对于整个数据集2,本实施例提供的检测方法只有823.21s,比Smartcheck慢,但比Oyente和Mythril快。因此,在保持高正确性的同时,本实施例提供的检测方法比其他检测方法更高效。
灵活性。本节回答了问题RQ4并且证明本实施例的灵活性以应对Solidity版本的更新。
表8最新版本的支持度
当使用不同版本的编译器时,智能合约版本的频繁更新会导致编译结果的显著差异。特别是,使用Solidity编译器的新版本可能与旧合约不兼容,从而导致编译失败。因此,合约版本升级对检测方法的影响是一个不可避免的问题。
如表8所示,Oyente不支持最新版本的合约,但本实施例提供的检测方法支持。本实施例提供的检测方法依赖于编译器的结果,因此与合约版本匹配的编译器是惟一的需求。理论上,只要正确编译,本实施例提供的检测方法就可以检测到合约。因此,本实施例提供的检测方法能够适应Solidity版本的快速更新。
本实施例提供一种跨合约漏洞的检测***,包括:
候选攻击对序生成模块,用于获取智能合约中接收其他地址以太币的函数,以及目标函数,将用于接收其他地址以太币的函数与目标函数结合,赋值给序列后,得到候选攻击对序;
攻击合约生成模块,用于将候选攻击对序与模板合约结合,得到攻击合约;
攻击检测模块,用于使用攻击合约攻击智能合约;若攻击成功,则智能合约存在跨合约漏洞;若攻击不成功,则智能合约不存在跨合约漏洞。
本实施例提供一种跨合约漏洞的检测设备,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现上述的一种跨合约漏洞的检测方法。
本实施例提供一种计算机可读存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现上述的一种跨合约漏洞的检测方法。
本实施例提供了一种跨合约漏洞检测方法,静态的抽象了智能合约的主要信息,获取能够指定攻击方向候选攻击对序,将候选攻击对序与带有攻击性的模板合约结合,生成攻击合约,使用攻击合约动态攻击智能合约,根据不同攻击结果,检测智能合约当中的跨合约漏洞,该检测方法能有效的检测智能合约中是否存在这重入漏洞或者委托调用漏洞。实验结果显示,该检测方法具有高精确率和综合测评率、0误报率和低时间开销。
Claims (10)
1.一种跨合约漏洞的检测方法,其特征在于,包括如下操作:
S1获取智能合约中接收其他地址以太币的函数,以及目标函数,将所述用于接收其他地址以太币的函数与目标函数结合,赋值给序列后,得到候选攻击对序;
S2将所述候选攻击对序与模板合约结合,得到攻击合约;
S3使用所述攻击合约攻击智能合约;
若攻击成功,则所述智能合约存在跨合约漏洞;
若攻击不成功,则所述智能合约不存在跨合约漏洞。
2.根据权利要求1所述的检测方法,其特征在于,所述S1中结合的操作具体为:
分别获取所述智能合约中所有接收其他地址以太币的函数和目标函数,组成接收函数序列和目标函数序列,经双重循环后,得到函数对,将所述函数对赋值给序列,得到所述候选攻击对序。
3.根据权利要求1或2所述的检测方法,其特征在于,所述目标函数为转移以太币到其他地址的函数;
将所述转移以太币到其他地址的函数与接收其他地址以太币的函数结合,赋值给序列后,得到第一候选攻击对序;
所述第一候选攻击对序依次执行所述S2、S3,
若攻击成功,则所述智能合约存在跨合约漏洞中的重入漏洞;
若攻击不成功,则所述智能合约不存在跨合约漏洞中的重入漏洞。
4.根据权利要求3所述的检测方法,其特征在于,
所述攻击成功为:攻击合约的攻击后余额大于攻击前余额;
所属攻击不成功为:攻击合约的攻击后余额不大于攻击前余额。
5.根据权利要求3所述的检测方法,其特征在于,所述第一候选攻击对序执行所述S2后,得到第一攻击合约,在所述第一攻击合约中部署以太币,继续执行所述S3的操作。
6.根据权利要求1或2所述的检测方法,其特征在于,所述目标函数为检测关键字delegatecall是否存在的函数;
将所述检测关键字delegatecall是否存在的函数与接收其他地址以太币的函数结合,赋值给序列后,得到第二候选攻击对序;
所述第二候选攻击对序依次执行所述S2、S3,
若攻击成功,则所述智能合约存在跨合约漏洞中的委托调用漏洞;
若攻击不成功,则所述智能合约不存在跨合约漏洞中的委托调用漏洞。
7.根据权利要求6所述的检测方法,其特征在于,
所述攻击成功为:所述第二候选攻击对序执行所述S2得到的第二攻击合约中存在余额;
所述攻击不成功为:所述第二候选攻击对序执行所述S2得到的第二攻击合约中不存在余额。
8.一种跨合约漏洞的检测***,其特征在于,包括:
候选攻击对序生成模块,用于获取智能合约中接收其他地址以太币的函数,以及目标函数,将所述用于接收其他地址以太币的函数与目标函数结合,赋值给序列后,得到候选攻击对序;
攻击合约生成模块,用于将所述候选攻击对序与模板合约结合,得到攻击合约;
攻击检测模块,用于使用所述攻击合约攻击智能合约;若攻击成功,则所述智能合约存在跨合约漏洞;若攻击不成功,则所述智能合约不存在跨合约漏洞。
9.一种跨合约漏洞的检测设备,其特征在于,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现所述权利要求1-7中任一项所述的一种跨合约漏洞的检测方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1-7中任一项所述的一种跨合约漏洞的检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310627115.2A CN116663012B (zh) | 2023-05-31 | 2023-05-31 | 一种跨合约漏洞的检测方法、***和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310627115.2A CN116663012B (zh) | 2023-05-31 | 2023-05-31 | 一种跨合约漏洞的检测方法、***和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116663012A true CN116663012A (zh) | 2023-08-29 |
CN116663012B CN116663012B (zh) | 2023-11-03 |
Family
ID=87716585
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310627115.2A Active CN116663012B (zh) | 2023-05-31 | 2023-05-31 | 一种跨合约漏洞的检测方法、***和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116663012B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109800175A (zh) * | 2019-02-20 | 2019-05-24 | 河海大学 | 一种基于代码插桩的以太坊智能合约重入漏洞检测方法 |
CN109948345A (zh) * | 2019-03-20 | 2019-06-28 | 杭州拜思科技有限公司 | 一种智能合约漏洞检测的方法、*** |
CN111177730A (zh) * | 2019-12-19 | 2020-05-19 | 河海大学 | 一种以太坊智能合约问题检测和预防方法与装置 |
CN111787017A (zh) * | 2020-07-02 | 2020-10-16 | 电子科技大学 | 一种区块链攻击溯源***及方法 |
US20220101326A1 (en) * | 2019-01-18 | 2022-03-31 | Uppsala Pte. Ltd. | Apparatus and method for cybersecurity |
CN115017515A (zh) * | 2022-06-01 | 2022-09-06 | 电子科技大学 | 一种跨合约重入攻击检测方法及*** |
CN115098863A (zh) * | 2022-06-08 | 2022-09-23 | 成都安恒信息技术有限公司 | 一种基于静态与动态分析的智能合约重入漏洞检测方法 |
CN115442380A (zh) * | 2022-09-14 | 2022-12-06 | 杭州安碣信息安全科技有限公司 | 针对智能合约漏洞攻击的交易阻断方法和装置 |
-
2023
- 2023-05-31 CN CN202310627115.2A patent/CN116663012B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220101326A1 (en) * | 2019-01-18 | 2022-03-31 | Uppsala Pte. Ltd. | Apparatus and method for cybersecurity |
CN109800175A (zh) * | 2019-02-20 | 2019-05-24 | 河海大学 | 一种基于代码插桩的以太坊智能合约重入漏洞检测方法 |
CN109948345A (zh) * | 2019-03-20 | 2019-06-28 | 杭州拜思科技有限公司 | 一种智能合约漏洞检测的方法、*** |
CN111177730A (zh) * | 2019-12-19 | 2020-05-19 | 河海大学 | 一种以太坊智能合约问题检测和预防方法与装置 |
CN111787017A (zh) * | 2020-07-02 | 2020-10-16 | 电子科技大学 | 一种区块链攻击溯源***及方法 |
CN115017515A (zh) * | 2022-06-01 | 2022-09-06 | 电子科技大学 | 一种跨合约重入攻击检测方法及*** |
CN115098863A (zh) * | 2022-06-08 | 2022-09-23 | 成都安恒信息技术有限公司 | 一种基于静态与动态分析的智能合约重入漏洞检测方法 |
CN115442380A (zh) * | 2022-09-14 | 2022-12-06 | 杭州安碣信息安全科技有限公司 | 针对智能合约漏洞攻击的交易阻断方法和装置 |
Non-Patent Citations (9)
Title |
---|
GIUSEPPE DESTEFANIS等: "Smart contracts vulnerabilities: a call for blockchain software engineering?", 《2018 INTERNATIONAL WORKSHOP ON BLOCKCHAIN ORIENTED SOFTWARE ENGINEERING (IWBOSE)》, pages 19 - 25 * |
MAX_XBW: "智能合约的常见漏洞", Retrieved from the Internet <URL:https://www.cnblogs.com/XBWer/p/9697361.html> * |
XIANGFU ZHAO等: "The DAO attack paradoxes in propositional logic", 《2017 4TH INTERNATIONAL CONFERENCE ON SYSTEMS AND INFORMATICS (ICSAI)》, pages 1743 - 1746 * |
周镇等: "基于节点贡献值和信誉度的DPoS共识算法改进", 《烟台大学学报(自然科学与工程版)》, pages 1 - 16 * |
张星娜: "基于深度学习的智能合约漏洞检测与分析方法研究", 《中国优秀硕士学位论文全文数据库》, pages 138 - 26 * |
李永强等: "基于区块链的车联网安全信息共享机制设计", 《郑州大学学报(工学版)》, vol. 43, no. 1, pages 103 - 110 * |
赵伟等: "基于符号执行的智能合约漏洞检测方案", 《计算机应用》, vol. 40, no. 04, pages 947 - 953 * |
郑忠斌等: "智能合约的安全研究现状与检测方法分析综述", 《信息安全与通信保密》, no. 07, pages 93 - 105 * |
陈霄汉等: "SlightDetection:一种以太坊智能合约安全漏洞的静态分析工具", 《应用科学学报》, vol. 40, no. 4, pages 695 - 712 * |
Also Published As
Publication number | Publication date |
---|---|
CN116663012B (zh) | 2023-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Samreen et al. | Reentrancy vulnerability identification in ethereum smart contracts | |
US11922149B2 (en) | Method for controlling the flow execution of a generated script of a blockchain transaction | |
Yu et al. | Deescvhunter: A deep learning-based framework for smart contract vulnerability detection | |
Xu et al. | A novel machine learning‐based analysis model for smart contract vulnerability | |
Liu et al. | {FANS}: Fuzzing android native system services via automated interface analysis | |
CN109948338B (zh) | 基于静态分析的安卓应用敏感路径触发方法 | |
CN115098863A (zh) | 一种基于静态与动态分析的智能合约重入漏洞检测方法 | |
Lin et al. | Graph-based seed object synthesis for search-based unit testing | |
Xu et al. | A survey on vulnerability detection tools of smart contract bytecode | |
CN113609489B (zh) | 一种工业区块链中智能合约冲突的分布式检测方法 | |
Li et al. | Eosioanalyzer: An effective static analysis vulnerability detection framework for eosio smart contracts | |
CN116663012B (zh) | 一种跨合约漏洞的检测方法、***和设备 | |
US20230141948A1 (en) | Analysis and Testing of Embedded Code | |
CN109165509B (zh) | 软件实时可信度量的方法、设备、***及存储介质 | |
Ul Haq et al. | A survey on IoT & embedded device firmware security: architecture, extraction techniques, and vulnerability analysis frameworks | |
Meng et al. | WeMinT: Tainting Sensitive Data Leaks in WeChat Mini-Programs | |
CN113553593B (zh) | 基于语义分析的物联网固件内核漏洞挖掘方法及*** | |
CN114358934A (zh) | 智能合约的校验方法和相关设备 | |
Zhou et al. | WASMOD: Detecting vulnerabilities in Wasm smart contracts | |
Xiang et al. | Ghost in the binder: Binder transaction redirection attacks in Android system services | |
Qin et al. | Automatically refining partial specifications for heap-manipulating programs | |
Bhardwaj et al. | Fuzz testing in stack-based buffer overflow | |
Ru et al. | The side-channel vulnerability in network protocol | |
Li et al. | SHFuzz: Service handler-aware fuzzing for detecting multi-type vulnerabilities in embedded devices | |
Wang et al. | A Systematic Literature Review on Smart Contract Vulnerability Detection by Symbolic Execution |
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 |