System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于一种智能合约漏洞检测方法,具体涉及一种基于关键参数识别的智能合约漏洞检测方法及相关装置。
技术介绍
1、智能合约是一种基于区块链技术的自动执行合约的计算机程序。目的是在没有第三方干预的情况下,确保合约各方之间的交易和协议得到可靠执行。智能合约的主要应用领域包括数字货币、去中心化金融(defi)和供应链管理等。然而,智能合约的开发和执行过程中往往存在一些安全风险和漏洞。这些漏洞可能导致恶意用户操纵合约、盗取资产或使合约陷入意外的执行状态。主要问题在于:
2、(1)由于开发人员的疏忽引入代码缺陷,例如逻辑错误、整数溢出、未授权访问等。这些漏洞可能会被攻击者利用,导致用户资产被盗取或合约执行出现意外情况。另外,智能合约的复杂性也增加了漏洞的风险。智能合约通常由多个函数和条件语句组成,其中的逻辑关系和数据流可能非常复杂。开发者在编写合约时,可能会出现错误或忽略某些安全细节,从而导致潜在的漏洞存在。
3、(2)智能合约的执行也面临外部依赖风险。智能合约通常需要与外部数据源、外部合约或外部网络进行交互,以获取必要的信息或完成特定的功能。然而,这种依赖性也带来了一些潜在的安全风险。例如,智能合约可能依赖外部数据源提供准确和可信的数据。然而,如果数据源受到操纵、篡改或未经验证的信息输入,就可能导致合约执行出错或产生不可预料的结果。
技术实现思路
1、本专利技术为了解决由于智能合约在开发和执行过程中往往存在安全风险和漏洞,导致恶意用户能够操纵合约、盗取资产或使合
2、为了实现上述目的,本专利技术采用以下技术方案予以实现:
3、第一方面,本专利技术提出一种基于关键参数识别的智能合约漏洞检测方法,包括以下步骤:
4、根据智能合约字节码对应的操作码生成控制流图结构;
5、根据控制流图结构中各节点的表达式,更新变量;
6、生成智能合约中函数的符号约束;
7、根据智能合约的最大深度和函数个数,生成函数调用序列,再生成智能合约的符号约束,并标记函数的外部参数;
8、添加漏洞条件语句,求解智能合约的符号约束,得到路径可达的初始外部参数解;
9、结合所述初始外部参数解,生成bet函数模糊测试的初始测试方案;
10、基于所述初始测试方案,结合迭代模糊测试和自适应策略,对智能合约的函数进行测试,确定是否存在漏洞风险。
11、进一步地,所述更新变量,包括:
12、将所述变量的下标初始化为0;
13、判断变量类型为被读的变量或被写的变量;
14、在每次写操作后,对被写的变量下标加一,在每次读操作后,将被读的变量下标更新为当前下标。
15、进一步地,所述生成控制流图结构中函数的符号约束,包括:
16、根据霍尔三元组推理规则生成控制流图结构中函数的符号约束。
17、进一步地,所述结合所述初始外部参数解,生成bet函数模糊测试的初始测试方案,包括:
18、将所述初始外部参数解中的部分结果作为初始参数,随机生成其余的外部参数,组成变量组合;
19、将所述变量组合传入模糊测试模块,生成bet函数模糊测试的初始测试方案。
20、进一步地,所述基于所述初始测试方案,结合迭代模糊测试和自适应策略,对智能合约的函数进行测试,确定是否存在漏洞风险,包括:
21、(1)基于所述初始测试方案,执行智能合约的函数,生成对应的模糊测试结果;
22、(2)若模糊测试结果所在路径覆盖漏洞路径,则将函数保存至漏洞路径集合,否则,保存至待判断路径集合;
23、(3)在待判断路径集合中,选取与漏洞路径之间距离最近的路径作为新种子集;
24、(4)采用自适应策略,对新种子集中的种子优先级进行排序,得到排序后的种子集;
25、(5)从排序后的种子集中筛选指定数量的种子,形成筛选后的种子集;
26、(6)对筛选后的种子集进行交叉和变异操作,生成新的测试用例,返回步骤(1),用新的测试用例替代初始测试方案,进行迭代测试,直至迭代超时或漏洞路径集合中路径的测试用例数量满足预定条件,完成迭代测试;
27、(7)根据当前模糊测试结果,确定是否存在漏洞风险。
28、进一步地,所述对新种子集中的种子优先级进行排序,包括:
29、根据以下距离函数distance(v,br)的值进行排序:
30、
31、其中,v表示漏洞路径,br表示新种子集中的路径,c表示分叉路径的条件,a和b表示变量或常量,k代表最小距离的常量;
32、distance(v,br)的值越小,优先级越靠前。
33、进一步地,所述生成新的测试用例之后还包括:
34、判断新的测试用例下,能否执行智能合约,若能,则新的测试用例,替换初始测试方案;否则,生成新的测试用例。
35、第二方面,本专利技术提出一种基于关键参数识别的智能合约漏洞检测系统,包括:
36、第一生成模块,用于根据智能合约字节码对应的操作码生成控制流图结构;
37、更新模块,用于根据控制流图结构中各节点的表达式,更新变量;
38、第二生成模块,用于生成智能合约中函数的符号约束;
39、第三生成模块,用于根据智能合约的最大深度和函数个数,生成函数调用序列,再生成智能合约的符号约束,并标记函数的外部参数;
40、求解模块,用于添加漏洞条件语句,求解智能合约的符号约束,得到路径可达的初始外部参数解;
41、第四生成模块,用于结合所述初始外部参数解,生成bet函数模糊测试的初始测试方案;
42、测试模块,用于基于所述初始测试方案,结合迭代模糊测试和自适应策略,对智能合约的函数进行测试,确定是否存在漏洞风险。
43、第三方面,本专利技术提出一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
44、第四方面,本专利技术提出一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
45、与现有技术相比,本专利技术具有以下有益效果:
46、1.本专利技术提出一种基于关键参数识别的智能合约漏洞检测方法,实现了智能合约的符号化执行,通过符号执行的方式,将智能合约的运行过程转化为符号约束的数学方法求解,不依赖于区块链的具体实现,且模型中的任意参数都可直接指定,方便实现不同参数的隔离测试,对于一些真实场景中较难触发的场景提供了简单可行的测试入口,能够有效测试出智能合约中的安全风险和漏洞。
47、2.本专利技术实现了关键参数的完整挖掘。本文档来自技高网...
【技术保护点】
1.一种基于关键参数识别的智能合约漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述更新变量,包括:
3.根据权利要求2所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述生成控制流图结构中函数的符号约束,包括:
4.根据权利要求3所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述结合所述初始外部参数解,生成bet函数模糊测试的初始测试方案,包括:
5.根据权利要求4所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述基于所述初始测试方案,结合迭代模糊测试和自适应策略,对智能合约的函数进行测试,确定是否存在漏洞风险,包括:
6.根据权利要求5所述基于关键参数识别的智能合约漏洞检测方法,其特征在于,所述对新种子集中的种子优先级进行排序,包括:
7.根据权利要求5所述基于关键参数识别的智能合约漏洞检测方法,其特征在于,所述生成新的测试用例之后还包括:
8.一种基于关键参数识别的智能合约漏洞检测系统,其特征在
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-7任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7任一项所述方法的步骤。
...【技术特征摘要】
1.一种基于关键参数识别的智能合约漏洞检测方法,其特征在于,包括以下步骤:
2.根据权利要求1所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述更新变量,包括:
3.根据权利要求2所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述生成控制流图结构中函数的符号约束,包括:
4.根据权利要求3所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述结合所述初始外部参数解,生成bet函数模糊测试的初始测试方案,包括:
5.根据权利要求4所述基于关键参数识别的智能合约漏洞检测方法,其特征在于:所述基于所述初始测试方案,结合迭代模糊测试和自适应策略,对智能合约的函数进行测试,确定是否存在漏洞风险,包括:
<...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。