当前位置: 首页 > 专利查询>江苏大学专利>正文

一种基于图神经网络的智能合约漏洞检测方法及电子设备技术

技术编号:38258394 阅读:9 留言:0更新日期:2023-07-27 10:20
本发明专利技术公开了一种基于图神经网络的智能合约漏洞检测方法及电子设备,首先构建智能合约源代码数据集,并根据样本是否存在漏洞标记数据集样本;然后通过静态代码分析技术筛选源代码样本中与漏洞相关的代码片段;再通过程序语法语义技术把代码片段转化成图数据结构表示;接下来构建图神经网络模型,将图作为输入,选用edGNN实现图结构中的节点的向量表示;按照边类型将图结构拆分成两个子图,分别进行图卷积和图池化操作;通过注意力机制聚合三个图的输出,送入分类器进行智能合约漏洞预测;最后用训练好的混合图神经网络模型进行智能合约源代码的漏洞检测。本发明专利技术保留了代码丰富语义和显式结构信息;提高了检测的效率、准确性和自动化程度。和自动化程度。和自动化程度。

【技术实现步骤摘要】
一种基于图神经网络的智能合约漏洞检测方法及电子设备


[0001]本专利技术涉及智能合约
,具体涉及一种基于图神经网络的智能合约漏洞检测方法及电子设备。

技术介绍

[0002]智能合约是一种由事件驱动的、具有状态的代码合约。随着区块链技术的快速发展,作为区块链核心的智能合约得到了广泛应用,令区块链成为具有一定颠覆性的技术。然而,智能合约中的漏洞带来的巨大经济损失,成了这项技术不得不解决的一项难题,这也加强了人们对智能合约安全问题的关注。
[0003]恶意攻击者可以利用智能合约漏洞获取经济利益,近几年来,智能合约中存在许多被恶意利用的漏洞。2016年著名的DAO事件发生,黑客利用DAO合约的可重入性漏洞窃取了360万以太币,造成了大量经济损失。由于安全漏洞,区块链网络已经遭受了超过100亿美元的损失。而且智能合约一旦部署就不可改变,损失无法挽回。因此,在部署智能合约之前,对其进行有效的漏洞检查至关重要。
[0004]目前区块链领域内还没有公认的智能合约审计手段来检测智能合约代码中是否隐藏有安全漏洞。开始,智能合约的安全性保障工作主要依靠人工。随后,提出了许多方法,如符号执行、形式化验证KEVM、中间表示等,用来检测智能合约的漏洞。这些传统的检测方法主要依赖人工,效率较低,随着智能合约的广泛应用,其数量也在不断增长,传统方法难度加大,适用性不高。
[0005]神经网络在智能合约分析领域也越来越受欢迎,也是智能合约自动化漏洞检测的趋势。应用不同的技术,如长短时记忆(LSTM)建模、卷积神经网络或N

gram语言模型,本领域获得了较好的结果。但是现有的分析方法大多基于智能合约代码的字节码进行漏洞检测,缺乏对漏洞代码程序语义特征的理解,检测效果不佳。因此,可以构建一个基于图神经网络的智能合约漏洞检测方法,用在智能合约源代码的漏洞检测上,能够及时发现智能合约漏洞可能带来的巨大风险。

技术实现思路

[0006]针对上述存在的问题,本专利技术提供了一种自动化程度高、检测精度高的智能合约漏洞检测方法及电子设备。
[0007]为了实现上述目的,本专利技术采取了如下技术方案:
[0008]一种基于图神经网络的智能合约漏洞检测方法,包括如下步骤:
[0009]S1,收集智能合约源代码数据集,并根据样本是否存在漏洞标记数据集样本;
[0010]S2,通过静态代码分析技术筛选智能合约源代码样本中与漏洞相关的代码片段;
[0011]S3,通过改进的独热编码算法将S2处理过的代码片段转化成可供神经网络输入的图数据结构表示;
[0012]S4,构建图神经网络模型,将S3获得的图作为其输入,选用edGNN实现图结构中的
节点的向量表示;按照边类型将图结构拆分成两个子图(控制流子图和数据流子图),分别进行图卷积和图池化操作;通过注意力机制聚合三个图的输出,送入分类器进行智能合约漏洞预测;
[0013]S5,通过源代码图化和训练结束后的混合图神经网络模型进行智能合约源代码的漏洞检测。
[0014]进一步地,上述步骤S1的数据收集包括:
[0015]S11,通过以太坊区块链浏览器Etherscan平台上收集智能合约源代码;
[0016]S12,通过智能合约漏洞检测工具检测收集到的智能合约源代码,并根据检测结果对其进行标记,检测工具结果显示存在漏洞的智能合约标记为"1",表示该合约存在漏洞,否则标记为"0",根据检测三种漏洞的检测结果,给样本标记标签,存在可重入漏洞则在第一位标注1,否则标注0,存在时间戳依赖漏洞则在第二位标注1,否则标注0,存在无限循环漏洞则在第三位标注1,否则标注0;
[0017]S13,通过人工审计对标记过的智能合约源代码样本的标签进一步检查修正,以确保样本标记的准确性。
[0018]进一步地,上述步骤S2中的筛选源代码样本中与漏洞相关的代码片段包括:
[0019]S21,通过静态代码分析技术去除源代码样本中"//"之后到行尾的代码注释和"/*"与"*/"以及其之间的代码注释;
[0020]S22,通过静态代码分析技术结合相关漏洞关键节点筛选出样本中与漏洞相关的代码片段:针对可重入漏洞,选择call.value关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于可重入漏洞的程序切片内容,针对时间戳依赖漏洞,选择block.timestamp关键字作为关键节点,通过分析代码中的该关键字的数据依赖关系、控制依赖关系以及调用关系,留下与此节点相关的代码片段,获得关于时间戳依赖的程序切片内容,针对无限循环漏洞,选择循环关键词for和while作为关键节点,通过分析代码中的调用依赖关系,留下与此节点相关的代码片段,获得关于无限循环漏洞的程序切片内容;
[0021]进一步地,上述步骤S3中的代码片段转化成图数据包括:
[0022]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类型的边连接;
[0023]S32,通过改进的独热编码将提取出的漏洞特征图中节点和边转换为向量:首先统计图中最大节点数目,确定图中节点维度,给每个节点分配独热编码,特殊地,增加节点类别补位,c节点补10,n节点补01,并对节点归一化,得到图中节点的初本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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为边的种类数目,如说明从节点v
i
到节点v
j
有一条类型为l的边。6.根据权利要求1所述的一种基于图...

【专利技术属性】
技术研发人员:郭丽萍王新胜熊书明
申请(专利权)人:江苏大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1