本发明涉及网络安全,具体为一种基于神经网络的智能合约漏洞检测方法。
背景技术:
1、智能合约技术的快速发展意味着开发人员经常使用新的和未经过测试的框架和工具,这可能会引入新的风险和漏洞。最后,传统程序在运行遇到错误时可以进行修改。然而,由于智能合约的独特性质,一旦部署就不能修改。因此,在部署合约之前使用一个有效且检测准确度高的工具对智能合约代码进行检测是非常重要的。
2、传统的智能合约漏洞检测方法包括符号执行、形式化验证、中间表示和模糊测试。符号执行是一种分析软件的方法,它将程序变量视为符号,系统地探索所有可能的执行路径,以识别导致某些程序行为的输入,如错误或安全漏洞。符号执行是分析软件的强大技术,但其有效性取决于所分析程序的大小和复杂性。形式化验证是一种用于通过在数学上提供它们符合预期的行为来检查智能合约正确性的技术。它包括创建合约逻辑的形式化模型,并使用数学推理来检查模型是否符合预期的行为。在智能合约部署到以太坊之前,形式化验证可以帮助识别智能合约中的潜在漏洞。然而,形式化验证技术通常需要大量的专业知识和时间才能有效地应用,这使得没有专业知识的开发人员很难使用。中间表示用于将智能合约源代转换为更易于分析的形式,然后再进行具体的分析。然而,在分析源代码时,中间表示方法可能会导致精度和准确度损失。模糊测试涉及随机生成输入数据来模拟各种场景,并测试智能合约的鲁棒性和安全性。然而,模糊测试结果在很大程度上依赖于输入生成器的质量,可能无法覆盖所有潜在的漏洞。
3、最近,人们努力采用深度神经网络来检测智能合约漏洞,从而提高了准确性。例如利用lstm网络对源代码进行序列处理,以及构建图来表示智能合约的函数和语义结构。或者利用图神经网络和专家知识进行智能合约漏洞检测。然而,这些方法要么只考虑源代码或者操作码的文本特征,要么在源代码的级别构建语义和控制流,导致智能合约语义和控制流的构建不完整,并使得到的模型使用复杂,检查漏洞效率低。
技术实现思路
1、本发明的目的是提供了一种基于神经网络的智能合约漏洞检测方法。
2、一种基于神经网络的智能合约漏洞检测方法,包括如下操作:
3、s1获取智能合约的控制流图,所述控制流图经简化、聚合后,得到预处理控制流图;
4、s2基于所述预处理控制流图,构建含有节点顺序编号和控制流顺序编号的合约树图;
5、s3所述合约树图经节点特征提取,得到含有操作码特征和现金流特征的特征向量;
6、s4将当前节点的特征向量,和邻居节点的特征向量进行卷积处理,得到第一特征向量;所述第一特征向量经池化处理,得到第二特征向量;所述第二特征向量经分类处理,得到当前节点的漏洞存在标签。
7、如上所述的智能合约漏洞检测方法,所述s1中简化的操作具体为:
8、判断所述控制流图中的叶子节点是否属于主节点;若属于,保留所述对应叶子节点;若不属于,删除所述对应叶子节点。
9、如上所述的智能合约漏洞检测方法,所述s1中聚合的操作包括:
10、聚合连续连接的次要节点的信息,和/或聚合次要节点与其分支上的其他次要节点的信息,和/或聚合循环连接的次要节点的信息。
11、如上所述的智能合约漏洞检测方法,所述s2的操作具体为:
12、获取所述预处理控制流图中从根节点到叶节点的所有路径,合并所述预处理控制流图执行时不同路径中的相同控制流,得到所述合约树图。
13、如上所述的智能合约漏洞检测方法,所述s3中节点特征提取的操作具体为:
14、获取所述合约树图中操作码对应的字节码值,根据所述操作码在合约树图中的执行顺序,对字节码值进行排序,得到操作码特征;
15、获取所述合约树图中发送方和接收方之间的余额信息,得到现金流特征;
16、将所述操作码特征与现金流特征进行拼接,得到所述特征向量。
17、如上所述的智能合约漏洞检测方法,所述s4中卷积的操作具体为:
18、基于当前节点的特征向量,和邻居节点的特征向量的平均值,得到所述第一特征向量。
19、所述卷积的操作之后,还包括:
20、获取当前节点的评分值,若所述评分值小于标准值,更新当前节点的邻居节点和邻接矩阵,执行所述s4中的卷积操作;若所述评分值不小于标准值,执行所述s4中的池化操作。
21、如上所述的智能合约漏洞检测方法,所述s4中池化的操作具体为:
22、基于当前节点的评分值,和邻居节点的评分值的均值,得到节点权重;基于所述节点权重,权重聚合处理所述第一特征向量,得到所述第二特征向量。
23、获取当前节点的评分值的操作具体为:
24、基于所述第一特征向量的最大值和学习参数,得到所述当前节点的评分值。
25、如上所述的智能合约漏洞检测方法,所述s4中分类的操作具体为:
26、基于所述第二特征向量和权值矩阵、偏置向量,经缩放输出处理,得到所述当前节点的漏洞存在标签。
27、本发明的有益效果在于:
28、本发明提供的一种基于神经网络的智能合约漏洞检测方法,简化和聚合处理控制流图,剔除和合并了一些非关键节点,突出关键节点和执行顺序,进而将控制流图转化为合约树图,在保留了合约信息的完整性基础上,理清合约执行路径,提高消息传递效率,节点特点特征提取最大程度保留了合约的语义信息,将得到的节点特征向量进行卷积、池化处理,能够最大化提取合约信息,最后经分类处理,得到漏洞存在结果,该方法在确保不丢失关键信息的基础上,提高检测效率和准确率;
29、本发明提供的基于神经网络的智能合约漏洞检测方法,在检测重入漏洞、自毁漏洞、委托调用漏洞、交易顺序依赖漏洞、时间戳依赖漏洞和整数溢出漏洞方面,具有较高的准确率和精确度。
1.一种基于神经网络的智能合约漏洞检测方法,其特征在于,包括如下操作:
2.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述s1中简化的操作具体为:
3.据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述s1中聚合的操作包括:
4.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述s2的操作具体为:
5.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述s3中节点特征提取的操作具体为:
6.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述s4中卷积的操作具体为:
7.根据权利要求6所述的智能合约漏洞检测方法,其特征在于,所述卷积的操作之后,还包括:
8.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述s4中池化的操作具体为:
9.根据权利要求7或8所述的智能合约漏洞检测方法,其特征在于,获取当前节点的评分值的操作具体为:
10.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述s4中分类的操作具体为: