System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于网络安全领域,具体设计一种基于反馈信息模糊测试的智能合约漏洞挖掘方法。
技术介绍
1、随着区块链技术的日渐成熟,区块链平台和区中心化应用呈指数级增长,运行在区块链系统顶层的智能合约技术由于其去中心化、不可篡改、公开透明等特性,在金融管理、物联网以及医疗等领域得到了广泛应用。智能合约结合区块链技术,在去中心化存储的前提下实现了更为复杂的控制逻辑功能,能够满足更复杂的业务需求。但同样,其中也存在着潜在的安全风险。智能合约具有一旦部署就无法修改的不可篡改特性,也导致其一旦产生漏洞,造成的损失是无法估量的,因此针对智能合约的漏洞检测成为了亟待研究的重要课题。而模糊测技术由于其自动化程度高、优秀的检测效果成为当前主流的自动化漏洞检测技术,因此将模糊测试技术应用于智能合约领域的漏洞挖掘任务具有很高的应用价值。
2、早期对智能合约的漏洞挖掘工作主要通过人工审计、静态分析、符号执行和形式化验证等方法。oyente将字节码作为输入,通过分析构建控制流图,利用约束求解器去除不可达路径,但随着智能合约的代码规模不断增加,符号执行技术出现了路径爆炸的问题;contractfuzzer通过提取合约的源代码和应用程序二进制接口,分析abi函数的参数数据类型和函数签名生成测试用例,通过对evm进行插桩监测测试过程,但全过程存在效率低,覆盖率不高的问题;sfuzz结合了afl中的fuzz策略,针对难覆盖的分支使用了轻量级的多目标适应性策略,通过自动部署区块链网络智能合约生成多个交易序列,使用了定量策略:计算distance来判断一个s
3、但是以上的智能合约模糊测试工具都是通过静态分析获取合约的基础信息后构造初始测试用例,使用传统模糊测试方法动态运行合约进行漏洞挖掘,这种方法存在无法识别合约中的关键函数、可能存在漏洞的函数的问题,从而导致测试的效率降低、覆盖率低等问题,且无法有针对性的测试到具有复杂条件的分支路径。如何提高测试运行过程中对合约的代码覆盖率和测试的效率,是本领域的重要技术课题之一。
技术实现思路
1、主流的智能合约模糊测试技术存在以下的问题:无法识别合约中的随着智能合约技术的关键函数和更可能存在漏洞的函数,无法触发复杂条件分支路径,生成的测试交易序列不符合逻辑或不足以达到触发合约漏洞的状态,从而导致测试效率的低下。为解决上述问题,本专利技术公开提供一种基于反馈信息模糊测试的智能合约漏洞挖掘方法。
2、根据本公开的方法,测试过程包括合约静态分析阶段、种子池和测试交易序列构建阶段、evm插桩阶段、漏洞分析阶段和动态测试阶段;
3、s1.静态分析阶段:系统根据用户提供的合约代码,通过静态分析收集相应的代码信息;
4、s1-1. 提取源码的抽象语法树(abstract syntax tree, ast);
5、具体为:系统根据用户提供的智能合约源代码,经过solc工具编译后得到abi文件,同时转换为solidity的ast的json文件作为slither工具的输入;
6、s1-2. 提取合约的控制流图(control flow graph, cfg);
7、系统经过数据整合后,利用slither工具生成合约的控制流图gs=(b, i, e )组成,b表示合约中有限的基本块集合,表示基本块的初始位置(例如:合约的起始点),e表示带标签的边的集合;
8、s1-3. 提取合约的函数列表lfun;
9、系统利用slither 工具提取合约的函数列表和函数总数量m,其中f是包含函数名的映射表,fi是函数名,p是该函数的参数元组,其中i对应函数名的映射,j代表第j个参数类型;
10、s1-4. 计算函数顺序优先级:
11、具体为,系统利用slither工具将合约代码翻译为slither ir(一种内部表示语言),在此基础上slither工具经过预定义的分析,读取函数中的全局变量v,通过函数全局变量计算出函数的顺序优先级(order priority, op),结合s1-3,按照op由大到小对f进行排序,同时构建一个函数名与op的映射表,得到函数之间的依赖关系,辅助后续生成符合函数依赖关系的交易序列。其中,其中i为第i个函数,n为该函数中包含的全局变量的总个数;
12、s2. 种子池和测试交易构建阶段:系统构建种子池及进行交易序列的构建和设计变异方式;
13、s2-1. 初始种子池s0构建:系统通过s1得到的信息,构建初始的种子池s0;
14、s2-1-1. 区块链网络配置及初始化
15、系统通过生成元组δ表示进行测试的种子的网络配置,定义为δ=(n, t, add,balance, v),n表示当前执行的区块链号,t表示当前块的时间戳,add表示合约地址及其相关联合约的地址集合,balance表示为合约分配的初始余额,v表示合约中状态变量的初始值;
16、初始时系统默认配置δ0,其中n=0,t=0,add={0xf0},balance={0xff00..},v由合约中的默认值组成;
17、s2-1-2. 函数调用序列构建
18、系统在测试过程中使用一系列的函数调用组成的交易序列对合约进行测试,一个交易序列表示为,m表示对函数的调用;
19、通过随机生成方式生成符合s1-3中收集的pi中函数参数类型约束的实参值,其中,m0必须为构造合约函数的调用;
20、通过sfuzz工具的交易构建模块将该交易序列ʃ创建为一笔交易tx;
21、s2-1-3. 初始化种子池s0:
22、系统在内存中生成一个集合s,集合中保存被编码后的种子;
23、系统生成的每个种子由s2-1和s2-2中生成的元素组成的二元组t=(δ, ʃ)表示;
24、集合s初始时表示为s0,s0包含针对合约的初始配置和不同的函数调用序列,若用户提供合约包含n个函数,系统根据s1-3中提取的函数参数类型随机生成n个针对不同函数的调用序列,确保函数的覆盖率为100%。ʃ中仅包含构造合约函数和测试函数,其中测试函数的参数值由系统随机生成;
25、s2-2. 交易序列变异阶段:系统结合s1-4中计算得出的op值,对种子池中的交易序列进行变异构造新的测试用例;
26、s2-2-1. 基于函数调用的变异过程:
27、s2-2-1-1. 根据op进行测试交易序列增加变异:
28、系统根据s1-4中计算op值对测试交易序列进行变异;
29、测试序列,系统从测试交易序列中随机选择除构造函数调用m0之外的函数调用,从s1-4的映射表f中随机选择序号大于i的某个函数fj;
30、系统根据s1-3中生成的函数参数元组信息,得到该函数fj的参数约束信息,随机生成符合pj中的各个参数类型argj约束的实参,形本文档来自技高网...
【技术保护点】
1.一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所属方法包括:
2.根据权利要求1所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所述步骤S1中:
3.根据权利要求1或2所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所述步骤S2中:
4.根据权利要求1所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所述步骤S3中:
5.根据权利要求1所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所述步骤S4中:
6.根据权利要求1所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,在动态分析过程中收集种子的反馈信息并且计算种子的质量分数:
7.根据权利要求1所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,在动态分析过程中根据计算出的种子质量分数对种子池进行更新:
【技术特征摘要】
1.一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所属方法包括:
2.根据权利要求1所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所述步骤s1中:
3.根据权利要求1或2所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所述步骤s2中:
4.根据权利要求1所述的一种基于反馈信息模糊测试的智能合约漏洞挖掘方法,其特征在于,所述步骤s3中:<...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。