CN116383832A - 一种基于图神经网络的智能合约漏洞检测方法 - Google Patents

一种基于图神经网络的智能合约漏洞检测方法 Download PDF

Info

Publication number
CN116383832A
CN116383832A CN202310462926.1A CN202310462926A CN116383832A CN 116383832 A CN116383832 A CN 116383832A CN 202310462926 A CN202310462926 A CN 202310462926A CN 116383832 A CN116383832 A CN 116383832A
Authority
CN
China
Prior art keywords
graph
nodes
intelligent contract
layer
neural network
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
Application number
CN202310462926.1A
Other languages
English (en)
Inventor
陈铁明
周睿
吕明琪
朱添田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University of Technology ZJUT
Original Assignee
Zhejiang University of Technology ZJUT
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhejiang University of Technology ZJUT filed Critical Zhejiang University of Technology ZJUT
Priority to CN202310462926.1A priority Critical patent/CN116383832A/zh
Publication of CN116383832A publication Critical patent/CN116383832A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Health & Medical Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种基于图神经网络的智能合约漏洞检测方法,将智能合约中敏感操作作为程序分析的入口点,抽取出和敏感操作具有控制依赖关系和数据依赖关系的代码作为关键代码进行分析,减轻程序分析的任务,提高效率的同时减少无关代码的干扰,提高分析正确率,有助于漏洞的定位。并且将关键代码用图结构表示,能够考虑到语义信息和代码的结构信息,有助于提高检测正确率。除此之外,本发明能通过图神经网络学习模型和注意力机制对异常结果进行精确的诊断和解释。

Description

一种基于图神经网络的智能合约漏洞检测方法
技术领域
本发明属于智能合约安全漏洞检测技术领域,具体涉及一种基于图神经网络的智能合约漏洞检测方法。
背景技术
智能合约本质上是一段运行在区块链上的计算机程序,由图灵完备(Turingcomplete)语言编写,可以在区块链网络中自动执行。当前,已有数以万计的智能合约部署在各类区块链平台上。
智能合约安全漏洞不仅造成了巨大的经济损失,也破坏了人们对区块链与智能合约的信任基础,智能合约的漏洞检测与安全防范已经成为亟待解决的关键问题和巨大挑战。如果在智能合约开发的过程中,项目实际部署之前,开发人员利用工具或者技术能够快速准确地检测某个智能合约是否存在漏洞,就可以有效地避免这些潜在的漏洞暴露在攻击者面前,也保证了区块链中海量交易的安全性。
智能合约自动化检测方法能够较为准确地、一键式地应对区块链网络中层出不穷的智能合约漏洞类型,减少了人工核验和专家分析可能造成的误报和漏洞情况,因此采用准确且高效的智能合约自动化检测工具来解决智能合约的漏洞挖掘与检测问题是有重要意义的工作和研究。
随着机器学习技术的发展,基于机器学习的漏洞检测方法受到了广泛的重视,用于漏洞检测的机器学习技术包括传统的浅层学习技术和深度学习技术。其中,深度学习技术由于能够自动学习到复杂的非线性隐藏特征,通常具有更高的准确性和泛化能力。传统的常用于漏洞检测的深度学习模型包括MLP(多层感知机),CNN(卷积神经网络),LSTM(长短期记忆网络),自动编码机等。然而由于传统的深度学习模型,是直接将代码转化成词向量的形式,这些方法一方面无法突出智能合约源码中的关键变量而造成语义建模不足,导致检测结果不理想,另一方面,由于神经网络的“黑箱性”,因此其大多数情况下可解释性较差,即无法像传统的检测工具一样给出可能存在漏洞的确切位置或代码。
针对上述问题,将智能合约转化为什么样的图,如何将智能合约的代码转化为一个非欧几里得图,使得该图中包含合约中的数据和控制依赖关系,通过该非欧几里得图能够更好的表征原合约中的语义,语法信息,从而进一步将漏洞检测问题转化为图拓扑的识别问题,并且在此基础上采用什么样的图神经网络架构来检测智能合约转化的图才会使得检测效率以及正确率更高,是亟待解决的问题。
发明内容
本发明的目的在于提供一种基于图神经网络的智能合约漏洞检测方法,以解决上述现有技术存在的问题。
为实现上述目的,本发明所采取的技术方案为:
一种基于图神经网络的智能合约漏洞检测方法,所述基于图神经网络的智能合约漏洞检测方法,具体包括以下步骤:
步骤1:源码预处理:对智能合约的源码进行规范化处理,再从经规范化处理的所述智能合约的源码中抽取控制流图,根据预设的匹配规则库标记所述控制流图中含有敏感操作的节点,根据标记后的控制流图创建程序依赖图,根据所述程序依赖图提取关键代码图,所述匹配规则库根据导致智能合约漏洞的敏感操作形成;
步骤2:构建基于图神经网络的检测模型,所述检测模型包括符号化模块、语义特征提取模块和预测模块,所述符号化模块用于符号化处理所述关键代码图中的变量名和函数名,所述语义特征提取模块用于从所述符号化处理后的关键代码图中提取节点语义特征,所述预测模块基于图神经网络构建,用于根据所述节点语义特征输出智能合约漏洞检测的预测结果;
步骤3:所述检测模型的训练、测试及应用:对所述检测模型进行训练,取测试通过的检测模型对待检测源码对应的关键代码图进行智能合约漏洞检测。
以下还提供了若干可选方式,但并不作为对上述总体方案的额外限定,仅仅是进一步的增补或优选,在没有技术或逻辑矛盾的前提下,各可选方式可单独针对上述总体方案进行组合,还可以是多个可选方式之间进行组合。
作为优选,所述的敏感操作为特定的函数。
作为优选,所述规范化处理为按照Solidity Style Guide规范,使用Ethlint工具对待检测的智能合约的源码进行格式化处理,然后补全所述智能合约的源码在编程过程中省略的默认关键字,再将表达相同的语义的不同代码转化为同一种表达形式。
作为优选,所述的控制流图从反映源码语法关系的抽象语法树中抽取得到,所述抽象语法树通过经规范化处理后的所述智能合约的源码转换得到。
作为优选,所述程序依赖图由所述控制流图生成的控制依赖图和数据依赖图结合生成,所述控制依赖图、数据依赖图和程序依赖图三者的节点相同,所述程序依赖图的边为所述控制依赖图的边和所述数据依赖图的边的并集。
作为优选,所述控制依赖图的生成方式为:在所述控制流图中添加出口和入口,所述出口为所述智能合约的源码的最末尾处,所述入口为所述智能合约的源码的最开始处,在所述出口和所述入口之间增添一条边,然后将所述控制流图的每条边进行反转得到反向控制流图,根据所述反向控制流图对每个节点求支配关系,通过所述支配关系和反向控制流图得到每个节点的前向支配边界,根据所述前向支配边界得到所述控制依赖图;
所述数据依赖图的生成方式为:选取控制流图中定义了变量的节点作为主节点,遍历主节点,筛选直接使用主节点定义的变量的值的节点作为次节点,在主节点和对应的次节点之间形成一条边,遍历完成后得到数据依赖图。
作为优选,所述关键代码图为所述程序依赖图上所有与所述含有敏感操作的节点具有控制依赖关系和数据依赖关系的节点。
作为优选,所述符号化处理所述关键代码图中的变量名和函数名包括:将所述关键代码图中的节点中用户自定义的变量名和函数名分别映射为各自统一的形式。
作为优选,所述从所述符号化处理后的关键代码图中提取节点语义特征包括:将所述关键代码图中的节点拆分成具有最小语义的基本单元,通过Doc2Vec模型或Word2Vec模型对每个节点中的基本单元进行语义信息的提取,得到节点语义特征。
作为优选,所述预测模块包括输入层、图卷积层、池化层、读出层和多层感知机层;所述输入层的输入为节点语义特征和根据关键代码图得到的邻接矩阵;所述图卷积层结合自注意力机制自适应学习所述关键代码图中的节点的重要性,且输出通过跳跃连接与所述池化层连接,所述池化层采用SagPool池化机制,所述读出层采用均值池化的方式,所述多层感知机层由激活层,全连接层,Dropout层,SoftMax层组合形成。
本发明提供的一种基于图神经网络的智能合约漏洞检测方法,将智能合约中敏感操作作为程序分析的入口点,抽取出和敏感操作具有控制依赖关系和数据依赖关系的代码作为关键代码进行分析,减轻程序分析的任务,提高效率的同时减少无关代码的干扰,提高分析正确率,有助于漏洞的定位。并且将关键代码用图结构表示,能够考虑到语义信息和代码的结构信息,有助于提高检测正确率。除此之外,本发明能通过图神经网络学习模型和注意力机制对异常结果进行精确的诊断和解释。
附图说明
图1为本发明基于图神经网络的智能合约漏洞检测方法的流程图;
图2为本发明创建控制流图的示意图;
图3为本发明标记含有敏感操作的节点的示意图;
图4为本发明创建反向控制流图的示意图;
图5为本发明创建控制依赖图的示意图;
图6为本发明创建数据依赖图的示意图;
图7为本发明创建程序依赖图的示意图;
图8为本发明基于程序依赖图提取关键代码图的示意图;
图9为本发明预测模型的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是在于限制本发明。
本申请提出一种基于图神经网络的智能合约漏洞检测方法,能够提高智能合约漏洞检测效率和准确率。如图1所示,包括以下步骤:
步骤1:源码预处理。源码预处理可分为五部分。
第一部分:收集整理导致智能合约漏洞的敏感操作,形成匹配规则库。
其中敏感操作是特定的函数,即由安全分析人员归纳出的易导致漏洞的函数,例如为可能触发重入漏的call.value函数,可能造成无限循环漏洞的block.timestamp函数,调用会造成注入攻击的logAndcail()函数,Delegatecall函数,spender.call()函数等。
敏感操作可以仅收集整理一次,在形成匹配规则库后,之后对智能合约的源码进行检测可以直接使用已形成好的匹配规则库,后续有需要可再对匹配规则库进行补充。
第二部分:源码规范化处理。将待检测的源码按照统一规范进行格式化,避免不同编程风格的代码对训练结果的影响。
格式化要首先按照智能合约的编码规范对待检测的智能合约源码进行格式化处理,使待检测的源码编码规范保持统一。然后补全智能合约的源码在编程过程中省略的默认关键字,让模型提取到更加完整的语义信息。最后将表达相同的语义的不同代码,转化为同一种表达形式,如三元表达式统一转化为其等价形式,某些单目运算符转化为完整的形式等,使编码风格趋向统一。
其中编码规范指公知的编码规范Solidity Style Guide规范,格式化工具可以采用Ethlint等。
本实施例将表达相同的语义的不同代码,转化为同一种表达形式为一个常规过程,将三元表达式统一转化为其等价形式的一种实例为:将三元表达式“condition?x:y“全部转为If…else的这种统一的表达形式。将某些单目运算符转化为完整的形式的一种实例为,将复合赋值运算符a+=b,a-=b,a/=b,a%=b,a|=b,a&=b,a<<=b,a>>=b,a++分别转化为a=a+b,a=a-b,a=a/b,a=a%b,a=a|b,a=a<<b,a=a>>b,a=a+1这种完整的表达形式。将表达相同的语义的不同代码,转化为同一种表达形式的具体的实现方式由开发人员实现。
第三部分:抽取控制流图,标记含有敏感操作的节点。先将经过第一部分和第二部分处理过后的智能合约的源码转换成能够反映源码语法关系的抽象语法树,然后从抽象语法树中抽取出程序的控制流图。控制流图是包括节点和有向边的有向图,节点表示基本块,有向边表示基本块之间的调用关系。
基本块是一组连续的语句,这组连贯的语句中只有唯一的入口和出口,控制流只能在基本块的入口处进入,从基本块出口处离开,不在除基本块结束之外的地方停止或出现分支。
遍历程序的控制流图中的每个节点,根据预设的匹配规则库标记控制流图中含有敏感操作的节点。为了便于理解本发明提出的抽取控制流图的过程,在另一个实施例中提供withDraw函数的具体流程步骤如图2所示,先将源码转换为抽象语法树(AST),然后将抽象语法树转换为控制流图(CFG)。如图3所示,填充灰色的基本块中含有敏感操作call.value(),在遍历匹配基本块时会被标记。
第四部分:根据控制流图创建程序依赖图。在第三部分中获得的标记后的控制流图的基础上生成控制依赖图和数据依赖图,并将生成好的控制依赖图和数据依赖图结合生成程序依赖图。
其中控制依赖就是对于CFG中的两个节点a,b,如果两个节点之间存在一条路径,且b的执行需要依据a的执行结果,则称b控制依赖于a。因此要生成控制依赖图要先在第三部分获得的控制流图中添加出口和入口,入口为源码的最开始处,出口为源码的最末尾处,同时在入口和出口之间添加一条边,该边从入口指向出口。然后将控制流图的每条边进行反转,得到经过反转的控制流图,即反向控制流图,将其记为reversedCFG,如图4所示。
根据reversedCFG对每个节点求支配关系,得到一颗可表示支配关系的支配树,即前向支配树。其中支配关系的求法为:对reversedCFG中的某个节点A,获取根节点到节点A的一条路径,依次删除该路径上的某个节点,然后检查节点A是否还能从根节点到达,如果节点A不可到达,则该节点支配节点A。
其中支配树是树状数据结构,支配树中的每个节点都支配其后代节点,支配树n最近的节点叫作n的直接支配节点,该节点能够直接支配n。其中前向支配树指将控制流的边进行反转,求每个节点的支配从而形成的一种表示支配关系的树状数据结构。
如图5所示,根据reversedCFG和前向支配树得到每个节点的前向支配边界,支配边界为某一节点最远能够支配的边界。将前向支配边界转化为控制依赖图(CDG),即每个节点的控制依赖于其前向支配边界。前向支配边界的计算参考现有技术即可,例如Cooper在文献《A Simple Fast Dominance Algorithm》中提出的算法。
如图6所示为数据依赖图的生成方式,在生成数据依赖图时,选取控制流图中定义了变量的节点作为主节点,遍历主节点,筛选直接使用主节点定义的变量的值的节点作为次节点,在主节点和对应的次节点之间形成一条边,遍历完成后得到数据依赖图(DDG)。
具体的,在控制流图上,设a,b为控制流图上两个节点,如果从a到b存在一条路径,并且在a节点对某个变量v进行了定义,在b节点执行的时候用到v的值,同时在此执行路径上并没有对v进行重新定义,那么就在这两个节点之间构造一条数据依赖边。
在图6中,基本块1定义了变量amount,基本块2,基本块3使用了amount的值,此时基本块2和基本块3就与基本块1形成了数据依赖。
令控制依赖图为(N,C),数据依赖图为(N,D)。其中N为节点的集合
N={n1,n2,n3,n4,…nx},nx为第x个节点,C为控制依赖边(即控制依赖图中的有向边)的集合,C={<na,nb>,<nc,nd>,……},n∈N。D为数据依赖边(即数据依赖图中的有向边)的集合D={<nf,Nh>,<nc,nd>,……},n∈N,则程序依赖图可以表示为P=(N,C∪D)。即控制依赖图、数据依赖图和程序依赖图三者的节点相同,程序依赖图的边取为控制依赖图的边集合和数据依赖图的边集合的并集。
如图7所示为将控制依赖图和数据依赖图结合得到的程序依赖图的过程,在图中每个节点均通过其对应智能合约的源码的基本块的编号进行表示,其中实线表示的为控制依赖图的有向边,虚线表示的为数据依赖图的有向边,在程序依赖图中含有敏感操作的节点皆被标记过。
第五部分:根据程序依赖图提取关键代码。从程序依赖图中标记过的节点出发,在程序依赖图上进行遍历,删除掉程序依赖图上和标记过的节点无关的节点和边,得到与被标记的节点具有控制依赖关系或数据依赖关系的节点及边称为关键代码图。
在执行时,先找到所有入口节点到被标记节点的所有路径,并且将这些路径上所经过的节点保存起来,然后将每一个被标记过的节点作为起始点,采用深度优先遍历的方式,将深度优先遍历能够到达的节点都保存起来,最后对程序依赖图上和标记节点无控制依赖和数据依赖关系的节点和边进行删除,得到和漏洞语法片段强相关的节点和边。
为了便于理解本发明提出的根据程序依赖图提取关键代码图的方法,在另一个实施例中提供一种具体的步骤如图8所示。首先在程序依赖图(PDG)找到入口节点r到标记的节点3的所有路径,从图8中可以看到该实施例的路径为r->1->3;r->2->3;r->1->2->3;并将该路径上的所有节点和边进行保存得到边和点的集合,接着从被标记的节点3出发,进行深度遍历,保存深度遍历可达的节点,在该实施例中的节点3没有后继节点,故而得到的是一个空集合。最后只保留保存的节点以及相关的边,删掉其他节点以及边,得到与被标记的节点具有控制依赖关系和数据依赖关系的节点以及边,得到图8所示的关键代码图(handledPDG)。
通过对源码进行预处理操作,可以抽取出和敏感操作具有控制依赖关系和数据依赖关系的代码进行分析,可以筛选出可能具有漏洞的代码段,并剔除了无关代码,这样可以减轻了程序分析的任务,提高分析效率,在减少无用代码对检测的干扰的同时能够提高分析正确率,方便漏洞定位。
步骤2:构建基于图神经网络的检测模型。检测模型包括符号化模块、语义特征提取模块和预测模块。
符号化模块:符号化处理所述关键代码图中的变量名和函数名。
将步骤1中得到的关键代码图中的节点中用户自定义标识符(变量名和函数名)全部映射成统一的形式,如将用户自定义的变量名映射成VAR1,VAR2,……;将用户自定义的函数名映射成FUNC1,FUNC2。
为了便于理解本发明提出的符号化处理变量名和函数名,在另一个实施例中提供withDraw函数的具体符号化处理流程步骤,即将withDraw函数映射成FUN1,变量amount全部映射成VAR1,这样可以减少自定义的标识符名对后续提取关键代码的图中的特征的影响。
语义特征提取模块:从符号化处理后的关键代码图中提取节点语义特征。
在步骤1得到的关键代码中,每个节点都是文本,在基于步骤2符号化处理后的关键代码图中,每个节点都是文本。故可采用智能合约中的词法分析工具将节点中的每条都拆分成具有最小语义的基本单元,如msg.sender.call.value(VAR1)(),成:“msg”,“.”,“sender”,“.”,“call”,“.”,“value”,“(”,“VAR1”,“)”,“(”,“)”。
然后使用Doc2Vec模型或Word2Vec模型对每个基本单元进行语义信息的提取,得到每个节点的语义的特征向量。以下以Doc2Vec处理为例:
X=[Doc2Vec(Vi)],i=1,2…,n
其中Vi为关键代码图中的第i个节点,n为关键代码图中节点的总个数。最终得到每个节点的30维的特征向量。此时图的每个节点特征形成的特征矩阵可表示为一个n*30的矩阵,即设关键代码图表示为G=(V,E)其中V=[v1,v2,v3…,vn]为图G的所有的节点,则关联代码图对应的特征矩阵
Figure BDA0004201340760000081
hvi为图中第i个节点的30维特征向量。
预测模块:基于图神经网络构建,用于根据节点语义特征输出智能合约漏洞检测的预测结果。
如图9所示,预测模块中使用的网络包括输入层、图卷积层、池化层、读出层和多层感知机层。图卷积层对关键代码图中的节点的特征信息进行聚合和更新,五层图卷积神经网络的输出均通过跳跃连接的方式与最终的池化层相连,然后通过读出层读出最终向量,将最终向量传递到多层感知机层中进行分类。
其中,输入层:输入的数据为关键代码图所有节点的特征向量形成的特征矩阵和以及表示边关系的邻接矩阵。其中特征矩阵为步骤2中语义特征提取模块提取的节点语义特征,用
Figure BDA0004201340760000091
来表示,邻接矩阵是基于关键代码图得到的,邻接矩阵的行和列分别对应关键代码图中的节点,邻接矩阵中的每一个元素代表两个节点之间的连接关系,如果节点之间有连边,则邻接矩阵对应元素为1,否则为0,表达式为
Figure BDA0004201340760000092
图卷积层:使用多个图卷积层,每个图卷积层都更新图中节点的节点聚合并结合自注意力机制从输入的图中自适应地学习每个节点的重要性。使用下面的图卷积公式,为每个节点赋予一个重要性得分
Figure BDA0004201340760000093
式中,δ表示激活函数,A表示邻接矩阵,D表示关键代码图的度矩阵,X表示节点语义矩阵,θatt表示特征参数。图卷积层的层数不受限制,但在本实施例中优选为五层。
池化层:图卷积网络的输出通过跳跃连接的方式与最终的池化层相连,采用SagPool池化机制,根据重要性得分和拓扑结构进行Top-k池化操作,舍弃一些不太重要的节点,得到一个新的图结构,从而对邻接矩阵和节点语义特征进行更新。
读出层:采用均值池化的方式,将节点不同的图降到同一维度中,得到最终的特征向量,用于后续的图像分类任务。
多层感知机层:网络层由激活层、全连接层、Dropout层和SoftMax层组合形成,用于对读出层输出的特征向量进行分类任务。
本实施例将关键代码图来表示,既能够考虑到语义信息,又能考虑到代码的结构信息,有助于提高正确率,并且通过图神经网络学习这些图的特征,相比于传统方法,这样可以提高检测的准确率,并且将图神经网络模型、自注意力机制等联合使用,能够充分利用每层GCN卷积得到的特征信息,提高检测准确率。除此之外,通过图神经网络学习模型和注意力机制能够对异常结构进行精确的诊断和解释。
步骤3:检测模型的训练、测试及应用:对所述检测模型进行训练,取测试通过的检测模型对待检测源码对应的关键代码图进行智能合约漏洞检测。
检测模型的训练和测试时基于现有源码进行,对存在智能合约漏洞的源码进行标记得到训练集和测试集。在检测模型应用时,先通过对待检测的源码进行预处理提取出关键代码图,然后输入训练好的检测模型进行图分类,检查关键代码图是否有智能合约漏洞,例如检测模型最终输出为0表示不存在智能合约漏洞,最终输出为1表示存在智能合约漏洞。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明的保护范围应以所附权利要求为准。

Claims (10)

1.一种基于图神经网络的智能合约漏洞检测方法,其特征在于,所述基于图神经网络的智能合约漏洞检测方法,具体包括以下步骤:
步骤1:源码预处理:对智能合约的源码进行规范化处理,再从经规范化处理的所述智能合约的源码中抽取控制流图,根据预设的匹配规则库标记所述控制流图中含有敏感操作的节点,根据标记后的控制流图创建程序依赖图,根据所述程序依赖图提取关键代码图,所述匹配规则库根据导致智能合约漏洞的敏感操作形成;
步骤2:构建基于图神经网络的检测模型,所述检测模型包括符号化模块、语义特征提取模块和预测模块,所述符号化模块用于符号化处理所述关键代码图中的变量名和函数名,所述语义特征提取模块用于从所述符号化处理后的关键代码图中提取节点语义特征,所述预测模块基于图神经网络构建,用于根据所述节点语义特征输出智能合约漏洞检测的预测结果;
步骤3:所述检测模型的训练、测试及应用:对所述检测模型进行训练,取测试通过的检测模型对待检测源码对应的关键代码图进行智能合约漏洞检测。
2.如权利要求1所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述的敏感操作为特定的函数。
3.如权利要求1所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述规范化处理为按照Solidity Style Guide规范,使用Ethlint工具对待检测的智能合约的源码进行格式化处理,然后补全所述智能合约的源码在编程过程中省略的默认关键字,再将表达相同的语义的不同代码转化为同一种表达形式。
4.如权利要求1所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述的控制流图从反映源码语法关系的抽象语法树中抽取得到,所述抽象语法树通过经规范化处理后的所述智能合约的源码转换得到。
5.如权利要求1所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述程序依赖图由所述控制流图生成的控制依赖图和数据依赖图结合生成,所述控制依赖图、数据依赖图和程序依赖图三者的节点相同,所述程序依赖图的边为所述控制依赖图的边和所述数据依赖图的边的并集。
6.如权利要求5所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述控制依赖图的生成方式为:在所述控制流图中添加出口和入口,所述出口为所述智能合约的源码的最末尾处,所述入口为所述智能合约的源码的最开始处,在所述出口和所述入口之间增添一条边,然后将所述控制流图的每条边进行反转得到反向控制流图,根据所述反向控制流图对每个节点求支配关系,通过所述支配关系和反向控制流图得到每个节点的前向支配边界,根据所述前向支配边界得到所述控制依赖图;
所述数据依赖图的生成方式为:选取控制流图中定义了变量的节点作为主节点,遍历主节点,筛选直接使用主节点定义的变量的值的节点作为次节点,在主节点和对应的次节点之间形成一条边,遍历完成后得到数据依赖图。
7.如权利要求5所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述关键代码图为所述程序依赖图上所有与所述含有敏感操作的节点具有控制依赖关系和数据依赖关系的节点。
8.如权利要求1所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述符号化处理所述关键代码图中的变量名和函数名包括:将所述关键代码图中的节点中用户自定义的变量名和函数名分别映射为各自统一的形式。
9.如权利要求1所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述从所述符号化处理后的关键代码图中提取节点语义特征包括:将所述关键代码图中的节点拆分成具有最小语义的基本单元,通过Doc2Vec模型或Word2Vec模型对每个节点中的基本单元进行语义信息的提取,得到节点语义特征。
10.如权利要求1所述的基于图神经网络的智能合约漏洞检测方法,其特征在于,所述预测模块包括输入层、图卷积层、池化层、读出层和多层感知机层;所述输入层的输入为节点语义特征和根据关键代码图得到的邻接矩阵;所述图卷积层结合自注意力机制自适应学习所述关键代码图中的节点的重要性,且输出通过跳跃连接与所述池化层连接,所述池化层采用SagPool池化机制,所述读出层采用均值池化的方式,所述多层感知机层由激活层,全连接层,Dropout层,SoftMax层组合形成。
CN202310462926.1A 2023-04-26 2023-04-26 一种基于图神经网络的智能合约漏洞检测方法 Pending CN116383832A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310462926.1A CN116383832A (zh) 2023-04-26 2023-04-26 一种基于图神经网络的智能合约漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310462926.1A CN116383832A (zh) 2023-04-26 2023-04-26 一种基于图神经网络的智能合约漏洞检测方法

Publications (1)

Publication Number Publication Date
CN116383832A true CN116383832A (zh) 2023-07-04

Family

ID=86961753

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310462926.1A Pending CN116383832A (zh) 2023-04-26 2023-04-26 一种基于图神经网络的智能合约漏洞检测方法

Country Status (1)

Country Link
CN (1) CN116383832A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117556425A (zh) * 2023-11-24 2024-02-13 烟台大学 基于图神经网络的智能合约漏洞检测方法、***和设备

Cited By (2)

* Cited by examiner, † Cited by third party
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
CN111639344B (zh) 一种基于神经网络的漏洞检测方法及装置
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与***
CN111125716B (zh) 一种以太坊智能合约漏洞检测方法及装置
CN102339252B (zh) 基于xml中间模型以及缺陷模式匹配的静态检测***
Al-Obeidallah et al. A survey on design pattern detection approaches
CN106293891B (zh) 多维投资指标监督方法
CN113326187B (zh) 数据驱动的内存泄漏智能化检测方法及***
CN112733156A (zh) 基于代码属性图的软件脆弱性智能检测方法、***及介质
Zeng et al. EtherGIS: a vulnerability detection framework for Ethereum smart contracts based on graph learning features
CN114547611A (zh) 一种基于多模态特征的智能合约庞氏骗局检测方法及***
CN115309451A (zh) 代码克隆检测方法、装置、设备、存储介质及程序产品
CN114861194A (zh) 一种基于bgru与cnn融合模型的多类型漏洞检测方法
CN115146279A (zh) 程序漏洞检测方法、终端设备及存储介质
CN110162297A (zh) 一种源代码段自然语言描述自动生成方法及***
CN116383832A (zh) 一种基于图神经网络的智能合约漏洞检测方法
CN116150757A (zh) 一种基于cnn-lstm多分类模型的智能合约未知漏洞检测方法
CN116305119A (zh) 基于预测指导原型的apt恶意软件分类方法和装置
CN116340952A (zh) 一种基于操作码程序依赖图的智能合约漏洞检测方法
CN116578980A (zh) 基于神经网络的代码分析方法及其装置、电子设备
CN113742205A (zh) 一种基于人机协同的代码漏洞智能检测方法
Zhou et al. Grapheye: A novel solution for detecting vulnerable functions based on graph attention network
CN117725592A (zh) 一种基于有向图注意力网络的智能合约漏洞检测方法
Xia et al. Source Code Vulnerability Detection Based On SAR-GIN
CN115758388A (zh) 一种基于低维字节码特征的智能合约的漏洞检测方法
CN113127341B (zh) 一种基于图网络模型的增量代码缺陷检测方法及***

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