智能合约的模糊测试方法、装置、设备、介质和程序产品制造方法及图纸

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

【技术实现步骤摘要】
智能合约的模糊测试方法、装置、设备、介质和程序产品


[0001]本专利技术涉及信息安全
和区块链
,具体地涉及一种智能合约的模糊测试方法、装置、设备、介质和程序产品。

技术介绍

[0002]智能合约作为区块链技术的代表应用,已广泛用在金融、供应链、物联网、公共服务等多个领域。智能合约的本质是一种能够自动运行在区块链上的计算机程序,一旦部署,便无法修改。近年,随着以以太坊为代表的智能合约的快速发展,智能合约已经管理了大量的数字资产,与此同时,智能合约漏洞频繁爆出,其安全问题备受关注。目前,常用的智能合约漏洞检测方法主要包括程序分析、形式化验证、符号执行及模糊测试。其中,模糊测试作为一种自动化漏洞检测方法已在传统软件测试领域彰显了其优势,但目前针对智能合约的模糊测试工具尚存在覆盖率不高、测试效率低等瓶颈。

技术实现思路

[0003]鉴于上述问题,本专利技术提供了一种智能合约的模糊测试方法、装置、设备、介质和程序产品。
[0004]根据本专利技术的第一个方面,提供了一种智能合约的模糊测试方法,其中,包括:当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列;在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例;基于所述第一测试案例,执行模糊测试;其中,至少一次构造所述最优交易序列,包括:根据所述待测合约中的多个函数,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数,至少一条路径上的多个节点中的函数具有依赖关系;基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。
[0005]根据本专利技术的实施例,所述根据所述待测合约中的多个函数,生成交易序列执行树,包括:从所述待测合约的函数中确定出至少一个候选节点函数;根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,并基于所述根节点逐层扩展子节点,以得到交易序列执行树。
[0006]根据本专利技术的实施例,所述根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,包括:
根据至少一个所述候选节点函数对区块链中永久存储的全局变量的读写情况,从至少一个所述候选节点函数中确定出所述根节点。
[0007]根据本专利技术的实施例,所述基于所述根节点逐层扩展子节点,以得到交易序列执行树,包括:对于第n级节点,根据所述控制流图和所述调用图,分析第n级节点到所述候选节点函数中剩余函数的参数可达性和合约状态可达性;当第n级节点到所述剩余函数中至少一者的参数可达性和合约状态可达性均满足可达性条件时,确定该函数为第n级节点的子节点;其中,n为正整数。
[0008]根据本专利技术的实施例,所述基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列,包括:在所述交易序列执行树的至少一级中,计算每个节点当前的上限置信区间值,其中,该节点中的函数对测试覆盖率的贡献程度与该节点当前的上限置信区间值正相关,该节点中的函数已被选择构建所述最优交易序列的次数与该节点当前的上限置信区间值负相关;以及,选择所述上限置信区间值最大的节点作为目标节点;由选出的所述目标节点构成当前的所述最优交易序列。
[0009]根据本专利技术的实施例,当所述交易序列执行树的至少一级中所述上限置信区间值最大的节点为多个时,从所述上限置信区间值最大的多个节点中随机选择一个节点作为所述目标节点。
[0010]根据本专利技术的实施例,所述计算每个节点当前的上限置信区间值,包括:根据每个节点当前的平均贡献程度、该节点已被选择构建最优交易序列的次数以及基于所述交易序列执行树已构造的最优交易序列的总数,计算该节点的上限置信区间值。
[0011]根据本专利技术的实施例,所述在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例,包括:向当前的所述最优交易序列中的每个所述目标节点中填充交易参数;基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例;其中,所述至少一次变异操作包括参数变异、交易序列变异及特殊值变异中的至少一种。
[0012]根据本专利技术的实施例,所述基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例,包括:在指导变异模式下,从预设合约库中,获取与所述待测合约的合约类型相同的智能合约,以得到参考合约;获取所述参考合约的漏洞特征,以得到目标漏洞特征;在执行至少一次变异操作后,通过距离度量机制,计算生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏洞触发位置之间的距离;当当前生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏
洞触发位置之间的距离相较于前一次生成的所述第一测试案例发生下降时,基于当前生成的所述第一测试案例继续执行至少一次所述变异操作。
[0013]根据本专利技术的实施例,所述模糊测试方法还包括:从互联网中获取候选合约;根据获取到的所述候选合约的控制流图之间的相似性,对获取到的所述候选合约进行聚类,以得到所述预设合约库;所述获取与所述待测合约的合约类型相同的智能合约,以得到参考合约,包括:从所述预设合约库的多个簇类中,获取与所述待测合约的控制流图满足预设相似度的一者,以得到至少一个参考合约。
[0014]根据本专利技术的实施例,根据获取到的所述候选合约的控制流图之间的相似性,对获取到的所述候选合约进行聚类,以得到所述预设合约库,包括:根据所述候选合约之间的指令相似性和跳转状态相似性,确定所述候选合约的控制流图之间的相似性。
[0015]根据本专利技术的实施例,所述基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例,包括:在探索变异模式下,持续执行多次变异操作,直至达到变异终止条件,以生成多个所述第一测试案例。
[0016]根据本专利技术的实施例,所述交易序列变异包括:在不改变全局变量读写依赖的基础上,改变所述最优交易序列中的函数调用关系。
[0017]根据本专利技术的实施例,所述模糊测试方法还包括:从互联网中获取候选合约;根据获取到的所述候选合约的控制流图之间的相似性,对获取到的候选合约进行聚类,以得到预设合约库,所述预设合约库中的每个簇类对应设置有该簇类的测试数据集;当所述测试模式为单交易测试模式时,将所述待测合约与所述预设合约库中的多个簇类进行匹配,以得到目标簇类;获取与所述目标簇类对应设置的所述测试数据集,以得到目标测试数据集;根据所述目标测试数据集,对所述待测合约的函数进行变异,以生成第二测试案例;基于所述第二测试案例,执行模糊测试。
[0018]根据本专利技术的实施例,所述模糊测本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种智能合约的模糊测试方法,其特征在于,包括:当测试模式为交易序列测试模式时,基于蒙特卡洛树搜索算法,根据待测合约构造至少一次最优交易序列;在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例;基于所述第一测试案例,执行模糊测试;其中,至少一次构造所述最优交易序列,包括:根据所述待测合约中的多个函数,生成交易序列执行树,所述交易序列执行树中的至少一个节点包括所述待测合约中的至少一个函数,至少一条路径上的多个节点中的函数具有依赖关系;基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列。2.根据权利要求1所述的模糊测试方法,其特征在于,所述根据所述待测合约中的多个函数,生成交易序列执行树,包括:从所述待测合约的函数中确定出至少一个候选节点函数;根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,并基于所述根节点逐层扩展子节点,以得到交易序列执行树。3.根据权利要求2所述的模糊测试方法,其特征在于,所述根据所述待测合约的控制流图和调用图,从至少一个候选节点函数中,确定出根节点,包括:根据至少一个所述候选节点函数对区块链中永久存储的全局变量的读写情况,从至少一个所述候选节点函数中确定出所述根节点。4.根据权利要求2所述的模糊测试方法,其特征在于,所述基于所述根节点逐层扩展子节点,以得到交易序列执行树,包括:对于第n级节点,根据所述控制流图和所述调用图,分析第n级节点到所述候选节点函数中剩余函数的参数可达性和合约状态可达性;当第n级节点到所述剩余函数中至少一者的参数可达性和合约状态可达性均满足可达性条件时,确定该函数为第n级节点的子节点;其中,n为正整数。5.根据权利要求1所述的模糊测试方法,其特征在于,所述基于所述交易序列执行树中每个节点中的函数已被选择构建所述最优交易序列的次数和对测试覆盖率的贡献程度,从所述交易序列执行树中,选择至少一个节点,以构造当前的所述最优交易序列,包括:在所述交易序列执行树的至少一级中,计算每个节点当前的上限置信区间值,其中,该节点中的函数对测试覆盖率的贡献程度与该节点当前的上限置信区间值正相关,该节点中的函数已被选择构建所述最优交易序列的次数与该节点当前的上限置信区间值负相关;以及,选择所述上限置信区间值最大的节点作为目标节点;由选出的所述目标节点构成当前的所述最优交易序列。6.根据权利要求5所述的模糊测试方法,其特征在于,当所述交易序列执行树的至少一
级中所述上限置信区间值最大的节点为多个时,从所述上限置信区间值最大的多个节点中随机选择一个节点作为所述目标节点。7.根据权利要求5所述的模糊测试方法,其特征在于,所述计算每个节点当前的上限置信区间值,包括:根据每个节点当前的平均贡献程度、该节点已被选择构建最优交易序列的次数以及基于所述交易序列执行树已构造的最优交易序列的总数,计算该节点的上限置信区间值。8.根据权利要求5所述的模糊测试方法,其特征在于,所述在至少一次获取所述最优交易序列时,基于当前获取到的所述最优交易序列进行变异,以生成第一测试案例,包括:向当前的所述最优交易序列中的每个所述目标节点中填充交易参数;基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例;其中,所述至少一次变异操作包括参数变异、交易序列变异及特殊值变异中的至少一种。9.根据权利要求8所述的模糊测试方法,其特征在于,所述基于填充所述交易参数后的所述最优交易序列,执行至少一次变异操作,以生成至少一个所述第一测试案例,包括:在指导变异模式下,从预设合约库中,获取与所述待测合约的合约类型相同的智能合约,以得到参考合约;获取所述参考合约的漏洞特征,以得到目标漏洞特征;在执行至少一次变异操作后,通过距离度量机制,计算生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏洞触发位置之间的距离;当当前生成的所述第一测试案例所覆盖的代码位置与所述目标漏洞特征中的漏洞触发位置之间的距离相较于前...

【专利技术属性】
技术研发人员:王雪霏许啸程元鸿旷亚和
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1