CN115455435A - 一种智能合约模糊测试方法、装置、存储介质及电子设备 - Google Patents
一种智能合约模糊测试方法、装置、存储介质及电子设备 Download PDFInfo
- Publication number
- CN115455435A CN115455435A CN202211247082.0A CN202211247082A CN115455435A CN 115455435 A CN115455435 A CN 115455435A CN 202211247082 A CN202211247082 A CN 202211247082A CN 115455435 A CN115455435 A CN 115455435A
- Authority
- CN
- China
- Prior art keywords
- test case
- test
- distance
- intelligent contract
- function
- 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
-
- 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/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
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:获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;S2:依次运行第一测试用例集中的各测试用例,记录各测试用例覆盖的函数和基本块,删除未覆盖新函数和新基本块的测试用例,根据收集的漏洞信息和漏洞测试预言判断智能合约是否存在对应漏洞;S3:计算各测试用例到目标基本块的第一距离,将第一距离最小值对应的测试用例加入第二测试用例集,根据第二测试用例集生成新的测试用例并加入第一测试用例集;执行S2直至模糊测试结束。本发明能生成更高质量的测试用例,更高概率覆盖代码分支和触发安全漏洞,提高了安全漏洞检测的效率和准确度。
Description
技术领域
本发明涉及区块链技术领域,尤其是涉及一种智能合约模糊测试方法、装置、存储介质及电子设备。
背景技术
近年来,随着区块链技术的发展,大量的智能合约被应用于金融、供应链等领域。智能合约是用高级语言编写的代码,可能包含大量的安全漏洞,但其特殊性在于一旦部署上链就无法轻易修改,这也就意味着一个存在漏洞的合约将永远是易受攻击的。近些年,出现了越来越多针对以太坊智能合约漏洞的攻击,比如2016年的The DAO Attack和2017年的Parity Wallet Attack,攻击者分别盗取了5000余万美元和3000余万美元,造成了大量损失。
因此,针对以太坊智能合约的安全漏洞问题,开发一个检测智能合约安全漏洞的工具是很有必要的。模糊测试是检测智能合约安全漏洞的常用技术手段,测试用例的质量会影响模糊测试的效率和效果。现有技术中生成的测试用例质量较低,触发智能合约安全漏洞的概率较低,甚至生成无效的测试用例而造成资源浪费。
发明内容
本发明的目的是提供一种智能合约模糊测试方法、装置、存储介质及电子设备,以解决现有技术中生成的测试用例质量较低从而造成智能合约安全漏洞检测效率较低、效果欠佳的技术问题。
本发明的目的,可以通过如下技术方案实现:
一种智能合约模糊测试方法,包括以下步骤:
S1:获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;
S2:依次运行第一测试用例集中的各测试用例,并记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码;
S3:计算所述第一测试用例集中各测试用例到目标基本块的第一距离,所述目标基本块是从所有测试用例未覆盖的基本块中随机选择的,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回执行S2直至模糊测试时间达到预设的时间阈值。
可选地,计算各测试用例到目标基本块的第一距离包括:
根据所述函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离,所述目标函数为所述目标基本块所在的函数;
根据所述流程控制图得到各测试用例所覆盖的各基本块到所述目标基本块的第三距离,所述第三距离是根据所述第二距离计算得到的;
根据所述第三距离得到各测试用例到所述目标基本块的第一距离。
可选地,根据所述函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离包括:
针对各测试用例所覆盖的每一函数:
若所述函数与所述目标函数之间存在跳转关系,则根据所述函数调用图和Dijkstra算法计算出最短路径,将所述最短路径作为所述函数到目标函数的第二距离;否则,所述函数到目标函数的第二距离为无穷大。
可选地,根据所述流程控制图得到各测试用例所覆盖的各基本块到所述目标基本块的第三距离包括:
针对各测试用例所覆盖的每一基本块:
若所述基本块为所述目标基本块,则所述基本块到所述目标基本块的第三距离为0;
若所述基本块中存在能跳转到所述目标函数的函数调用语句,计算各被调用函数到所述目标函数的第二距离,将所述第二距离的最小值与常量的乘积作为所述基本块到所述目标基本块的第三距离。
可选地,根据所述第三距离得到各测试用例到所述目标基本块的第一距离包括:
将各测试用例所覆盖的各基本块到所述目标基本块的第三距离求平均得到各测试用例到所述目标基本块的第一距离。
可选地,根据所述测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞包括:
若所述测试用例运行时收集的漏洞信息与预设的漏洞测试预言相匹配,则所述智能合约中包含与所述漏洞测试预言对应的漏洞,否则,所述智能合约中不包含与所述漏洞测试预言对应的漏洞。
本发明还提供了一种智能合约模糊测试装置,包括:
智能合约的图构建模块,用于获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;
智能合约漏洞检测模块,用于依次运行第一测试用例集中的各测试用例,并记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码;
新测试用例生成模块,用于计算所述第一测试用例集中各测试用例到目标基本块的第一距离,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回执行S2直至模糊测试时间达到预设的时间阈值。
可选地,新测试用例生成模块计算各测试用例到目标基本块的第一距离包括:
所述新测试用例生成模块根据所述函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离,所述目标函数为所述目标基本块所在的函数;
根据所述流程控制图得到各测试用例所覆盖的各基本块到所述目标基本块的第三距离,所述第三距离是根据所述第二距离计算得到的;
根据所述第三距离得到各测试用例到所述目标基本块的第一距离。
本发明还提供了一种存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现智能合约模糊测试方法。
本发明还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、通信接口、存储器通过所述通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的计算机程序时,实现智能合约模糊测试方法。
本发明提供了一种智能合约模糊测试方法、装置、存储介质及电子设备,其中方法包括以下步骤:S1:获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;S2:依次运行第一测试用例集中的各测试用例,并记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码;S3:计算所述第一测试用例集中各测试用例到目标基本块的第一距离,所述目标基本块是从所有测试用例未覆盖的基本块中随机选择的,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回执行S2直至模糊测试时间达到预设的时间阈值。
有鉴如此,本发明带来的有益效果是:
本发明首先利用静态分析方法构建各智能合约的函数调用图和各函数内的控制流图;在模糊测试的动态运行部分,设计了一部分智能合约的漏洞测试预言,将测试用例运行时收集的漏洞信息与漏洞测试预言进行比较,分析模糊测试的结果,从而挖掘出智能合约中存在的安全漏洞;在测试用例的运行过程中,统计已有测试用例运行后未覆盖到的函数和基本块,从中随机选择一个基本块作为目标基本块,对各测试用例计算其所覆盖的基本块和未覆盖的目标基本块之间的平均距离即各测试用例到目标基本块的第一距离,从中筛选出第一距离最小的测试用例加入到测试用例集合,作为种子以生成新的测试用例。本发明利用距离分级技术能更精确而全面地计算了测试用例到目标基本块的距离,从而筛选出了质量更高的测试用例,提高了智能合约安全漏洞检测的效率和准确度。
附图说明
图1为本发明智能合约模糊测试方法的流程示意图;
图2为本发明智能合约模糊测试方法另一实施例的流程示意图;
图3为本发明智能合约模糊测试装置的结构示意图。
具体实施方式
术语解释:
区块链:区块链是一个分布式的共享账本和数据库,由一连串的区块组成,每一个区块包含了前一个区块的加密散列、相应时间戳以及交易资料。区块链具有去中心化、不可篡改、公开透明等特点,它为交易提供了去中心化的共识机制。
以太坊:以太坊是一个去中心化的、开源的、有智能合约功能的公共区块链平台,它允许开发人员编写智能合约和去中心化应用程序,并将其保存在区块链上供用户调用执行。
智能合约:智能合约是部署在区块链上的可以被执行的图灵完备的程序。以太坊上的智能合约是位于区块链上一个特定地址的一系列程序代码和数据,程序代码表示智能合约定义的规则,数据表示智能合约的状态。个人用户可以通过提交交易执行智能合约的某一个函数,从而与智能合约进行交互。
模糊测试:模糊测试是一种软件测试技术,其原理是针对被测程序自动或半自动地生成测试用例,并监视程序运行测试用例的过程,以发现可能存在的程序漏洞。
交叉和变异:交叉和变异分别是两种生成新的用于模糊测试的测试用例的方法,它们来源于生物学中的交叉技术和突变技术。
测试预言:测试预言(test oracle)是检验待测系统在特定执行下是否正确运行的方法,它被用来检查真实测试结果的正确性,是软件测试过程中的重要环节。
中间表示:中间表示(intermediate representation)是编译器或虚拟机内部用于表示源代码的数据结构或代码,其设计有助于进一步进行优化、翻译之类的处理。
反向编译:反向编译也称作逆向工程,指的是通过对目标程序的机器码进行分析,从而将已经编译好的程式还原到未编译的状态,也就是找出程序的源代码。
本发明实施例提供了一种智能合约模糊测试方法、装置、存储介质及电子设备,以解决现有技术中生成的测试用例质量较低从而造成智能合约安全漏洞检测效率较低、效果欠佳的技术问题。
为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。
针对以太坊智能合约的漏洞安全问题,开发一个检测智能合约安全漏洞的工具是很有必要的。模糊测试是最常见的检测智能合约漏洞的技术手段之一,它不断地生成智能合约的测试用例,并将测试用例输入到智能合约中,通过监视智能合约的运行过程来判断是否存在漏洞。然而,在模糊测试的过程中,筛选测试用例的策略将会影响测试用例的质量,好的筛选策略可以提高新生成的测试用例的质量,在相同的时间内生成具有更高概率触发安全漏洞的测试用例,避免生成无效的测试用例而造成资源的浪费。
本发明提供的智能合约模糊测试方法,是一种基于距离分级的智能合约灰盒模糊测试技术,通过距离分级指导测试用例的筛选策略,高效地生成具有更高概率覆盖代码分支从而触发安全漏洞的测试用例,提高漏洞检测的效率和精度,为智能合约的安全保驾护航。
模糊测试可以分为白盒模糊测试、灰盒模糊测试、黑盒模糊测试三种类型。白盒模糊测试通过符号执行技术对控制流图进行探索,花费较多的时间在静态分析过程以收集更多的代码信息。灰盒模糊测试采用了轻量级的程序分析技术,通过收集部分关键的代码信息来指导测试过程。黑盒模糊测试不使用任何程序内部的信息,通过随机生成输入并观测输出结果来进行测试。目前,灰盒模糊测试是较为主流的模糊测试技术,它首先针对被测程序生成随机的测试用例,并运行测试用例来判断其是否覆盖了一条新的未被覆盖的程序路径,然后,它通过某种筛选策略筛选出高质量的测试用例,对其进行交叉和变异的操作,从而生成新的测试用例,进行下一轮的测试迭代。在上述整个模糊测试的过程中,可以通过监视测试用例的执行来判断程序中是否存在漏洞。
距离分级是指基于函数级别和基本块级别来对距离进行分级定义和计算。首先,通过对程序进行静态分析,构建出程序的函数调用图和各函数的控制流图,其次,基于函数调用图计算某个函数和目标函数之间的距离,在此基础上再基于每个函数的控制流图计算某个基本块和目标基本块之间的距离。
请参阅图1,本发明提供了一种智能合约模糊测试方法的实施例,包括以下步骤:
S100:获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;
S200:依次运行第一测试用例集中的各测试用例,并记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码;
S300:计算所述第一测试用例集中各测试用例到目标基本块的第一距离,所述目标基本块是从所有测试用例未覆盖的基本块中随机选择的,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回执行S2直至模糊测试时间达到预设的时间阈值。
在步骤S100中,获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图。主要包括:智能合约源码收集,定义漏洞测试预言和对智能合约进行静态分析。
智能合约源码收集时,优选的实施方式,从EtherScan上收集500个流行且复杂度高的智能合约作为智能合约数据集。具体的,首先从EtherScan上下载超过30000笔交易的智能合约,然后将所有智能合约按照字节码大小进行排序,筛选出前500个智能合约构成数据集。
本实施例中,智能合约本质上是存储在以太坊区块链一个特定地址上的一组代码和数据。通常智能合约是用高级语言编写的,最终智能合约被编译为字节码并通过以太坊虚拟机(EVM)来运行。每个智能合约都维持着一块持久化内存区用来保存状态变量。为了执行智能合约中定义的函数,用户需要对智能合约发起一笔交易,交易中包含了函数调用的信息和发送的以太币数量。智能合约接收到交易后,会执行相关的程序代码,并将结果记录在区块链上。
本实施例中,定义各种安全漏洞对应的漏洞测试预言。具体的,选择需要检测的安全漏洞类型,例如,重入漏洞、整数溢出漏洞等,根据安全漏洞的特征定义准确的漏洞测试预言,用于模糊测试过程中进行安全漏洞检测。值得说明的是,漏洞测试预言与安全漏洞的类型具有对应关系。
对智能合约进行静态分析时,首先,利用已有的智能合约反编译工具(例如Gigahorse),通过对智能合约字节码进行堆栈分析和数据流分析,生成三地址码形式的中间表示;然后,基于智能合约的三地址码中间表示,采用启发式的函数边界推断方法推断出智能合约内的函数,并构建出智能合约对应的函数调用图和各函数的控制流图。
本实施例中的距离分级包括函数级别的距离和基本块级别的距离。首先,基于智能合约的函数调用图定义函数级别的距离,该距离表示某个函数到目标函数之间的距离。假设存在一个函数x,与目标函数f之间的距离以df(x,f)表示,若函数x到目标函数f之间存在直接或间接的跳转关系,那么可以使用Dijkstra算法根据函数调用图计算出最短路径作为函数级别的距离,否则该距离为未定义的,可以用无穷大表示。
其次,基于智能合约中各函数的控制流图定义基本块级别的距离,该距离表示某个基本块到目标基本块之间的距离。假设存在一个基本块m,与目标基本块b之间的距离以db(m,b)表示,若m=b,那么距离为0;若基本块m在函数x的控制流图中,且基本块m中包括一个或多个能够跳转到目标函数f的函数调用语句,每个函数调用语句都有对应的被调用函数,执行基本块时会执行这些函数调用语句,对应的被调用函数可以直接或间接地跳转到目标函数f,计算各被调用函数到目标函数f的第二距离,将第二距离的最小值与常量的乘积作为各测试用例所覆盖的基本块到目标基本块的第三距离。这里的常量指的是一个自定义的常数,用于放大效果。
在步骤S200中,依次运行第一测试用例集中的各测试用例,记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码。
(1)生成初始测试用例集:根据对智能合约静态分析得到的信息,随机生成若干测试用例构成一个测试用例集合即第一测试用例集,每个测试用例代表着以太坊上的某个用户针对该智能合约发起的一笔交易,其中包含了若干个函数调用。
(2)运行第一测试用例集中的测试用例并进行分析和检测:运行第一测试用例集中的测试用例,记录每个测试用例所覆盖的智能合约的函数和基本块,若当前某个测试用例并未覆盖的新的函数和新的基本块,即当前测试用例只覆盖了前面测试用例已经覆盖的函数和基本块,那么可以认为该测试用例的质量较差,将该测试用例从第一测试用例集合中删除。同时,监视第一测试用例集中的各测试用例的运行过程,收集可用于对智能合约进行安全漏洞分析的关键信息,根据各测试用例运行时收集的安全漏洞信息和预设的漏洞测试预言判断智能合约中是否存在对应的漏洞。具体的,在每个测试用例运行结束后,利用前面定义好的漏洞测试预言对智能合约进行安全漏洞的分析和检测,若收集到的安全漏洞信息和某种安全漏洞的漏洞测试预言相匹配,那么可以认为被测智能合约中包含与该漏洞测试预言对应类型的安全漏洞;否则,被测智能合约中不包含与该漏洞测试预言对应类型的安全漏洞。
在步骤S300中,计算所述第一测试用例集中各测试用例到目标基本块的第一距离,所述目标基本块是从所有测试用例未覆盖的基本块中随机选择的,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回执行S200直至模糊测试时间达到预设的时间阈值。
本实施例中,根据步骤S200中收集到的信息,可以统计出所有测试用例均未覆盖的基本块,从中随机选择一个基本块作为目标基本块,然后,对每个测试用例,计算出其所覆盖的每个基本块到目标基本块的距离,再对这些距离取平均值,作为该测试用例到目标基本块的距离。
优选的实施方式,计算各测试用例到目标基本块的第一距离包括:
首先,根据函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离,目标函数为目标基本块所在的函数。具体的,针对各测试用例所覆盖的每一函数,若该某函数与目标函数之间存在跳转关系,则根据函数调用图和Dijkstra算法计算出最短路径,将最短路径作为该函数到目标函数的第二距离;否则,该函数到目标函数的第二距离为无穷大;重复这个过程,可以得到各测试用例所覆盖的各函数到目标函数的第二距离。
其次,根据流程控制图得到各测试用例所覆盖的各基本块到目标基本块的第三距离。具体的,针对各测试用例所覆盖的每一基本块,若该基本块为目标基本块,则基本块到目标基本块的第三距离为0;若该基本块中存在能跳转到目标函数的函数调用语句,计算各被调用函数到目标函数的第二距离,将第二距离的最小值与常量的乘积作为该基本块到目标基本块的第三距离;重复这个过程,可以得到各测试用例所覆盖的各基本块到目标基本块的第三距离。
本实施例中,计算基本块m和目标基本块b之间的距离分为以下三步:
(1)通过函数调用图以Dijkstra算法计算基本块m中每个可跳转到目标函数的被调用函数与目标函数f之间的距离;例如,基本块m中包括函数调用语句:p();q();k();r();其中,被调用函数p和q均可跳转到目标函数,分别计算被调用函数p、q到目标函数f的最短路径即第二距离。
(2)筛选上一步计算得到的最短距离,即从上一步得到的多个第二距离中选择最小值;例如,被调用函数p到目标函数f的第二距离为1即df(p,f)=1,被调用函数q到目标函数f的第二距离为2即df(q,f)=2,那么选择被调用函数p到目标函数f的第二距离1作为最短距离,即min df=1。
(3)计算基本块m和目标基本块b之间的距离,c*min df,c是自定义的常量,用于放大效果。
再次,根据第三距离得到各测试用例到目标基本块的第一距离。具体的,将各测试用例所覆盖的各基本块到目标基本块的第三距离求平均,将平均值作为各测试用例到目标基本块的第一距离。
在得到各测试用例到目标基本块的第一距离后,将第一距离的最小值对应的测试用例加入第二测试用例集合,根据第二测试用例集合中的测试用例生成若干新的测试用例,并将这些新的测试用例加入第一测试用例集中。具体的,对第二测试用例集合中的测试用例进行交叉和变异操作以生成新的测试用例。交叉操作是指,从第二测试用例集合中随机选取两个测试用例,在选定的位置将每个测试用例分成两部分,然后交换两个测试用例的第二个部分,从而生成两个新的测试用例。然后,对交叉操作生成的测试用例进行有效性检查,丢弃无效的测试用例。
变异操作是指,从第二测试用例集合中随机选取一个测试用例,通过增加、删除、交换函数调用来对函数调用序列进行修改,同时通过其它的一些变异方法生成新的函数参数值,这样就生成了新的测试用例。
本实施例中,重复执行步骤S200,直到模糊测试的时间到达一个预设的时间阈值,直到模糊测试结束。
本实施例提供的智能合约模糊测试方法,首先利用静态分析方法构建各智能合约的函数调用图和各函数内的控制流图;在模糊测试的动态运行部分,设计了一部分智能合约的漏洞测试预言,将测试用例运行时收集的漏洞信息与漏洞测试预言进行比较,分析模糊测试的结果,从而挖掘出智能合约中存在的安全漏洞;在测试用例的运行过程中,统计已有测试用例运行后未覆盖到的函数和基本块,从中随机选择一个基本块作为目标基本块,对各测试用例计算其所覆盖的基本块和未覆盖的目标基本块之间的平均距离即各测试用例到目标基本块的第一距离,从中筛选出第一距离最小的测试用例加入到测试用例集合,作为种子以生成新的测试用例。本发明利用距离分级技术能更精确而全面地计算了测试用例到目标基本块的距离,从而筛选出了质量更高的测试用例,提高了智能合约安全漏洞检测的效率和准确度。
本实施例利用了距离分级技术指导智能合约的灰盒模糊测试过程,通过距离分级,模糊测试器可以更精准地计算测试用例到目标基本块之间的距离,能筛选出质量更高的测试用例,在生成新的测试用例时能够生成更有可能探索深层路径的测试用例,从而增加了触发安全漏洞的概率,提高漏洞检测的效果。
本实施例的关键在于利用智能合约反编译工具构建的函数调用图和控制流图,进行了距离分级操作,从函数级别和基本块级别这两个角度来进行距离的定义和计算,这一筛选测试用例的策略对模糊测试技术的效果起到了关键作用。
本实施例提供的智能合约模糊测试方法,是一种基于距离分级的智能合约灰盒模糊测试技术,通过距离分级指导测试用例的筛选策略,高效地生成具有更高概率覆盖代码分支从而触发安全漏洞的测试用例,提高智能合约安全漏洞检测的效率和精度,为智能合约的安全保驾护航。
请参阅图2,本发明提供的一种智能合约模糊测试方法的另一实施例。首先,利用已有的反编译工具通过智能合约字节码构造出一个函数调用图和每个函数的控制流图。其次,为了提高模糊测试的准确度,在模糊测试的静态分析部分,通过距离分级的方法定义函数级别和基本块级别的距离计算方式。为了筛选出具有更高概率触发漏洞的测试用例,在模糊测试的动态运行部分,本发明提出了一种新的自适应策略,首先统计已有测试用例运行后未覆盖到的基本块,然后从中随机选择一个基本块作为目标,对每个测试用例计算其覆盖的基本块和未覆盖的目标基本块之间的平均距离,从中筛选出距离最小的测试用例加入测试用例集合,作为种子以生成新的测试用例。此外,本发明设计了一部分智能合约漏洞的测试预言,用于分析模糊测试的结果从而挖掘安全漏洞。
请参阅图3,本发明还提供了一种智能合约模糊测试装置的实施例,包括:
智能合约的图构建模块11,用于获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;
智能合约漏洞检测模块22,用于依次运行第一测试用例集中的各测试用例,并记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码;
新测试用例生成模块33,用于计算所述第一测试用例集中各测试用例到目标基本块的第一距离,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回智能合约漏洞检测模块执行直至模糊测试时间达到预设的时间阈值。
优选的实施方式,新测试用例生成模块33计算各测试用例到目标基本块的第一距离包括:
所述新测试用例生成模块根据所述函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离,所述目标函数为所述目标基本块所在的函数;
根据所述流程控制图得到各测试用例所覆盖的各基本块到所述目标基本块的第三距离,所述第三距离是根据所述第二距离计算得到的;
根据所述第三距离得到各测试用例到所述目标基本块的第一距离。
本实施例提供的智能合约模糊测试装置,首先利用静态分析方法构建各智能合约的函数调用图和各函数内的控制流图;在模糊测试的动态运行部分,设计了一部分智能合约的漏洞测试预言,将测试用例运行时收集的漏洞信息与漏洞测试预言进行比较,分析模糊测试的结果,从而挖掘出智能合约中存在的安全漏洞;在测试用例的运行过程中,统计已有测试用例运行后未覆盖到的函数和基本块,从中随机选择一个基本块作为目标基本块,对各测试用例计算其所覆盖的基本块和未覆盖的目标基本块之间的平均距离即各测试用例到目标基本块的第一距离,从中筛选出第一距离最小的测试用例加入到测试用例集合,作为种子以生成新的测试用例。本发明利用距离分级技术能更精确而全面地计算了测试用例到目标基本块的距离,从而筛选出了质量更高的测试用例,提高了智能合约安全漏洞检测的效率和准确度。
本发明还提供了一种存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现一种智能合约模糊测试方法。
本发明还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、通信接口、存储器通过所述通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的计算机程序时,实现一种智能合约模糊测试方法。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种智能合约模糊测试方法,其特征在于,包括以下步骤:
S1:获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;
S2:依次运行第一测试用例集中的各测试用例,并记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码;
S3:计算所述第一测试用例集中各测试用例到目标基本块的第一距离,所述目标基本块是从所有测试用例未覆盖的基本块中随机选择的,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回执行S2直至模糊测试时间达到预设的时间阈值。
2.根据权利要求1所述的智能合约模糊测试方法,其特征在于,计算各测试用例到目标基本块的第一距离包括:
根据所述函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离,所述目标函数为所述目标基本块所在的函数;
根据所述流程控制图得到各测试用例所覆盖的各基本块到所述目标基本块的第三距离,所述第三距离是根据所述第二距离计算得到的;
根据所述第三距离得到各测试用例到所述目标基本块的第一距离。
3.根据权利要求2所述的智能合约模糊测试方法,其特征在于,根据所述函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离包括:
针对各测试用例所覆盖的每一函数:
若所述函数与所述目标函数之间存在跳转关系,则根据所述函数调用图和Dijkstra算法计算出最短路径,将所述最短路径作为所述函数到目标函数的第二距离;否则,所述函数到目标函数的第二距离为无穷大。
4.根据权利要求2所述的智能合约模糊测试方法,其特征在于,根据所述流程控制图得到各测试用例所覆盖的各基本块到所述目标基本块的第三距离包括:
针对各测试用例所覆盖的每一基本块:
若所述基本块为所述目标基本块,则所述基本块到所述目标基本块的第三距离为0;
若所述基本块中存在能跳转到所述目标函数的函数调用语句,计算各被调用函数到所述目标函数的第二距离,将所述第二距离的最小值与常量的乘积作为所述基本块到所述目标基本块的第三距离。
5.根据权利要求2所述的智能合约模糊测试方法,其特征在于,根据所述第三距离得到各测试用例到所述目标基本块的第一距离包括:
将各测试用例所覆盖的各基本块到所述目标基本块的第三距离求平均得到各测试用例到所述目标基本块的第一距离。
6.根据权利要求1-5任一项所述的智能合约模糊测试方法,其特征在于,根据所述测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞包括:
若所述测试用例运行时收集的漏洞信息与预设的漏洞测试预言相匹配,则所述智能合约中包含与所述漏洞测试预言对应的漏洞,否则,所述智能合约中不包含与所述漏洞测试预言对应的漏洞。
7.一种智能合约模糊测试装置,其特征在于,包括:
智能合约的图构建模块,用于获取智能合约数据集,构建各智能合约的函数调用图和各函数的控制流图;
智能合约漏洞检测模块,用于依次运行第一测试用例集中的各测试用例,并记录各测试用例所覆盖的函数和基本块,若当前测试用例只覆盖了前面测试用例已覆盖的函数和基本块,则从所述第一测试用例集中删除当前测试用例,根据各测试用例运行时收集的漏洞信息和预设的漏洞测试预言判断所述智能合约中是否存在对应漏洞,所述基本块为所述控制流图中各分支对应的代码;
新测试用例生成模块,用于计算所述第一测试用例集中各测试用例到目标基本块的第一距离,将所述第一距离的最小值对应的测试用例加入第二测试用例集,根据所述第二测试用例集中的测试用例生成若干新的测试用例,将所述新的测试用例加入所述第一测试用例集,返回智能合约漏洞检测模块执行直至模糊测试时间达到预设的时间阈值。
8.根据权利要求7所述的智能合约模糊测试装置,其特征在于,新测试用例生成模块计算各测试用例到目标基本块的第一距离包括:
所述新测试用例生成模块根据所述函数调用图得到各测试用例所覆盖的各函数到目标函数的第二距离,所述目标函数为所述目标基本块所在的函数;
根据所述流程控制图得到各测试用例所覆盖的各基本块到所述目标基本块的第三距离,所述第三距离是根据所述第二距离计算得到的;
根据所述第三距离得到各测试用例到所述目标基本块的第一距离。
9.一种存储介质,其特征在于,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一项所述的智能合约模糊测试方法。
10.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,所述处理器、通信接口、存储器通过所述通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的计算机程序时,实现权利要求1-6任一项所述的智能合约模糊测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211247082.0A CN115455435A (zh) | 2022-10-12 | 2022-10-12 | 一种智能合约模糊测试方法、装置、存储介质及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211247082.0A CN115455435A (zh) | 2022-10-12 | 2022-10-12 | 一种智能合约模糊测试方法、装置、存储介质及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115455435A true CN115455435A (zh) | 2022-12-09 |
Family
ID=84308434
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211247082.0A Pending CN115455435A (zh) | 2022-10-12 | 2022-10-12 | 一种智能合约模糊测试方法、装置、存储介质及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115455435A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115659358A (zh) * | 2022-12-28 | 2023-01-31 | 北京邮电大学 | 一种智能合约模糊测试方法及装置 |
CN117033171A (zh) * | 2023-06-28 | 2023-11-10 | 清华大学 | 触发软件漏洞的输入数据的复现方法、装置、设备及介质 |
CN117033164A (zh) * | 2023-05-17 | 2023-11-10 | 烟台大学 | 一种智能合约安全漏洞检测方法和系统 |
CN117909988A (zh) * | 2024-01-04 | 2024-04-19 | 烟台大学 | 基于语义信息引导模糊测试的智能合约漏洞检测方法 |
CN118468296A (zh) * | 2024-07-12 | 2024-08-09 | 武汉金银湖实验室 | 一种克隆漏洞检测方法、系统及设备 |
-
2022
- 2022-10-12 CN CN202211247082.0A patent/CN115455435A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115659358A (zh) * | 2022-12-28 | 2023-01-31 | 北京邮电大学 | 一种智能合约模糊测试方法及装置 |
CN117033164A (zh) * | 2023-05-17 | 2023-11-10 | 烟台大学 | 一种智能合约安全漏洞检测方法和系统 |
CN117033164B (zh) * | 2023-05-17 | 2024-03-29 | 烟台大学 | 一种智能合约安全漏洞检测方法和系统 |
CN117033171A (zh) * | 2023-06-28 | 2023-11-10 | 清华大学 | 触发软件漏洞的输入数据的复现方法、装置、设备及介质 |
CN117033171B (zh) * | 2023-06-28 | 2024-03-26 | 清华大学 | 触发软件漏洞的输入数据的复现方法、装置、设备及介质 |
CN117909988A (zh) * | 2024-01-04 | 2024-04-19 | 烟台大学 | 基于语义信息引导模糊测试的智能合约漏洞检测方法 |
CN118468296A (zh) * | 2024-07-12 | 2024-08-09 | 武汉金银湖实验室 | 一种克隆漏洞检测方法、系统及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115455435A (zh) | 一种智能合约模糊测试方法、装置、存储介质及电子设备 | |
Kushwaha et al. | Ethereum smart contract analysis tools: A systematic review | |
Wang et al. | Detecting nondeterministic payment bugs in ethereum smart contracts | |
Shen et al. | Automating performance bottleneck detection using search-based application profiling | |
CN111723382A (zh) | 动态Android程序漏洞验证方法和装置 | |
CN112749389B (zh) | 一种检测智能合约破坏敏感数据漏洞的检测方法及装置 | |
CN111832026B (zh) | 一种漏洞利用定位方法、系统、装置及介质 | |
Ivanova et al. | Regularmutator: a mutation testing tool for solidity smart contracts | |
Lin et al. | Recovering fitness gradients for interprocedural Boolean flags in search-based testing | |
Wei et al. | Evaluating design tradeoffs in numeric static analysis for java | |
CN114996126A (zh) | 一种针对eosio智能合约的漏洞检测方法及系统 | |
CN113971135A (zh) | 一种覆盖引导的智能合约测试用例生成方法 | |
CN114626069A (zh) | 威胁建模方法及装置 | |
Zheng et al. | Turn the rudder: A beacon of reentrancy detection for smart contracts on ethereum | |
CN115438351A (zh) | 一种面向eosio智能合约的灰盒模糊测试方法 | |
Liao et al. | Smartstate: Detecting state-reverting vulnerabilities in smart contracts via fine-grained state-dependency analysis | |
Ji et al. | Effuzz: Efficient fuzzing by directed search for smart contracts | |
Chatelain et al. | VeriTracer: Context-enriched tracer for floating-point arithmetic analysis | |
Shou et al. | Llm4fuzz: Guided fuzzing of smart contracts with large language models | |
Su et al. | DeFiWarder: Protecting DeFi Apps from Token Leaking Vulnerabilities | |
George et al. | A preliminary study on common programming mistakes that lead to buffer overflow vulnerability | |
Kundu et al. | A UML model-based approach to detect infeasible paths | |
Guth et al. | Specification mining for smart contracts with automatic abstraction tuning | |
Andrijasa et al. | Towards Automatic Exploit Generation for Identifying Re-Entrancy Attacks on Cross-Contract | |
Sujeetha et al. | Analysis on mutation testing tools for smart contracts |
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 |