一种基于有向图注意力网络的智能合约漏洞检测方法

文档序号:37367500发布日期:2024-03-22 10:20阅读:20来源:国知局
一种基于有向图注意力网络的智能合约漏洞检测方法

本技术涉及网络安全,特别涉及一种基于有向图注意力网络的智能合约漏洞检测方法。


背景技术:

1、智能合约是区块链技术中的一项关键创新,它允许在没有中央授权机构的情况下,通过编写代码来自动执行、控制和记录合法交易。智能合约在以太坊等区块链平台上广泛应用,用于创建代币、去中心化金融应用、游戏和各种自动化的去中心化服务。由于智能合约通常涉及资金管理,它们成为了攻击者的主要目标。智能合约的漏洞可以导致资金的锁定、失窃或其他未授权的行为。因此,在智能合约部署前进行安全性检测和审计是至关重要的,以防止这些类型的漏洞会造成危害性。

2、为了检测智能合约中的潜在漏洞,研究者和开发者已经设计了多种技术,传统的检测方法主要包括:

3、静态分析、动态分析。智能合约的静态分析是一种不执行代码本身,而是通过分析代码的源代码来检测潜在漏洞和错误的技术。它不需要运行代码,可以迅速分析大量的合约。目前研究人员开发出了一些静态分析工具,例如slither,以太坊智能合约的静态分析框架,可以检测常见漏洞和代码优化问题。mythril,另一种静态分析工具,使用符号执行来检测安全问题。尽管静态分析有很多优点,但它也有一些局限性和挑战,可能会产生误报,将正常的代码模式错误地标记为漏洞。智能合约的动态分析通过执行合约代码,以实时监测行为、追踪状态变化和验证预期操作,进而发现可能的安全问题或漏洞。不同于静态分析仅分析代码本身,动态分析通过合约的实际执行来识别问题。动态分析相较于静态分析需要更多的时间和计算资源,可能无法覆盖所有的执行路径和状态。为了更全面地检测智能合约的潜在问题,最佳实践通常是将动态分析与静态分析相结合。

4、近年来,随着机器学习和深度学习的发展,图神经网络(gnn)等先进算法被应用于智能合约的漏洞检测。通过将智能合约代码转化为图表示,gnn能够有效地捕获代码中的模式和依赖关系,从而辅助漏洞检测过程。在智能合约的漏洞检测中,合约代码可以被表示为图,其中节点代表操作,边代表控制流和数据流。这样的图表示能够揭示合约中的复杂交互,帮助检测系统理解和识别潜在的安全隐患。利用图表示和图神经网络进行智能合约的漏洞检测,可以提高检测的准确性和效率,尤其是对于复杂的合约逻辑和数据流。

5、然而目前开发的基于深度学习的检测方法或是将智能合约源码作为序列数据处理,或是将智能合约源代码或者操作码转化为图结构,挖掘智能合约更复杂的结构信息,利用图神经网络模型进行学习。将源代码视为自然语言会丢失代码的结构性和语义深度,序列模型难以有效处理代码中的长范围依赖性和上下文关系,特别是在大型和复杂的合约中。将智能合约转化为图结构可以挖掘更复杂的结构信息,但这种转换本身可能会丢失合约源代码的某些细节和特性,如变量作用域、数据流和控制流的细微差别。


技术实现思路

1、本技术提供了一种基于有向图注意力网络的智能合约漏洞检测方法,可用于解决利用图神经网络模型进行学习容易丢失数据信息的技术问题。

2、本技术一种基于有向图注意力网络的智能合约漏洞检测方法,方法包括:

3、步骤1,收集智能合约源代码数据集并标注漏洞;

4、步骤2,通过程序分析技术,构建智能合约异构数据流图及智能合约异构控制流图;

5、步骤3,融合智能合约异构数据流图和异构控制流图,生成智能合约异构图表示;

6、步骤4,构建有向图注意力网络模型并进行训练;

7、步骤5,用构建好的有向图注意力网络模型进行智能合约漏洞检测。

8、进一步地,步骤1,收集智能合约源代码数据集并标注漏洞,包括:

9、步骤11,访问以太坊区块链获取智能合约地址,通过智能合约地址查找并下载源代码,优先获取已经通过源代码验证的智能合约;

10、步骤12,对收集到的合约源代码数据集进行数据清洗和预处理,包括去重,清除重复的合约代码以及数据质量检查,确保代码完整性和可读性;

11、步骤13,识别代码中的潜在安全漏洞,并进行标注,根据漏洞类型分类,存在某种漏洞的合约标注“1”,不存在某种漏洞的合约标注“0”;漏洞类型包括可重入漏洞,时间戳依赖漏洞以及整数溢出漏洞。

12、进一步地,步骤2,通过程序分析,构建智能合约异构数据流图及智能合约异构控制流图,包括:

13、步骤21,对智能合约源代码进行预处理,删除源代码中的注释信息以及和未使用的代码段;

14、步骤22,使用抽象语法树(ast),作为构建异质数据流图和异质控制流图的基础,对数据集中的智能合约,基于ast的解析结果,提取关键智能合约代码元素和结构;根据漏洞的特点分别构建相应的异构数据流图和异构控制流图。

15、进一步地,使用抽象语法树,作为构建异质数据流图和异质控制流图的基础,对数据集中的智能合约,基于ast的解析结果,提取关键智能合约代码元素和结构;根据漏洞的特点分别构建相应的异构数据流图和异构控制流图,包括:

16、针对可重入漏洞,基于ast,确定异构数据流图的节点,节点类型包括变量声明、赋值和引用;构建表示数据依赖的边,边类型包括变量赋值和变量访问操作;基于ast,确定异构控制流图的节点,节点类型包括转账函数、内置函数、fallback函数,以及内置的call.value函数等,添加表示程序控制流的边,边类型包括连接函数调用边,条件分支、循环和其他控制流结构边;

17、针对时间戳依赖漏洞,基于ast,确定异构数据流图的节点,节点类型包括涉及到时间戳的变量,包括:直接使用block.timestamp或now的变量声明、赋值和引用;构建表示数据依赖的边,边类型包括变量赋值和变量访问操作;基于ast,确定异构控制流图的节点,节点类型包括涉及block.timestamp的函数或语句;构建表示程序控制流的边,边类型包括连接函数调用边,条件分支、循环和其他控制流结构边。

18、针对整数溢出漏洞,遍历ast,识别标记所有整数类型的,标记每个整数变量的初始赋值以及在合约执行过程中的任何赋值操作,分析涉及整数变量的所有数学运算,特别包括加法、减法、乘法和除法。

19、在异构数据流图中,为每个整数变量和涉及整数运算的表达式创建节点;根据ast分析的结果,对变量之间的数据流动和依赖关系创建数据流边;对于合约中包含复合运算的复杂表达式,分解运算并准确地表示每一步的数据流动;对于异构控制流图,在ast中识别关键的控制流元素之间的关系,创建控制流边。

20、进一步地,步骤3,融合智能合约异构数据流图和异构控制流图,生成智能合约异构图表示,包括:

21、步骤31,将异构数据流图和异构控制流图中不同类型的节点以及边合并成智能合约异质图,同时保持边的类型信息,采用one-hot编码策略编码节点,构建节点特征矩阵;

22、步骤32,生成智能合约有向图表示,g=(v,e),其中v表示图g中所包含的节点,v=(v1,v2,v3,...,vn);e表示边索引矩阵,每一列(ai,bi)代表一个边,其中ai是边的起始节点,bi是边的终止节点,m表示图g中边的总数,图g的特征矩阵用hv表示,h=h1,h2,h3,...hv,表示图g中第n个节点的特征向量,模型输入为节点特征矩阵hv和图中存在的每一条索引e。

23、进一步地,步骤4,构建有向图注意力网络模型并进行训练;包括:

24、步骤41,将步骤3获得的智能合约源代码漏洞特征图g=(v,e,x)作为scvulde_dirgnn模型的输入,输入的智能合约图数据包括节点特征x和边索引e,节点特征更新阶段,经过两个图注意力卷积层,第一个图注意力卷积层处理从源节点到目标节点得边,从源到目标节点方向进行特征聚合,第二个图注意力卷积层处理从目标节点到源节点的边,从目标到源节点方向进行特征聚合,卷积操作后,将两个方向的结果按alpha参数加权混合;

25、图卷积层节点特征更新方法如下:

26、

27、其中,h(u,k)代表第k层中节点i的特征向量;σ表示激活函数relu,∑(i,j)∈e表示所有边从i到j的聚合操作,∑(j.i)∈e表示所有边从j到i的聚合操作,表示学习得到的边的权重,是权重矩阵,用于第k层的线性变换;不同方向的箭头→和←表示不同方向的信息流向;h(j,k-1)表示第k-1层中邻居节点j的特征向量;

28、每一层图卷积操作后用relu激活操作,为模型引入非线性,并且进行归一化操作,将节点特征向量归一化;在图卷积最后一层用跳跃连接,整合不同图卷积层的输出,最后通过全连接线性层将整合后的特征映射到目标类别的维度;

29、最后使用全局平均池化对每个图的节点特征进行平均,从而得到每个图的全局特征:

30、

31、其中,n表示图g中节点的总数,hi是图g中第i个节点的特征向量;

32、向量经过sigmoid操作,输出漏洞类别y,方法如下:

33、

34、步骤42,在模型训练阶段,定义多分类函数衡量当前输出和真实结果的差异损失函数,损失函数公式如下采用负对数似然损失函数确定损失:

35、

36、其中,p=[p1,p2,...,pn]是一个概率分布,每个元素pi表示样本属于第i类的概率,y=[y1,y2,...yn]是样本标签的onehot表示,当样本属于第i类时,yi=1,否则yi=0;n表示的是样本类别数;

37、步骤43,循环步骤41至步骤42,训练模型,学习率设置为0.01,注意力头数为1,网络层数为4,隐藏层维度为256,网络模型在开始训练时进行初始化实现对样本特征的初步提取,采用反向传播学习算法,通过adam优化器,计算损失函数的值,根据loss值的大小,更新迭代网络层需要学习的权重和偏置项;

38、步骤44,对于按alpha参数加权混合的两个方向的图注意力卷积层的结果,将alpha值分别设置为0,0.2,0.5,0.8,1,得到模型在f1-score为主要评价指标下的检测结果。

39、进一步地,用构建好的有向图注意力网络模型进行智能合约漏洞检测,包括:

40、步骤51,将待测智能合约源代码输入模型,经过步骤2至步骤3,将得到的智能合约图,输入训练好的有向图注意力网络模型,得到智能合约漏洞检测结果;

41、步骤52,根据步骤51的结果数据判断合约是否存在漏洞,存在哪种漏洞,如果不存在漏洞则输出合约不存在漏洞。

42、本发明的有益效果包括:

43、(1)本发明构建智能合约源代码异构图,包含多种类型的边和节点,保留了智能合约代码丰富语义和结构信息,同时,在异质图上,将图视为有向的可以增加图的同质性,从而提高图神经网络检测漏洞的准确率。

44、(2)本发明采用有向图注意力网络进行智能合约漏洞检测任务,智能合约中的函数调用和控制流通常具有明确的方向性,学习智能合约异质图中的方向性信息能够从有向边中捕获一些关键的依赖关系和数据流动模式,可以跟踪哪些操作影响了哪些状态变量,从而提高了智能合约漏洞检测任务的精确率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1