CN117009980B - 一种针对智能合约漏洞检测的有指导的模糊测试方法 - Google Patents
一种针对智能合约漏洞检测的有指导的模糊测试方法 Download PDFInfo
- Publication number
- CN117009980B CN117009980B CN202311008828.7A CN202311008828A CN117009980B CN 117009980 B CN117009980 B CN 117009980B CN 202311008828 A CN202311008828 A CN 202311008828A CN 117009980 B CN117009980 B CN 117009980B
- Authority
- CN
- China
- Prior art keywords
- test case
- intelligent contract
- state variable
- test
- seed
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 24
- 238000010998 test method Methods 0.000 title claims abstract description 22
- 238000012360 testing method Methods 0.000 claims abstract description 118
- 238000000034 method Methods 0.000 claims abstract description 57
- 238000013101 initial test Methods 0.000 claims abstract description 30
- 230000035772 mutation Effects 0.000 claims abstract description 22
- 230000006870 function Effects 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 11
- 230000005856 abnormality Effects 0.000 claims description 5
- 206010000117 Abnormal behaviour Diseases 0.000 claims description 4
- 238000004458 analytical method Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000012550 audit Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/3676—Test management for coverage analysis
-
- 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
- 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/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种针对智能合约漏洞检测的有指导的模糊测试方法,属于以太坊智能合约安全技术领域。包括:S1、输入为智能合约的字节码和合约的二进制接口ABI;S2、生成初始测试用例集或用户提供初始测试用例集;S3、执行初始测试用例或测试用例;S4、创建种子集,在测试用例的执行过程中选择部分测试用例做为种子保存在种子集中;S5、在执行过程中保存每个对状态变量进行赋值的测试用例,并为每个状态变量维护一个状态变量池;S6、基于种子集和状态变量池进行种子突变;S7、重复执行S3‑S6的过程,直到测试过程达到预设的时间。缩减突变过程中交易序列的组合空间,解决分支覆盖率低的问题。
Description
技术领域
本申请涉及智能合约漏洞检测方法,尤其涉及一种针对智能合约漏洞检测的有指导的模糊测试方法,属于以太坊智能合约安全技术领域。
背景技术
以太坊作为首个提出智能合约的平台近年来得到了高速发展,一跃成为仅次于比特币的第二大加密货币平台。同比特币相比,以太坊可以在区块链上部署智能合约,这使得以太坊可以提供更多的服务。智能合约就是运行在区块链上的程序代码,可以实现同传统的应用程序相同的功能,并且因为部署在区块链上,具有区块链的属性,例如不可篡改、透明性等。这些特性使得智能合约被广泛的应用于金融、游戏等领域。
以太坊智能合约虽然具有了更多吸引投资者的属性,然而这些属性也使得以太坊更容易发生安全问题。首先,以太坊智能合约主要由solidity语言编写,同其他语言相比,例如python、Java等,该语言是较新颖的语言。对开发人员来说solidity语言比较陌生,这使得编写程序时更容易发生错误。其次,区块链的透明性使得所有参与区块链的人都可以访问、调用智能合约,它更容易被攻击者利用。更为重要的是,区块链具有不可篡改的特性,即使发生了漏洞,也很难修改合约,这将造成巨大的经济损失。因而将智能合约部署到区块链之前,对其进行彻底的漏洞检测十分必要。
目前针对智能合约的漏洞检测方法中,模糊测试是一种比较主流的方法。模糊测试技术通过生成大量的测试用例,并监测合约执行测试用例的结果来检测合约是否存在漏洞。同静态分析技术相比,模糊测试发现的漏洞一定可达的,并且根据复现发现漏洞的测试用例,模糊测试也可以指导开发人员较快的发现漏洞发生的原因。然而因为智能合约的特性,例如存在存储在区块链上的状态变量,要通过产生交易序列来满足这些变量的值,使得传统程序的模糊测试方法无法在智能合约上应用。近年来已经有很多工具利用模糊测试技术来检测智能合约漏洞检测,例如Smartian、sFuzz等等。虽然这些主流的模糊测试工具已经在智能合约的漏洞检测方面取得了很大的进步,但是这些工具忽略了突变过程中如何缩减突变的空间,以高效的产生满足未覆盖分支约束的交易序列。智能合约可以以任意的顺序和任意的次数调用智能合约中的函数,这导致智能合约模糊测试的突变过程中可能的交易序列的组合空间是巨大的,这些工具难以有效的指导测试用例进行突变来满足未覆盖的分支约束,这将导致较低的覆盖率,进而可能错过未执行的代码中存在的漏洞。将有漏洞的合约部署到区块链上将给合约的所有者造成巨大的经济损失。
发明内容
在下文中给出了关于本发明的简要概述,以便提供关于本发明的某些方面的基本理解。应当理解,这个概述并不是关于本发明的穷举性概述。它并不是意图确定本发明的关键或重要部分,也不是意图限定本发明的范围。其目的仅仅是以简化的形式给出某些概念,以此作为稍后论述的更详细描述的前序。
鉴于此,为解决现有技术中存在的难以有效的指导测试用例进行突变来满足未覆盖的分支约束,这将导致较低的覆盖率,进而可能错过未执行的代码中存在的漏洞的技术问题,本发明提供一种针对智能合约漏洞检测的有指导的模糊测试方法。
方案一、一种针对智能合约漏洞检测的有指导的模糊测试方法,包括以下步骤:
S1、输入为智能合约的字节码和合约的二进制接口ABI;
S2、基于合约的二进制接口ABI生成初始测试用例集或用户提供初始测试用例集;
S3、执行初始测试用例或测试用例;
S4、创建种子集,种子集初始为空,在测试用例的执行过程中选择部分测试用例做为种子保存在种子集中;
S5、在执行过程中保存每个对状态变量进行赋值的测试用例,并为每个状态变量维护一个状态变量池,将对应的测试用例保存在相应的状态变量池中;
S6、基于种子集和状态变量池进行种子突变,种子突变策略从种子集中取出种子利用状态变量池指导突变;
S7、重复执行S3-S6的过程,直到智能合约的模糊测试过程达到预设的时间或满足预设的终止条件。
优选的,若输入为智能合约源码,则根据智能合约的版本信息,利用对应版本的solc编译器编译智能合约的源码得到智能合约的字节码和合约的ABI;
生成初始测试用例集的方法是:模糊测试器根据二进制接口ABI产生初始测试用例集,初始测试用例集由智能合约中的每个函数构成。
优选的,执行初始测试用例或测试用例的方法是:基于输入的智能合约字节码执行初始测试用例,在执行过程中检测模糊测试过程是否发生异常,若发生异常行为则报告漏洞。
优选的,对异常行为的定义由用户设置。
优选的,在测试用例的执行过程中选择部分初始测试用例做为种子保存在种子集中的方法是:定义条件语句左侧的参数为a,右侧的参数为b,在智能合约中条件判断指令为JUMPI,在执行到指令时,计算a-b的距离,即|a-b|,其中的距离定义是利用绝对距离,模糊测试器在执行测试用例时,若测试用例的执行使得未执行分支的距离更近则将该测试用例保存到种子集中;
在保存测试用例到种子集之前,删除测试用例中位于未覆盖分支所在函数之后的函数序列。
优选的,判断对状态变量进行赋值的测试用例方法是:
S51、智能合约字节码中SLOAD指令表示读状态变量,将SLOAD指令标记为污点源;
S52、进行污点传播,污点的传播过程遵循若操作数存在污点,则操作结果包含相应的污点;
S53、智能合约字节码中SSTORE指令表示写状态变量,将SSTORE指令标记为污点汇;
S54、若当前的测试用例执行中存在SSTORE指令,读取SSTORE指令包含的污点信息。
优选的,状态变量池初始时每个状态变量池为空;保存前对测试用例进行最小化处理,每次删除待保存的测试用例中的一个函数,执行删减后的测试用例,检测是否对相关的状态变量进行赋值,若进行赋值则删除,否则保留函数。
优选的,基于种子集和状态变量池进行种子突变,种子突变策略从种子集中取出种子利用状态变量池指导突变的方法是:从种子集中取出一个种子,观察种子涉及的未覆盖的分支中是否包含状态变量,具体包括以下步骤:
S61、智能合约字节码中SLOAD指令表示读状态变量,因此将SLOAD指令标记为污点源;
S62、进行污点传播,污点的传播过程遵循若操作数存在污点,则操作结果包含相应的污点;
S63、智能合约字节码中JUMPI指令表示条件判断,因此将JUMPI指令标记为污点汇,查看JUMPI指令中是否包含污点信息,得到种子未覆盖的分支中是否包含状态变量;
S64、若种子涉及的未覆盖的分支中不包含状态变量,即均为输入参数,则随机的突变输入参数,生成测试用例,执行S3测试用例;
S65、若种子涉及的未覆盖的分支中包含状态变量,则检测状态变量是否被种子中的未覆盖分支所在函数之前的函数序列所定义;
S66、若均被定义,则随机的从未覆盖分支中包括的状态变量中选择一个状态变量,从状态变量对应的状态池中选择一个交易序列插入到种子中生成测试用例,执行S3测试用例;
S67、若存在未定义的状态变量,则检查状态变量对应的状态变量池是否为空,若均为空则对种子进行随机突变,生成测试用例,执行S3测试用例;
S68、若存在不为空的状态池则从状态变量池中随机的选择一个交易序列插入到种子中,生成测试用例,执行S3测试用例。
方案二、一种电子设备,包括存储器和处理器,存储器存储有计算机程序,所述的处理器执行所述计算机程序时实现方案一所述的一种针对智能合约漏洞检测的有指导的模糊测试方法的步骤。
方案三、一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现方案一所述的一种针对智能合约漏洞检测的有指导的模糊测试方法。
本发明的有益效果如下:本发明缩减了突变过程中交易序列的组合空间,在整个种子突变过程中,未覆盖的分支涉及状态变量时,仅考虑和该状态变量相关的交易序列,以此来缩减巨大的交易序列组合空间,满足难以覆盖的分支约束。这使得智能合约可以被执行更多的代码,执行的代码越多,发现漏洞的概率越大,本发明能够被应用在智能合约安全审计领域,针对当前容易发生智能合约安全漏洞的问题,可以在智能合约部署到区块链之前对智能合约进行彻底的测试,降低智能合约漏洞发生的风险,维护区块链的安全稳定,通过指导模糊测试的突变过程,实现有针对性的突变方法,缩减了模糊测试的突变空间,解决了分支覆盖率低的问题,提高了分支的覆盖率。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为一种针对智能合约漏洞检测的有指导的模糊测试方法流程示意图。
具体实施方式
为了使本申请实施例中的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
实施例1、参照图1说明本实施方式,一种针对智能合约漏洞检测的有指导的模糊测试方法,包括以下步骤:
S1、输入为智能合约的字节码和合约的二进制接口ABI;
S2、基于合约的二进制接口ABI生成初始测试用例集或用户提供初始测试用例集;
若输入为智能合约源码,则根据智能合约的版本信息,利用对应版本的solc编译器编译智能合约的源码得到智能合约的字节码和合约的ABI;
模糊测试器根据二进制接口ABI产生初始测试用例集,初始测试用例集由智能合约中的每个函数构成;
除智能合约的字节码以及合约的二进制接口ABI外,用户可选择是否提供初始测试用例集作为输入;
S3、执行初始测试用例或测试用例,基于输入的智能合约字节码执行初始测试用例或测试用例,在执行过程中检测模糊测试过程是否发生异常,若发生异常行为则报告漏洞,并在执行过程中保存种子到种子集中(S4)以及指定的测试用例到状态变量池中(S5);
其中,对异常行为的定义由用户设置;
具体的,执行的初始测试用例可以是用户提供的测试用例或S2生成的测试用例;
具体的,首次执行初始测试用例,而后执行变异后的测试用例;
S4、创建种子集,种子集初始为空,在测试用例的执行过程中选择部分测试用例做为种子保存在种子集中;
合约在模糊测试过程中会存在某个测试用例执行了合约中某个条件语句的一个分支中,这将导致另一分支未被执行,模糊测试过程中维护一个集合,其中包括整个模糊测试过程中合约未执行的分支,因此,定义条件语句左侧的参数为a,右侧的参数为b,在智能合约中条件判断指令为JUMPI,在执行到指令时,计算a-b的距离,即|a-b|,其中的距离定义是利用绝对距离,模糊测试器在执行测试用例时,若测试用例的执行使得未执行分支的距离更近则将该测试用例保存到种子集中;
在保存测试用例到种子集之前,测试用例中位于未覆盖分支所在函数之后的函数序列对于未覆盖分支不产生任何影响,因此,删除测试用例中位于未覆盖分支所在函数之后的函数序列,以提高模糊测试效率;
S5、在执行过程中保存每个对状态变量进行赋值的测试用例,并为每个状态变量维护一个状态变量池,将对应的测试用例保存在相应的状态变量池中;
具体的,在执行过程中保存每个可以对状态变量进行赋值的测试用例;
观察测试用例是否对状态变量进行赋值,以及对哪个状态变量进行赋值利用污点分析,具体包括:
S51、智能合约字节码中SLOAD指令表示读状态变量,将SLOAD指令标记为污点源;
S52、进行污点传播,污点的传播过程遵循若操作数存在污点,则操作结果包含相应的污点;
S53、智能合约字节码中SSTORE指令表示写状态变量,将SSTORE指令标记为污点汇;
S54、若当前的测试用例执行中存在SSTORE指令,读取SSTORE指令包含的污点信息,表明该测试用例可以对包含的污点涉及的状态变量进行赋值,并为每个状态变量i维护一个状态变量池I,将对应的测试用例保存在相应的状态变量池中;
状态变量池初始时每个状态变量池为空;较长的测试用例将影响模糊测试执行的效率,保存前对测试用例进行最小化处理,以便提高模糊测试执行的效率。具体为:保存前对测试用例进行最小化处理,每次删除待保存的测试用例中的一个函数,执行删减后的测试用例,检测是否对相关的状态变量进行赋值,若进行赋值则删除,否则保留函数;
S6、基于种子集和状态变量池进行种子突变,种子突变策略从种子集中取出种子利用状态变量池指导突变;
从种子集中取出一个种子,观察种子涉及的未覆盖的分支中是否包含状态变量,观察未覆盖的分支中是否包含状态变量利用污点分析,具体包括以下步骤:
S61、智能合约字节码中SLOAD指令表示读状态变量,因此将SLOAD指令标记为污点源;
S62、进行污点传播,污点的传播过程遵循若操作数存在污点,则操作结果包含相应的污点;
S63、智能合约字节码中JUMPI指令表示条件判断,因此将JUMPI指令标记为污点汇,查看JUMPI指令中是否包含污点信息,得到种子未覆盖的分支中是否包含状态变量;
S64、若种子涉及的未覆盖的分支中不包含状态变量,即均为输入参数,则随机的突变输入参数,生成测试用例,执行S3测试用例;
S65、若种子涉及的未覆盖的分支中包含状态变量,则检测状态变量是否被种子中的未覆盖分支所在函数之前的函数序列所定义;
S66、若均被定义,则随机的从未覆盖分支中包括的状态变量中选择一个状态变量,从状态变量对应的状态池中选择一个交易序列插入到种子中生成测试用例,执行S3测试用例;
S67、若存在未定义的状态变量,则检查状态变量对应的状态变量池是否为空,若均为空则对种子进行随机突变,生成测试用例,执行S3测试用例;
S68、若存在不为空的状态池则从状态变量池中随机的选择一个交易序列插入到种子中,生成测试用例,执行S3测试用例。
S7、重复执行S3-S6的过程,直到智能合约的模糊测试过程达到预设的时间或满足预设的终止条件。
实施例2、本发明的计算机装置可以是包括有处理器以及存储器等装置,例如包含中央处理器的单片机等。并且,处理器用于执行存储器中存储的计算机程序时实现上述的一种针对智能合约漏洞检测的有指导的模糊测试方法的步骤。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
实施例3、计算机可读存储介质实施例。
本发明的计算机可读存储介质可以是被计算机装置的处理器所读取的任何形式的存储介质,包括但不限于非易失性存储器、易失性存储器、铁电存储器等,计算机可读存储介质上存储有计算机程序,当计算机装置的处理器读取并执行存储器中所存储的计算机程序时,可以实现上述的一种针对智能合约漏洞检测的有指导的模糊测试方法的步骤。
所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。
Claims (9)
1.一种针对智能合约漏洞检测的有指导的模糊测试方法,其特征在于,包括以下步骤:
S1、输入为智能合约的字节码和合约的二进制接口ABI;
S2、基于合约的二进制接口ABI生成初始测试用例集或用户提供初始测试用例集;
S3、执行初始测试用例或测试用例;
S4、创建种子集,种子集初始为空,在测试用例的执行过程中选择部分测试用例做为种子保存在种子集中;
S5、在执行过程中保存每个对状态变量进行赋值的测试用例,并为每个状态变量维护一个状态变量池,将对应的测试用例保存在相应的状态变量池中;
S6、基于种子集和状态变量池进行种子突变,种子突变策略从种子集中取出种子利用状态变量池指导突变,方法是:从种子集中取出一个种子,观察种子涉及的未覆盖的分支中是否包含状态变量,具体包括以下步骤:
S61、智能合约字节码中SLOAD指令表示读状态变量,因此将SLOAD指令标记为污点源;
S62、进行污点传播,污点的传播过程遵循若操作数存在污点,则操作结果包含相应的污点;
S63、智能合约字节码中JUMPI指令表示条件判断,因此将JUMPI指令标记为污点汇,查看JUMPI指令中是否包含污点信息,得到种子未覆盖的分支中是否包含状态变量;
S64、若种子涉及的未覆盖的分支中不包含状态变量,即均为输入参数,则随机的突变输入参数,生成测试用例,执行S3测试用例;
S65、若种子涉及的未覆盖的分支中包含状态变量,则检测状态变量是否被种子中的未覆盖分支所在函数之前的函数序列所定义;
S66、若均被定义,则随机的从未覆盖分支中包括的状态变量中选择一个状态变量,从状态变量对应的状态池中选择一个交易序列插入到种子中生成测试用例,执行S3测试用例;
S67、若存在未定义的状态变量,则检查状态变量对应的状态变量池是否为空,若均为空则对种子进行随机突变,生成测试用例,执行S3测试用例;
S68、若存在不为空的状态池则从状态变量池中随机的选择一个交易序列插入到种子中,生成测试用例,执行S3测试用例;
S7、重复执行S3-S6的过程,直到智能合约的模糊测试过程达到预设的时间或满足预设的终止条件。
2.根据权利要求1所述的一种针对智能合约漏洞检测的有指导的模糊测试方法,其特征在于,若输入为智能合约源码,则根据智能合约的版本信息,利用对应版本的solc编译器编译智能合约的源码得到智能合约的字节码和合约的ABI;
生成初始测试用例集的方法是:模糊测试器根据二进制接口ABI产生初始测试用例集,初始测试用例集由智能合约中的每个函数构成。
3.根据权利要求2所述的一种针对智能合约漏洞检测的有指导的模糊测试方法,其特征在于,执行初始测试用例或测试用例的方法是:基于输入的智能合约字节码执行初始测试用例或测试用例,在执行过程中检测模糊测试过程是否发生异常,若发生异常行为则报告漏洞,并在执行过程中保存种子到种子集以及指定的测试用例到状态变量池中。
4.根据权利要求3所述的一种针对智能合约漏洞检测的有指导的模糊测试方法,其特征在于,对异常行为的定义由用户设置。
5.根据权利要求4所述的一种针对智能合约漏洞检测的有指导的模糊测试方法,其特征在于,在测试用例的执行过程中选择部分初始测试用例做为种子保存在种子集中的方法是:定义条件语句左侧的参数为a,右侧的参数为b,在智能合约中条件判断指令为JUMPI,在执行到指令时,计算a-b的距离,即|a-b|,其中的距离定义是利用绝对距离,模糊测试器在执行测试用例时,若测试用例的执行使得未执行分支的距离更近则将该测试用例保存到种子集中;
在保存测试用例到种子集之前,删除测试用例中位于未覆盖分支所在函数之后的函数序列。
6.根据权利要求5所述的一种针对智能合约漏洞检测的有指导的模糊测试方法,其特征在于,判断对状态变量进行赋值的测试用例方法是:
S51、智能合约字节码中SLOAD指令表示读状态变量,将SLOAD指令标记为污点源;
S52、进行污点传播,污点的传播过程遵循若操作数存在污点,则操作结果包含相应的污点;
S53、智能合约字节码中SSTORE指令表示写状态变量,将SSTORE指令标记为污点汇;
S54、若当前的测试用例执行中存在SSTORE指令,读取SSTORE指令包含的污点信息。
7.根据权利要求6所述的一种针对智能合约漏洞检测的有指导的模糊测试方法,其特征在于,状态变量池初始时每个状态变量池为空;保存前对测试用例进行最小化处理,每次删除待保存的测试用例中的一个函数,执行删减后的测试用例,检测是否对相关的状态变量进行赋值,若进行赋值则删除,否则保留函数。
8.一种电子设备,其特征在于,包括存储器和处理器,存储器存储有计算机程序,所述的处理器执行所述计算机程序时实现权利要求1-7任一项所述的一种针对智能合约漏洞检测的有指导的模糊测试方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1-7任一项所述的一种针对智能合约漏洞检测的有指导的模糊测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311008828.7A CN117009980B (zh) | 2023-08-10 | 2023-08-10 | 一种针对智能合约漏洞检测的有指导的模糊测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311008828.7A CN117009980B (zh) | 2023-08-10 | 2023-08-10 | 一种针对智能合约漏洞检测的有指导的模糊测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117009980A CN117009980A (zh) | 2023-11-07 |
CN117009980B true CN117009980B (zh) | 2024-03-15 |
Family
ID=88574183
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311008828.7A Active CN117009980B (zh) | 2023-08-10 | 2023-08-10 | 一种针对智能合约漏洞检测的有指导的模糊测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117009980B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114840418A (zh) * | 2022-04-11 | 2022-08-02 | 支付宝(杭州)信息技术有限公司 | 模糊测试方法及装置 |
CN115114166A (zh) * | 2022-07-05 | 2022-09-27 | 四川大学 | 一种以太坊智能合约安全测试方法 |
CN115292172A (zh) * | 2022-08-01 | 2022-11-04 | 哈尔滨工业大学 | 一种提高智能合约检测覆盖率的方法、电子设备及存储介质 |
CN115438351A (zh) * | 2022-10-12 | 2022-12-06 | 河北大学 | 一种面向eosio智能合约的灰盒模糊测试方法 |
CN115562987A (zh) * | 2022-09-30 | 2023-01-03 | 浙江工商大学 | 针对智能合约调用序列优化与资源分配导向的模糊测试方法 |
CN115659335A (zh) * | 2022-10-18 | 2023-01-31 | 哈尔滨工业大学(深圳) | 基于混合模糊测试的区块链智能合约漏洞检测方法及装置 |
CN115659358A (zh) * | 2022-12-28 | 2023-01-31 | 北京邮电大学 | 一种智能合约模糊测试方法及装置 |
CN115794625A (zh) * | 2022-11-18 | 2023-03-14 | 哈尔滨工业大学(深圳) | 一种智能合约模糊测试的方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA3055829A1 (en) * | 2017-03-08 | 2018-09-13 | Ip Oversight Corporation | System and method for creating commodity asset-secured tokens from reserves |
-
2023
- 2023-08-10 CN CN202311008828.7A patent/CN117009980B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114840418A (zh) * | 2022-04-11 | 2022-08-02 | 支付宝(杭州)信息技术有限公司 | 模糊测试方法及装置 |
CN115114166A (zh) * | 2022-07-05 | 2022-09-27 | 四川大学 | 一种以太坊智能合约安全测试方法 |
CN115292172A (zh) * | 2022-08-01 | 2022-11-04 | 哈尔滨工业大学 | 一种提高智能合约检测覆盖率的方法、电子设备及存储介质 |
CN115562987A (zh) * | 2022-09-30 | 2023-01-03 | 浙江工商大学 | 针对智能合约调用序列优化与资源分配导向的模糊测试方法 |
CN115438351A (zh) * | 2022-10-12 | 2022-12-06 | 河北大学 | 一种面向eosio智能合约的灰盒模糊测试方法 |
CN115659335A (zh) * | 2022-10-18 | 2023-01-31 | 哈尔滨工业大学(深圳) | 基于混合模糊测试的区块链智能合约漏洞检测方法及装置 |
CN115794625A (zh) * | 2022-11-18 | 2023-03-14 | 哈尔滨工业大学(深圳) | 一种智能合约模糊测试的方法及系统 |
CN115659358A (zh) * | 2022-12-28 | 2023-01-31 | 北京邮电大学 | 一种智能合约模糊测试方法及装置 |
Non-Patent Citations (1)
Title |
---|
基于关键点的混合式漏洞挖掘测试用例同步方法;赵 磊等;《工程科学与技术》;20220526;第54卷(第3期);第55-63页 * |
Also Published As
Publication number | Publication date |
---|---|
CN117009980A (zh) | 2023-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
David et al. | Do you still need a manual smart contract audit? | |
CN115292172B (zh) | 一种提高智能合约检测覆盖率的方法、电子设备及存储介质 | |
CN109101237A (zh) | 代码的加密编译方法及装置 | |
CN111124926A (zh) | 模糊测试方法、装置、电子设备及存储介质 | |
CN115659358B (zh) | 一种智能合约模糊测试方法及装置 | |
CN112860588A (zh) | 一种针对智能合约跨合约漏洞的模糊测试方法 | |
CN112749389A (zh) | 一种检测智能合约破坏敏感数据漏洞的检测方法及装置 | |
Li et al. | Detecting standard violation errors in smart contracts | |
CN115168861A (zh) | 数据安全验证方法、装置、设备及存储介质 | |
US11868465B2 (en) | Binary image stack cookie protection | |
Shou et al. | Llm4fuzz: Guided fuzzing of smart contracts with large language models | |
CN117009980B (zh) | 一种针对智能合约漏洞检测的有指导的模糊测试方法 | |
JP5700675B2 (ja) | コンピュータ・プログラムのメソッドがバリデータであるかどうかを判断する方法、システム、及びコンピュータ・プログラム | |
CN111475152B (zh) | 一种代码处理方法及装置 | |
CN114510723A (zh) | 一种智能合约权限管理漏洞检测方法及装置 | |
Yu et al. | Possibility of cost reduction by mutant clustering according to the clustering scope | |
Shahriar et al. | Rule-based source level patching of buffer overflow vulnerabilities | |
CN117009979B (zh) | 一种可处理合约信息的智能合约漏洞检测方法 | |
CN114707143B (zh) | 内存数据损坏攻击的监测方法和装置 | |
US20240264924A1 (en) | Automatic injection of weak code to attract or distract malicious actors | |
CN117992358B (zh) | 基于区块链的智能合约跨合约测试方法及装置 | |
Ibba | Smart Contracts Classification and Vulnerabilities Detection | |
Piscatello | Reducing Structured Query Language Injection Vulnerabilities Through Functional Programming Principles | |
Zhou et al. | Detecting prototype pollution for node. js: Vulnerability review and new fuzzing inputs | |
ORTU et al. | Identifying and fixing vulnerable patterns in ethereum smart contracts: A comparative study of fine-tuning and prompt engineering using large language models |
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 |