CN116467720A - 一种基于图神经网络的智能合约漏洞检测方法及电子设备 - Google Patents
一种基于图神经网络的智能合约漏洞检测方法及电子设备 Download PDFInfo
- Publication number
- CN116467720A CN116467720A CN202310456016.2A CN202310456016A CN116467720A CN 116467720 A CN116467720 A CN 116467720A CN 202310456016 A CN202310456016 A CN 202310456016A CN 116467720 A CN116467720 A CN 116467720A
- Authority
- CN
- China
- Prior art keywords
- graph
- node
- type
- edge
- intelligent contract
- 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.)
- Pending
Links
Classifications
-
- 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
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种基于图神经网络的智能合约漏洞检测方法及电子设备,首先构建智能合约源代码数据集,并根据样本是否存在漏洞标记数据集样本;然后通过静态代码分析技术筛选源代码样本中与漏洞相关的代码片段;再通过程序语法语义技术把代码片段转化成图数据结构表示;接下来构建图神经网络模型,将图作为输入,选用edGNN实现图结构中的节点的向量表示;按照边类型将图结构拆分成两个子图,分别进行图卷积和图池化操作;通过注意力机制聚合三个图的输出,送入分类器进行智能合约漏洞预测;最后用训练好的混合图神经网络模型进行智能合约源代码的漏洞检测。本发明保留了代码丰富语义和显式结构信息;提高了检测的效率、准确性和自动化程度。
Description
技术领域
本发明涉及智能合约技术领域,具体涉及一种基于图神经网络的智能合约漏洞检测方法及电子设备。
背景技术
智能合约是一种由事件驱动的、具有状态的代码合约。随着区块链技术的快速发展,作为区块链核心的智能合约得到了广泛应用,令区块链成为具有一定颠覆性的技术。然而,智能合约中的漏洞带来的巨大经济损失,成了这项技术不得不解决的一项难题,这也加强了人们对智能合约安全问题的关注。
恶意攻击者可以利用智能合约漏洞获取经济利益,近几年来,智能合约中存在许多被恶意利用的漏洞。2016年著名的DAO事件发生,黑客利用DAO合约的可重入性漏洞窃取了360万以太币,造成了大量经济损失。由于安全漏洞,区块链网络已经遭受了超过100亿美元的损失。而且智能合约一旦部署就不可改变,损失无法挽回。因此,在部署智能合约之前,对其进行有效的漏洞检查至关重要。
目前区块链领域内还没有公认的智能合约审计手段来检测智能合约代码中是否隐藏有安全漏洞。开始,智能合约的安全性保障工作主要依靠人工。随后,提出了许多方法,如符号执行、形式化验证KEVM、中间表示等,用来检测智能合约的漏洞。这些传统的检测方法主要依赖人工,效率较低,随着智能合约的广泛应用,其数量也在不断增长,传统方法难度加大,适用性不高。
神经网络在智能合约分析领域也越来越受欢迎,也是智能合约自动化漏洞检测的趋势。应用不同的技术,如长短时记忆(LSTM)建模、卷积神经网络或N-gram语言模型,本领域获得了较好的结果。但是现有的分析方法大多基于智能合约代码的字节码进行漏洞检测,缺乏对漏洞代码程序语义特征的理解,检测效果不佳。因此,可以构建一个基于图神经网络的智能合约漏洞检测方法,用在智能合约源代码的漏洞检测上,能够及时发现智能合约漏洞可能带来的巨大风险。
发明内容
针对上述存在的问题,本发明提供了一种自动化程度高、检测精度高的智能合约漏洞检测方法及电子设备。
为了实现上述目的,本发明采取了如下技术方案:
一种基于图神经网络的智能合约漏洞检测方法,包括如下步骤:
S1,收集智能合约源代码数据集,并根据样本是否存在漏洞标记数据集样本;
S2,通过静态代码分析技术筛选智能合约源代码样本中与漏洞相关的代码片段;
S3,通过改进的独热编码算法将S2处理过的代码片段转化成可供神经网络输入的图数据结构表示;
S4,构建图神经网络模型,将S3获得的图作为其输入,选用edGNN实现图结构中的节点的向量表示;按照边类型将图结构拆分成两个子图(控制流子图和数据流子图),分别进行图卷积和图池化操作;通过注意力机制聚合三个图的输出,送入分类器进行智能合约漏洞预测;
S5,通过源代码图化和训练结束后的混合图神经网络模型进行智能合约源代码的漏洞检测。
进一步地,上述步骤S1的数据收集包括:
S11,通过以太坊区块链浏览器Etherscan平台上收集智能合约源代码;
S12,通过智能合约漏洞检测工具检测收集到的智能合约源代码,并根据检测结果对其进行标记,检测工具结果显示存在漏洞的智能合约标记为"1",表示该合约存在漏洞,否则标记为"0",根据检测三种漏洞的检测结果,给样本标记标签,存在可重入漏洞则在第一位标注1,否则标注0,存在时间戳依赖漏洞则在第二位标注1,否则标注0,存在无限循环漏洞则在第三位标注1,否则标注0;
S13,通过人工审计对标记过的智能合约源代码样本的标签进一步检查修正,以确保样本标记的准确性。
进一步地,上述步骤S2中的筛选源代码样本中与漏洞相关的代码片段包括:
S21,通过静态代码分析技术去除源代码样本中"//"之后到行尾的代码注释和"/*"与"*/"以及其之间的代码注释;
S22,通过静态代码分析技术结合相关漏洞关键节点筛选出样本中与漏洞相关的代码片段:针对可重入漏洞,选择call.value关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于可重入漏洞的程序切片内容,针对时间戳依赖漏洞,选择block.timestamp关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于时间戳依赖的程序切片内容,针对无限循环漏洞,选择循环关键词for和while作为关键节点,通过分析代码中的调用依赖关系,留下与此节点相关的代码片段,获得关于无限循环漏洞的程序切片内容;
进一步地,上述步骤S3中的代码片段转化成图数据包括:
S31,通过程序语法语义技术分析代码片段的数据依赖、控制依赖关系,获得合约疑似漏洞图的节点和边数据,其中把关键节点的类型标记为c,其他相关节点的类型标记为n,分析出变量间的数据依赖关系边的类型标记为de,分析出量间的控制依赖关系边的类型标记为ce:针对可重入漏洞的代码片段,关键节点为call.value,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接,最后在关键节点与所在函数节点之间添加一条无向的fallback边,针对时间戳漏洞的代码片段,关键节点为block.timestamp,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接,针对无限循环漏洞的代码片段,关键节点为call.value,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接;
S32,通过改进的独热编码将提取出的漏洞特征图中节点和边转换为向量:首先统计图中最大节点数目,确定图中节点维度,给每个节点分配独热编码,特殊地,增加节点类别补位,c节点补10,n节点补01,并对节点归一化,得到图中节点的初步表示,边的向量化通过独热编码技术,对de类型表示为100,ce类型的边表示为010,fallback边表示为001,最后得到图的初始表示:
G=(V,E,X)
其中,V表示图节点集合,|V|=n,n为节点个数,X∈R(n+2)*表示节点的特征矩阵,其中d表示节点特征的维度,E∈{0,1}n*n*c表示边的特征集合,其中c为边的种类数目,如说明从节点vi到节点vj有一条类型为l的边。
进一步地,上述步骤S4的具体实现包括:
S41,将S3获得的智能合约源代码漏洞特征图G=(V,E,X)作为edGNN模型的输入,进行图卷积运算,共两层的图卷积操作,第一个图卷积网络层包括一个图卷积加一个归一化层,输出特征维度为64,第二个图卷积层包括一个图卷积层,输出特征维度为32,通过这两层的图卷积,实现智能合约特征图G中节点的聚合,将得到的图保存为G′=(V,E,X′);
所述图卷积计算公式如下:
f(t)(v)=σ(f(t-1)(v)W1 *t)+∑u∈N(v)f(t-1)(u)W2 (t)+∑(u,v)∈EfE(u,v,lE(u,v))W3 (t)+∑(u,v)∈EfE(v,u,lE(v,u))W4 (t))
其中,u,v表示图中节点,N(v)表示节点v的邻居节点,f(l)(v)表示经过第l层后得到的节点v的向量表示,Wi (l),i=1,2,3,4,表示第l隐藏层中的权重,σ表示激活函数,lE(u,v)是从节点u到节点v的有向边的标签,fE(u,v,lE(u,v))表示对从节点u到节点v的标签为l的边的非线性操作,该非线性操作公式如下:
fE(u,v,lE(u,v))=MLP(concat(u,lE(u,v),v))
S42,通过静态分析,将S41获得的特征图G′=(V,E,X′)按照图中边的类型拆分成两个子图;拆分步骤具体如下:判断图G中边的类型是否为控制流边,如果是,则保存图中与边相关的节点和这条边,最后得到控制流子图Gc=(Vc,Ec,X′c);判断图G中边的类型是否为数据流边,如果是,则保存图中与边相关的节点和这条边,最后得到数据流子图Gd=(Vd,Ed,X′d);
S43,将S42获得的两个子图Gc和Gd以及特征图G′分别输入SAGPool模型,进行图池化操作,所述图池化计算包括如下公式:
其中,Z表示节点的自注意力值,Z∈RN*1,表示子图中经过l层的图卷积操作后学习到的节点向量表示矩阵,/> 表示/>的度矩阵,θatt是SAGPool模型的注意力参数,hsub表示子图的最终表示,Zv表示子图中节点v的自注意力值,f(v)表示节点v的向量表示;
S44,通过注意力机制聚合三个图的输出,并输入到分类器进行漏洞标签的输出;公式如下:
W=MLP(h1,h2,h)
其中W表示子图的注意力值,MLP为多层感知机,h1,h2,h分别表示控制流子图的最终表示、数据流子图的最终表示和整体图的最终表示;
hG=σ(∑W*hsub)
其中hG表示最终的图标签,输出维度为3,σ表示激活函数,这里使用Softmax激活函数;
然后定义一个目标函数来衡量当前输出和真是结果的差异,并定义了一个多分类损失函数,损失函数公式如下:
其中,p=[p1,…,pn]是一个概率分布,每个元素pi表示样本属于第i类的概率;y=[y1,…,yn]是样本标签的onehot表示,当样本属于第i类时,yi=1,否则yi=0;N表示的时样本类别数;
S45,循环S41-S44,训练该模型:在Windows系统下,该网络模型在开始训练时进行初始化实现对样本特征的初步提取,采用反向传播学习算法,通过Adam优化器,计算损失函数的值,根据loss值的大小,更新迭代网络层需要学习的权重和偏置项。
进一步地,上述步骤S5包括:
S51,将待测智能合约源代码输入模型,经过S2-S3,将得到的智能合约图,输入训练好的混合图神经网络模型,得出智能合约漏洞检测结果,
S52,根据S51的结果数据判断合约是否存在漏洞,存在哪种漏洞,并且通过源代码关键词查找技术定位出漏洞所在位置,然后输出展示智能合约中是否存在漏洞,如果存在漏洞存在的漏洞类型是什么,并输出漏洞所在行号,如果不存在漏洞则输出合约不存在漏洞。
基于上述检测方法,本发明还提出一种电子设备,该电子设备执行程序时包含上述的检测方法的步骤S2-S5。
本发明的有益效果:
(1)本发明采用提取图结构的形式进行智能合约漏洞检测任务,保留了智能合约代码丰富语义和显式结构信息,从而提高图神经网络检测漏洞的正确率。
(2)本发明采用图神经网络进行智能合约漏洞检测任务,减少人工处理,提高了智能合约漏洞检测的自动化程度。
(3)本发明采用图神经网络与注意力机制结合的方式进行图分类任务,以此来检测智能合约漏洞,提高了智能合约漏洞检测任务的精确率。
附图说明
图1是本发明基于图神经网络的智能合约漏洞检测方法的流程图;
图2是本发明实施例提供的图神经网络模型架构图;
具体实施方式
本发明首先构建智能合约源代码数据集,并根据样本是否存在漏洞标记数据集样本;然后通过静态代码分析技术筛选源代码样本中与漏洞相关的代码片段;再通过程序语法语义技术把代码片段转化成图数据结构表示;接下来构建图神经网络模型,将图作为输入,选用edGNN实现图结构中的节点的向量表示;按照边类型将图结构拆分成两个子图(控制流子图和数据流子图),分别进行图卷积和图池化操作;通过注意力机制聚合三个图的输出,送入分类器进行智能合约漏洞预测;最后用训练好的混合图神经网络模型进行智能合约源代码的漏洞检测。
本发明的优势在于:对智能合约源代码进行语法语义分析,提取出代码的图结构信息,保留了代码丰富语义和显式结构信息;利用程序切片技术消除无关信息,以降低图的复杂性,提高了漏洞检测的准确性;基于图神经网络模型自动学习漏洞特征,提高了智能合约漏洞检测的效率和自动化程度,降低了检测成本,提高了准确性。
下面结合附图以及具体实施例对本发明作进一步的说明,需要指出的是,下面仅以一种最优化的技术方案对本发明的技术方案以及设计原理进行详细阐述,但本发明的保护范围并不限于此。
所述实施例为本发明的优选的实施方式,但本发明并不限于上述实施方式,在不背离本发明的实质内容的情况下,本领域技术人员能够做出的任何显而易见的改进、替换或变型均属于本发明的保护范围。
如图1所示,本发明提供一种基于图神经网络的智能合约漏洞检测方法,包括以下步骤:
S1,收集智能合约源代码数据集,并根据样本是否存在漏洞标记数据集样本;
S2,通过静态代码分析技术筛选智能合约源代码样本中与漏洞相关的代码片段;
S3,通过改进的独热编码算法将S2处理过的代码片段转化成可供神经网络输入的图数据结构表示;
S4,构建图神经网络模型,将S3获得的图作为其输入,选用edGNN实现图结构中的节点的向量表示;按照边类型将图结构拆分成两个子图(控制流子图和数据流子图),分别进行图卷积和图池化操作;通过注意力机制聚合三个图的输出,送入分类器进行智能合约漏洞预测;
S5,通过源代码图化和训练结束后的混合图神经网络模型进行solidity智能合约源代码的漏洞检测。
作为本发明的优选实施例,步骤S1的数据收集包括:
S11,通过以太坊区块链浏览器Etherscan平台收集智能合约源代码;
S12,通过智能合约漏洞检测工具检测收集到的智能合约源代码,并根据检测结果对其进行标记,检测工具结果显示存在漏洞的智能合约标记为"1",表示该合约存在漏洞,否则标记为"0",根据检测三种漏洞的检测结果,给样本标记标签,存在可重入漏洞则在第一位标注1,否则标注0,存在时间戳依赖漏洞则在第二位标注1,否则标注0,存在无限循环漏洞则在第三位标注1,否则标注0;
S13,通过人工审计对标记过的智能合约源代码样本的标签进一步检查修正,以确保样本标记的准确性。
作为本发明的优选实施例,步骤S2中的筛选源代码样本中与漏洞相关的代码片段包括:
S21,通过静态代码分析技术去除源代码样本中"//"之后到行尾的代码注释和"/*"与"*/"以及其之间的代码注释;
S22,通过静态代码分析技术结合相关漏洞关键节点筛选出样本中与漏洞相关的代码片段:针对可重入漏洞,选择call.value关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于可重入漏洞的程序切片内容,针对时间戳依赖漏洞,选择block.timestamp关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于时间戳依赖的程序切片内容,针对无限循环漏洞,选择循环关键词for和while作为关键节点,通过分析代码中的调用依赖关系,留下与此节点相关的代码片段,获得关于无限循环漏洞的程序切片内容;
作为本发明的优选实施例,步骤S3中的代码片段转化成图数据包括:
S31,通过程序语法语义技术分析代码片段的数据依赖、控制依赖关系,获得合约疑似漏洞图的节点和边数据,其中把关键节点的类型标记为c,其他相关节点的类型标记为n,分析出变量间的数据依赖关系边的类型标记为de,分析出量间的控制依赖关系边的类型标记为ce:针对可重入漏洞的代码片段,关键节点为call.value,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接,最后在关键节点与所在函数节点之间添加一条无向的fallback边,针对时间戳漏洞的代码片段,关键节点为block.timestamp,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接,针对无限循环漏洞的代码片段,关键节点为call.value,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接;
S32,通过改进的独热编码将提取出的漏洞特征图中节点和边转换为向量:首先统计图中最大节点数目,确定图中节点维度,给每个节点分配独热编码,特殊地,增加节点类别补位,c节点补10,n节点补01,并对节点归一化,得到图中节点的初步表示,边的向量化通过独热编码技术,对de类型表示为100,ce类型的边表示为010,fallback边表示为001,最后得到图的初始表示:
H=(V,E,X)
其中,V表示图节点集合,|V|=n为节点个数,X∈R(n+2)*d表示节点的特征矩阵,E∈{0,1}n*n*c表示边的特征集合,其中c为边的种类数目,如说明从节点vi到节点vj有一条类型为l的边。
如图2所示,作为本发明的优选实施例,步骤S4中的图神经网络模型的结构包括:两个图卷积层、三个图池化层和一个全连接层,其中第一个图卷积网络层包括一个edGNN卷积加一个归一化层,第二个图卷积层包括一个edGNN卷积,三个图池化层采用SAGPool池化分别池化三个子图,最后一个全连接层汇集三个池化结果;
该图神经网络模型的具体执行过程如下:
S41,将S3获得的智能合约源代码漏洞特征图G=(V,E,X)作为edGNN模型的输入,进行图卷积运算,共两层的图卷积操作,第一个图卷积网络层包括一个图卷积加一个归一化层,输出特征维度为64,第二个图卷积层包括一个图卷积层,输出特征维度为32,通过这两层的图卷积,实现智能合约特征图G中节点的聚合,将得到的图保存为G′=(V,E,X′);
所述图卷积计算公式如下:
f(t)(v)=σ(f(t-1)(v)W1 (t)+∑u∈N(v)f(t-1)(u)W2 (t)+∑(u,v)∈EfE(u,v,lE(u,v))W3 (t)+∑(u,v)∈EfE(v,i,lE(v,u))W4 (t))
其中,u,v表示图中节点,N(v)表示节点v的邻居节点,f(l)(v)表示经过第l层后得到的节点v的向量表示,Wi (l)表示第l隐藏层中的权重,σ表示激活函数,lE(u,v)是从节点u到节点v的有向边的标签,fE(u,v,lE(u,v))表示对从节点u到节点v的标签为l的边的非线性操作,该非线性操作公式如下:
fE(u,v,lE(u,v))=MLP(concat(u,lE(u,v),v))
S42,通过静态分析,将S41获得的特征图G′=(V,E,X′)按照图中边的类型拆分成两个子图;拆分步骤具体如下:判断图G中边的类型是否为控制流边,如果是,则保存图中与边相关的节点和这条边,最后得到控制流子图Gc;判断图G中边的类型是否为数据流边,如果是,则保存图中与边相关的节点和这条边,最后得到数据流子图Gd;
S43,将S42获得的两个子图Gc和Gd以及特征图G′分别输入SAGPool模型,进行图池化操作,所述图池化计算包括如下公式:
其中,Z表示节点的自注意力值,Z∈RN*1,表示子图中经过l层的图卷积操作后学习到的节点向量表示矩阵,/> 表示/>的度矩阵,θatt是SAGPool模型的参数,hsub表示子图的最终表示,Zv表示子图中节点v的自注意力值,f(v)表示节点v的向量表示;
S44,通过注意力机制聚合三个hsub,并输入到分类器;公式如下:
W=MLP(h1,h2,h)
其中W表示子图的注意力值,MLP为多层感知机,h1,h2,h分别表示hc,hd,h;
hG=σ(∑W*hsub)
其中hG表示最终的图标签,输出维度为3,σ表示激活函数,这里使用Softmax激活函数;
然后定义一个目标函数来衡量当前输出和真是结果的差异,并定义了一个多分类损失函数,选择的损失函数公式如下:
其中,p=[p1,…,pn]是一个概率分布,每个元素pi表示样本属于第i类的概率;y=[y1,…,yn]是样本标签的onehot表示,当样本属于第i类时,yi=1,否则yi=0;N表示的时样本类别数;
S45,循环S41-S44,训练该模型:该网络模型在开始训练时进行初始化实现对样本特征的初步提取,采用反向传播学习算法,通过Adam优化器,计算损失函数的值,根据loss值的大小,更新迭代网络层需要学习的权重和偏置项。
作为本发明的优选实施例,步骤S5包括:
S51,将待测智能合约源代码输入模型,经过步骤S2-S3的处理得到智能合约图,输入训练好的混合图神经网络模型,得出智能合约漏洞检测结果,
S52,根据S51的结果数据判断合约是否存在漏洞,存在哪种漏洞,并且通过源代码关键词查找技术定位出漏洞所在位置,然后输出展示智能合约中是否存在漏洞,如果存在漏洞存在的漏洞类型是什么,并输出漏洞所在行号,如果不存在漏洞则输出合约不存在漏洞。
基于上述检测方法,本发明还提出一种电子设备,该电子设备执行程序时包含上述的检测方法。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技术所创的等效方式或变更均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于图神经网络的智能合约漏洞检测方法,其特征在于,包括如下步骤:
S1,收集智能合约源代码数据集,并根据样本是否存在漏洞标记数据集样本;
S2,筛选智能合约源代码样本中与漏洞相关的代码片段;
S3,通过改进的独热编码算法将S2处理过的代码片段转化成可供神经网络输入的图数据结构表示;
S4,构建图神经网络模型,将S3获得的图作为其输入,选用edGNN实现图结构中的节点的向量表示;按照边类型将图结构拆分成两个子图(控制流子图和数据流子图),分别进行图卷积和图池化操作;通过注意力机制聚合三个图的输出,送入分类器进行智能合约漏洞预测;
S5,通过源代码图化和训练结束后的混合图神经网络模型进行智能合约源代码的漏洞检测。
2.根据权利要求1所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S1的实现包括如下:
S11,通过以太坊区块链浏览器Etherscan平台上收集智能合约源代码;
S12,检测收集到的智能合约源代码,并根据检测结果对其进行标记,检测工具结果显示存在漏洞的智能合约标记为"1",表示该合约存在漏洞,否则标记为"0",根据检测三种漏洞的检测结果,给样本标记标签,存在可重入漏洞则在第一位标注1,否则标注0,存在时间戳依赖漏洞则在第二位标注1,否则标注0,存在无限循环漏洞则在第三位标注1,否则标注0。
3.根据权利要求2所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S1的实现还包括如下:
S13,通过人工审计对标记过的智能合约源代码样本的标签进一步检查修正,以确保样本标记的准确性。
4.根据权利要求1所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S2的实现包括如下:
S21,去除源代码样本中"//"之后到行尾的代码注释和"/*"与"*/"以及其之间的代码注释;
S22,结合相关漏洞关键节点筛选出样本中与漏洞相关的代码片段:针对可重入漏洞,选择call.value关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于可重入漏洞的程序切片内容,针对时间戳依赖漏洞,选择block.timestamp关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于时间戳依赖的程序切片内容,针对无限循环漏洞,选择循环关键词for和while作为关键节点,通过分析代码中的调用依赖关系,留下与此节点相关的代码片段,获得关于无限循环漏洞的程序切片内容。
5.根据权利要求1所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S3的实现包括如下:
S31,分析代码片段的数据依赖、控制依赖关系,获得合约疑似漏洞图的节点和边数据,其中把关键节点的类型标记为c,其他相关节点的类型标记为n,分析出变量间的数据依赖关系边的类型标记为de,分析出量间的控制依赖关系边的类型标记为ce:针对可重入漏洞的代码片段,关键节点为call.value,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接,最后在关键节点与所在函数节点之间添加一条无向的fallback边,针对时间戳漏洞的代码片段,关键节点为block.timestamp,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接,针对无限循环漏洞的代码片段,关键节点为call.value,类型为c,存在call.value的语句作为分析的起点,分析该语句中的变量,类型记作n,并把变量内容按照变量类型记作类型+编号,再分析该语句所属的方法,把方法的类型记作n,内容记作function+编号,然后分析节点间的依赖关系,如果存在数据依赖就在节点间通过de类型的边连接,如果存在控制依赖就在节点间通过ce类型的边连接;
S32,通过改进的独热编码将提取出的漏洞特征图中节点和边转换为向量:首先统计图中最大节点数目,确定图中节点维度,给每个节点分配独热编码,特殊地,增加节点类别补位,c节点补10,n节点补01,并对节点归一化,得到图中节点的初步表示,边的向量化通过独热编码技术,对de类型表示为100,ce类型的边表示为010,fallback边表示为001,最后得到图的初始表示:
H=(V,E,X)
其中,V表示图节点集合,|V|=n,n为节点个数,X∈R(n+2)*d表示节点的特征矩阵,E∈{0,1}n*n*c表示边的特征集合,其中c为边的种类数目,如说明从节点vi到节点vj有一条类型为l的边。
6.根据权利要求1所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S4的实现包括如下:
S41,将S3获得的智能合约源代码漏洞特征图G=(V,E,X)作为edGNN模型的输入,进行图卷积运算,共两层的图卷积操作,第一个图卷积网络层包括一个图卷积加一个归一化层,输出特征维度为64,第二个图卷积层包括一个图卷积层,输出特征维度为32,通过这两层的图卷积,实现智能合约特征图G中节点的聚合,将得到的图保存为G′=(V,E,X′);
S42,通过静态分析,将S41获得的特征图G′=(V,E,X′)按照图中边的类型拆分成两个子图;拆分步骤具体如下:判断图G中边的类型是否为控制流边,如果是,则保存图中与边相关的节点和这条边,最后得到控制流子图Gc=(Vc,Ec,X′c);判断图G中边的类型是否为数据流边,如果是,则保存图中与边相关的节点和这条边,最后得到数据流子图Gd=(vd,Ed,X′d);
S43,将S42获得的两个子图Gc和Gd以及特征图G′分别输入SAGPool模型,进行图池化操作;
S44,通过注意力机制聚合三个图的输出,并输入到分类器进行漏洞标签的输出;公式如下:
W=MLP(h1,h2,h)
其中W表示子图的注意力值,MLP为多层感知机,h1,h2,h分别表示hc,hd,h;
hG=σ(∑W*hsub)
其中hG表示最终的图标签,输出维度为3,σ表示激活函数,这里使用Softmax激活函数;
然后定义一个目标函数来衡量当前输出和真是结果的差异,定义一个多分类损失函数,损失函数公式如下:
其中,p=[p1,…,pn]是一个概率分布,每个元素pi表示样本属于第i类的概率;y=[y1,…,yn]是样本标签的onehot表示,当样本属于第i类时,yi=1,否则yi=0;N表示的时样本类别数;
S45,循环S41-S44,训练该模型:该网络模型在开始训练时进行初始化实现对样本特征的初步提取,采用反向传播学习算法,通过Adam优化器,计算损失函数的值,根据loss值的大小,更新迭代网络层需要学习的权重和偏置项。
7.根据权利要求6所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S41中:所述图卷积计算公式如下:
其中,u,v表示图中节点,N(v)表示节点v的邻居节点,f(l)(v)表示经过第l层后得到的节点v的向量表示,Wi (l)表示第l隐藏层中的权重,σ表示激活函数,lEδu,v)是从节点u到节点v的有向边的标签,fE(u,v,lE(u,v))表示对从节点u到节点v的标签为l的边的非线性操作,该非线性操作公式如下:
fE(u,v,lE(u,v))=MLP(concat(u,lE(u,v),v))。
8.根据权利要求6所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S43中:所述图池化计算公式如下:
其中,Z表示节点的自注意力值,Z∈RM*1,表示子图中经过l层的图卷积操作后学习到的节点向量表示矩阵,/> 表示/>的度矩阵,θatt是SAGPool模型的注意力参数,hsub表示子图的最终表示,Zv表示子图中节点v的自注意力值,f(v)表示节点v的向量表示。
9.根据权利要求1所述的一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述S5的实现包括如下:
S51,将待测智能合约源代码输入模型,经过步骤S2-S3得到智能合约图,输入训练好的混合图神经网络模型,得出智能合约漏洞检测结果;
S52,根据S51的结果数据判断合约是否存在漏洞,存在哪种漏洞,并且通过源代码关键词查找技术定位出漏洞所在位置,然后输出展示智能合约中是否存在漏洞,如果存在漏洞存在的漏洞类型是什么,并输出漏洞所在行号,如果不存在漏洞则输出合约不存在漏洞。
10.一种电子设备,其特征在于,所述电子设备执行程序时包含权利要求1-9任一项所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310456016.2A CN116467720A (zh) | 2023-04-25 | 2023-04-25 | 一种基于图神经网络的智能合约漏洞检测方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310456016.2A CN116467720A (zh) | 2023-04-25 | 2023-04-25 | 一种基于图神经网络的智能合约漏洞检测方法及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116467720A true CN116467720A (zh) | 2023-07-21 |
Family
ID=87182261
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310456016.2A Pending CN116467720A (zh) | 2023-04-25 | 2023-04-25 | 一种基于图神经网络的智能合约漏洞检测方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116467720A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117556425A (zh) * | 2023-11-24 | 2024-02-13 | 烟台大学 | 基于图神经网络的智能合约漏洞检测方法、系统和设备 |
-
2023
- 2023-04-25 CN CN202310456016.2A patent/CN116467720A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117556425A (zh) * | 2023-11-24 | 2024-02-13 | 烟台大学 | 基于图神经网络的智能合约漏洞检测方法、系统和设备 |
CN117556425B (zh) * | 2023-11-24 | 2024-04-23 | 烟台大学 | 基于图神经网络的智能合约漏洞检测方法、系统和设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111783100B (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN113641586B (zh) | 软件源代码缺陷检测方法、系统、电子设备及储存介质 | |
CN109918505B (zh) | 一种基于文本处理的网络安全事件可视化方法 | |
CN109831460B (zh) | 一种基于协同训练的Web攻击检测方法 | |
CN113742733B (zh) | 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置 | |
CN112149420A (zh) | 实体识别模型训练方法、威胁情报实体提取方法及装置 | |
CN115357904B (zh) | 一种基于程序切片和图神经网络的多类漏洞检测方法 | |
CN113269228B (zh) | 一种图网络分类模型的训练方法、装置、系统及电子设备 | |
CN111931935A (zh) | 基于One-shot学习的网络安全知识抽取方法和装置 | |
CN111460803B (zh) | 基于工业物联网设备Web管理页面的设备识别方法 | |
CN114218998A (zh) | 一种基于隐马尔可夫模型的电力系统异常行为分析方法 | |
CN115080756A (zh) | 一种面向威胁情报图谱的攻防行为和时空信息抽取方法 | |
CN116467720A (zh) | 一种基于图神经网络的智能合约漏洞检测方法及电子设备 | |
CN116432184A (zh) | 基于语义分析和双向编码表征的恶意软件检测方法 | |
CN112115326A (zh) | 一种以太坊智能合约的多标签分类和漏洞检测方法 | |
CN116340952A (zh) | 一种基于操作码程序依赖图的智能合约漏洞检测方法 | |
CN114897085A (zh) | 一种基于封闭子图链路预测的聚类方法及计算机设备 | |
CN116074092B (zh) | 一种基于异构图注意力网络的攻击场景重构系统 | |
CN109508544B (zh) | 一种基于mlp的入侵检测方法 | |
CN116827656A (zh) | 网络信息安全防护系统及其方法 | |
CN115859307A (zh) | 基于树型注意力和加权图匹配的相似漏洞检测方法 | |
CN114969761A (zh) | 一种基于lda主题特征的日志异常检测方法 | |
CN112052453A (zh) | 基于Relief算法的webshell检测方法及装置 | |
CN115640577B (zh) | 一种针对二进制物联网固件程序的漏洞检测方法和系统 | |
CN115865458B (zh) | 基于lstm和gat算法的网络攻击行为检测方法、系统及终端 |
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 |