System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及区块链信息安全,具体涉及智能合约漏洞检测,尤其涉及一种基于模糊测试的高效智能合约漏洞检测方法及检测工具。
技术介绍
1、智能合约是一种基于区块链技术的自动执行合约的工具,能自动执行编程语言(如solidity和vyper等)编写的程序,可以实现多种功能,例如资产转移、数字身份验证、支付和结算等。
2、在以太坊中,由于区块链的不可篡改性,一旦合约部署,就无法进行修改。智能合约通常涉及金钱交易,智能合约开发者在缺乏经验和警惕的情况下,写出存在安全漏洞的智能合约代码,并且未经充分的测试和审计,部署上线,攻击者可以利用漏洞获利,造成经济财产损失。因此,在部署之前检测智能合约是否存在漏洞变得至关重要。
3、然而现有的大多数智能合约漏洞检测方法,都专注于在测试阶段提高代码覆盖率,因为假设代码覆盖率越高,就意味着可以发现更多的漏洞。我们称之为覆盖引导模糊引擎。然而,仅仅增加代码覆盖率并不一定会增加发现的漏洞数量。特别地,覆盖引导模糊引擎可能浪费大量时间来生成非易受攻击的交易序列以实现更高的代码覆盖。
4、例如,sfuzz工具采用了自适应的策略来覆盖afl工具难以进入的分支,其根本思路是提高代码覆盖率,并且在解决深度嵌套的条件语句约束方面存在困难。oyente工具直接为状态变量指定了任意的值,导致其难以生成触发漏洞的交易序列。ilf工具尽管采用了基于符号执行专家的方法来生成高覆盖率的测试用例,但在处理大型合约时,这种高覆盖率方法可能会导致时间复杂度大幅上升。
技术实现
1、针对大多数智能合约漏洞检测方法过度追求高代码覆盖率而导致生成大量非易受攻击交易序列的问题,为了更全面地检测漏洞,本专利技术提出一种基于模糊测试的高效智能合约漏洞检测方法及检测工具,记录关键操作码并利用注意力机制计算其权重。以马尔科夫决策为基础,将操作码权重与代码覆盖率相结合作为奖励反馈引导生成具备漏洞特征的交易序列,弥补了现有的大多数智能合约漏洞检测方法在准确性和漏洞特征引导方面的不足。
2、为了实现上述目的,本专利技术采用以下技术方案:
3、本专利技术一方面提出一种基于模糊测试的高效智能合约漏洞检测方法,包括:
4、步骤1:将智能合约进行编译生成操作码,在生成的操作码的基础上,基于不同漏洞类型的触发条件,构建测试用例种子池,所述测试用例种子池由多个包含漏洞相关操作码的函数的测试用例组成;
5、步骤2:根据不同漏洞类型的触发条件,将与漏洞触发条件相关的操作码标记为污点变量,并追踪其传播路径,记录合约执行时每一步的操作码和堆栈输入,进而筛选出关键操作码;
6、步骤3:通过注意力机制计算关键操作码的权重;
7、步骤4:将智能合约的执行过程建模为一个决策问题,将关键操作码的权重与代码覆盖率结合作为奖励进行反馈,利用马尔可夫决策过程来指导生成具有漏洞特征的交易序列;
8、步骤5:基于测试用例种子池中的测试用例以及生成的交易序列进行模糊测试,以生成更多的测试用例进行漏洞检测。
9、进一步地,所述步骤1包括:
10、对智能合约进行编译,生成相应的操作码;利用符号执行技术将操作码转化为控制流图;通过随机选择交易、参数值以及函数调用参数,生成初始测试用例作为种子;然后对初始测试用例进行筛选,选择包含漏洞相关操作码的函数,将其对应的种子作为新的初始测试用例,完成种子池构建。
11、进一步地,所述步骤3包括:
12、通过bi-lstm处理关键操作码的隐藏状态,将前向和后向的隐藏状态拼接在一起,然后,通过局部门控注意力机制提供对交易序列中关键操作码上下文的集中关注,加强对操作码之间关系的理解,通过对操作码序列的转换和编码,以及计算注意力权重,获得关键操作码的权重值。
13、进一步地,所述步骤4包括:
14、将智能合约的执行过程建模为一个决策问题,将整个交易序列定义为马尔可夫决策过程的状态,将关键操作码的权重和代码覆盖率作为奖励进行反馈,来指导智能体生成下一步的交易序列,考虑历史交易记录,通过奖励机制引导智能体生成具有漏洞特征约束的交易序列,每一步代表智能体与环境的一次交互,形成一连串的交易序列用于智能合约的测试,其中步数表示智能合约执行交易的次数。
15、进一步地,所述步骤5包括:
16、采用基于门控循环单元构建的神经网络,结合全连接神经网络来建立用于模糊测试过程的模型;首先,使用一个门控循环单元来编码当前的测试用例和历史交易记录,以生成一个隐藏状态向量,并将隐藏状态向量和当前的测试用例输入到一个全连接神经网络中;然后,使用上述模型对新的交易序列采样,选择对应的函数,函数参数,发送者和数字货币量来探索不同的执行路径,生成大量测试用例以进行漏洞检测。
17、本专利技术另一方面提出一种基于模糊测试的高效智能合约漏洞检测工具,包括:
18、种子池构建模块,用于将智能合约进行编译生成操作码,在生成的操作码的基础上,基于不同漏洞类型的触发条件,构建测试用例种子池,所述测试用例种子池由多个包含漏洞相关操作码的函数的测试用例组成;
19、关键操作码筛选模块,用于根据不同漏洞类型的触发条件,将与漏洞触发条件相关的操作码标记为污点变量,并追踪其传播路径,记录合约执行时每一步的操作码和堆栈输入,进而筛选出关键操作码;
20、注意力模块,用于通过注意力机制计算关键操作码的权重;
21、交易序列生成模块,用于将智能合约的执行过程建模为一个决策问题,将关键操作码的权重与代码覆盖率结合作为奖励进行反馈,利用马尔可夫决策过程来指导生成具有漏洞特征的交易序列;
22、模糊测试模块,用于基于测试用例种子池中的测试用例以及生成的交易序列进行模糊测试,以生成更多的测试用例进行漏洞检测。
23、进一步地,所述种子池构建模块具体用于:
24、对智能合约进行编译,生成相应的操作码;利用符号执行技术将操作码转化为控制流图;通过随机选择交易、参数值以及函数调用参数,生成初始测试用例作为种子;然后对初始测试用例进行筛选,选择包含漏洞相关操作码的函数,将其对应的种子作为新的初始测试用例,完成种子池构建。
25、进一步地,所述注意力模块具体用于:
26、通过bi-lstm处理关键操作码的隐藏状态,将前向和后向的隐藏状态拼接在一起,然后,通过局部门控注意力机制提供对交易序列中关键操作码上下文的集中关注,加强对操作码之间关系的理解,通过对操作码序列的转换和编码,以及计算注意力权重,获得关键操作码的权重值。
27、进一步地,所述交易序列生成模块具体用于:
28、将智能合约的执行过程建模为一个决策问题,将整个交易序列定义为马尔可夫决策过程的状态,将关键操作码的权重和代码覆盖率作为奖励进行反馈,来指导智能体生成下一步的交易序列,考虑历史交易记录,通过奖励机制引导智能体生成具有漏洞特征约束的本文档来自技高网...
【技术保护点】
1.一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,包括:
2.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤1包括:
3.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤3包括:
4.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤4包括:
5.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤5包括:
6.一种基于模糊测试的高效智能合约漏洞检测工具,其特征在于,包括:
7.根据权利要求6所述的一种基于模糊测试的高效智能合约漏洞检测工具,其特征在于,所述种子池构建模块具体用于:
8.根据权利要求6所述的一种基于模糊测试的高效智能合约漏洞检测工具,其特征在于,所述注意力模块具体用于:
9.根据权利要求6所述的一种基于模糊测试的高效智能合约漏洞检测工具,其特征在于,所述交易序列生成模块具体用于:
10.根据权利要求6所述的一种
...【技术特征摘要】
1.一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,包括:
2.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤1包括:
3.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤3包括:
4.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤4包括:
5.根据权利要求1所述的一种基于模糊测试的高效智能合约漏洞检测方法,其特征在于,所述步骤5包括:
6.一种基于模糊...
【专利技术属性】
技术研发人员:潘恒,李智超,邢颖,陆思奇,王永娟,邓翔,
申请(专利权)人:中原工学院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。