System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及网络安全,具体为基于语义信息引导模糊测试的智能合约漏洞检测方法。
技术介绍
1、考虑到金融行为与智能合约之间的密切联系,智能合约的安全性至关重要。因此,越来越多的智能合约漏洞检测方法正在被探索。
2、现有的智能合约漏洞检测方法可分为静态方法和动态方法两大类。静态方法使用静态程序分析技术,在不直接运行智能合约的情况下,跟踪智能合约的可疑代码。众所周知的静态方法包括符号执行、中间表示、机器学习和形式化验证。由于静态方法在检测的过程中,智能合约并没有实际执行。因此,静态分析通常无法在运行时确定实际的输入值,基于默认假设的静态方法容易生成大量假阳性(fp)。与静态方法相比,动态方法主要为模糊测试,旨在随机生成大量测试用例来执行智能合约并发现漏洞。然而,如果测试用例没有覆盖到漏洞路径,它将产生假阴性(fn)。所以,目前大多的模糊测试往往以提高路径覆盖率为目标,来提高检测准确率,但提高路径覆盖虑,并不意味着能够自然而然的提高检测准确率。如果仅仅只是将智能合约漏洞检测视为黑盒模糊测试,而不考虑测试用例是否能够覆盖与漏洞相关的路径,最后的检测准确率依然会比较低。
3、简单来说,高路径覆盖率,并不代表着高检测准确率,反而高路径覆盖率往往会增大计算量,增加计算复杂度,容易降低检测效率。
技术实现思路
1、本专利技术的目的是提供一种低覆盖率但高检测准确率的基于语义信息引导模糊测试的智能合约漏洞检测方法。
2、本专利技术技术方案如下:
3、一种
4、s1、根据待检智能合约中,函数之间的调用关系,得到函数调用图;删除所述函数调用图中,与潜在漏洞函数之间没有路径的函数,得到简化函数调用图;获取所述简化函数调用图中,可以被外部调用的函数,作为目标函数,所有目标函数,形成了目标函数集;
5、s2、将所述目标函数集中,每个目标函数的输入阈表示为一个初始输入空间,每个初始输入空间经空间压缩和空间分裂处理,得到多个子空间,每个子空间经空间降维处理,得到降维子空间;所有降维子空间,形成了降维子空间集;
6、s3、获取所述降维子空间集中,每个降维子空间中与未赋值输入变量有关的约束语句,得到每个未赋值输入变量对应的未赋值输入变量约束组;基于未赋值输入变量约束组集,得到测试用例;
7、s3.1、基于当前未赋值输入变量约束组,和当前未赋值输入变量的数据类型,赋值给所述当前未赋值输入变量一个随机值,得到当前赋值输入变量;
8、s3.2、将所述当前赋值输入变量,添加至历史已赋值输入变量组中,得到当前待检赋值输入变量组;判断所述当前待检赋值输入变量组是否能满足,对应降维子空间的降维约束组中的约束语句;若不能满足,执行s3.3;若能满足,执行s3.4;
9、s3.3、清除所述当前赋值输入变量的随机值,当前未赋值输入变量继续执行所述s3.1;
10、s3.4、判断所述当前待检赋值输入变量组中,已赋值输入变量的数量是否等于降维子空间中未赋值输入变量的初始数量;若等于,所述当前待检赋值输入变量组作为一个测试用例,并执行s3.5;若小于,执行s3.1,且所述当前待检赋值输入变量组代替所述s3.2中的历史已赋值变量组;
11、s3.5、判断当前降维子空间中测试用例的数量,是否等于对应的测试用例分配量;若等于,执行s4;若小于,执行s3.1;
12、s4、所有测试用例用于攻击所述待检智能合约,若攻击不成功,所述待检智能合约不存在漏洞;若攻击成功,所述待检智能合约存在漏洞。
13、所述s3.5中降维子空间的测试用例分配量,是基于对应降维子空间的复杂度得到的,具体为:获取降维子空间的复杂度,将所述复杂度与复杂度总和的比值,作为对应降维子空间的权重值;所述权重值与测试用例总数相乘,得到对应降维子空间的测试用例分配量。
14、所述复杂度由降维子空间的降维输入变量复杂度和降维约束组复杂度组成;所述降维输入变量复杂度,由降维输入变量中连续变量和离散变量的数量得到;所述降维约束组复杂度,由降维约束组中等式约束和不等式约束的数量得到。
15、所述s3.1中数据类型包括:地址和字节组;所述地址包括:待检智能合约中所写地址、待检智能合约的部署地址、攻击合约的部署地址;所述字节组包括:待检智能合约中所写字节组、待检智能合约所代表的字节组、攻击合约所代表的字节组。
16、所述s2中空间压缩的操作具体为:将所述目标函数中assert和require的条件,添加至所述初始输入空间的初始约束组中,得到压缩输入空间;所述压缩输入空间用于执行s2中空间分裂的操作。
17、所述s2中空间分裂的操作为:将所述输入空间经空间压缩后的压缩输入空间,进行复制,得到第一复制空间和第二复制空间;将所述目标函数中,条件语句中的正向条件和反向条件,分别添加至第一复制空间和第二复制空间的约束组中,得到第一子空间和第二子空间;所述第一子空间和第二子空间分别用于执行s2中空间降维的操作。
18、所述s2中空间降维的操作为:将子空间中,与关键变量无关的输入变量删除,得到所述降维子空间;所述关键变量包括:带有与漏洞直接相关的关键字的语句中的变量,和/或输入空间中初始约束组中的变量。
19、一种基于语义信息引导模糊测试的智能合约漏洞检测系统,包括:
20、目标函数集生成模块,用于根据待检智能合约中,函数之间的调用关系,得到函数调用图;删除所述函数调用图中,与潜在漏洞函数之间没有路径的函数,得到简化函数调用图;获取所述简化函数调用图中,可以被外部调用的函数,作为目标函数,所有目标函数,形成了目标函数集;
21、降维子空间集生成模块,用于将所述目标函数集中,每个目标函数的输入阈表示为一个初始输入空间,每个初始输入空间经空间压缩和空间分裂处理,得到多个子空间,每个子空间经空间降维处理,得到降维子空间;所有降维子空间,形成了降维子空间集;
22、测试用例生成模块,用于获取所述降维子空间集中,每个降维子空间中与未赋值输入变量有关的约束语句,得到每个未赋值输入变量对应的未赋值输入变量约束组;基于未赋值输入变量约束组集,得到测试用例;步骤一、基于当前未赋值输入变量约束组,和当前未赋值输入变量的数据类型,赋值给所述当前未赋值输入变量一个随机值,得到当前赋值输入变量;步骤二、将所述当前赋值输入变量,添加至历史已赋值输入变量组中,得到当前待检赋值输入变量组;判断所述当前待检赋值输入变量组是否能满足,对应降维子空间的降维约束组中的约束语句;若不能满足,执行步骤三;若能满足,执行步骤四;步骤三、清除所述当前赋值输入变量的随机值,当前未赋值输入变量继续执行所述步骤一;步骤四、判断所述当前待检赋值输入变量组中,已赋值输入变量的数量是否等于降维子空间中未赋值输入变量的初始数量;若等于,所述当前待检赋值输入变量组作为一个测试用例,并执行本文档来自技高网...
【技术保护点】
1.一种基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,包括如下操作:
2.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述S3.5中降维子空间的测试用例分配量,是基于对应降维子空间的复杂度得到的,具体为:
3.根据权利要求2所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述复杂度由降维子空间的降维输入变量复杂度和降维约束组复杂度组成;
4.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述S3.1中数据类型包括:地址和字节组;
5.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述S2中空间压缩的操作具体为:
6.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述S2中空间分裂的操作为:
7.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述S2中空间降维的操作为:
8.一种基于语义信息引导模糊
9.一种基于语义信息引导模糊测试的智能合约漏洞检测设备,其特征在于,包括处理器和存储器,其中,所述处理器执行所述存储器中保存的计算机程序时实现如权利要求1-7任一项所述的基于语义信息引导模糊测试的智能合约漏洞检测方法。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的基于语义信息引导模糊测试的智能合约漏洞检测方法。
...【技术特征摘要】
1.一种基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,包括如下操作:
2.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述s3.5中降维子空间的测试用例分配量,是基于对应降维子空间的复杂度得到的,具体为:
3.根据权利要求2所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述复杂度由降维子空间的降维输入变量复杂度和降维约束组复杂度组成;
4.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述s3.1中数据类型包括:地址和字节组;
5.根据权利要求1所述的基于语义信息引导模糊测试的智能合约漏洞检测方法,其特征在于,所述s2中空间压缩的操作具体为:
6.根据权利要求1...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。