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

文档序号:37113295发布日期:2024-02-22 21:12阅读:16来源:国知局
一种基于图注意力网络的智能合约漏洞检测方法及系统

本发明涉及区块链智能合约安全,更具体的说是涉及一种基于图注意力网络的智能合约漏洞检测方法及系统。


背景技术:

1、区块链是一种由矿工按照规定的协议进行维护的分布式交易账本,具有去中心化和不可篡改等特征。在区块链的分布式节点上运行的智能合约是一种基于状态的,采用事件驱动的程序,具有公开透明、可追溯和去信任等特点。近年来,智能合约被广泛应用于金融服务、物联网、基础设施、医疗保健等领域。随着智能合约的广泛应用,其中的潜在的漏洞也带来了许多安全问题,造成巨大的经济损失。

2、智能合约可支持实现复杂多样的业务逻辑,进一步扩展了区块链的功能。但是,由于区块链的不可篡改性,智能合约一旦被部署,其内容以及在区块链平台上产生的数据都无法被修改。因此,为避免由于智能合约中潜在漏洞造成巨大损失,在智能合约部署前对其中可能存在的漏洞进行充分检查是十分必要的。但是随着智能合约功能增加,其代码复杂度越来越高,检查合约是否存在漏洞以及存在哪些类型的漏洞越来越困难。

3、为了解决上述问题,研究人员利用机器学习技术检测合约漏洞。如srcl通过遍历抽象语法树(ast)分别获取合约的值序列和类型序列,并设计两个检测器指导transformer编码器分别从ast的值序列和类型序列中学习合约局部及全局语义特征,以检测合约中存在的漏洞。然而,srcl只学习了ast中的节点特征,未能有效利用合约的结构信息。而dr-gcn则根据合约的数据流图和控制流图构建合约图,并利用图卷积神经网络(gcn)检测合约漏洞,但dr-gcn只学习合约图中的结构信息,未能有效利用合约的语义信息。由于所使用合约特征不完整,已有方法在检测过程中会产生漏报或误报,从而影响检测智能合约漏洞的性能。

4、mythril和oyente等基于专家规则来检测智能合约漏洞检测方法在实际使用中展现了良好的漏洞检测性能。但是,这类基于专家规则的智能合约漏洞检测工具在可扩展性方面存在一定局限性,制定专家规则需要大量的领域知识,且由于应用场景的变化会导致专家规则也需要进行相应更新,这将耗费大量的时间和精力。此外,此类方法通常只能够有效地检测已知漏洞,对于新类型的漏洞,由于缺乏专家规则的指导,无法提供准确的检测结果。

5、同时,现有基于机器学习的智能合约漏洞检测方法在精确检测漏洞类型方面也存在一定的局限性。例如,smartembed可利用结构代码嵌入来检测合约是否存在漏洞,但只能检测合约是否存在漏洞,而无法确定具体漏洞类型。这不利于开发人员修复合约漏洞,还需要花费大量的资源和精力进行分析并确定漏洞。若能在检测合约时准确检测出合约存在的具体漏洞类型,将能够极大地节省漏洞修复的时间。

6、因此,如何提供一种能够精确检测智能合约漏洞的检测方法及系统是本领域技术人员亟需解决的问题。


技术实现思路

1、有鉴于此,本发明提供了一种基于图注意力网络的智能合约漏洞检测方法及系统,综合考虑了合约的语义和语法结构信息,以检测合约存在的漏洞及具体的漏洞类型。

2、为了实现上述目的,本发明采用如下技术方案:

3、一种基于图注意力网络的智能合约漏洞检测方法,包括以下步骤:

4、步骤1:构建智能合约训练集,根据智能合约的源代码构建抽象语法树,并融合控制依赖关系和数据依赖关系构建合约图g;

5、步骤2:构建图注意力网络模型,利用所述智能合约训练集对所述图注意力网络模型进行训练;

6、步骤3:使用训练好的图注意力网络模型对待检测智能合约对应的合约图g进行漏洞检测,输出所述待检测智能合约的漏洞检测结果。

7、优选的,根据智能合约的源代码构建抽象语法树,并融合控制依赖关系和数据依赖关系构建合约图g,包括:

8、s101:输入所述智能合约的源代码文件f;

9、s102:初始化合约图g,所述合约图g表示为g=(v,east,ec,ed);

10、s103:解析所述源代码文件f对应的抽象语法树tree;

11、s104:将所述抽象语法树tree中所有节点添加到所述合约图g中的集合v中;

12、s105:将所述抽象语法树tree中节点之间的语法结构关系添加到所述合约图g的集合east中;

13、s106:分析所述抽象语法树tree中的控制依赖关系并添加到所述合约图g的集合ec中;

14、s107:分析所述抽象语法树tree中的数据依赖关系并添加到所述合约图g的集合ed中;

15、s108:输出所述源代码文件f对应的合约图g。

16、优选的,构建图注意力网络模型,利用所述智能合约训练集对所述图注意力网络模型进行训练,包括:

17、s201:将所述智能合约训练集中的合约图g进行数据类型转化,构建新的训练集,记为tg′={g′1,g′2,...,g′k,...};

18、s202:构建图注意力网络模型;

19、s203:利用所述新的训练集tg′训练所述图注意力网络模型;

20、s204:输出训练好的图注意力网络模型。

21、将所述智能合约训练集中的合约图进行数据类型转化,包括:

22、将所述智能合约训练集中的合约图逐一转化为的形式,其中为表示节点间语法结构关系、控制依赖关系和数据依赖关系的邻接矩阵,表示节点特征矩阵。

23、优选的,所述图注意力网络模型中注意力层的计算过程包括:

24、

25、

26、

27、其中,eij和eik为注意力系数,w为合约图g中节点集合v的权重矩阵,为g中节点i的特征向量,为合约图g中节点i的邻居节点j的特征向量,和表示对g中节点i和节点j分别做线性变换,||表示对线性变换后的结果进行垂直拼接,a表示把拼接后的特征映射为一个实数,eij和eik用来计算注意力系数,eij表示g中邻居节点j与节点i的注意力系数,eik表示g中邻居节点k与节点i的注意力系数;αij表示对g做归一化后的注意力系数,ni表示g中节点i的邻居节点集合,leakyrelu是激活函数;表示g中节点i经过加权求和后的特征向量,为g中节点j的特征向量,σ表示逻辑sigmoid函数。

28、在得到加权求和后的特征后整合合约图g的特征向量:

29、

30、其中,表示合约图g的特征向量,n为g中节点数量,v为g中所有节点的集合,为g中节点i经过加权求和后的特征向量。

31、优选的,使用训练好的图注意力网络模型对待检测智能合约的合约图g进行漏洞检测,输出所述待检测智能合约的漏洞检测结果,包括:

32、s301:输入待检测智能合约的源代码;

33、s302:将所述待检测智能合约的源代码转化为合约图g;

34、s303:将所述合约图g转化为邻接矩阵gm和节点特征矩阵gu;

35、s304:使用步骤2中训练好的图注意力网络模型检测所述待检测智能合约是否存在漏洞以及存在的漏洞类型;

36、s305:输出带检测智能合约的漏洞检测结果。

37、另一方面,本发明提供了一种基于图注意力网络的智能合约漏洞检测系统,用于实现上述任意一种基于图注意力网络的智能合约漏洞检测方法,包括:

38、获取模块,用于获取智能合约的源代码;

39、智能合约训练集模块,用于根据获取的所述智能合约的源代码构建智能合约训练集;

40、预处理模块,用于根据所述智能合约的源代码构建抽象语法树,并融合控制依赖关系和数据依赖关系构建合约图g;

41、训练模块,构建图注意力网络模型,利用所述智能合约训练集对所述图注意力网络模型进行训练;

42、检测模块,使用训练好的图注意力网络模型对待检测智能合约的合约图g进行漏洞检测,输出所述待检测智能合约的漏洞检测结果。

43、经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种基于图注意力网络的智能合约漏洞检测方法及系统,本发明通过将智能合约源代码解析为ast,并将数据依赖和控制依赖关系与ast融合组成合约图,以更好地表征合约特征,并通过图注意力网络对合约图的语义及结构的学习,更好地理解合约特征,能够提高智能合约漏洞检测的准确性。本发明提出的基于图注意力网络的智能合约漏洞检测方法利用具有注意力机制的图注意力网络模型gat来检测合约存在的漏洞类型,不仅能够检测合约是否存在漏洞,而且能够更准确地检测到合约存在的漏洞类型,从而加速漏洞修复过程。更进一步,本发明不需要专家规则的指导或提前制定漏洞模式,能够适用于检测新类型漏洞,具有较好的可扩展性。

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