基于合约语义图与深广特征融合的智能合约漏洞检测方法技术

技术编号:38438009 阅读:11 留言:0更新日期:2023-08-11 14:22
本发明专利技术公开了一种基于合约语义图与深广特征融合的智能合约漏洞检测方法,所述方法能够充分利用智能合约代码中数据流、控制流与fallback运行机制的相关信息,构建出包含丰富结构信息的智能合约语义图。然后结合代码token序列的顺序语义信息与智能合约语义图的结构语义信息,利用深度神经网络提取出智能合约的深度语义特征,同时基于预先定义好的可解释的人工漏洞检测规则,使用全连接层与激活函数构成的线性模型提取出智能合约的人工规则特征。最后,使用Wide&Deep模型对分别侧重广度和深度的两种特征进行融合,进行智能合约的漏洞检测。本发明专利技术可以有效表示智能合约中与漏洞相关的语义信息。相关的语义信息。相关的语义信息。

【技术实现步骤摘要】
Detection.IEEE Transactions on Knowledge and Data Engineering,35(2),1296

1310.),该方法使用与TMP方法中相同的合约图结构,并使用注意力机制向网络中融合专家知识,进行智能合约的漏洞检测任务。这两个工作中所使用的合约图可以捕获到智能合约代码中的丰富结构信息,但是为了降低合约图结构的复杂性、加速网络训练,这两项工作均对合约图中不重要的节点进行了删减,并且未保留的重要节点没有记录变量的类型、函数返回值类型等信息,同时也缺乏对函数间调用的考虑,这就导致合约图损失了大量的智能合约代码语义信息。同时,该方法在对生成的代码语义向量表示和专家知识向量表示时均使用相同的卷积与池化操作对两种特征进行处理,未考虑二者在语义抽象层次上的区别。
[0006]此外,现有的基于深度学习的智能合约漏洞检测方法使用的智能合约特征表示单一,例如Tian等人提出的方法只是用了智能合约代码的序列特征,而TMP与CGE方法只使用了图结构特征。

技术实现思路

[0007]针对现有技术存在的上述问题,本专利技术提供了一种基于合约语义图与深广特征融合的智能合约漏洞检测方法。该方法能够充分利用智能合约代码中数据流、控制流与fallback运行机制的相关信息,构建出包含丰富结构信息的智能合约语义图。然后结合代码token序列的顺序语义信息与智能合约语义图的结构语义信息,利用深度神经网络提取出智能合约的深度语义特征,同时基于预先定义好的可解释的人工漏洞检测规则,使用全连接层与激活函数构成的线性模型提取出智能合约的人工规则特征。最后,使用Wide&Deep模型对分别侧重广度和深度的两种特征进行融合,进行智能合约的漏洞检测。相比只使用序列特征或者图结构特征的代码表示方法,本专利技术使用Wide&Deep模型对基于图和序列的深度学习模型和基于人工规则的线性模型进行联合训练,可以有效融合从代码的序列信息和结构信息中提取的深度语义特征以及从人工规则中提取的广度语义特征,并充分利用深度学习模型的泛化能力和线性模型的记忆能力捕捉更全面、更准确的智能合约漏洞特征,有助于提高智能合约漏洞检测模型的性能。
[0008]本专利技术的目的是通过以下技术方案实现的:
[0009]一种基于合约语义图与深广特征融合的智能合约漏洞检测方法,包括如下步骤:
[0010]步骤1:构建智能合约语义图,具体步骤如下:
[0011]步骤1.1:通过Slither工具,提取出智能合约中函数的控制流图;
[0012]步骤1.2:通过添加函数定义关系、函数间调用关系与合约入口节点,构建智能合约的增强控制流图;
[0013]步骤1.3:提取智能合约中的数据流信息,并在增强的控制流图中增加相应的数据流边;
[0014]步骤1.4:提取智能合约中的fallback运行机制信息,并在增强的控制流图中添加fallback边与fallback节点;
[0015]步骤1.5:整合增强控制流图、数据流信息以及fallback运行机制信息,构建智能合约语义图;
[0016]步骤2:基于深度学习模型提取合约代码的深度语义特征,具体步骤如下:
[0017]步骤2.1:将智能合约代码分割为token序列;
[0018]步骤2.2:使用CodeBert预训练模型对智能合约的token序列与智能合约语义图的节点内语句进行嵌入,以获得其初始向量表示;
[0019]步骤2.3:使用GGNN对智能合约语义图进行表示学习,以学习每个节点的隐藏向量表示,并采用节点向量平均的方式读出图级向量表示,得到智能合约代码的结构语义特征,即合约语义图特征的向量表示;
[0020]步骤2.4:使用BiGRU对智能合约代码的token序列进行表示学习,得到智能合约代码的序列特征的向量表示;
[0021]步骤2.5:将智能合约序列特征与合约语义图特征进行拼接,得到智能合约的深度语义特征;
[0022]步骤3:使用人工规则对智能合约代码进行筛查生成One

hot编码,并使用由全连接层与激活函数构成的线性模型提取基于人工规则的广度语义特征,即人工规则特征;
[0023]步骤4:使用Wide&Deep模型融合智能合约的深度语义特征与广度语义特征,并送入Softmax层得到预测结果,利用标签信息计算交叉熵损失函数,根据误差反向传播调整网络参数,直到网络对输入的响应达到预定的目标范围为止,训练结束;
[0024]步骤5:使用训练好的完整模型对智能合约代码进行漏洞检测。
[0025]相比于现有技术,本专利技术具有如下优点:
[0026]1、本专利技术提出了一种称为智能合约语义图的代码表示方法,该智能合约语义图包含了智能合约代码中丰富的控制流信息、数据流信息和过程间函数调用信息,并且融合了智能合约中的fallback运行机制相关的信息,可以有效表示智能合约中与漏洞相关的语义信息。
[0027]2、本专利技术使用BiGRU与GGNN提取智能合约的序列特征与结构特征,能够有效捕获和学习智能合约代码中的漏洞特征,提高漏洞检测性能。
[0028]3、本专利技术充分考虑基于深度学习模型提取的智能合约深度语义特征与基于线性模型和人工规则提取智能合约的广度语义特征,即智能合约的人工规则特征,并使用Wide&Deep模型融合两种特征,充分利用深度学习模型的泛化能力和线性模型的记忆能力捕捉更全面和准确的智能合约漏洞特征,从而提升对智能合约代码的漏洞检测性能。
附图说明
[0029]图1是本专利技术的整体流程示意图。
[0030]图2是智能合约语义图的构建流程示意图。
[0031]图3是基于合约语义图与深广特征融合的智能合约漏洞检测模型结构示意图。
[0032]图4是智能合约代码。
[0033]图5是图4的智能合约语义图。
具体实施方式
[0034]下面结合附图对本专利技术的技术方案作进一步的说明,但并不局限于此,凡是对本专利技术技术方案进行修改或者等同替换,而不脱离本专利技术技术方案的精神和范围,均应涵盖在本专利技术的保护范围中。
[0035]本专利技术提供了一种基于合约语义图与深广特征融合的智能合约漏洞检测方法,首
先,使用Slither工具解析源代码,生成智能合约中各个函数的控制流图。为了捕捉更丰富的智能合约结构信息,尤其是智能合约中的fallback运行机制信息,对智能合约中函数的控制流信息进行增强,即新建合约的入口节点、添加函数间的调用关系与函数定义关系,将若干孤立的函数控制流图连接为完整的弱连通图,同时增添数据流信息以及fallback运行机制的相关信息,构建出完整的智能合约语义图。接下来将智能合约代码分割为token序列,使用CodeBert预训练模型对智能合约语义图的节点与代码的token序列进行嵌入,并基于双向门控循环神经网络(BiGRU)与门控图神经网络(GGNN本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于合约语义图与深广特征融合的智能合约漏洞检测方法,其特征在于所述方法包括如下步骤:步骤1:构建智能合约语义图,具体步骤如下:步骤1.1:通过Slither工具,提取出智能合约中函数的控制流图;步骤1.2:通过添加函数定义关系、函数间调用关系与合约入口节点,构建智能合约的增强控制流图;步骤1.3:提取智能合约中的数据流信息,并在增强的控制流图中增加相应的数据流边;步骤1.4:提取智能合约中的fallback运行机制信息,并在增强的控制流图中添加fallback边与fallback节点;步骤1.5:整合增强控制流图、数据流信息以及fallback运行机制信息,构建智能合约语义图;步骤2:基于深度学习模型提取合约代码的深度语义特征,具体步骤如下:步骤2.1:将智能合约代码分割为token序列;步骤2.2:使用CodeBert预训练模型对智能合约的token序列与智能合约语义图的节点内语句进行嵌入,以获得其初始向量表示;步骤2.3:使用GGNN对智能合约语义图进行表示学习,以学习每个节点的隐藏向量表示,并采用节点向量平均的方式读出图级向量表示,得到智能合约代码的结构语义特征,即合约语义图特征的向量表示;步骤2.4:使用BiGRU对智能合约代码的token序列进行表示学习,得到智能合约代码的序列特征的向量表示;步骤2.5:将智能合约序列特征与合约语义图特征进行拼接,得到智能合约的深度语义特征;步骤3:使用人工规则对智能合约代码进行筛查生成One

hot编码,并使用由全连接层与激活函数构成的线性模型提取基于人工规则的广度语义特征,即人工规则特征;步骤4:使用Wide&Deep模型融合智能合约的深度语义特征与广度语义特征,并送入Softmax层得到预测结果,利用标签信息计算交叉熵损失函数,根据误差反向传播调整网络参数,直到网络对输入的响应达到预定的目标范围为止,训练结束;步骤5:使用训练好的完整模型对智能合约代码进行漏洞检测。2.根据权利要求1所述的基于合约语义图与深广特征融合的智能合约漏洞检测方法,其特征在于所述步骤1.2的具体步骤如下:步骤1.2.1:遍历控制流图中的节点,记录所有包含对合约内其他函数调用的节点;步骤1.2.2:在所有包含对其余智能合约函数调用的节点与被调用函数的函数入口节点之间,增加函数调用边call边;步骤1.2.3:增加合约入口节点;步骤1.2.4:通过函数定义边define边连接合约入口节点与所有函数的函数入口节点。3.根据权利要求1所述的基于合约语义图与深广特征融合的智能合约漏洞检测方法,其特征在于所述步骤1.3的具体步骤如下:步骤1.3.1:构建def映射与u...

【专利技术属性】
技术研发人员:苏小红魏子越郑伟宁魏宏魏陶文鑫张彦航
申请(专利权)人:哈尔滨工业大学
类型:发明
国别省市:

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

1