CN116702157B - 一种基于神经网络的智能合约漏洞检测方法 - Google Patents
一种基于神经网络的智能合约漏洞检测方法 Download PDFInfo
- Publication number
- CN116702157B CN116702157B CN202310741124.4A CN202310741124A CN116702157B CN 116702157 B CN116702157 B CN 116702157B CN 202310741124 A CN202310741124 A CN 202310741124A CN 116702157 B CN116702157 B CN 116702157B
- Authority
- CN
- China
- Prior art keywords
- node
- contract
- feature vector
- control flow
- detection method
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 47
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 22
- 239000013598 vector Substances 0.000 claims abstract description 70
- 238000011176 pooling Methods 0.000 claims abstract description 17
- 238000012545 processing Methods 0.000 claims abstract description 15
- 238000000605 extraction Methods 0.000 claims abstract description 11
- 230000002776 aggregation Effects 0.000 claims abstract description 6
- 238000004220 aggregation Methods 0.000 claims abstract description 6
- 238000000034 method Methods 0.000 claims description 48
- 238000010586 diagram Methods 0.000 claims description 38
- 238000007781 pre-processing Methods 0.000 claims description 16
- 230000004931 aggregating effect Effects 0.000 claims description 13
- 239000011159 matrix material Substances 0.000 claims description 11
- 238000012163 sequencing technique Methods 0.000 claims description 3
- 230000000379 polymerizing effect Effects 0.000 claims 1
- 230000005540 biological transmission Effects 0.000 abstract description 4
- 230000008569 process Effects 0.000 description 13
- 238000004458 analytical method Methods 0.000 description 8
- 238000012360 testing method Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000001419 dependent effect Effects 0.000 description 5
- 230000006399 behavior Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 238000012795 verification Methods 0.000 description 4
- 238000002474 experimental method Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000007619 statistical method Methods 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 235000009499 Vanilla fragrans Nutrition 0.000 description 1
- 244000263375 Vanilla tahitensis Species 0.000 description 1
- 235000012036 Vanilla tahitensis Nutrition 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000013136 deep learning model Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 238000006116 polymerization reaction Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/213—Feature extraction, e.g. by transforming the feature space; Summarisation; Mappings, e.g. subspace methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/042—Knowledge-based neural networks; Logical representations of neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Abstract
本发明涉及网络安全技术领域,具体为一种基于神经网络的智能合约漏洞检测方法;该检测方法通过简化和聚合处理控制流图,剔除和合并了一些非关键节点,突出关键节点和执行顺序,进而将控制流图转化为合约树图,在保留了合约信息的完整性基础上,理清合约执行路径,提高消息传递效率,节点特征提取最大程度保留了合约的语义信息,将得到的节点特征向量进行卷积、池化处理,能够最大化提取合约信息,最后经分类处理,得到漏洞存在结果,该方法在确保不丢失关键信息的基础上,提高检测效率和准确率;且该检测方法在检测重入漏洞、自毁漏洞、委托调用漏洞、交易顺序依赖漏洞、时间戳依赖漏洞和整数溢出漏洞方面,具有较高的准确率和精确度。
Description
技术领域
本发明涉及网络安全技术领域,具体为一种基于神经网络的智能合约漏洞检测方法。
背景技术
智能合约技术的快速发展意味着开发人员经常使用新的和未经过测试的框架和工具,这可能会引入新的风险和漏洞。最后,传统程序在运行遇到错误时可以进行修改。然而,由于智能合约的独特性质,一旦部署就不能修改。因此,在部署合约之前使用一个有效且检测准确度高的工具对智能合约代码进行检测是非常重要的。
传统的智能合约漏洞检测方法包括符号执行、形式化验证、中间表示和模糊测试。符号执行是一种分析软件的方法,它将程序变量视为符号,系统地探索所有可能的执行路径,以识别导致某些程序行为的输入,如错误或安全漏洞。符号执行是分析软件的强大技术,但其有效性取决于所分析程序的大小和复杂性。形式化验证是一种用于通过在数学上提供它们符合预期的行为来检查智能合约正确性的技术。它包括创建合约逻辑的形式化模型,并使用数学推理来检查模型是否符合预期的行为。在智能合约部署到以太坊之前,形式化验证可以帮助识别智能合约中的潜在漏洞。然而,形式化验证技术通常需要大量的专业知识和时间才能有效地应用,这使得没有专业知识的开发人员很难使用。中间表示用于将智能合约源代转换为更易于分析的形式,然后再进行具体的分析。然而,在分析源代码时,中间表示方法可能会导致精度和准确度损失。模糊测试涉及随机生成输入数据来模拟各种场景,并测试智能合约的鲁棒性和安全性。然而,模糊测试结果在很大程度上依赖于输入生成器的质量,可能无法覆盖所有潜在的漏洞。
最近,人们努力采用深度神经网络来检测智能合约漏洞,从而提高了准确性。例如利用LSTM网络对源代码进行序列处理,以及构建图来表示智能合约的函数和语义结构。或者利用图神经网络和专家知识进行智能合约漏洞检测。然而,这些方法要么只考虑源代码或者操作码的文本特征,要么在源代码的级别构建语义和控制流,导致智能合约语义和控制流的构建不完整,并使得到的模型使用复杂,检查漏洞效率低。
发明内容
本发明的目的是提供了一种基于神经网络的智能合约漏洞检测方法。
一种基于神经网络的智能合约漏洞检测方法,包括如下操作:
S1获取智能合约的控制流图,所述控制流图经简化、聚合后,得到预处理控制流图;
S2基于所述预处理控制流图,构建含有节点顺序编号和控制流顺序编号的合约树图;
S3所述合约树图经节点特征提取,得到含有操作码特征和现金流特征的特征向量;
S4将当前节点的特征向量,和邻居节点的特征向量进行卷积处理,得到第一特征向量;所述第一特征向量经池化处理,得到第二特征向量;所述第二特征向量经分类处理,得到当前节点的漏洞存在标签。
如上所述的智能合约漏洞检测方法,所述S1中简化的操作具体为:
判断所述控制流图中的叶子节点是否属于主节点;若属于,保留所述对应叶子节点;若不属于,删除所述对应叶子节点。
如上所述的智能合约漏洞检测方法,所述S1中聚合的操作包括:
聚合连续连接的次要节点的信息,和/或聚合次要节点与其分支上的其他次要节点的信息,和/或聚合循环连接的次要节点的信息。
如上所述的智能合约漏洞检测方法,所述S2的操作具体为:
获取所述预处理控制流图中从根节点到叶节点的所有路径,合并所述预处理控制流图执行时不同路径中的相同控制流,得到所述合约树图。
如上所述的智能合约漏洞检测方法,所述S3中节点特征提取的操作具体为:
获取所述合约树图中操作码对应的字节码值,根据所述操作码在合约树图中的执行顺序,对字节码值进行排序,得到操作码特征;
获取所述合约树图中发送方和接收方之间的余额信息,得到现金流特征;
将所述操作码特征与现金流特征进行拼接,得到所述特征向量。
如上所述的智能合约漏洞检测方法,所述S4中卷积的操作具体为:
基于当前节点的特征向量,和邻居节点的特征向量的平均值,得到所述第一特征向量。
所述卷积的操作之后,还包括:
获取当前节点的评分值,若所述评分值小于标准值,更新当前节点的邻居节点和邻接矩阵,执行所述S4中的卷积操作;若所述评分值不小于标准值,执行所述S4中的池化操作。
如上所述的智能合约漏洞检测方法,所述S4中池化的操作具体为:
基于当前节点的评分值,和邻居节点的评分值的均值,得到节点权重;基于所述节点权重,权重聚合处理所述第一特征向量,得到所述第二特征向量。
获取当前节点的评分值的操作具体为:
基于所述第一特征向量的最大值和学习参数,得到所述当前节点的评分值。
如上所述的智能合约漏洞检测方法,所述S4中分类的操作具体为:
基于所述第二特征向量和权值矩阵、偏置向量,经缩放输出处理,得到所述当前节点的漏洞存在标签。
本发明的有益效果在于:
本发明提供的一种基于神经网络的智能合约漏洞检测方法,简化和聚合处理控制流图,剔除和合并了一些非关键节点,突出关键节点和执行顺序,进而将控制流图转化为合约树图,在保留了合约信息的完整性基础上,理清合约执行路径,提高消息传递效率,节点特点特征提取最大程度保留了合约的语义信息,将得到的节点特征向量进行卷积、池化处理,能够最大化提取合约信息,最后经分类处理,得到漏洞存在结果,该方法在确保不丢失关键信息的基础上,提高检测效率和准确率;
本发明提供的基于神经网络的智能合约漏洞检测方法,在检测重入漏洞、自毁漏洞、委托调用漏洞、交易顺序依赖漏洞、时间戳依赖漏洞和整数溢出漏洞方面,具有较高的准确率和精确度。
附图说明
通过阅读下文优选实施方式的详细描述,本申请的方案和优点对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。
在附图中:
图1为实施例中检测方法的流程示意图;
图2为实施例中简化、聚合处理控制流图的示意图,最左图为初始控制流图,中间图为简化后的控制流图,最右图为聚合后的控制流图;
图3为实施例中简化控制流图的详细代码示意图;
图4为实施例中合约树示意图;
图5为实施例中得到合约树的示意图,(a)图为初始合约树图,(b)图为路径分离后的合约树图,(c)图为合并路径后的合约树图;
图6为实施例中构建合约树图的详细代码图;
图7为实施例中节点特征提取示意图;
图8为实施例中漏洞检测模型示意图;
图9为本实施例提供的检测方法与其他方法的可视化比较结果图,(a)-(f)图分别为了Smartcheck,Oyente,Mythril,Vanillia-RNN,GCN和本实施例在重入漏洞,自毁漏洞,委托调用漏洞,交易顺序依赖漏洞和整数溢出漏洞中的检测结果图。
具体实施方式
下面将结合附图更详细地描述本公开的示例性实施方式。
本实施例提供了一种基于神经网络的智能合约漏洞检测方法,参见图1,包括如下操作:
S1获取智能合约的控制流图,所述控制流图经简化、聚合后,得到预处理控制流图;
S2基于所述预处理控制流图,构建含有节点顺序编号和控制流顺序编号的合约树图;
S3所述合约树图经节点特征提取,得到含有操作码特征和现金流特征的特征向量;
S4将当前节点的特征向量,和邻居节点的特征向量进行卷积处理,得到第一特征向量;所述第一特征向量经池化处理,得到第二特征向量;所述第二特征向量经分类处理,得到当前节点的漏洞存在标签。
S1获取智能合约的控制流图,控制流图经简化、聚合后,得到预处理控制流图。
控制流图(Control Flow Graph,CFG)是智能合约中常用的描述程序代码控制流的图形表示方法。这种图形表示方法可以帮助安全研究人员更好地理解智能合约的行为,并帮助发现潜在的漏洞。每个智能合约都可以表示为一个由节点和有向边组成的CFG。节点表示基础代码块,它是一组连续的指令,在块中按顺序执行。边表示控制流转换,即从一个基础代码块跳转到另一个基础代码块。有两种类型的跳转:相邻块之间的连续跳转,不需要在实际运行时解析跳转地址的操作数,以及非相邻块之间的跳转,需要在执行的过程中解析指令以创建边之间的关系。
简化控制流图。分析使用静态工具检测智能合约漏洞的过程中,发现与智能合约漏洞相关的基本代码块主要可以分为两类。一种为包含与漏洞问题相关的操作码指令的基本代码块,如ADD、TIMESTAMP等,在执行过程中会直接或间接导致漏洞。例如,ADD指令的执行可能直接与整数溢出漏洞有关,而TIMESTAMP在操作中可能间接与时间戳依赖漏洞有关。另一种为,与漏洞无关的基本代码块,容易与其他基本代码块形成特殊相关结构,例如在同一代码块中重复执行的控制流形成的循环调用,以及特殊的分支结构等等。因此,为突出关键信息,提升检测准确率和效率,对CFG进行简化处理。
参见图2中的中间图,简化的操作具体为:判断控制流图中的叶子节点是否属于主节点;若属于,保留叶子节点;若不属于,删除叶子节点;主节点为控制流图中与漏洞相关的基础代码块;叶子节点为控制流图中输出度为0的基础代码块。
简化控制流图的详细过程参见图3,采用自底向上的递归方法对CFG路径进行处理,保证了关键路径和特殊结构的完整性。该代码的递归终止条件是CFG中的所有叶子节点都是主节点。代码的第1行表示递归终止条件,而第4-10行用于检查当前叶子节点是否是主节点,如果不是,则删除叶子节点及其相关边,代码的第12行在经过一轮简化后,检索当前CFG中的新叶子节点,第13行作为递归过程的入口点。
即使CFG简化后,仍然存在大量与漏洞无关的基础代码块-次要节点,但这种基础代码块仍可能与关键代码块中的漏洞相关。此外,大多数图神经网络在信息传播过程中基本是平坦的,为了突出关键节点和控制流的重要性,需要对这些基础代码块进行信息聚合。
参见图2的最右图,聚合的操作包括:聚合连续连接的次要节点的信息,和/或聚合次要节点与其分支上的其他次要节点的信息,和/或聚合循环连接的次要节点的信息;次要节点为控制流图中与漏洞不相关的基础代码块。
聚合操作主要应用于三种类型的结构。第一种结构包括在CFG中连续连接的次要节点,例如图2的最右图中所示的0x41和0xbd,直接将这些连续连接的次要节点的信息进行聚合。第二种结构是特殊的分支跳转,如图2的最右图中所示的0x58和0x51,聚合了次要节点与其分支上的次要节点信息,也保留了分支结构的其他分支的控制流。第三种结构涉及循环,当在源代码中遇到递归调用和循环语句时,就会出现循环,从而导致代码块的循环结构。这种特殊的循环结构通常与漏洞直接相关,由于路径爆炸问题,使用传统的符号执行过程很难准确识别。因此这种类型的结构是独特的,因此需要单独地聚合循环连接的次要节点的信息,而不影响其他分支。
S2基于预处理控制流图,构建含有节点编号和控制流顺序的合约树图。
合约树定义。合约树中每个节点都是一个代码块,并携带一个唯一标识符,每个有向边是从一个代码块传递到另一个代码块的控制流;根节点是程序执行的起始代码块;每个叶节点都是程序执行的终止代码块;节点之间的相邻边序列称为路径,每个路径表示程序执行期间的一个场景。图4为一个合约树的示意图。ei表示带编号的控制流。在每条路径中,i从小到大的顺序表示控制流的实际操作顺序。Mi表示节点号,带有相同下标i的节点为同一代码块,M0的左分支有两个M3,说明到达M3有两条不同的路径,M0的右分支中,存在多个M4~M5控制流,对应CFG中的循环结构。e1和e5是程序执行的分支控制流,在程序执行过程中不会并发执行,所在路径在程序执行时不相关。因此,合约树中M0到M1和M0到M4的信息传递过程可以同时进行。综上,合约树的特征包括:完整性-合约树包含程序执行的所有路径,每个路径仅代表一种情况;临时性—合约树中的每个路径都是按照一次执行中的每个代码块的顺序构建的;效率—简化和聚合每条路径中与漏洞无关的节点,合并路径,可提高消息传递效率。
构建合约树图的操作具体为:获取预处理控制流图中从根节点到叶节点的所有路径,合并预处理控制流图执行时不同路径中的相同控制流,得到合约树图;根节点为预处理控制流图执行的起始基础代码块;叶节点为预处理控制流图执行的终止基础代码块。如图5所示,构建合约树图有两个关键步骤:首先,得到CFG中所有路径的执行顺序(参见图5中的b图),其中每条路径代表程序执行的一种情况,然后,合并在程序执行过程中不同路径的相同控制流,形成一个合约树图(参见图5中的c图)。
构建合约树图的详细过程参见图6,在第1行中,获得从根节点到每个叶节点的所有可能路径。在第2行中,计算所有边上每个节点的传入边数。在第3行中,访问第一条路径中的节点,并计算每个节点被访问的次数。接下来,第4-12行从第二条路径开始遍历每条路径。对于路径中的每个节点,如果满足访问条件(第6行),则访问次数减1(第7行),如果不满足访问条件,则将其从路径中移除(第8行)。节点被访问的条件如下:首先,该节点以前没有被访问过。其次,节点的出度大于访问的次数。最后,如果节点是叶节点,并且入度大于它被访问的次数,那么它也可以被访问。最后,第13行合并剩余的路径以形成合约树图。S3合约树图经节点特征提取,得到含有操作码特征和现金流特征的特征向量。
获取合约树图中操作码对应的字节码值,根据操作码在合约树图中的执行顺序,对字节码值进行排序,得到操作码特征;静态分析合约树图,获取合约树图中发送方和接收方之间的余额信息,得到现金流特征;将操作码特征与现金流特征进行拼接,现金流特征的位置在操作码特征之后,得到特征向量。
具体节点提取过程参见图7,首先从操作码中提取语义信息。使用每个操作码对应的字节码的十进制值字节码值作为操作码特征,并根据操作码的执行顺序将其映射到特征向量中的索引位置。特征向量中的每个值代表当前节点中包含的一条操作码指令,操作码特征中的索引位置对应于该操作码的执行顺序。由于每个节点的操作码数量可能不同,因此需设置特征向量的最大维数,并使用0x00表示未填充的操作码特征位置。此外,在节点特征提取时考虑特殊结构,调查发现路径探索的最大深度为50。因此,在分析过程中,将特殊循环结构的最大循环数设置为50。
为了保证节点特征提取的完整性,按照执行顺序解析代码块中的每个完整指令,并保留对漏洞最重要的现金流信息。使用IS_t和IA_t来模拟执行第t个代码块执行后发送方和接收方的余额。与传统的静态分析方法不同,根据合约树中相应的特殊结构节点的执行频率,例如与可重入漏洞相关的循环结构,来固定每次转账的数量,并设置IS_t和IA_t的初始值,例如与重入漏洞相关的循环结构等。一旦节点特征提取过程完成,就可以获得节点操作码特征和节点现金流特征。利用这些特征作为节点特征来生成合约树的数据集,并将构建的数据集馈送到深度学习模型中进行训练。
训练过程中,为了评估本实施例提供的节点特征提取方法的有效性,使用方差δ作为评估指标,计算公式如下:
N表示样本数量,xi表示样本值,μ表示样本均值。通过对1500多个智能合约生成的特征向量的每个维度的值、不同特征向量上的相同维度的值进行了统计分析以及各自的特征向量进行统计分析,结果表明,除了填充0x00的维度外,每个特征向量的不同维度之间的特征分布较广,但不同特征向量的不同维度之间的差异不显著。因此,本实施例提供的节点特征提取方法不会造成大多数机器学习在某些维度上过拟合或欠拟合。
S4将当前节点的特征向量,和邻居节点的特征向量进行卷积处理,得到第一特征向量;第一特征向量经池化处理,得到第二特征向量;第二特征向量经分类处理,得到当前节点的漏洞存在标签。
参见图8,使用智能合约静态分析特点的ST-GNN网络模型进行漏洞检测,该模型结合并扩展了SAGConv和TopKpooling,结合SAGConv和Topkpooling对GNN有很多好处,这种结合提高了大规模图形处理、局部信息学习和计算效率,同时保持了模型的清晰度和可解释性。以合约树图T作为输入,输出标签y∈{0,1},表示智能合约是否存在漏洞,1为存在,0为不存在。
卷积的操作具体为:基于当前节点(节点i)的特征向量,和邻居节点的特征向量的平均值,得到第一特征向量;通过卷积层可更新节点的特征,卷积计算公式如下:
x′j=W1xi+W2·meanj∈N(i)xj
x′j为第一特征向量,W1为可学习参数,W2为权重参数,表示两个可训练的权矩阵,xi为节点i的特征向量,xj为节点i邻居节点j的特征向量。
卷积的操作之后,还包括:获取当前节点的评分值,若评分值小于标准值,更新当前节点的邻居节点和邻接矩阵,执行S4中的卷积操作;若评分值不小于标准值,执行S4中的池化操作。
获取当前节点的评分值的操作具体为:基于第一特征向量的最大值和学习参数,得到当前节点的评分值。获取评分值的计算公式如下:
si为节点i的评分值,为学习参数。获取邻居节点的评分值的操作也可以通过上述公式实现。
更新节点i的邻居节点的操作具体为:
将邻居节点划分为第一节点集合和第二节点集合,第一节点集合内节点评分值均大于第二节点集合内节点评分值,保留第一节点集合,删除第二节点集合。第一节点集合内节点数量为邻居节点中节点总数量的80%。
更新节点i的邻接矩阵的计公式为:
A′=σ(ATD-1AD)
A'为节点i更新后的邻接矩阵,A为节点i的初始邻接矩阵,D为度矩阵,σ为sigmoid函数。
池化的操作具体为:基于当前节点的评分值,和邻居节点的评分值的均值,得到节点权重;基于节点权重,权重聚合处理第一特征向量,得到第二特征向量。池化的计算公式如下:
sj为节点j的评分值,a'i为节点i的节点权重,h'i为节点i的第二特征向量。
分类的操作具体为:基于第二特征向量和权值矩阵、偏置向量,经缩放输出处理,得到当前节点的漏洞存在标签。分类的计算公式为:
h″i为多次池化后的第二特征向量,只执行1次池化过程时,h″i=h′i,σ为sigmoid函数,W为权值矩阵,b为偏置向量,|V|为经过多轮卷积和池化后得到的节点数量。
为展示本实施例提供的方法的可靠性,将本实施例提供的方法与三种最先进的方法(Mythril、Oyente和Smartcheck)进行比较,也将本实施例提供的方法与基于替代神经网络的两种方法进行比较:Vanilla Graph neural networks(Vanilla-gnn)和GraphConvolutional networks(GCN),如下。
数据集。本实施例提供的方法可以检测智能合约的源代码和字节码。然而,由于智能合约字节码的不可读性,测试工具对不同版本智能合约的不同支持度,以及分类和手动审查智能合约的难度,实验选择了从Etherscan中提取从0.4-0.8版本不等的7962个智能合约作为实验的数据集。考虑了数据集中漏洞分布的不均匀性,并相应地调整了六种类型漏洞(重入漏洞、自毁漏洞、委托调用漏洞、交易顺序依赖漏洞、时间戳依赖漏洞以及整数溢出漏洞)的分布。在对智能合约的分析和审查过程中,发现80%的合约都有复杂的调用关系,而几乎所有的合约都有特殊的合约结构。
实验设置。由于大多数基于神经网络的智能合约漏洞检测方法的非开源性质,以及在本地运行一些提供源代码的项目时遇到困难,本实施例提供的方法与传统的智能合约漏洞检测工具进行比较,以间接地与其他基于神经网络的方法进行评估。实验中,比较了三种传统的智能合约漏洞检测方法Mythril,Oyente,Smartcheck和两种基于神经网络的方法GCN和Vanillia-GNN。数据集被随机分为40%用于训练,10%用于验证,50%用于测试。使用准确率,召回率、精确率和F1-Socre作为评估指标来比较这些方法的性能。由于Oyente无法检测所有0.4.26以上版本的智能合约,所以总结了数据集中所有0.4.26版本以下的智能合约,并相应的调整了漏洞的分布。实验结果参见表1和表2。
与最先进的方法的比较。将本实施例提供的方法与现有的非深度学习方法Smartcheck、Oyente和Mythril在检测6种类型的漏洞方面进行了比较,实验结果参见表1和表2。根据表1和表2的统计分析,可以得出如下结论:目前最先进的工具对这六种漏洞的检测准确率并不理想,其中最高的准确率仅为71.69%,而其次,本实施例提供的方法的准确率最高,平均准确率超过了80%,最高可达到85.52%,比其他方法高出13.83%。但这6个漏洞的检测准确率在现有工具中存在显著差异,准确率最低为40.39%。为了进一步比较本实施例提供的检测方法与最先进的工具,在图9中可视化了实验数据,在每个子图中,从左到右的x轴分别表示准确率,召回率,精确率和F1得分,从前到后的y轴分别表示Smartcheck,Oyente,Mythril,Vanillia-RNN,GCN和本实施例,(a)-(f)图分别展示了六种智能合约漏洞检测方法在六个方面的比较结果:重入漏洞,自毁漏洞,委托调用漏洞,交易顺序依赖漏洞和整数溢出漏洞。对智能合约的漏洞检测现有的工具进行了进一步研究,以探索这些观察结果的原因。结果Smartcheck主要依赖严格而简单的逻辑规则来检测漏洞,导致准确率和F1-score较低。Oyente使用数据流分析来提高准确率,但检测漏洞的基础模式并不十分准确。相比其他方法,Mythril整合了符号执行、污点分析和手动审核等复杂的技术来检测漏洞。
与基于神经网络的方法比较。将本实施例提供的方法与其他常用的可替换的神经网络模型,即Vanillan-RNN和GCN,将6种检测漏洞检测结果进行了比较。实验结果参见表1和表2。基于统计结果,得出的结论是:基于神经网络的方法的准确性优于上述最先进的方法,但仍然不及本实施例提供的方法的准确性。检测重入漏洞时,准确率虽达到了77.85%,但与本实施例提供的方法的检测准确率相比仍然存在一定差距。且从图9也可以看出,本实施例提供的方法在各种漏洞检测任务中的准确率优于Vanillia-RNN和GCN,凸显了本实施例提供的方法更可靠性。
表16种方法在重入漏洞、自毁漏洞和委托调用漏洞方面的检测性能比较(-表示不适用)
表26种方法在交易顺序依赖性、时间戳依赖性和整数溢出漏洞方面的检测性能比较
(-表示不适用)
分析认为本实施例提供的方法之所以有较高的准确率、召回率、精确度和F1-score,是因为在漏洞检测过程中,本实施例提供的方法保留了智能合约的语义信息能力,以及模拟智能合约的静态分析过程,这种综合方法可以更详细地理解代码,从而更好地检测漏洞。
本实施例提供的一种基于神经网络的智能合约漏洞检测方法,简化和聚合处理控制流图,剔除和合并了一些非关键节点,突出关键节点和执行顺序,进而将控制流图转化为合约树图,在保留了合约信息的完整性基础上,理清合约执行路径,提高消息传递效率,节点特点特征提取最大程度保留了合约的语义信息,将得到的节点特征向量进行卷积、池化处理,能够最大化提取合约信息,最后经分类处理,得到漏洞存在结果,该方法在确保不丢失关键信息的基础上,提高检测效率和准确率。
本实施例提供的基于神经网络的智能合约漏洞检测方法,在检测重入漏洞、自毁漏洞、委托调用漏洞、交易顺序依赖漏洞、时间戳依赖漏洞和整数溢出漏洞方面,具有较高的准确率和精确度。
Claims (7)
1.一种基于神经网络的智能合约漏洞检测方法,其特征在于,包括如下操作:
S1 获取智能合约的控制流图,所述控制流图经简化、聚合后,得到预处理控制流图;
所述简化的操作具体为:判断所述控制流图中的叶子节点是否属于主节点;若属于,保留对应叶子节点;若不属于,删除对应叶子节点;
所述聚合的操作包括:聚合连续连接的次要节点的信息,和/或聚合次要节点与其分支上的其他次要节点的信息,和/或聚合循环连接的次要节点的信息;
S2 基于所述预处理控制流图,构建含有节点顺序编号和控制流顺序编号的合约树图;
具体为:获取所述预处理控制流图中从根节点到叶节点的所有路径,合并所述预处理控制流图执行时不同路径中的相同控制流,得到所述合约树图;
S3 所述合约树图经节点特征提取,得到含有操作码特征和现金流特征的特征向量;
S4 将当前节点的特征向量,和邻居节点的特征向量进行卷积处理,得到第一特征向量;所述第一特征向量经池化处理,得到第二特征向量;所述第二特征向量经分类处理,得到当前节点的漏洞存在标签。
2.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S3中节点特征提取的操作具体为:
获取所述合约树图中操作码对应的字节码值,根据所述操作码在合约树图中的执行顺序,对字节码值进行排序,得到操作码特征;
获取所述合约树图中发送方和接收方之间的余额信息,得到现金流特征;
将所述操作码特征与现金流特征进行拼接,得到所述特征向量。
3.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S4中卷积的操作具体为:
基于当前节点的特征向量,和邻居节点的特征向量的平均值,得到所述第一特征向量。
4.根据权利要求3所述的智能合约漏洞检测方法,其特征在于,所述卷积的操作之后,还包括:
获取当前节点的评分值,若所述评分值小于标准值,更新当前节点的邻居节点和邻接矩阵,执行所述S4中的卷积操作;若所述评分值不小于标准值,执行所述S4中的池化操作。
5.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S4中池化的操作具体为:
基于当前节点的评分值,和邻居节点的评分值的均值,得到节点权重;基于所述节点权重,权重聚合处理所述第一特征向量,得到所述第二特征向量。
6.根据权利要求4或5所述的智能合约漏洞检测方法,其特征在于,获取当前节点的评分值的操作具体为:
基于所述第一特征向量的最大值和学习参数,得到所述当前节点的评分值。
7.根据权利要求1所述的智能合约漏洞检测方法,其特征在于,所述S4中分类的操作具体为:
基于所述第二特征向量和权值矩阵、偏置向量,经缩放输出处理,得到所述当前节点的漏洞存在标签。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310741124.4A CN116702157B (zh) | 2023-06-21 | 2023-06-21 | 一种基于神经网络的智能合约漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310741124.4A CN116702157B (zh) | 2023-06-21 | 2023-06-21 | 一种基于神经网络的智能合约漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116702157A CN116702157A (zh) | 2023-09-05 |
CN116702157B true CN116702157B (zh) | 2023-12-26 |
Family
ID=87835560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310741124.4A Active CN116702157B (zh) | 2023-06-21 | 2023-06-21 | 一种基于神经网络的智能合约漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116702157B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117201138B (zh) * | 2023-09-13 | 2024-02-13 | 烟台大学 | 一种基于漏洞子图的智能合约漏洞检测方法、系统和设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109981564A (zh) * | 2019-01-28 | 2019-07-05 | 中国科学院信息工程研究所 | 一种基于区块链的威胁情报交换共享方法 |
WO2020249572A1 (en) * | 2019-06-12 | 2020-12-17 | NEC Laboratories Europe GmbH | Method and contract rewriting framework system for supporting smart contracts in a blockchain network |
CN112527781A (zh) * | 2020-12-23 | 2021-03-19 | 上海万向区块链股份公司 | 一种智能合约数据迁移方法及系统 |
US11036614B1 (en) * | 2020-08-12 | 2021-06-15 | Peking University | Data control-oriented smart contract static analysis method and system |
US11315193B1 (en) * | 2020-02-12 | 2022-04-26 | BlueOwl, LLC | Systems and methods for implementing a decentralized insurance platform using smart contracts and multiple data sources |
CN115795479A (zh) * | 2022-11-24 | 2023-03-14 | 远光软件股份有限公司 | 一种智能合约的漏洞检测方法、电子设备和存储介质 |
CN115855948A (zh) * | 2022-11-11 | 2023-03-28 | 烟台大学 | 海洋工程结构腐蚀图像采集装置 |
CN116089957A (zh) * | 2022-12-29 | 2023-05-09 | 河南大学 | 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置 |
-
2023
- 2023-06-21 CN CN202310741124.4A patent/CN116702157B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109981564A (zh) * | 2019-01-28 | 2019-07-05 | 中国科学院信息工程研究所 | 一种基于区块链的威胁情报交换共享方法 |
WO2020249572A1 (en) * | 2019-06-12 | 2020-12-17 | NEC Laboratories Europe GmbH | Method and contract rewriting framework system for supporting smart contracts in a blockchain network |
US11315193B1 (en) * | 2020-02-12 | 2022-04-26 | BlueOwl, LLC | Systems and methods for implementing a decentralized insurance platform using smart contracts and multiple data sources |
US11036614B1 (en) * | 2020-08-12 | 2021-06-15 | Peking University | Data control-oriented smart contract static analysis method and system |
CN112527781A (zh) * | 2020-12-23 | 2021-03-19 | 上海万向区块链股份公司 | 一种智能合约数据迁移方法及系统 |
CN115855948A (zh) * | 2022-11-11 | 2023-03-28 | 烟台大学 | 海洋工程结构腐蚀图像采集装置 |
CN115795479A (zh) * | 2022-11-24 | 2023-03-14 | 远光软件股份有限公司 | 一种智能合约的漏洞检测方法、电子设备和存储介质 |
CN116089957A (zh) * | 2022-12-29 | 2023-05-09 | 河南大学 | 一种基于语法和语义特征融合的智能合约漏洞检测方法及装置 |
Non-Patent Citations (4)
Title |
---|
SlightDetection:一种以太坊智能合约安全漏洞的静态分析工具;陈霄汉;赵相福;张登记;费佳佳;应用科学学报;第40卷(第4期);695-712 * |
区块链中电商冷链溯源系统Petri网建模与分析;张诚;刘守臣;;企业经济(第01期);48-55 * |
基于Ethereum智能合约的安全策略分析;张登记;赵相福;陈中育;童向荣;应用科学学报;第39卷(第1期);151-163 * |
张诚 ; 刘守臣 ; .区块链中电商冷链溯源系统Petri网建模与分析.企业经济.2020,(第01期),48-55. * |
Also Published As
Publication number | Publication date |
---|---|
CN116702157A (zh) | 2023-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
Chihada et al. | Source code and design conformance, design pattern detection from source code by classification approach | |
CN108595341B (zh) | 测试用例自动生成方法及系统 | |
CN117951701A (zh) | 用于确定软件代码中的缺陷和漏洞的方法 | |
JP7439242B2 (ja) | 機械学習モデルの視覚的作成及び監視 | |
CN110704846B (zh) | 一种人在回路的智能化安全漏洞发现方法 | |
CN108491228A (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN112364352B (zh) | 可解释性的软件漏洞检测与推荐方法及系统 | |
CN116702157B (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
Alrabaee et al. | On leveraging coding habits for effective binary authorship attribution | |
Naeem et al. | Scalable mutation testing using predictive analysis of deep learning model | |
CN116361810A (zh) | 一种基于符号执行的智能合约漏洞检测方法 | |
CN112765031A (zh) | 一种群智化漏洞挖掘任务的分解方法 | |
CN115022026A (zh) | 一种区块链智能合约威胁检测装置及方法 | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
CN113312058B (zh) | 一种智能合约二进制函数的相似性分析方法 | |
Rajbahadur et al. | Pitfalls analyzer: quality control for model-driven data science pipelines | |
CN116975881A (zh) | 一种基于llvm的漏洞细粒度定位方法 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
CN115878498A (zh) | 一种基于机器学习预测程序行为的关键字节提取方法 | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
CN114372266A (zh) | 基于操作码图的安卓恶意软件检测方法 | |
CN115879868B (zh) | 一种专家系统与深度学习相融合的智能合约安全审计方法 | |
Duy et al. | VulnSense: Efficient Vulnerability Detection in Ethereum Smart Contracts by Multimodal Learning with Graph Neural Network and Language Model | |
He et al. | GraphSA: Smart Contract Vulnerability Detection Combining Graph Neural Networks and Static Analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |