System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及网络安全、漏洞检测,具体为基于混合模糊测试优化的智能合约漏洞检测方法、系统。
技术介绍
1、近年来,智能合约已经广泛应用于各个领域,而以区块链技术为支撑的智能合约使得在去中心化或无第三方的情况下进行可信交易成为了现实。以太坊是最受欢迎的执行智能合约的平台之一,以太坊虚拟机(evm)是以太坊区块链架构的核心,它为智能合约的执行提供了基础环境。
2、与传统软件安全问题不同,由于区块链技术本身的不可篡改性,智能合约一旦部署便不能修改,即使其代码中存在不可否认的错误。因此目前漏洞检测最有效的方法是在部署上链对智能合约进行彻底审查以识别漏洞并予以修复。
3、目前,已有多种漏洞检测技术被提出以提高合约安全性,包括符号执行、形式化验证和其他静态分析方法。然而,每种方法都有其局限性。符号执行将程序中的变量符号化来探索其所有可能执行的路径,这会导致路径爆炸问题从而影响漏洞的检测效果。形式化验证使用严谨的数学语言和逻辑描述智能合约, 以便对其进行严格的数学推理和验证,如何对evm指令等必要信息进行有效建模是此技术的一大挑战。因为静态分析不能实际执行每个路径,所以这些方法总是会产生高误报率。
4、作为动态检测技术的模糊测试几乎不会产生误报,这成为它在漏洞检测中的一大优势。但是一些漏洞只有在满足特定函数调用序列时才会被触发,另一方面,仅靠测试用例的随机生成难以覆盖合约中一些较复杂的分支,使得模糊测试无法探索到处于深层分支的漏洞。由于智能合约一些特殊机制会导致它会出现一些与常规软件不同的漏洞。例如,区块g
技术实现思路
1、本专利技术提供了一种基于混合模糊测试优化的智能合约漏洞检测方法、系统。
2、本专利技术技术方案如下:
3、一种基于混合模糊测试优化的智能合约漏洞检测方法,包括以下步骤:
4、s1、获取智能合约的源代码,将其编译后获得evm字节码,对所述evm字节码进行静态分析,基于字节码中函数之间的读写依赖关系和函数所对应的源代码,获得abi接口参数类型和函数调用序列;
5、s2、基于abi接口参数类型和函数调用序列,生成第一测试用例集,基于第一测试用例集对evm字节码进行模糊测试,获得每个测试用例在指令执行时覆盖的所有指令数,构建指令计数集;根据设定的执行次数阈值内指令计数集的长度变化,在长度变化值为0时进行符号执行处理,
6、所述符号执行处理操作具体为:将指令计数集长度变化值为0时的分支设置为目标分支点,仅获取指令执行至目标分支点时每条执行路径上所有分支约束的算数指令和逻辑指令,将其进行符号化处理转化为约束表达式,收集约束表达式构建路径约束集;
7、对约束表达式取反操作后进行约束求解,在所述约束求解中对约束表达式和其求解结果进行缓存重用,获得满足目标分支点所在分支约束条件的特定输入值,将特定输入值作为新的测试用例更新至第一测试用例集中,获得第二测试用例集,循环执行s2,扩充第二测试用例集,直至达到设定的时间,终止循环,执行s3;
8、s3、对不同智能合约漏洞设置不同测试预言,所述智能合约漏洞包括权限控制、交易顺序依赖、拒绝服务智能合约漏洞;基于测试预言,使用第二测试用例集结合污点分析进行智能合约漏洞检测,获得漏洞检测结果。
9、进一步地,所述s3中污点分析具体为基于设定的污点传播规则对evm字节码进行污点分析,获取污点数据在指令流中的传播,具体为:
10、获取evm字节码中函数调用参数、交易数据指令,包括calldataload、calldatacopy、sload、caller、origin、callvalue指令,将所述指令及其返回值标记为污点;
11、将call、sstore、jumpi、iszero、selfdestruct和delegatecall指令设置为污点汇;
12、在不同指令执行时,基于污点传播规则对污点传播进行追踪,具体为:
13、对于一元或多元算数指令、逻辑指令,如果其中任一操作数包含污点,则将执行该指令后得到的结果值标记为污点,
14、对于查询区块链状态的指令和不影响合约执行、状态的指令,将其标记为不视为污点的固定指令,
15、对于从内存或存储中读取数据的指令,如果指令中包含污点,则将读取的结果值标记为污点;
16、基于污点至污点汇的传播,获得污点在evm字节码的指令流中的传播路径,基于传播路径获得漏洞检测结果。
17、具体地,s2中在约束求解中对约束表达式和其求解结果进行缓存重用,具体操作为:基于访问过的约束表达式构建一个已访问集,基于已约束求解过的约束表达式和其求解结果构建一个字典进行缓存,基于取反操作后的每个约束表达式得到对应的唯一哈希值作为键:
18、在对约束表达式进行约束求解时,如果字典中存在对应的键,则重用字典中的求解结果,否则进行约束求解重置;
19、遍历路径约束集中除最后一个约束表达式以外的所有约束表达式,将未访问过的约束表达式添加至已访问集中,同时对其取反操作后进行约束求解,并将求解结果缓存至字典。
20、具体地,s3中对所述权限控制智能合约漏洞设置的测试预言,具体表示如下:
21、对权限配置错误、缺少权限授权检查控制导致的权限控制智能合约漏洞,设置的测试预言为:errorpermission∨(existdangerousi∧nopcp),
22、其中第一个子预言errorpermission检测智能合约中是否存在权限配置错误,当设置智能合约所有者权限功能的非标准构造函数的名称与智能合约名称不一致时,判断errorpermission为真;
23、第二个子预言existdangerousi检测智能合约中是否存在缺少权限授权检查,即是否存在来自未授权用户的污点数据传播至selfdestruct、delegatecall指令,如果存在,判断existdangerousi为真;
24、第三个子预言nopcp检测是否存在权限约束模式,如果是,判断nopcp为假;
25、当errorpermission为真或existdangerousi、nopcp同时为真时,测试预言为真,存在权限控制智能合约漏洞。
26、进一步地,进行权限约束模式的判定,为判断是否存在如下污点分析过程:
27、使用标记的污点指令sload和caller分别加载智能合约所有者地址和智能合约调用者地址,对所述两个地址进行比较判断是否相等,
28、如果相等,则经污点汇指令jumpi操作继续执行,
29、如果不相等,则经jumpi操作跳转至revert结束执行;
30、如果存在上述污点分析过程,则判定存在权限约束模式。
31、具体地,s3中本文档来自技高网...
【技术保护点】
1.一种基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,所述S3中污点分析具体为基于设定的污点传播规则对EVM字节码进行污点分析,获取污点数据在指令流中的传播,具体为:
3.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,S2中在约束求解中对约束表达式和其求解结果进行缓存重用,具体操作为:基于访问过的约束表达式构建一个已访问集,基于已约束求解过的约束表达式和其求解结果构建一个字典进行缓存,基于取反操作后的每个约束表达式得到对应的唯一哈希值作为键:
4.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,S3中对所述权限控制智能合约漏洞设置的测试预言,具体表示如下:
5.根据权利要求4所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,进行权限约束模式的判定,为判断是否存在如下污点分析过程:
6.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,
7.根据权利要求6所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,所述智能合约中是否包含可由外部输入决定的无界循环条件的判定为:
8.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,S3中对所述交易顺序依赖智能合约漏洞设置的测试预言,具体为:设置测试预言ExistConflictingTransactions,如果智能合约中同一变量的存储位置存在读写冲突,同一变量被来自的不同发送方的交易所修改,测试预言为真,存在交易顺序依赖智能合约漏洞。
9.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,所述S2中获得每个测试用例在指令执行时覆盖的所有指令数,构建指令计数集,具体为:在模糊测试过程中设置程序计数器指向EVM字节码当前执行指令的地址,得到程序计数器值,基于程序计数器值构建指令计数集;遍历每个测试用例的指令执行路径,将每个已执行指令的程序计数器值更新至指令计数集。
10.一种基于混合模糊测试优化的智能合约漏洞检测系统,其特征在于,包括:
...【技术特征摘要】
1.一种基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,所述s3中污点分析具体为基于设定的污点传播规则对evm字节码进行污点分析,获取污点数据在指令流中的传播,具体为:
3.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,s2中在约束求解中对约束表达式和其求解结果进行缓存重用,具体操作为:基于访问过的约束表达式构建一个已访问集,基于已约束求解过的约束表达式和其求解结果构建一个字典进行缓存,基于取反操作后的每个约束表达式得到对应的唯一哈希值作为键:
4.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,s3中对所述权限控制智能合约漏洞设置的测试预言,具体表示如下:
5.根据权利要求4所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,进行权限约束模式的判定,为判断是否存在如下污点分析过程:
6.根据权利要求1所述的基于混合模糊测试优化的智能合约漏洞检测方法,其特征在于,s3中对...
【专利技术属性】
技术研发人员:赵相福,杨佳慧,张菡峰,何龙,苟乃翔,王世纪,王腾飞,
申请(专利权)人:烟台大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。