CN116303097A - 智能合约的模糊测试方法、装置、设备、介质和程序产品 - Google Patents

智能合约的模糊测试方法、装置、设备、介质和程序产品 Download PDF

Info

Publication number
CN116303097A
CN116303097A CN202310544504.9A CN202310544504A CN116303097A CN 116303097 A CN116303097 A CN 116303097A CN 202310544504 A CN202310544504 A CN 202310544504A CN 116303097 A CN116303097 A CN 116303097A
Authority
CN
China
Prior art keywords
test
transaction sequence
node
contract
optimal
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
CN202310544504.9A
Other languages
English (en)
Other versions
CN116303097B (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.)
Industrial and Commercial Bank of China Ltd ICBC
Original Assignee
Industrial and Commercial Bank of China Ltd ICBC
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 Industrial and Commercial Bank of China Ltd ICBC filed Critical Industrial and Commercial Bank of China Ltd ICBC
Priority to CN202310544504.9A priority Critical patent/CN116303097B/zh
Publication of CN116303097A publication Critical patent/CN116303097A/zh
Application granted granted Critical
Publication of CN116303097B publication Critical patent/CN116303097B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • 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
    • 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)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明提供了一种智能合约的模糊测试方法、装置、设备、介质和程序产品,涉及信息安全技术领域和区块链技术领域,其至少能部分地解决在对智能合约进行测试时,测试效率较低的问题。该模糊测试方法包括:当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造最优交易序列;基于最优交易序列进行变异,以生成第一测试案例;基于第一测试案例,执行模糊测试;其中,构造最优交易序列包括:根据待测合约,生成交易序列执行树;基于交易序列执行树中每个节点中的函数被选择次数和贡献程度,构造当前的最优交易序列。本发明在达到相同测试覆盖率时,可以减少交易序列的生成次数,进而减少模糊测试的次数,提高测试效率。

Description

智能合约的模糊测试方法、装置、设备、介质和程序产品
技术领域
本发明涉及信息安全技术领域和区块链技术领域,具体地涉及一种智能合约的模糊测试方法、装置、设备、介质和程序产品。
背景技术
智能合约作为区块链技术的代表应用,已广泛用在金融、供应链、物联网、公共服务等多个领域。智能合约的本质是一种能够自动运行在区块链上的计算机程序,一旦部署,便无法修改。近年,随着以以太坊为代表的智能合约的快速发展,智能合约已经管理了大量的数字资产,与此同时,智能合约漏洞频繁爆出,其安全问题备受关注。目前,常用的智能合约漏洞检测方法主要包括程序分析、形式化验证、符号执行及模糊测试。其中,模糊测试作为一种自动化漏洞检测方法已在传统软件测试领域彰显了其优势,但目前针对智能合约的模糊测试工具尚存在覆盖率不高、测试效率低等瓶颈。
发明内容
鉴于上述问题,本发明提供了一种智能合约的模糊测试方法、装置、设备、介质和程序产品。
根据本发明的第一个方面,提供了一种智能合约的模糊测试方法,其中,包括:
当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列;
在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例;
基于所述第一测试案例,执行模糊测试;
其中,至少一次构造所述最优交易序列,包括:
根据所述待测合约中的多个函数,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数,至少一条路径上的多个节点中的函数具有依赖关系;
基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。
根据本发明的实施例,所述根据所述待测合约中的多个函数,生成交易序列执行树,包括:
从所述待测合约的函数中确定出至少一个候选节点函数;
根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,并基于所述根节点逐层扩展子节点,以得到交易序列执行树。
根据本发明的实施例,所述根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,包括:
根据至少一个所述候选节点函数对区块链中永久存储的全局变量的读写情况,从至少一个所述候选节点函数中确定出所述根节点。
根据本发明的实施例,所述基于所述根节点逐层扩展子节点,以得到交易序列执行树,包括:
对于第n级节点,根据所述控制流图和所述调用图,分析第n级节点到所述候选节点函数中剩余函数的参数可达性和合约状态可达性;
当第n级节点到所述剩余函数中至少一者的参数可达性和合约状态可达性均满足可达性条件时,确定该函数为第n级节点的子节点;
其中,n为正整数。
根据本发明的实施例,所述基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列,包括:
在所述交易序列执行树的至少一级中,
计算每个节点当前的上限置信区间值,其中,该节点中的函数对测试覆盖率的贡献程度与该节点当前的上限置信区间值正相关,该节点中的函数已被选择构建所述最优交易序列的次数与该节点当前的上限置信区间值负相关;以及,
选择所述上限置信区间值最大的节点作为目标节点;
由选出的所述目标节点构成当前的所述最优交易序列。
根据本发明的实施例,当所述交易序列执行树的至少一级中所述上限置信区间值最大的节点为多个时,从所述上限置信区间值最大的多个节点中随机选择一个节点作为所述目标节点。
根据本发明的实施例,所述计算每个节点当前的上限置信区间值,包括:
根据每个节点当前的平均贡献程度、该节点已被选择构建最优交易序列的次数以及基于所述交易序列执行树已构造的最优交易序列的总数,计算该节点的上限置信区间值。
根据本发明的实施例,所述在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例,包括:
向当前的所述最优交易序列中的每个所述目标节点中填充交易参数;
基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例;其中,所述至少一次变异操作包括参数变异、交易序列变异及特殊值变异中的至少一种。
根据本发明的实施例,所述基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例,包括:
在指导变异模式下,从预设合约库中,获取与所述待测合约的合约类型相同的智能合约,以得到参考合约;
获取所述参考合约的漏洞特征,以得到目标漏洞特征;
在执行至少一次变异操作后,通过距离度量机制,计算生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏洞触发位置之间的距离;
当当前生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏洞触发位置之间的距离相较于前一次生成的所述第一测试案例发生下降时,基于当前生成的所述第一测试案例继续执行至少一次所述变异操作。
根据本发明的实施例,所述模糊测试方法还包括:
从互联网中获取候选合约;
根据获取到的所述候选合约的控制流图之间的相似性,对获取到的所述候选合约进行聚类,以得到所述预设合约库;
所述获取与所述待测合约的合约类型相同的智能合约,以得到参考合约,包括:
从所述预设合约库的多个簇类中,获取与所述待测合约的控制流图满足预设相似度的一者,以得到至少一个参考合约。
根据本发明的实施例,根据获取到的所述候选合约的控制流图之间的相似性,对获取到的所述候选合约进行聚类,以得到所述预设合约库,包括:
根据所述候选合约之间的指令相似性和跳转状态相似性,确定所述候选合约的控制流图之间的相似性。
根据本发明的实施例,所述基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例,包括:
在探索变异模式下,持续执行多次变异操作,直至达到变异终止条件,以生成多个所述第一测试案例。
根据本发明的实施例,所述交易序列变异包括:
在不改变全局变量读写依赖的基础上,改变所述最优交易序列中的函数调用关系。
根据本发明的实施例,所述模糊测试方法还包括:
从互联网中获取候选合约;
根据获取到的所述候选合约的控制流图之间的相似性,对获取到的候选合约进行聚类,以得到预设合约库,所述预设合约库中的每个簇类对应设置有该簇类的测试数据集;
当所述测试模式为单交易测试模式时,将所述待测合约与所述预设合约库中的多个簇类进行匹配,以得到目标簇类;
获取与所述目标簇类对应设置的所述测试数据集,以得到目标测试数据集;
根据所述目标测试数据集,对所述待测合约的函数进行变异,以生成第二测试案例;
基于所述第二测试案例,执行模糊测试。
根据本发明的实施例,所述模糊测试方法还包括:当所述测试模式为所述单交易测试模式时,
根据所述待测合约的合约接口的函数描述信息,随机生成测试数据,以得到第二目标测试数据集;
根据所述第二目标测试数据集,对所述待测合约的函数进行变异,以生成第三测试案例;
基于所述第三测试案例,执行模糊测试。
根据本发明的实施例,在每次执行模糊测试后,更新所述交易序列执行树的每个节点已被选择构建所述最优交易序列的次数;以及,
根据模糊测试的代码覆盖率和合约状态覆盖率,更新所述交易序列执行树的每个节点对测试覆盖率的贡献程度。
本发明的第二方面提供了一种智能合约的模糊测试装置,其中,包括:
第一处理模块,用于当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列;
第二处理模块,用于在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例;
第三处理模块,用于基于所述第一测试案例,执行模糊测试;
其中,第一处理模块包括第一处理单元和第二处理单元;
所述第一处理单元用于根据所述待测合约,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数;
所述第二处理单元用于基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。
本发明的第三方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得一个或多个处理器执行上述的模糊测试方法。
本发明的第四方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述的模糊测试方法。
本发明的第五方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述的模糊测试方法。
上述一个或多个实施例具有如下优点或益效果:
在本发明的实施例中,基于蒙特卡洛树搜索算法构造最优交易序列,具体而言,可以在其选择和扩展阶段,基于待测合约的函数之间的逻辑,构造交易序列执行树。在模拟和反馈阶段,基于交易序列执行树上每个节点中的函数已被选择构建最优交易序列的次数和其在过往测试过程中对测试覆盖率的贡献程度,选择当前的最优交易序列。其中,对测试覆盖率的贡献程度可以表征该节点中的函数在过往测试过程中的表现,例如,贡献程度越高,则基于该节点中的函数构建的最优交易序列的测试覆盖率越高。被选择构建最优交易序列的次数则可以作为选择最优交易序列的变异因子,通过这一变异因子,可以稀释贡献程度对最优交易序列选择的影响,从而使最优交易序列的选择能够朝向未知方向探索,例如,选择在过往测试过程中被选次数较少的节点中的函数,从而使得最优交易序列的选择,不仅考虑到对测试覆盖率的贡献程度(这可以提高测试深度),同时,还能兼顾向未知方向的探索能力(这可以提高测试广度)。
由此,本发明实施例基于蒙特卡洛树搜索算法构造的最优交易序列无论从测试广度还是测试深度方面,均优于传统方案,在达到相同测试覆盖率时,可以显著减少交易序列的生成次数,进而减少模糊测试的次数,提高测试效率。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本发明实施例的智能合约的模糊测试方法的应用场景图;
图2示意性示出了根据本发明实施例的智能合约的模糊测试方法的流程图之一;
图3示意性示出了根据本发明实施例的生成交易序列执行树的流程图;
图4示意性示出了根据本发明实施例的选择根节点的流程图;
图5示意性示出了根据本发明实施例的扩展子节点的流程图;
图6示意性示出了根据本发明实施例的获取最优交易序列的流程图;
图7示意性示出了根据本发明实施例的进行变异的流程图;
图8示意性示出了根据本发明实施例的进行指导变异的流程图;
图9示意性示出了根据本发明实施例的进行探索变异的流程图;
图10示意性示出了根据本发明实施例的获取参考合约的流程图;
图11示意性示出了根据本发明实施例的计算合约间相似性的流程图;
图12示意性示出了根据本发明实施例的调用关系变异的流程图;
图13示意性示出了根据本发明实施例的模糊测试的流程图之二;
图14示意性示出了根据本发明实施例的随机生成测试数据的流程图;
图15示意性示出了根据本发明实施例的对交易序列执行树进行更新的流程图;
图16示意性示出了根据本发明实施例的智能合约的模糊测试装置的结构框图;
图17示意性示出了根据本发明实施例的适于实现模糊测试方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本发明的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本发明的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本发明实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本发明。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
需要说明的是,本发明的实施例提供的一种智能合约的模糊测试方法、装置、电子设备、存储介质和程序产品,涉及信息安全技术领域和区块链技术领域。本发明的实施例提供的智能合约的模糊测试方法、装置、电子设备、存储介质和程序产品可应用于金融科技领域或者除金融科技领域之外的任意领域。本发明的实施例对智能合约的模糊测试方法、装置、电子设备、存储介质和程序产品的应用领域不做限定。
在本发明的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
在一对比例中,对智能合约的模糊测试一般依赖于随机生成的交易序列,由这些交易序列作为模糊测试的输入,以执行模糊测试。但是,随机生成的交易序列具有不定向性(例如生成重复或者无效的交易序列等),这就导致为达到预期测试覆盖率需要大量的交易序列,而这使得模糊测试的次数大大增加,测试覆盖率较低,同时,由于随机生成的交易序列的不定向性,其在测试深度方面的表现较差,因此,很难测试合约深层代码的问题。
有鉴于此,本发明的实施例提供了一种智能合约的模糊测试方法,其中,包括:当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列;在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例;基于所述第一测试案例,执行模糊测试;其中,至少一次构造所述最优交易序列,包括:根据所述待测合约中的多个函数,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数,至少一条路径上的多个节点中的函数具有依赖关系;基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。
在本发明的实施例中,基于蒙特卡洛树搜索算法构造最优交易序列,具体而言,可以在其选择和扩展阶段,基于待测合约的函数之间的逻辑,构造交易序列执行树。其中,待测合约可以是指一个智能合约或者多个智能合约,待测合约中存在依赖关系的多个函数可以是指一个合约下的多个函数或者跨合约调用的多个函数。该交易序列执行树可以包含待测合约中的各个函数的各种调用路径。在模拟和反馈阶段,基于交易序列执行树上每个节点中的函数已被选择构建最优交易序列的次数和其在过往测试过程中对测试覆盖率的贡献程度,选择当前的最优交易序列。其中,对测试覆盖率的贡献程度可以表征该节点中的函数在过往测试过程中的表现,例如,贡献程度越高,则基于该节点中的函数构建的最优交易序列的测试覆盖率越高。被选择构建最优交易序列的次数则可以作为选择最优交易序列的变异因子,通过这一变异因子,可以稀释贡献程度对最优交易序列选择的影响,从而使最优交易序列的选择能够朝向未知方向探索,例如,选择在过往测试过程中被选次数较少的节点中的函数,从而使得最优交易序列的选择,不仅考虑到对测试覆盖率的贡献程度(这可以提高测试深度),同时,还能兼顾向未知方向的探索能力(这可以提高测试广度)。
由此,相较于对比例中随机生成测试案例的方式而言,本发明实施例基于蒙特卡洛树搜索算法构造的最优交易序列无论从测试广度还是测试深度方面,均优于对比例,在达到相同测试覆盖率时,可以显著减少交易序列的生成次数,进而减少模糊测试的次数,提高测试效率。
图1示意性示出了根据本发明实施例的智能合约的模糊测试方法的应用场景图。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103、网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
需要说明的是,本发明实施例所提供的智能合约的模糊测试方法一般可以由服务器105执行。相应地,本发明实施例所提供的智能合约的模糊测试装置一般可以设置于服务器105中。本发明实施例所提供的智能合约的模糊测试方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本发明实施例所提供的智能合约的模糊测试装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以下将基于图1描述的场景,通过图2~图15对公开实施例的智能合约的模糊测试方法进行详细描述。
图2示意性示出了根据本发明实施例的智能合约的模糊测试方法的流程图之一。
如图2所示,该实施例的智能合约的模糊测试方法包括步骤S210~步骤S230,需要说明的是,虽然图2中的各步骤按照箭头的指示依次显示,但是,这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,图中的至少部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替的执行。
在步骤S210,当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列。
在本发明的实施例中,待测合约可以是一组智能合约,一组智能合约可以包括一个或多个智能合约。为了充分测试这一组智能合约,可以有两种测试模式。其中一种为只考虑单个函数调用的单交易测试模式(即一个函数一个函数的测试),具体地下文将会详细说明,故在此先不赘述。另一种为考虑多个存在顺序依赖的函数调用的交易序列测试模式(即多个函数调用链,多个函数可以来自同一合约,也可来自不同合约)。
至少一次构造最优交易序列,包括步骤S211和步骤S212。
在步骤S211,根据待测合约中的多个函数,生成交易序列执行树,交易序列执行树中的至少一个节点包括待测合约中的至少一个函数,至少一条路径上的多个节点中的函数具有依赖关系。
在本发明的实施例中,可以从待测合约(一个或多个智能合约中)获取具有先后依赖关系的多个函数,并基于执行逻辑构建交易序列执行树,例如,可以根据待测合约的控制流图和调用图构建交易序列执行树,确定根节点,进而,基于函数可达性和状态可达性逐层对子节点进行扩展,从而得到基于根节点和扩展的子节点所构成的交易序列执行树,或者也称为蒙特卡洛树。
在步骤S212,基于交易序列执行树中每个节点中的函数已被选择构建最优交易序列的次数和对测试覆盖率的贡献程度,从交易序列执行树中,选择至少一个节点,以构造当前的最优交易序列。
在本发明的实施例中,基于蒙特卡洛树搜索算法构造最优交易序列,具体而言,可以在其选择和扩展阶段,基于待测合约的函数之间的逻辑,构造交易序列执行树。其中,待测合约可以是指一个智能合约或者多个智能合约,待测合约中存在依赖关系的多个函数可以是指一个合约下的多个函数或者跨合约调用的多个函数。该交易序列执行树可以包含待测合约中的各个函数的各种调用路径。在模拟和反馈阶段,基于交易序列执行树上每个节点中的函数已被选择构建最优交易序列的次数和其在过往测试过程中对测试覆盖率的贡献程度,选择当前的最优交易序列。其中,对测试覆盖率的贡献程度可以表征该节点中的函数在过往测试过程中的表现,例如,贡献程度越高,则基于该节点中的函数构建的最优交易序列的测试覆盖率越高。被选择构建最优交易序列的次数则可以作为选择最优交易序列的变异因子,通过这一变异因子,可以稀释贡献程度对最优交易序列选择的影响,从而使最优交易序列的选择能够朝向未知方向探索,也即,例如,选择在过往测试过程中被选次数较少的节点中的函数,从而使得最优交易序列的选择,不仅考虑到对测试覆盖率的贡献程度(这可以提高测试深度),同时,还能兼顾向未知方向的探索能力(这可以提高测试广度)。
在步骤S220,在至少一次获取最优交易序列时,基于当前获取到的最优交易序列进行变异,以生成第一测试案例。
在本发明的实施例中,基于当前次获取的最优交易序列进行随机变异,从而用于探索未知漏洞,或者按照预设规则,进行指导变异,从而用于寻找已知漏洞。例如,对于某个待测合约,可以找到与待测合约类型相似的已公开智能合约,进而,根据该已公开智能合约的历史漏洞指导对该待测合约中的函数进行有针对性的变异,从而能够将变异方向聚焦到历史漏洞所在位置,也即,进行指导变异。
在步骤S230,基于第一测试案例,执行模糊测试。
在本发明的实施例中,若模糊测试过程中触发了预设的漏洞预言逻辑,则判断为有漏洞。否则,确定当前次模糊测试未发现漏洞。漏洞预言逻辑可以集成多种现有的漏洞预言机制,形成全面的漏洞检测逻辑,覆盖更多的漏洞类型,也可支持扩展自定义漏洞预言。
在本发明的实施例中,可以基于当前次模糊测试的结果,维护交易序列执行树中被选择的节点中的函数,例如,更新该节点的函数的对测试覆盖率的贡献程度以及该函数被选择构建最优交易序列的次数等,这一过程或也称为蒙特卡洛树搜索算法中的模拟和反馈阶段。
由此,相较于对比例中随机生成测试案例的方式而言,本发明实施例基于蒙特卡洛树搜索算法构造的最优交易序列无论从测试广度还是测试深度方面,均优于对比例,在达到相同测试覆盖率时,可以显著减少交易序列的生成次数,进而减少模糊测试的次数,提高测试效率。
下面结合图2至图15对本发明实施例的智能合约的模糊测试方法进行进一步的说明。
图3示意性示出了根据本发明实施例的生成交易序列执行树的流程图。
参见图3,在一些具体实施例中,步骤S211包括步骤S2111和步骤S2112。
在步骤S2111,从待测合约的函数中确定出至少一个候选节点函数。
在步骤S2112,根据待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,并基于根节点逐层扩展子节点,以得到交易序列执行树。
在本发明的实施例中,控制流图和调用图可以通过静态分析方式对待测合约进行解析得到。静态分析是一种在不运行待测合约的前提下对待测合约进行分析的方法。静态分析可以由人工完成,也可以由计算机软件或硬件实现。本发明对静态分析的具体实现方法不做限定。
在本发明的实施例中,可以通过多种方式对待测合约进行静态分析。例如,可以直接分析待测合约的源码。又如,可以对待测合约进行编译,分析编译后生成的文件。编译过程通常会生成中间文件和二进制文件。在一些实施例中,可以对编译后生成的中间文件进行分析。通常而言,不同的编程语言使用相同的编译器,编译得到的中间文件形式相同或类似。因此,分析编译后生成的中间文件,可以适用于多种编程语言,通用性强。
通过对程序进行静态分析,可以生成待测合约的调用图和控制流图。调用图可以表示待测合约中函数之间的调用关系。控制流图可以表示待测合约中所有可能执行的分支信息。
根据前文的介绍可知,一个待测合约可能包含多个函数。通过生成调用图,可以确认函数之间的调用关系,从而便于生成交易序列执行树。
图4示意性示出了根据本发明实施例的选择根节点的流程图。
参见图4,在一些具体实施例中,步骤S2112包括步骤S21121。
在步骤S21121,根据至少一个候选节点函数对区块链中永久存储的全局变量的读写情况,从至少一个候选节点函数中确定出根节点。
例如,可以获取待测合约中全部的函数作为候选节点函数,进而,可以分析各个函数对区块链中永久存储的全局变量的读写情况,选择不存在全局变量读写顺序依赖的函数,作为候选头部函数,进而构成候选头部函数集合。进而,可以以头部函数集合中的函数作为交易序列执行树的根节点,逐层扩展子节点,以得到交易序列执行树。
图5示意性示出了根据本发明实施例的扩展子节点的流程图。
参见图5,在一些具体实施例中,步骤S2112包括步骤S2112a和步骤S2112b。
在步骤S2112a,对于第n级节点,根据控制流图和调用图,分析第n级节点到候选节点函数中剩余函数的参数可达性和合约状态可达性。
在步骤S2112b,当第n级节点到剩余函数中至少一者的参数可达性和合约状态可达性均满足可达性条件时,确定该函数为第n级节点的子节点。否则,确定第n级节点没有子节点。其中,n为正整数。
在本发明的实施例中,交易序列执行树的第n级也可称为交易序列执行树的第n层,第n级节点可以是指交易序列执行树一层中的某一个节点。对于交易序列执行树的每一层,对该层中的每个节点均执行上述的步骤S2112a和步骤S2112b,以确定该一层每个节点的扩展子节点。
下面以根节点为例,对逐层扩展子节点进行说明。首先,可以遍历候选节点函数中除被选为根节点外的剩余函数,通过控制流图和调用图分析根节点到这些剩余函数的参数可达性和合约状态可达性,若存在函数同时满足这两种可达性条件,则将该函数作为根节点的候选一级子节点,加入候选一级子节点集合。同理,根据所选根节点和一级子节点,确定二级子节点集合。依次类推,直至再无可增加的子节点,则完成本次交易序列执行树的构建。
在交易序列执行树构建完成后,在交易序列执行树的每个函数节点实时维护函数被选择构建交易序列执行树的次数、函数被选择构建交易序列执行树时,对测试覆盖率的贡献程度,以及当前的合约状态等。
图6示意性示出了根据本发明实施例的获取最优交易序列的流程图。
参见图6,在一些具体实施例中,步骤S212包括对交易序列执行树的至少一级执行的步骤S2121和步骤S2122,以及在此之后的步骤S2123。
在步骤S2121,计算每个节点当前的上限置信区间值,其中,该节点中的函数对测试覆盖率的贡献程度与该节点当前的上限置信区间值正相关,该节点中的函数已被选择构建最优交易序列的次数与该节点当前的上限置信区间值负相关。
在本发明的实施例中,可以在交易序列执行树的每一级,计算该级中全部节点的上限置信区间值。对测试覆盖率的贡献程度可以表征该节点中的函数在过往模糊测试过程中的表现,例如,贡献程度越高,则基于该节点中的函数构建的最优交易序列的测试覆盖率越高,在本发明的实施例中,节点中的函数对测试覆盖率的贡献程度与该节点当前的上限置信区间值正相关,这样,在下一次构建最优交易序列时,可以优先选择贡献程度较高的节点,而这有利于提升测试深度。被选择构建最优交易序列的次数则可以作为选择最优交易序列的变异因子,通过这一变异因子,可以稀释贡献程度对最优交易序列选择的影响,从而使最优交易序列的选择能够朝向未知方向探索,也即,例如,选择在过往模糊测试过程中被选次数较少的节点中的函数,从而使得最优交易序列的选择,不仅考虑到对测试覆盖率的贡献程度,同时,还能兼顾向未知方向的探索能力。在本发明的实施例中,节点中的函数已被选择构建最优交易序列的次数与该节点当前的上限置信区间值负相关,这样,在下一次构建最优交易序列时,可以在优先选择贡献程度较高的节点的同时,优先选择被选择构建最优交易序列次数较少的节点,而这有利于提升测试广度。
在一些具体实施例中,步骤S2121包括:根据每个节点当前的平均贡献程度、该节点已被选择构建最优交易序列的次数以及基于交易序列执行树已构造的最优交易序列的总数,计算该节点的上限置信区间值。
在本发明的实施例中,在每次基于交易序列执行树构造最优交易序列后,可以以该交易序列执行树为统计维度,统计对当前已构造的最优交易序列的总数。该总数是随着模糊测试轮次的变化,数值也在增加。例如,每构造一次最优交易序列,则对交易序列执行树上的相应节点的被选择构建最优交易序列的次数和基于该交易序列执行树当前已构造的最优交易序列的总数进行更新,并展开新一次模糊测试;进而根据模糊测试结果,反馈交易序列执行树上的相应节点对覆盖率的贡献程度以及被选择构建最优交易序列的次数。之后,根据更新后的交易序列执行树,再构造一次最优交易序列,从而再进行一次模糊测试,以此类推,直至达到收敛条件,例如测试覆盖率或测试次数达到预期值等。
在一些具体实施例中,可以通过如下公式计算上限置信区间值
Figure SMS_1
Figure SMS_2
(1)
其中,
Figure SMS_3
表示节点i的平均贡献程度(交易序列执行树中每个节点有一个唯一编号i,i为正整数),c为常数,N为基于交易序列执行树当前已构造的最优交易序列的总数,
Figure SMS_4
为节点i被选择构建最优交易序列的次数。
需要说明的是,同一个函数可能在交易序列执行树中重复出现,重复出现则视为不同节点,通过唯一编号来区分。
在步骤S2122,选择上限置信区间值最大的节点作为目标节点。
在步骤S2123,由选出的目标节点构成最优交易序列。
在本发明的实施例中,在最优交易序列构造完成后,可以对交易序列执行树进行维护,以更新上述的至少部分参数,例如被选择构建最优交易序列的次数等。
通过这种方式构建的最优交易序列,利用了上限置信区间值,从而不仅考虑了节点对测试覆盖率的贡献程度,以优选对测试覆盖率的贡献程度的节点来构建最优交易序列,同时,还考虑到了节点中的函数已被选择构建最优交易序列的次数,这样,可以适当倾向于选择之前未被选择过的节点。
在一些具体实施例中,当交易序列执行树的至少一级中上限置信区间值最大的节点为多个时,从上限置信区间值最大的多个节点中随机选择一个节点作为目标节点。换句话说,在交易序列执行树的至少一级中,当多个节点的上限置信区间值是同级节点中最大的且多个节点的上限置信区间值相同时,可以从该多个节点中随机选择一者作为目标节点。这样,在第一次构建最优交易序列时,对于位于交易序列执行树同一级中的两个节点A1和A2,当二者的上限置信区间值是同级节点中最大的,且二者完全相同,那么,则是完全随机地从两个节点A1和节点A2中选择一者(例如选择节点A1),并构建最优交易序列,以及执行模糊测试。在第二次构建最优交易序列时,由于上限置信区间值与该节点中的函数已被选择构建所述最优交易序列的次数负相关,因此,此时节点A2的上限上置信区间值可能更大(具体还需结合对测试覆盖率的贡献程度),故,第二次构建最优交易序列可能会倾向于选择节点A2,从而使第二次构建的最优交易序列与第一次不同,进而扩展测试广度。
在本发明的实施例中,在最优交易序列构造完成后,可以向最优交易序列中每个函数填充具体交易参数,从而得到最终的最优交易序列。
在一些具体实施例中,可以获取与待测合约类型相似的已公开合约,进而,根据已公开合约的公开测试数据或者常用测试数据,为函数填充具体交易参数。可选地,合约的相似度可以根据合约的控制流图的相似度确定,从而有利于更好地测试已知漏洞。
在另一些实施例中,还可以根据合约接口(例如ABI)中函数的描述信息,在符合参数类型的合理范围值内随机生成测试数据,从而有利于对未知漏洞进行探索。
在另一些实施例中,对于智能合约中一些特殊类型的参数,如交易发送者地址表单(form)、燃料代币上限(gasLimit)、燃料代币价格(gasPrice)、交易发送的以太币数量(Value)等信息可以采用现有经验值,从而避免随机生成参数导致交易无效或无法执行到合约深层次代码。其中,交易地址信息可以主要从爬取的公开合约地址构成的地址池中随机选择。
在本发明的实施例中,在获取到填充参数后的最优交易序列后,可以直接作为一项测试案例进行模糊测试,可选地,在获取到测试结果后,更新交易序列执行树的每个节点的函数被选择构建交易序列执行树的次数、函数被选择构建交易序列执行树时对测试覆盖率的贡献程度,以及当前的合约状态等,具体可以根据实际需要确定,在此不作限制。其中,贡献程度可以根据代码覆盖率以及合约状态覆盖率来计算。
图7示意性示出了根据本发明实施例的进行变异的流程图。
参见图7,在一些具体实施例中,步骤S220包括步骤S221和步骤S222。
在步骤S221,向当前的最优交易序列中的每个目标节点中填充交易参数。
在步骤S222,基于填充交易参数后的最优交易序列,执行至少一次变异操作,以生成至少一个第一测试案例。其中,至少一次变异操作包括参数变异、交易序列变异及特殊值变异中的至少一种。
在本发明的实施例中,在生成第一测试案例后,可以根据模糊测试的测试结果选择是否进行进一步变异,例如,可以在生成的第一测试案例较上一次生成的第一测试案例的测试覆盖率更佳时,继续进一步地变异,否则,则停止基于该第一测试案例的变异。
图8示意性示出了根据本发明实施例的进行指导变异的流程图。
参见图8,在一些具体实施例中,步骤S222包括步骤S2221至步骤S2224。
在步骤S2221,在指导变异模式下,从预设合约库中,获取与待测合约的合约类型相同的智能合约,以得到参考合约。
在本发明的实施例中,考虑到相同类型的智能合约,其触发漏洞的位置和触发漏洞的类型可能十分相似,所以预先建立预设合约库,预设合约库可以根据智能合约的类型对已公开智能合约进行分类,合约特征库可以根据智能合约的类型提取合约代码特征形成不同类型合约的代码特征规则,进一步得到不同类型合约的攻击面,从而设计更具针对性的模糊测试策略,提高合约漏洞发现效率。
图9示意性示出了根据本发明实施例的进行探索变异的流程图。
参见图9,在一些具体实施例中,步骤S222包括步骤S2225。
在步骤S2225,在探索变异模式下,持续执行多次变异操作,直至达到变异终止条件,以生成多个所述第一测试案例。
例如,变异终止条件可以是指执行变异操作的次数,或者执行变异操作的总时间,当二者之一或者二者同时达到预设阈值时,可以认为达到变异终止条件。
可选地,在本发明的实施例中,指导变异模式和探索变异模式可以通过修改预设参数进行切换,从而可以根据实际需要选择相应的变异模式。
在本发明的实施例中,指导变异模式可以用于快速发现已知漏洞,而探索变异模式可以用于探索未知漏洞,从而进一步提升测试广度。
可选地,在本发明的实施例中,可以采用上述的指导变异和自有变异的结合方式生成第一测试案例,从而同时提升测试广度和测试深度。
图10示意性示出了根据本发明实施例的获取参考合约的流程图。
参见图10,在一些具体实施例中,模糊测试方法还包括步骤S310和步骤S320。
在步骤S310,从互联网中获取候选合约。
在步骤S320,根据获取到的候选合约的控制流图之间的相似性,对获取到的候选合约进行聚类,以得到预设合约库。
在本发明的实施例中,可以利用网络爬取的方式获得大量已公开智能合约源码及其地址,通过静态分析得到这些智能合约的控制流图,进而,根据控制流图的相似性和合约账户的交易特征相似性对合约进行聚类,以形成预设合约库。
图11示意性示出了根据本发明实施例的计算合约间相似性的流程图。
参见图11,在一些具体实施例中,步骤S320包括步骤S321。
在步骤S321,根据候选合约之间的指令相似性和跳转状态相似性,确定候选合约的控制流图之间的相似性。通过这两种相似性特征,可以精确快速地分析两个候选合约之间是否相似,进而有利于合约库的构建和实时更新。
在本发明的实施例中,根据智能合约中的指令相似性和跳转状态相似性两方面来计算控制流图的相似性,例如,可以通过以下公式计算控制流图的相似性Sim(CFG):
Figure SMS_5
(2)
其中,Sim(Node)表征智能合约中的指令相似性,Sim(Edge)表征跳转状态相似性,
Figure SMS_6
和/>
Figure SMS_7
为预设系数。
此外,根据不同类型合约历史漏洞特征,还可以在预设合约库中加入漏洞特征,漏洞特征包括该类型智能合约常触发的漏洞类型及漏洞触发位置。
在一些具体实施例中,步骤S2221包括步骤S2221a。
在步骤S2221a,从预设合约库的多个簇类中,获取与待测合约的控制流图满足预设相似度的一者,以得到至少一个参考合约。
这样,可以为待测合约从预设合约库中找到与其类型相似的智能合约,进而基于找到的智能合约的常见漏洞,进行指导变异。需要说明的是,控制流图的相似度计算可以参见上述实施例中,故在此不再赘述。
在步骤S2222,获取参考合约的漏洞特征,以得到目标漏洞特征。目标漏洞特征可以是指参考合约的常见漏洞特征。
在步骤S2223,在执行至少一次变异操作后,通过距离度量机制,计算生成的第一测试案例所覆盖的代码位置与目标漏洞特征中的漏洞触发位置之间的距离。
在步骤S2224,当当前生成的第一测试案例所覆盖的代码位置与目标漏洞特征中的漏洞触发位置之间的距离相较于前一次生成的第一测试案例发生下降时,基于当前生成的第一测试案例继续执行至少一次变异操作。否则停止基于当前生成的第一测试案例继续执行变异操作。
在本发明的实施例中,通过步骤S2221至步骤S2224执行的变异过程也可称为指导变异过程,指导变异过程通过先判断待测合约的类型,利用该类型合约的历史漏洞特征指导变异过程,从而提高发现漏洞的效率。
变异操作至少包括三个方面的变异操作,分别为函数参数变异、交易序列变异及特殊值变异。
其中,在函数参数变异中,可以采用AFL中位翻转、字节翻转、随机加减的方式对原始值进行变异,但要保证变异后的值在参数类型合法范围内。
图12示意性示出了根据本发明实施例的调用关系变异的流程图。
参见图12,在一些具体实施例中,交易序列变异包括步骤S22241。
在步骤S22241,在不改变全局变量读写依赖的基础上,改变所述最优交易序列中的函数调用关系。
在本发明的实施例中,交易序列变异可以用于交易序列测试模式,在不改变全局变量读写依赖的基础上,改变所述最优交易序列中的函数调用关系可以是指,在不影响全局变量读写依赖的基础上打乱原始交易的函数调用顺序。或者随机替换、插入、删除某个交易函数。或者随机选择两个交易序列的子序列进行拼接。由此,本发明的实施例不仅对参数进行变异,同时还能对待测合约中函数的调用关系进行变异,从而扩展变异广度。
在特殊值变异中,特殊值主要包括智能合约特有参数,如交易发送者地址表单、燃料代币上限、燃料代币价格、交易发送的以太币数量等。其中,地址采用枚举方式,枚举地址池中的合法值。燃料代币上限和燃料代币价格则根据可以在实际有效值区间随机采样。以太币数量则每次根据智能合约的状态,实时随机生成一个有效值。
在每次变异完成后,在测试时,待测合约可以执行到不同的代码位置,由此,可以通过距离度量机制计算当前的智能合约状态及覆盖到的代码位置与漏洞特征中漏洞触发位置之间的距离,目的是最小化漏洞触发距离,例如,使在测试过程中,待测合约可以执行到的代码行与漏洞触发行接近。因此,若变异操作使得待测合约执行到的代码行距离漏洞触发位置距离缩小,则在当前的第一测试案例上继续深入变异,否则则放弃对当前的第一测试案例的继续变异。
在本发明的实施例中距离度量机制度量的可以包括代码行位置之间的距离,也可以包括在控制流图和调用图中,当前测试案例已到达的位置与漏洞触发目标位置之间的距离。
图13示意性示出了根据本发明实施例的模糊测试的流程图之二。
参见图13,在一些具体实施例中,模糊测试方法还包括步骤S410至步骤S460。
在步骤S410,从互联网中获取候选合约。
在步骤S420,根据获取到的候选合约的控制流图之间的相似性,对获取到的候选合约进行聚类,以得到预设合约库,预设合约库中的每个簇类对应设置有该簇类的测试数据集。
在本发明的实施例中,单交易测试模式只考虑单个合约函数中单个函数。在该模式下,可以根据合约函数的参数类型、参数个数来构造第二测试案例。具体地,测试数据的构造主要通过以下方式:
在步骤S430,当测试模式为单交易测试模式时,将待测合约与预设合约库中的多个簇类进行匹配,以得到目标簇类,否则结束步骤S430。
在步骤S440,获取与目标簇类对应设置的测试数据集,以得到目标测试数据集。
在步骤S450,根据目标测试数据集,对待测合约的函数进行变异,以生成第二测试案例。
在步骤S460,基于第二测试案例,执行模糊测试。
图14示意性示出了根据本发明实施例的随机生成测试数据的流程图。
参见图14,在另一些实施例中,模糊测试方法还包括:当测试模式为单交易测试模式时,执行步骤S510至步骤S530。
在步骤S510,根据待测合约的合约接口的函数描述信息,随机生成测试数据,以得到第二目标测试数据集。
在步骤S520,根据第二目标测试数据集,对待测合约的函数进行变异,以生成第三测试案例。
在步骤S530,基于第三测试案例,执行模糊测试。
在本发明的实施例中,可以通过ABI获取函数描述信息,进而,在符合参数类型的合理范围值内随机生成测试数据。其中,ABI是合约接口的JSON表示,可以包括变量、事件和可以调用的方法。通过这种方式,可以以完全随机(相对于前文中通过匹配合约类型的方式)生成测试数据,从而扩大测试数据范围,覆盖未知方向。
在另一些实施例中,对于智能合约中一些特殊类型的参数,如交易发送者地址表单、燃料代币上限、燃料代币价格、交易发送的以太币数量等信息可以采用现有经验值,从而避免随机生成参数导致交易无效或无法执行到合约深层次代码。其中,交易地址信息可以主要从爬取的公开合约地址构成的地址池中随机选择。
图15示意性示出了根据本发明实施例的对交易序列执行树进行更新的流程图。
参见图15,在一些具体实施例中,模糊测试方法还包括在每次执行模糊测试后,执行步骤S610和步骤S620。
在步骤S610,更新交易序列执行树的每个节点已被选择构建最优交易序列的次数。
在步骤S620,根据模糊测试的代码覆盖率和合约状态覆盖率,更新交易序列执行树的每个节点对测试覆盖率的贡献程度。
通过这种方式,可以在每次模糊测试后,根据模糊测试的结果,维护交易序列执行树中各节点中的函数的信息,也即更新该函数的覆盖率贡献程度以及该函数被选择构建最优交易序列的次数等,从而使得下一次最优交易序列构建过程中对节点的选择,能够充分考虑历史构建的最优交易序列。
例如,每构造一次最优交易序列,则对交易序列执行树上的相应节点进行更新,并展开一次模糊测试;进而根据测试结果,反馈更新交易序列执行树上的相应节点。之后,根据更新后的交易序列执行树,再构造一次最优交易序列,从而再进行一次模糊测试,以此类推。
本发明的实施例提出了一种智能合约的模糊测试方法,该方法同时支持单交易测试模式和交易序列测试模式,对于交易序列测试模式,可以通过结合静态分析(控制流图和调用图)和蒙特卡洛树搜索算法构造最优交易序列,提高模糊测试的测试广度和测试深度。此外,该方法通过预设不同类型合约的预设合约库,根据合约类型的漏洞特征指导模糊测试变异过程,能够更高效地发现合约漏洞。
基于上述的智能合约的模糊测试方法,本发明还提供了一种智能合约的模糊测试装置。以下将结合图16对该装置进行详细描述。
图16示意性示出了根据本发明实施例的智能合约的模糊测试装置的结构框图。
如图16所示,该实施例的模糊测试装置1000包括第一处理模块1010、第二处理模块1020和第三处理模块1030,第一处理模块1010包括第一处理单元1011和第二处理单元1012。
第一处理模块1010用于当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列。在一实施例中,第一处理模块1010可以用于执行前文描述的步骤S210,在此不再赘述。
第二处理模块1020用于在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例。在一实施例中,第二处理模块1020可以用于执行前文描述的步骤S220,在此不再赘述。
第三处理模块1030用于基于所述第一测试案例,执行模糊测试。在一实施例中,第三处理模块1030可以用于执行前文描述的步骤S230,在此不再赘述。
其中,第一处理单元1011用于根据所述待测合约,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数。在一实施例中,第一处理单元1011可以用于执行前文描述的步骤S211,在此不再赘述。
第二处理单元1012用于基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。在一实施例中,第二处理单元1012可以用于执行前文描述的步骤S212,在此不再赘述。
根据本发明的实施例,第一处理模块1010、第二处理模块1020和第三处理模块1030中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,第一处理模块1010、第二处理模块1020和第三处理模块1030中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,第一处理模块1010、第二处理模块1020和第三处理模块1030中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
在本发明的实施例中,基于蒙特卡洛树搜索算法构造最优交易序列,具体而言,可以在其选择和扩展阶段,基于待测合约的函数之间的逻辑,构造交易序列执行树。其中,待测合约可以是指一个智能合约或者多个智能合约,待测合约中存在依赖关系的多个函数可以是指一个合约下的多个函数或者跨合约调用的多个函数。该交易序列执行树可以包含待测合约中的各个函数的各种调用路径。在模拟和反馈阶段,基于交易序列执行树上每个节点中的函数已被选择构建最优交易序列的次数和其在过往测试过程中对测试覆盖率的贡献程度,选择当前的最优交易序列。其中,对测试覆盖率的贡献程度可以表征该节点中的函数在过往测试过程中的表现,例如,贡献程度越高,则基于该节点中的函数构建的最优交易序列的测试覆盖率越高。被选择构建最优交易序列的次数则可以作为选择最优交易序列的变异因子,通过这一变异因子,可以稀释贡献程度对最优交易序列选择的影响,从而使最优交易序列的选择能够朝向未知方向探索,也即,例如,选择在过往测试过程中被选次数较少的节点中的函数,从而使得最优交易序列的选择,不仅考虑到对测试覆盖率的贡献程度(这可以提高测试深度),同时,还能兼顾向未知方向的探索能力(这可以提高测试广度)。
由此,相较于对比例中随机生成测试案例的方式而言,本发明实施例基于蒙特卡洛树搜索算法构造的最优交易序列无论从测试广度还是测试深度方面,均优于对比例,在达到相同测试覆盖率时,可以显著减少交易序列的生成次数,进而减少模糊测试的次数,提高测试效率。
在一些具体实施例中,第一处理单元1011具体可以用于执行以下步骤:
从待测合约的函数中确定出至少一个候选节点函数。
根据待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,并基于根节点逐层扩展子节点,以得到交易序列执行树。
在一些具体实施例中,第一处理单元1011具体可以用于执行以下步骤:
根据至少一个候选节点函数对区块链中永久存储的全局变量的读写情况,从至少一个候选节点函数中确定出根节点。
在一些具体实施例中,第一处理单元1011具体可以用于执行以下步骤:
对于第n级节点,根据控制流图和调用图,分析第n级节点到候选节点函数中剩余函数的参数可达性和合约状态可达性。
当第n级节点到剩余函数中至少一者的参数可达性和合约状态可达性均满足可达性条件时,确定该函数为第n级节点的子节点。
其中,n为正整数。
在一些具体实施例中,第二处理单元1012具体可以用于执行以下步骤:
在交易序列执行树的至少一级中,
计算每个节点当前的上限置信区间值,其中,该节点中的函数对测试覆盖率的贡献程度与该节点当前的上限置信区间值正相关,该节点中的函数已被选择构建最优交易序列的次数与该节点当前的上限置信区间值负相关。以及,
选择上限置信区间值最大的节点作为目标节点。
由选出的目标节点构成当前的最优交易序列。
在一些具体实施例中,当交易序列执行树的至少一级中上限置信区间值最大的节点为多个时,从上限置信区间值最大的多个节点中随机选择一个节点作为目标节点。
在一些具体实施例中,第二处理单元1012具体可以用于执行以下步骤:
根据每个节点当前的平均贡献程度、该节点已被选择构建最优交易序列的次数以及基于交易序列执行树已构造的最优交易序列的总数,计算该节点的上限置信区间值。
在一些具体实施例中,第二处理模块1020具体可以用于执行以下步骤:
向当前的最优交易序列中的每个目标节点中填充交易参数。
基于填充交易参数后的最优交易序列,执行至少一次变异操作,以生成至少一个第一测试案例。其中,至少一次变异操作包括参数变异、交易序列变异及特殊值变异中的至少一种。
在一些具体实施例中,第二处理模块1020具体可以用于执行以下步骤:
在指导变异模式下,从预设合约库中,获取与待测合约的合约类型相同的智能合约,以得到参考合约。
获取参考合约的漏洞特征,以得到目标漏洞特征。
在执行至少一次变异操作后,通过距离度量机制,计算生成的第一测试案例所覆盖的代码位置与目标漏洞特征中的漏洞触发位置之间的距离。
当当前生成的第一测试案例所覆盖的代码位置与目标漏洞特征中的漏洞触发位置之间的距离相较于前一次生成的第一测试案例发生下降时,基于当前生成的第一测试案例继续执行至少一次变异操作。
在一些具体实施例中,模糊测试装置还包括第四处理模块,第四处理模块可以用于执行以下步骤:
从互联网中获取候选合约。
根据获取到的候选合约的控制流图之间的相似性,对获取到的候选合约进行聚类,以得到预设合约库。
获取与待测合约的合约类型相同的智能合约,以得到参考合约,包括:
从预设合约库的多个簇类中,获取与待测合约的控制流图满足预设相似度的一者,以得到至少一个参考合约。
在一些具体实施例中,第四处理模块具体可以用于执行以下步骤:
根据候选合约之间的指令相似性和跳转状态相似性,确定候选合约的控制流图之间的相似性。
在一些具体实施例中,第二处理模块1020具体可以用于执行以下步骤:
在探索变异模式下,持续执行多次变异操作,直至达到变异终止条件,以生成多个第一测试案例。
在一些具体实施例中,第二处理模块1020具体可以用于执行以下步骤:
在不改变全局变量读写依赖的基础上,改变最优交易序列中的函数调用关系。
在一些具体实施例中,模糊测试装置还包括第五处理模块,第五处理模块可以用于执行以下步骤:
从互联网中获取候选合约。
根据获取到的候选合约的控制流图之间的相似性,对获取到的候选合约进行聚类,以得到预设合约库,预设合约库中的每个簇类对应设置有该簇类的测试数据集。
当测试模式为单交易测试模式时,将待测合约与预设合约库中的多个簇类进行匹配,以得到目标簇类。
获取与目标簇类对应设置的测试数据集,以得到第一目标测试数据集。
根据第一目标测试数据集,对待测合约的函数进行变异,以生成第二测试案例。
基于第二测试案例,执行模糊测试。
在一些具体实施例中,模糊测试装置还包括第六处理模块,第六处理模块可以用于执行以下步骤:
当测试模式为单交易测试模式时,
根据待测合约的合约接口的函数描述信息,随机生成测试数据,以得到第二目标测试数据集。
根据第二目标测试数据集,对待测合约的函数进行变异,以生成第三测试案例。
基于第三测试案例,执行模糊测试。
在一些具体实施例中,模糊测试装置还包括第七处理模块,第七处理模块可以用于执行以下步骤:
在每次执行模糊测试后,更新交易序列执行树的每个节点已被选择构建最优交易序列的次数。以及,
根据模糊测试的代码覆盖率和合约状态覆盖率,更新交易序列执行树的每个节点对测试覆盖率的贡献程度。
图17示意性示出了根据本发明实施例的适于实现模糊测试方法的电子设备的方框图。
如图17所示,根据本发明实施例的电子设备1100包括处理器1101,其可以根据存储在只读存储器(ROM)1102中的程序或者从存储部分1108加载到随机访问存储器(RAM)1103中的程序而执行各种适当的动作和处理。处理器1101例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器1101还可以包括用于缓存用途的板载存储器。处理器1101可以包括用于执行根据本发明实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 1103中,存储有电子设备1100操作所需的各种程序和数据。处理器 1101、ROM 1102以及RAM 1103通过总线1104彼此相连。处理器1101通过执行ROM 1102和/或RAM1103中的程序来执行根据本发明实施例的方法流程的各种操作。需要注意,程序也可以存储在除ROM 1102和RAM 1103以外的一个或多个存储器中。处理器1101也可以通过执行存储在一个或多个存储器中的程序来执行根据本发明实施例的方法流程的各种操作。
根据本发明的实施例,电子设备1100还可以包括输入/输出(I/O)接口1105,输入/输出(I/O)接口1105也连接至总线1104。电子设备1100还可以包括连接至I/O接口1105的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1106。包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1107。包括硬盘等的存储部分1108。以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至I/O接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
本发明还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的。也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本发明实施例的模糊测试方法。
根据本发明的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本发明的实施例,计算机可读存储介质可以包括上文描述的ROM 1102和/或RAM 1103和/或ROM 1102和RAM 1103以外的一个或多个存储器。
本发明的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本发明实施例所提供的模糊测试方法。
在该计算机程序被处理器1101执行时执行本发明实施例的系统/装置中限定的上述功能。根据本发明的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1109被下载和安装,和/或从可拆卸介质1111被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被处理器1101执行时,执行本发明实施例的系统中限定的上述功能。根据本发明的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本发明的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本发明实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本发明的各个实施例中记载的特征可以进行多种组合或结合,即使这样的组合或结合没有明确记载于本发明中。特别地,在不脱离本发明精神和教导的情况下,本发明的各个实施例中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本发明的范围。
以上对本发明的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本发明的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。不脱离本发明的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本发明的范围之内。

Claims (20)

1.一种智能合约的模糊测试方法,其特征在于,包括:
当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列;
在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例;
基于所述第一测试案例,执行模糊测试;
其中,至少一次构造所述最优交易序列,包括:
根据所述待测合约中的多个函数,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数,至少一条路径上的多个节点中的函数具有依赖关系;
基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。
2.根据权利要求1所述的模糊测试方法,其特征在于,所述根据所述待测合约中的多个函数,生成交易序列执行树,包括:
从所述待测合约的函数中确定出至少一个候选节点函数;
根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,并基于所述根节点逐层扩展子节点,以得到交易序列执行树。
3.根据权利要求2所述的模糊测试方法,其特征在于,所述根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,包括:
根据至少一个所述候选节点函数对区块链中永久存储的全局变量的读写情况,从至少一个所述候选节点函数中确定出所述根节点。
4.根据权利要求2所述的模糊测试方法,其特征在于,所述基于所述根节点逐层扩展子节点,以得到交易序列执行树,包括:
对于第n级节点,根据所述控制流图和所述调用图,分析第n级节点到所述候选节点函数中剩余函数的参数可达性和合约状态可达性;
当第n级节点到所述剩余函数中至少一者的参数可达性和合约状态可达性均满足可达性条件时,确定该函数为第n级节点的子节点;
其中,n为正整数。
5.根据权利要求1所述的模糊测试方法,其特征在于,所述基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列,包括:
在所述交易序列执行树的至少一级中,
计算每个节点当前的上限置信区间值,其中,该节点中的函数对测试覆盖率的贡献程度与该节点当前的上限置信区间值正相关,该节点中的函数已被选择构建所述最优交易序列的次数与该节点当前的上限置信区间值负相关;以及,
选择所述上限置信区间值最大的节点作为目标节点;
由选出的所述目标节点构成当前的所述最优交易序列。
6.根据权利要求5所述的模糊测试方法,其特征在于,当所述交易序列执行树的至少一级中所述上限置信区间值最大的节点为多个时,从所述上限置信区间值最大的多个节点中随机选择一个节点作为所述目标节点。
7.根据权利要求5所述的模糊测试方法,其特征在于,所述计算每个节点当前的上限置信区间值,包括:
根据每个节点当前的平均贡献程度、该节点已被选择构建最优交易序列的次数以及基于所述交易序列执行树已构造的最优交易序列的总数,计算该节点的上限置信区间值。
8.根据权利要求5所述的模糊测试方法,其特征在于,所述在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例,包括:
向当前的所述最优交易序列中的每个所述目标节点中填充交易参数;
基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例;其中,所述至少一次变异操作包括参数变异、交易序列变异及特殊值变异中的至少一种。
9.根据权利要求8所述的模糊测试方法,其特征在于,所述基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例,包括:
在指导变异模式下,从预设合约库中,获取与所述待测合约的合约类型相同的智能合约,以得到参考合约;
获取所述参考合约的漏洞特征,以得到目标漏洞特征;
在执行至少一次变异操作后,通过距离度量机制,计算生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏洞触发位置之间的距离;
当当前生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏洞触发位置之间的距离相较于前一次生成的所述第一测试案例发生下降时,基于当前生成的所述第一测试案例继续执行至少一次所述变异操作。
10.根据权利要求9所述的模糊测试方法,其特征在于,所述模糊测试方法还包括:
从互联网中获取候选合约;
根据获取到的所述候选合约的控制流图之间的相似性,对获取到的所述候选合约进行聚类,以得到所述预设合约库;
所述获取与所述待测合约的合约类型相同的智能合约,以得到参考合约,包括:
从所述预设合约库的多个簇类中,获取与所述待测合约的控制流图满足预设相似度的一者,以得到至少一个参考合约。
11.根据权利要求10所述的模糊测试方法,其特征在于,根据获取到的所述候选合约的控制流图之间的相似性,对获取到的所述候选合约进行聚类,以得到所述预设合约库,包括:
根据所述候选合约之间的指令相似性和跳转状态相似性,确定所述候选合约的控制流图之间的相似性。
12.根据权利要求8所述的模糊测试方法,其特征在于,所述基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例,包括:
在探索变异模式下,持续执行多次变异操作,直至达到变异终止条件,以生成多个所述第一测试案例。
13.根据权利要求8所述的模糊测试方法,其特征在于,所述交易序列变异包括:
在不改变全局变量读写依赖的基础上,改变所述最优交易序列中的函数调用关系。
14.根据权利要求1所述的模糊测试方法,其特征在于,所述模糊测试方法还包括:
从互联网中获取候选合约;
根据获取到的所述候选合约的控制流图之间的相似性,对获取到的候选合约进行聚类,以得到预设合约库,所述预设合约库中的每个簇类对应设置有该簇类的测试数据集;
当所述测试模式为单交易测试模式时,将所述待测合约与所述预设合约库中的多个簇类进行匹配,以得到目标簇类;
获取与所述目标簇类对应设置的所述测试数据集,以得到第一目标测试数据集;
根据所述第一目标测试数据集,对所述待测合约的函数进行变异,以生成第二测试案例;
基于所述第二测试案例,执行模糊测试。
15.根据权利要求14所述的模糊测试方法,其特征在于,所述模糊测试方法还包括:当所述测试模式为所述单交易测试模式时,
根据所述待测合约的合约接口的函数描述信息,随机生成测试数据,以得到第二目标测试数据集;
根据所述第二目标测试数据集,对所述待测合约的函数进行变异,以生成第三测试案例;
基于所述第三测试案例,执行模糊测试。
16.根据权利要求1所述的模糊测试方法,其特征在于,所述模糊测试方法还包括:
在每次执行模糊测试后,更新所述交易序列执行树的每个节点已被选择构建所述最优交易序列的次数;以及,
根据模糊测试的代码覆盖率和合约状态覆盖率,更新所述交易序列执行树的每个节点对测试覆盖率的贡献程度。
17.一种智能合约的模糊测试装置,其特征在于,包括:
第一处理模块,用于当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列;
第二处理模块,用于在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例;
第三处理模块,用于基于所述第一测试案例,执行模糊测试;
其中,第一处理模块包括第一处理单元和第二处理单元;
所述第一处理单元用于根据所述待测合约,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数;
所述第二处理单元用于基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。
18.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~16中任一项所述的模糊测试方法。
19.一种计算机可读存储介质,其特征在于,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~16中任一项所述的模糊测试方法。
20.一种计算机程序产品,其特征在于,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~16中任一项所述的模糊测试方法。
CN202310544504.9A 2023-05-16 2023-05-16 智能合约的模糊测试方法、装置、设备、介质和程序产品 Active CN116303097B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310544504.9A CN116303097B (zh) 2023-05-16 2023-05-16 智能合约的模糊测试方法、装置、设备、介质和程序产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310544504.9A CN116303097B (zh) 2023-05-16 2023-05-16 智能合约的模糊测试方法、装置、设备、介质和程序产品

Publications (2)

Publication Number Publication Date
CN116303097A true CN116303097A (zh) 2023-06-23
CN116303097B CN116303097B (zh) 2023-08-22

Family

ID=86790929

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310544504.9A Active CN116303097B (zh) 2023-05-16 2023-05-16 智能合约的模糊测试方法、装置、设备、介质和程序产品

Country Status (1)

Country Link
CN (1) CN116303097B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070143851A1 (en) * 2005-12-21 2007-06-21 Fiberlink Method and systems for controlling access to computing resources based on known security vulnerabilities
CN110221956A (zh) * 2018-03-02 2019-09-10 富士通株式会社 用于生成区块链智能合约的测试用例的方法和设备
KR20210061893A (ko) * 2019-11-20 2021-05-28 한국전자통신연구원 소프트웨어 취약점 검출 장치 및 방법
CN113704098A (zh) * 2021-08-18 2021-11-26 武汉大学 一种基于蒙特卡洛搜索树种子调度的深度学习模糊测试方法
CN115562987A (zh) * 2022-09-30 2023-01-03 浙江工商大学 针对智能合约调用序列优化与资源分配导向的模糊测试方法
CN115659358A (zh) * 2022-12-28 2023-01-31 北京邮电大学 一种智能合约模糊测试方法及装置
CN115794625A (zh) * 2022-11-18 2023-03-14 哈尔滨工业大学(深圳) 一种智能合约模糊测试的方法及系统

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070143851A1 (en) * 2005-12-21 2007-06-21 Fiberlink Method and systems for controlling access to computing resources based on known security vulnerabilities
CN110221956A (zh) * 2018-03-02 2019-09-10 富士通株式会社 用于生成区块链智能合约的测试用例的方法和设备
KR20210061893A (ko) * 2019-11-20 2021-05-28 한국전자통신연구원 소프트웨어 취약점 검출 장치 및 방법
CN113704098A (zh) * 2021-08-18 2021-11-26 武汉大学 一种基于蒙特卡洛搜索树种子调度的深度学习模糊测试方法
CN115562987A (zh) * 2022-09-30 2023-01-03 浙江工商大学 针对智能合约调用序列优化与资源分配导向的模糊测试方法
CN115794625A (zh) * 2022-11-18 2023-03-14 哈尔滨工业大学(深圳) 一种智能合约模糊测试的方法及系统
CN115659358A (zh) * 2022-12-28 2023-01-31 北京邮电大学 一种智能合约模糊测试方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
FAN JIANG 等: "Enhancing Smart-Contract Security through Machine Learning: A Survey of Approaches and Techniques", ELECTRONICS, no. 12, pages 1 - 28 *
李鹏宇: "强化学习基础——蒙特卡洛方法与蒙特卡洛树搜索", pages 1 - 4, Retrieved from the Internet <URL:https://zhuanlan.zhihu.com/p/463530145> *
郑瀚ANDREW: "蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探", pages 1 - 14, Retrieved from the Internet <URL:https://blog.51cto.com/u_15775105/5957245> *

Also Published As

Publication number Publication date
CN116303097B (zh) 2023-08-22

Similar Documents

Publication Publication Date Title
US20200356663A1 (en) Complex Application Attack Quantification, Testing, Detection and Prevention
US10938922B2 (en) Cloud platforms, services, and methods
US20190370695A1 (en) Enhanced pipeline for the generation, validation, and deployment of machine-based predictive models
US11182361B2 (en) Iterative widening search for designing chemical compounds
AU2019202925A1 (en) Selecting threads for concurrent processing of data
US11803657B2 (en) Generation of representative data to preserve membership privacy
US11568281B2 (en) Causal reasoning for explanation of model predictions
US20240176910A1 (en) Systems and methods to maintain user privacy while providing recommendations
Mlakar et al. Comparing solutions under uncertainty in multiobjective optimization
Thakkar et al. Clairvoyant: AdaBoost with Cost‐Enabled Cost‐Sensitive Classifier for Customer Churn Prediction
Kumar et al. An information theoretic approach for feature selection
US20220171874A1 (en) Apparatuses, methods, and computer program products for privacy-preserving personalized data searching and privacy-preserving personalized data search training
Wang et al. Automating reinforcement learning architecture design for code optimization
Coró et al. Link recommendation for social influence maximization
US20190042932A1 (en) Techniques and Architectures for Deep Learning to Support Security Threat Detection
Xu et al. MeURep: A novel user reputation calculation approach in personalized cloud services
US20220171873A1 (en) Apparatuses, methods, and computer program products for privacy-preserving personalized data searching and privacy-preserving personalized data search training
CN116303097B (zh) 智能合约的模糊测试方法、装置、设备、介质和程序产品
CN116560661A (zh) 代码优化方法、装置、设备及存储介质
Riaz et al. Understanding vulnerabilities of location privacy mechanisms against mobility prediction attacks
US20220366056A1 (en) Computer security using zero-trust principles and artificial intelligence for source code
WO2022228392A1 (zh) 一种区块链地址的分类方法及装置
CN115795345A (zh) 信息处理方法、装置、设备及存储介质
An et al. Relative Keys: Putting Feature Explanation into Context
Chakravarty et al. A simulation‐based algorithm for optimal pricing policy under demand uncertainty

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