CN113360915A - 基于源代码图表示学习的智能合约多漏洞检测方法及*** - Google Patents
基于源代码图表示学习的智能合约多漏洞检测方法及*** Download PDFInfo
- Publication number
- CN113360915A CN113360915A CN202110643307.3A CN202110643307A CN113360915A CN 113360915 A CN113360915 A CN 113360915A CN 202110643307 A CN202110643307 A CN 202110643307A CN 113360915 A CN113360915 A CN 113360915A
- Authority
- CN
- China
- Prior art keywords
- graph
- intelligent contract
- node
- code
- vulnerability
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/436—Semantic checking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
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)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于源代码图表示学习的智能合约多漏洞检测方法及***,该方法结合智能合约的抽象语法树和语义信息,利用函数粒度代码属性图对智能合约源代码进行表征;并根据智能合约不同类型漏洞的语法特征定义切片准则,使用程序切片技术对智能合约图表示进行降噪并结合门控图神经网络进行特征提取,基于提取的特征进行漏洞预测。本发明的优势在于:结合多种图结构表征智能合约源代码,充分保留了代码的语法、语义信息和上下文结构;利用程序切片技术去除与漏洞检测无关的噪声代码,提升了检测的准确性;基于门控图神经网络自动学习多种漏洞的特征,提高了漏洞检测的适用范围和检测效率,降低了检测成本。
Description
技术领域
本发明属于软件安全领域,涉及一种基于源代码图表示学习的智能合约多漏洞检测方法及***。
背景技术
智能合约是将传统合约数字化,并运行在区块链平台上一种共识规则。相较于传统合约,智能合约依托区块链平台具有多种优势:第一,智能合约的执行不依赖第三方,而是自动和去中心化的;第二,智能合约本身无法篡改;第三,智能合约存储在区块链平台上,每个区块链节点都保存一份合约备份,并对所有人可见,保证了合约执行的透明性。随着区块链技术的发展,越来越多的开发者注意到智能合约的这些优势,将智能合约技术应用在包括金融、艺术品交易、风险投资等众多领域。
但是相比于传统的软件,由于智能合约管理着大量的虚拟资产,一旦其本身存在漏洞并被攻击就会造成巨大的经济损失。2016年发生的The Dao安全漏洞导致了6000万美元的损失;2017年7月的Parity钱包漏洞导致了1.5亿美元的资金被永远冻结;2021年3月的DODO合约由于存在漏洞导致380万美元资产被盗。所以在安全事故频发的当下,针对智能合约的漏洞检测是十分重要且迫切的需求。
现有的智能合约漏洞检测方法大多依赖人工定义的专家规则,通过符号执行、污点分析和形式化验证等技术进行漏洞检测。这些方法都存在执行效率低,代码覆盖率低和检测周期长等问题,并且其检测的准确性完全依赖专家规则的定义。随着智能合约数量呈现爆发式增长,当前基于专家规则和静态分析的漏洞检测方法无法适用于快速变化的智能合约应用和大规模代码的检测。
发明内容
发明目的:针对上述现有技术存在的问题,本发明目的在于提供一种检测范围更广、执行效率更高的智能合约多漏洞检测方法及***。
技术方案:为实现上述发明目的,本发明提供的一种基于源代码图表示学习的智能合约多漏洞检测方法,包括以下步骤:
(1)构建智能合约源代码数据集,并对数据集中样本是否存在漏洞进行标记;
(2)结合智能合约的抽象语法树和语义信息构建智能合约函数粒度代码属性图;代码属性图中的每个节点包含代码语句和节点类型,图中的边类型根据语义信息分为AST边、控制流边、数据流边、控制依赖边和数据依赖边;
(3)根据智能合约漏洞的语法特征,定义智能合约切片准则,利用程序切片技术得到智能合约源代码中与漏洞相关的切片语句集合,并从代码属性图中提取与切片语句相关的语义信息组成切片代码属性图;
(4)构建门控图神经网络与多层感知机结合的漏洞检测模型并进行训练,所述门控图神经网络用于对切片代码属性图进行特征提取,多层感知机用于根据提取的特征以及切片代码属性图中各节点的初始状态特征进行智能合约漏洞预测;
(5)利用步骤(2)和(3)中的方法生成待测试智能合约的切片代码属性图,输入到训练好的漏洞检测模型中预测是否存在漏洞。
进一步地,步骤(1)具体过程包括:
(1.1)通过Google BigQuery数据库获得部署在以太坊上的智能合约地址集合,利用合约地址在Etherscan平台得到对应的智能合约源代码;
(1.2)通过智能合约漏洞检测工具检测收集到的智能合约源码,并根据检测结果对样本进行标记,检测工具结果显示存在漏洞的合约标记为"1",否则标记为"0";之后对标记为漏洞的合约样本进行人工审计,以确保样本标记的准确性。
进一步地,步骤(2)具体过程包括:
(2.1)利用solidity编译器编译智能合约源代码,生成对应的抽象语法树,搜索智能合约抽象语法树中所有节点类型为FunctionDefinition的节点集合Vfunc,提取以这些节点为根节点的子树,得到函数粒度的抽象语法树集合;
(2.2)在函数粒度抽象语法树中寻找节点类型为ModifierInvocation的节点,此节点代表当前函数使用的函数修饰器,根据此节点内容寻找对应的函数修饰器具体实现,并将其添加在当前函数内部;
(2.3)在函数粒度的抽象语法树基础上,利用静态分析方法分析函数的语义信息,包括数据流、控制流、控制流依赖和数据依赖;将这些语义信息与抽象语法树结合,组成函数粒度代码属性图;图中各节点仍使用抽象语法树节点,而图中边类型根据其包含的语义信息分为以下几类:AST边、控制流边、数据流边、控制依赖边和数据依赖边;
(2.4)利用深度优先遍历算法将抽象语法树展开成序列表示,并在序列表示的基础上利用word2vec技术将抽象语法树节点映射到低维向量空间。
进一步地,步骤(3)具体过程包括:
(3.1)根据智能合约漏洞库SWC和CWE中已知的不同类型漏洞的语法特征定义切片准则;
(3.2)利用静态切片技术中的图可达性方法,根据定义的切片准则进行代码切片;在代码属性图中利用字符串匹配方法,搜索节点内容包含预定义切片准则的节点集合Vsc={vsc},从这些节点出发,沿数据依赖边和控制依赖边对代码属性图进行前向和后向遍历,寻找与节点vsc存在数据依赖或者控制依赖关系的相关节点集合Vs;切片准则节点集合Vsc和切片依赖相关节点集合VS共同组成代码切片语句节点集合V=Vsc∪Vs;
(3.3)根据步骤(3.2)得到的切片语句集合V,从代码属性图中提取切片代码属性图GS=(V,E,H),其中E是图中边的集合,H∈RV*d表示所有节点的初始状态其值为各节点利用word2vec映射的特征向量,d表示节点特征向量的维度;
(3.4)考虑到智能合约存在fallback机制,在步骤(3.3)得到的切片代码属性图的基础上添加fallback边。
进一步地,步骤(4)中利用图神经网络提取切片代码属性图的特征具体过程包括:
(4.1)将步骤(3)生成的切片代码属性图GS作为门控图神经网络的输入;
(4.2)为了使代码属性图中各节点在消息传播阶段能同时够接收到前驱和后继节点传来的消息,定义图的邻接矩阵时同时考虑图的出方向和入方向邻接矩阵A=[A(in),A(out)],其中入方向边邻接矩阵A(in)表示消息的前向传递,出方向邻接矩阵A(out)则代表消息的反向传递;
(4.3)图神经网络中节点v在t时刻的状态依赖与其相邻节点在t-1时刻的状态的消息传递,表示为:
其中σ(·)代表激活函数,Wz和Uz代表重置门参数,Wr和Ur代表更新门参数;
其中W和U代表门控神经单元的候选隐藏状态权重参数,·代表按元素乘法;利用重置门计算节点v在t时刻的最终状态为:
进一步地,步骤(5)中利用多层感知机进行智能合约漏洞预测具体过程包括:
(5.2)将图级别向量表示hG作为多层感知机的输入,得到最终的预测结果。
基于相同的发明构思,本发明提供的一种基于源代码图表示学习的智能合约多漏洞检测***,包括:数据集构建模块,用于构建智能合约源代码数据集,并对数据集中样本是否存在漏洞进行标记;代码图表示模块,用于结合智能合约的抽象语法树和语义信息构建智能合约函数粒度代码属性图;代码属性图中的每个节点包含代码语句和节点类型,图中的边类型根据语义信息分为AST边、控制流边、数据流边、控制依赖边和数据依赖边;以及根据智能合约漏洞的语法特征,定义智能合约切片准则,利用程序切片技术得到智能合约源代码中与漏洞相关的切片语句集合,并从代码属性图中提取与切片语句相关的语义信息组成切片代码属性图;代码特征提取模块,用于构建门控图神经网络与多层感知机结合的漏洞检测模型并进行训练,所述门控图神经网络用于对切片代码属性图进行特征提取,多层感知机用于根据提取的特征以及切片代码属性图中各节点的初始状态特征进行智能合约漏洞预测;以及漏洞检测模块,用于将待测试智能合约的切片代码属性图输入到训练好的漏洞检测模型中预测是否存在漏洞。
基于相同的发明构思,本发明提供的一种基于源代码图表示学习的智能合约多漏洞检测***,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的基于源代码图表示学习的智能合约多漏洞检测方法。
有益效果:本发明与现有技术相比,其显著优点为:
1)本发明在进行智能合约源代码表示时通过结合抽象语法树、控制流图和程序依赖图组成智能合约复合图表示。结合不同的代码表示形式能最大程度表征智能合约的语法、语义信息,同时利用图结构可以保留智能合约代码语句之间的上下文结构信息,从而避免传统的代码序列表征带来的代码结构特征损失。
2)本发明根据智能合约已知的多种漏洞语法特征,提出不同类型漏洞相关切片准则,并基于这些切片准则对智能合约的图表示进行切片操作。在保留图结构中与漏洞有关的关键节点和边的基础上,删除图中与漏洞无关的噪声节点,在保留智能合约代码语法、语义信息的同时降低与漏洞无关的噪声代码对检测效果的影响,从而提升漏洞检测的准确率。
3)本发明使用包含多种漏洞的智能合约源代码集作为训练集,将切片后的复合图输入图神经网络自动学习语法、语义特征。并在学习过程中,通过构建图的入方向邻接矩阵学习节点的前向特征,通过构建图的出方向邻接矩阵学习节点的后向特征,结合各节点的前向和后向特征可以得到代码的上下文特征。结合代码上下文特征和语法、语义特征可以更全面表示不同类型漏洞的特征,提高了漏洞检测方法适用范围,并降低召回率。
附图说明
图1为实施例中基于源代码图表示学习的智能合约多漏洞检测方法的流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
在一个实施例中,结合图1,本发明提出一种基于源代码图表示学习的智能合约多漏洞检测方法,包括以下步骤:
(1)构建智能合约源代码数据集,并对数据集中样本是否存在漏洞进行标记;
(2)结合智能合约的抽象语法树和语义信息构建智能合约函数粒度代码属性图;代码属性图中的每个节点包含代码语句和节点类型,图中的边类型根据语义信息分为AST边、控制流边、数据流边、控制依赖边和数据依赖边;
(3)根据智能合约漏洞的语法特征,定义智能合约切片准则,利用程序切片技术得到智能合约源代码中与漏洞相关的切片语句集合,并从代码属性图中提取与切片语句相关的语义信息组成切片代码属性图;
(4)构建门控图神经网络与多层感知机结合的漏洞检测模型并进行训练,所述门控图神经网络用于对切片代码属性图进行特征提取,多层感知机用于根据提取的特征以及切片代码属性图中各节点的初始状态特征进行智能合约漏洞预测;
(5)利用步骤(2)和(3)中的方法生成待测试智能合约的切片代码属性图,输入到训练好的漏洞检测模型中预测是否存在漏洞。
进一步地,在其中一个实施例中,步骤(1)所述的智能合约源代码数据集构建,具体过程包括:
(1.1)通过Google BigQuery数据库获得当前部署在以太坊上的智能合约地址集合,利用合约地址在Etherscan平台得到对应的智能合约源代码。
(1.2)通过已有智能合约漏洞检测工具检测收集到的智能合约源码,并根据检测结果对样本进行标记,检测工具结果显示存在漏洞的合约标记为"1",否则标记为"0"。之后对标记为漏洞的合约样本进行人工审计,以确保样本标记的准确性。
进一步地,在其中一个实施例中,步骤(2)针对智能合约源代码构造代码属性图,具体过程包括:
(2.1)利用solidity编译器solc编译智能合约源代码,生成该智能合约对应的抽象语法树,节点信息由代码语句和节点类型两部分组成。搜索智能合约抽象语法树中所有节点类型为FunctionDefinition的节点集合Vfunc,提取以这些节点为根节点的子树,得到函数粒度的抽象语法树集合。
(2.2)在函数粒度抽象语法树中寻找节点类型为ModifierInvocation的节点,此节点代表当前函数使用的函数修饰器,根据此节点内容寻找对应的函数修饰器具体实现,并将其添加在当前函数内部。
(2.3)在函数粒度的抽象语法树基础上,利用静态分析方法分析函数的数据流、控制流、控制流依赖和数据依赖等语义信息。将这些语义信息与抽象语法树结合,组成函数粒度代码属性图。图中各节点仍使用抽象语法树节点,每个节点包含代码语句和节点类型两部分信息,而图中边类型根据其包含的语义信息可以分为以下几类:AST边、控制流边、数据流边、控制依赖边和数据依赖边。
AST边代表函数的语法结构特征,从AST的父节点指向其子节点,可以从抽象语法树中直接获取。数据流边代表变量在函数内部使用的语义信息,一条数据流边沿着函数执行方向连接两个包含相同的变量的节点。控制流代表函数内部控制逻辑相关的语义信息,一条控制流边从包含条件判断语句的节点指向所有受其控制的分支语句节点。
进一步地,在其中一个实施例中,在步骤(3)中根据智能合约已知漏洞的语法特征,定义智能合约切片准则。利用程序切片技术得到智能合约源代码中与漏洞相关的切片语句集合,并从代码属性图中提取与切片语句相关的语义信息组成切片代码属性图。具体过程包括:
(3.1)智能合约不同的类型漏洞对应不同的切片准则,具体准则可以从漏洞库SWC、CWE中提取,部分示例如表1所示:
表1切片准则列表
(3.2)利用静态切片技术中的图可达性方法,根据表1定义的切片准则进行代码切片。在代码属性图中利用字符串匹配方法,搜索节点内容包含预定义切片准则的节点集合Vsc={vsc},从这些节点出发,沿数据依赖边和控制依赖边对代码属性图进行前向和后向遍历,寻找与节点vsc存在数据依赖或者控制依赖关系的相关节点集合Vs。切片准则节点集合Vsc和切片依赖相关节点集合VS共同组成代码切片语句集合V=Vsc∪Vs。
(3.3)根据步骤(3.2)得到的切片语句集合V,从代码属性图中提取切片代码属性图GS=(V,E,H),其中V代表切片语句节点的集合,E是图中边的集合,H∈R|V|*d表示所有节点的初始状态,其值为步骤(2.4)中经过word2vec得到的各节点向量表示,d表示节点特征的维度;
(3.4)考虑到智能合约存在fallback机制:当合约Alice中执行<Bob>.call()时,被调用者Bob可以再次调用Alice,产生了嵌套调用。所以在步骤(3.3)得到的切片代码属性图的基础上添加fallback边。寻找节点内容为<address>.call()的节点vcall,构造一条边efallbackcall指向函数入口节点vfunction。此时fallback边efallbackcall:vcall→vfunction代表了fallback机制的语义信息。
进一步地,在其中一个实施例中,步骤(4)中将切片代码属性图输入图神经网络,利用双向消息传递进行神经网络模型参数训练和各节点特征的表示学习,具体过程包括:
(4.1)将步骤(3)生成的切片代码属性图GS作为门控图神经网络的输入。
(4.2)代码中某一语句的语义与其所处的上下文密切相关,所以代码属性图中各节点的前驱和后继节点都对当前节点的语义存在影响。而代码属性图各节点之间的边依照程序执行方向,只包含前向关系。所以在图神经网络的消息传递阶段,图中各节点只能获得其前驱节点所传递的消息,而其兄弟节点或者后继节点的消息无法反向传递到当前节点。为了使代码属性图中各节点在消息传播阶段能同时够接收到前驱和后继节点传来的消息,定义图的邻接矩阵时需要同时考虑图的出方向和入方向邻接矩阵A=[A(in),A(out)]。其中入方向边邻接矩阵A(in)表示消息的前向传递,而出方向邻接矩阵A(out)则代表消息的反向传递;
(4.3)图神经网络中节点v在t时刻的状态依赖与其相邻节点在t-1时刻的状态的消息传递,表示为:
其中σ(·)代表激活函数,Wz和Uz代表重置门参数,Wr和Ur代表更新门参数。
其中W和U代表门控神经单元的候选隐藏状态权重参数,·代表按元素乘法。利用重置门计算节点v在t时刻的最终状态为:
进一步地,在其中一个实施例中,利用多层感知机结合图神经网络读出操作进行智能合约漏洞预测,具体方法是:
其中conv代表一维卷积操作;再将图级别向量表示hG作为多层感知机的输入,得到最终的预测结果:
综上,本发明可以更好地利用漏洞本身的语法特征对智能代码进行切片处理,去除那些与漏洞无关的噪声代码,提升检测的准确性。同时利用图结构表示智能合约代码,能够充分挖掘代码的语法、语义信息和代码语句的上下文结构。在图表示的基础上利用图神经网络自动学习漏洞特征,避免了人工定义漏洞规则。提高漏洞检测的适用范围,降低检测成本。
基于相同的发明构思,本发明实施例提供的一种基于源代码图表示学习的智能合约多漏洞检测***,包括:数据集构建模块,用于构建智能合约源代码数据集,并对数据集中样本是否存在漏洞进行标记;代码图表示模块,用于结合智能合约的抽象语法树和语义信息构建智能合约函数粒度代码属性图;代码属性图中的每个节点包含代码语句和节点类型,图中的边类型根据语义信息分为AST边、控制流边、数据流边、控制依赖边和数据依赖边;以及根据智能合约漏洞的语法特征,定义智能合约切片准则,利用程序切片技术得到智能合约源代码中与漏洞相关的切片语句集合,并从代码属性图中提取与切片语句相关的语义信息组成切片代码属性图;代码特征提取模块,用于构建门控图神经网络与多层感知机结合的漏洞检测模型并进行训练,所述门控图神经网络用于对切片代码属性图进行特征提取,多层感知机用于根据提取的特征以及切片代码属性图中各节点的初始状态特征进行智能合约漏洞预测;以及漏洞检测模块,用于将待测试智能合约的切片代码属性图输入到训练好的漏洞检测模型中预测是否存在漏洞。具体实施细节参见上述方法实施例,此处不再赘述。
基于相同的发明构思,本发明实施例提供的一种基于源代码图表示学习的智能合约多漏洞检测***,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的基于源代码图表示学习的智能合约多漏洞检测方法。
Claims (8)
1.一种基于源代码图表示学习的智能合约多漏洞检测方法,其特征在于,包括以下步骤:
(1)构建智能合约源代码数据集,并对数据集中样本是否存在漏洞进行标记;
(2)结合智能合约的抽象语法树和语义信息构建智能合约函数粒度代码属性图;代码属性图中的每个节点包含代码语句和节点类型,图中的边类型根据语义信息分为AST边、控制流边、数据流边、控制依赖边和数据依赖边;
(3)根据智能合约漏洞的语法特征,定义智能合约切片准则,利用程序切片技术得到智能合约源代码中与漏洞相关的切片语句集合,并从代码属性图中提取与切片语句相关的语义信息组成切片代码属性图;
(4)构建门控图神经网络与多层感知机结合的漏洞检测模型并进行训练,所述门控图神经网络用于对切片代码属性图进行特征提取,多层感知机用于根据提取的特征以及切片代码属性图中各节点的初始状态特征进行智能合约漏洞预测;
(5)利用步骤(2)和(3)中的方法生成待测试智能合约的切片代码属性图,输入到训练好的漏洞检测模型中预测是否存在漏洞。
2.根据权利要求1所述的基于源代码图表示学习的智能合约多漏洞检测方法,其特征在于,步骤(1)具体过程包括:
(1.1)通过Google BigQuery数据库获得部署在以太坊上的智能合约地址集合,利用合约地址在Etherscan平台得到对应的智能合约源代码;
(1.2)通过智能合约漏洞检测工具检测收集到的智能合约源码,并根据检测结果对样本进行标记,检测工具结果显示存在漏洞的合约标记为"1",否则标记为"0";之后对标记为漏洞的合约样本进行人工审计,以确保样本标记的准确性。
3.根据权利要求1所述的基于源代码图表示学习的智能合约多漏洞检测方法,其特征在于,步骤(2)具体过程包括:
(2.1)利用solidity编译器编译智能合约源代码,生成对应的抽象语法树,搜索智能合约抽象语法树中所有节点类型为FunctionDefinition的节点集合Vfunc,提取以这些节点为根节点的子树,得到函数粒度的抽象语法树集合;
(2.2)在函数粒度抽象语法树中寻找节点类型为ModifierInvocation的节点,此节点代表当前函数使用的函数修饰器,根据此节点内容寻找对应的函数修饰器具体实现,并将其添加在当前函数内部;
(2.3)在函数粒度的抽象语法树基础上,利用静态分析方法分析函数的语义信息,包括数据流、控制流、控制流依赖和数据依赖;将这些语义信息与抽象语法树结合,组成函数粒度代码属性图;图中各节点仍使用抽象语法树节点,而图中边类型根据其包含的语义信息分为以下几类:AST边、控制流边、数据流边、控制依赖边和数据依赖边;
(2.4)利用深度优先遍历算法将抽象语法树展开成序列表示,并在序列表示的基础上利用word2vec技术将抽象语法树节点映射到低维向量空间。
4.根据权利要求1所述的基于源代码图表示学习的智能合约多漏洞检测方法,其特征在于,步骤(3)具体过程包括:
(3.1)根据智能合约漏洞库SWC和CWE中已知的不同类型漏洞的语法特征定义切片准则;
(3.2)利用静态切片技术中的图可达性方法,根据定义的切片准则进行代码切片;在代码属性图中利用字符串匹配方法,搜索节点内容包含预定义切片准则的节点集合Vsc={vsc},从这些节点出发,沿数据依赖边和控制依赖边对代码属性图进行前向和后向遍历,寻找与节点vsc存在数据依赖或者控制依赖关系的相关节点集合Vs;切片准则节点集合Vsc和切片依赖相关节点集合VS共同组成代码切片语句节点集合V=Vsc∪Vs;
(3.3)根据步骤(3.2)得到的切片语句集合V,从代码属性图中提取切片代码属性图GS=(V,E,H),其中E是图中边的集合,H∈R|V|*d表示所有节点的初始状态其值为各节点利用word2vec映射的特征向量,d表示节点特征向量的维度;
(3.4)考虑到智能合约存在fallback机制,在步骤(3.3)得到的切片代码属性图的基础上添加fallback边。
5.根据权利要求1所述的基于源代码图表示学习的智能合约多漏洞检测方法,其特征在于,步骤(4)中利用图神经网络提取切片代码属性图的特征具体过程包括:
(4.1)将步骤(3)生成的切片代码属性图GS作为门控图神经网络的输入;
(4.2)为了使代码属性图中各节点在消息传播阶段能同时够接收到前驱和后继节点传来的消息,定义图的邻接矩阵时同时考虑图的出方向和入方向邻接矩阵A=[A(in),A(out)],其中入方向边邻接矩阵A(in)表示消息的前向传递,出方向邻接矩阵A(out)则代表消息的反向传递;
(4.3)图神经网络中节点v在t时刻的状态依赖与其相邻节点在t-1时刻的状态的消息传递,表示为:
其中σ(·)代表激活函数,Wz和Uz代表重置门参数,Wr和Ur代表更新门参数;
其中W和U代表门控神经单元的候选隐藏状态权重参数,·代表按元素乘法;利用重置门计算节点v在t时刻的最终状态为:
7.一种基于源代码图表示学习的智能合约多漏洞检测***,其特征在于,包括:
数据集构建模块,用于构建智能合约源代码数据集,并对数据集中样本是否存在漏洞进行标记;
代码图表示模块,用于结合智能合约的抽象语法树和语义信息构建智能合约函数粒度代码属性图;代码属性图中的每个节点包含代码语句和节点类型,图中的边类型根据语义信息分为AST边、控制流边、数据流边、控制依赖边和数据依赖边;以及根据智能合约漏洞的语法特征,定义智能合约切片准则,利用程序切片技术得到智能合约源代码中与漏洞相关的切片语句集合,并从代码属性图中提取与切片语句相关的语义信息组成切片代码属性图;
代码特征提取模块,用于构建门控图神经网络与多层感知机结合的漏洞检测模型并进行训练,所述门控图神经网络用于对切片代码属性图进行特征提取,多层感知机用于根据提取的特征以及切片代码属性图中各节点的初始状态特征进行智能合约漏洞预测;
以及漏洞检测模块,用于将待测试智能合约的切片代码属性图输入到训练好的漏洞检测模型中预测是否存在漏洞。
8.一种基于源代码图表示学习的智能合约多漏洞检测***,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述计算机程序被加载至处理器时实现根据权利要求1-6任一项所述的基于源代码图表示学习的智能合约多漏洞检测方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110643307.3A CN113360915B (zh) | 2021-06-09 | 2021-06-09 | 基于源代码图表示学习的智能合约多漏洞检测方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110643307.3A CN113360915B (zh) | 2021-06-09 | 2021-06-09 | 基于源代码图表示学习的智能合约多漏洞检测方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113360915A true CN113360915A (zh) | 2021-09-07 |
CN113360915B CN113360915B (zh) | 2023-09-26 |
Family
ID=77533347
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110643307.3A Active CN113360915B (zh) | 2021-06-09 | 2021-06-09 | 基于源代码图表示学习的智能合约多漏洞检测方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113360915B (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113486357A (zh) * | 2021-07-07 | 2021-10-08 | 东北大学 | 一种基于静态分析和深度学习的智能合约安全检测方法 |
CN114048464A (zh) * | 2022-01-12 | 2022-02-15 | 北京大学 | 基于深度学习的以太坊智能合约安全漏洞检测方法及*** |
CN114915444A (zh) * | 2022-03-23 | 2022-08-16 | 中国科学院信息工程研究所 | 基于图神经网络的DDoS攻击检测方法及装置 |
CN115357904A (zh) * | 2022-07-29 | 2022-11-18 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115576840A (zh) * | 2022-11-01 | 2023-01-06 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN115577361A (zh) * | 2022-12-09 | 2023-01-06 | 四川大学 | 一种改进的基于图神经网络的PHP Web shell检测方法 |
CN115618363A (zh) * | 2022-11-22 | 2023-01-17 | 北京邮电大学 | 漏洞路径的挖掘方法及相关设备 |
CN115659176A (zh) * | 2022-10-14 | 2023-01-31 | 湖南大学 | 智能合约漏洞检测模型的训练方法及相关设备 |
CN115129364B (zh) * | 2022-07-05 | 2023-04-18 | 四川大学 | 基于抽象语法树和图神经网络的指纹身份识别方法和*** |
CN116484384A (zh) * | 2023-04-19 | 2023-07-25 | 北京交通大学 | 一种基于深度学习的以太坊智能合约漏洞的检测和定位方法 |
CN117725422A (zh) * | 2024-02-07 | 2024-03-19 | 北京邮电大学 | 程序代码漏洞检测模型训练方法及检测方法 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190030490A (ko) * | 2017-09-14 | 2019-03-22 | 국방과학연구소 | 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법 |
CN109933991A (zh) * | 2019-03-20 | 2019-06-25 | 杭州拜思科技有限公司 | 一种智能合约漏洞检测的方法、装置 |
CN110659494A (zh) * | 2019-09-27 | 2020-01-07 | 重庆邮电大学 | 一种可扩展的智能合约漏洞检测方法 |
CN111125716A (zh) * | 2019-12-19 | 2020-05-08 | 中国人民大学 | 一种以太坊智能合约漏洞检测方法及装置 |
CN111259394A (zh) * | 2020-01-15 | 2020-06-09 | 中山大学 | 一种基于图神经网络的细粒度源代码漏洞检测方法 |
CN111274134A (zh) * | 2020-01-17 | 2020-06-12 | 扬州大学 | 基于图神经网络的漏洞识别与预测方法、***、计算机设备和存储介质 |
CN111488582A (zh) * | 2020-04-01 | 2020-08-04 | 杭州云象网络技术有限公司 | 一种基于图神经网络的智能合约重入性漏洞检测的方法 |
WO2020249572A1 (en) * | 2019-06-12 | 2020-12-17 | NEC Laboratories Europe GmbH | Method and contract rewriting framework system for supporting smart contracts in a blockchain network |
WO2021037196A1 (zh) * | 2019-08-28 | 2021-03-04 | 杭州趣链科技有限公司 | 智能合约代码漏洞检测方法、装置、计算机设备和存储介质 |
-
2021
- 2021-06-09 CN CN202110643307.3A patent/CN113360915B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190030490A (ko) * | 2017-09-14 | 2019-03-22 | 국방과학연구소 | 프로그램 소스 코드의 보안 취약점 검출 장치 및 방법 |
CN109933991A (zh) * | 2019-03-20 | 2019-06-25 | 杭州拜思科技有限公司 | 一种智能合约漏洞检测的方法、装置 |
WO2020249572A1 (en) * | 2019-06-12 | 2020-12-17 | NEC Laboratories Europe GmbH | Method and contract rewriting framework system for supporting smart contracts in a blockchain network |
WO2021037196A1 (zh) * | 2019-08-28 | 2021-03-04 | 杭州趣链科技有限公司 | 智能合约代码漏洞检测方法、装置、计算机设备和存储介质 |
CN110659494A (zh) * | 2019-09-27 | 2020-01-07 | 重庆邮电大学 | 一种可扩展的智能合约漏洞检测方法 |
CN111125716A (zh) * | 2019-12-19 | 2020-05-08 | 中国人民大学 | 一种以太坊智能合约漏洞检测方法及装置 |
CN111259394A (zh) * | 2020-01-15 | 2020-06-09 | 中山大学 | 一种基于图神经网络的细粒度源代码漏洞检测方法 |
CN111274134A (zh) * | 2020-01-17 | 2020-06-12 | 扬州大学 | 基于图神经网络的漏洞识别与预测方法、***、计算机设备和存储介质 |
CN111488582A (zh) * | 2020-04-01 | 2020-08-04 | 杭州云象网络技术有限公司 | 一种基于图神经网络的智能合约重入性漏洞检测的方法 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113486357B (zh) * | 2021-07-07 | 2024-02-13 | 东北大学 | 一种基于静态分析和深度学习的智能合约安全检测方法 |
CN113486357A (zh) * | 2021-07-07 | 2021-10-08 | 东北大学 | 一种基于静态分析和深度学习的智能合约安全检测方法 |
CN114048464A (zh) * | 2022-01-12 | 2022-02-15 | 北京大学 | 基于深度学习的以太坊智能合约安全漏洞检测方法及*** |
CN114048464B (zh) * | 2022-01-12 | 2022-03-15 | 北京大学 | 基于深度学习的以太坊智能合约安全漏洞检测方法及*** |
CN114915444B (zh) * | 2022-03-23 | 2023-03-10 | 中国科学院信息工程研究所 | 基于图神经网络的DDoS攻击检测方法及装置 |
CN114915444A (zh) * | 2022-03-23 | 2022-08-16 | 中国科学院信息工程研究所 | 基于图神经网络的DDoS攻击检测方法及装置 |
CN115129364B (zh) * | 2022-07-05 | 2023-04-18 | 四川大学 | 基于抽象语法树和图神经网络的指纹身份识别方法和*** |
CN115357904A (zh) * | 2022-07-29 | 2022-11-18 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115357904B (zh) * | 2022-07-29 | 2024-04-02 | 南京航空航天大学 | 一种基于程序切片和图神经网络的多类漏洞检测方法 |
CN115659176A (zh) * | 2022-10-14 | 2023-01-31 | 湖南大学 | 智能合约漏洞检测模型的训练方法及相关设备 |
CN115576840A (zh) * | 2022-11-01 | 2023-01-06 | 中国科学院软件研究所 | 基于机器学习的静态程序插桩检测方法及装置 |
CN115618363A (zh) * | 2022-11-22 | 2023-01-17 | 北京邮电大学 | 漏洞路径的挖掘方法及相关设备 |
CN115577361B (zh) * | 2022-12-09 | 2023-04-07 | 四川大学 | 一种改进的基于图神经网络的PHP Web shell检测方法 |
CN115577361A (zh) * | 2022-12-09 | 2023-01-06 | 四川大学 | 一种改进的基于图神经网络的PHP Web shell检测方法 |
CN116484384A (zh) * | 2023-04-19 | 2023-07-25 | 北京交通大学 | 一种基于深度学习的以太坊智能合约漏洞的检测和定位方法 |
CN116484384B (zh) * | 2023-04-19 | 2024-01-19 | 北京交通大学 | 一种基于深度学习的以太坊智能合约漏洞的检测和定位方法 |
CN117725422A (zh) * | 2024-02-07 | 2024-03-19 | 北京邮电大学 | 程序代码漏洞检测模型训练方法及检测方法 |
CN117725422B (zh) * | 2024-02-07 | 2024-05-07 | 北京邮电大学 | 程序代码漏洞检测模型训练方法及检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113360915B (zh) | 2023-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113360915A (zh) | 基于源代码图表示学习的智能合约多漏洞检测方法及*** | |
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
CN110737899B (zh) | 一种基于机器学习的智能合约安全漏洞检测方法 | |
CN109739494B (zh) | 一种基于Tree-LSTM的API使用代码生成式推荐方法 | |
CN112579477A (zh) | 一种缺陷检测方法、装置以及存储介质 | |
Feng et al. | Bottom-up context-sensitive pointer analysis for Java | |
CN102662825B (zh) | 一种面向堆操作程序的内存泄漏检测方法 | |
WO2022089188A1 (zh) | 一种代码处理方法、装置、设备及介质 | |
Ibba et al. | Evaluating machine-learning techniques for detecting smart ponzi schemes | |
D’Souza et al. | Collective intelligence for smarter API recommendations in python | |
CN113158189A (zh) | 一种恶意软件分析报告生成方法、装置、设备和介质 | |
CN117354067B (zh) | 一种恶意代码检测方法及*** | |
CN117725592A (zh) | 一种基于有向图注意力网络的智能合约漏洞检测方法 | |
Zhang et al. | SVScanner: Detecting smart contract vulnerabilities via deep semantic extraction | |
CN101162480A (zh) | 工程图自动识别与理解的方法 | |
Rajbahadur et al. | Pitfalls analyzer: quality control for model-driven data science pipelines | |
CN115373737B (zh) | 一种基于特征融合的代码克隆检测方法 | |
CN116702157A (zh) | 一种基于神经网络的智能合约漏洞检测方法 | |
CN115688108A (zh) | 一种webshell静态检测方法及*** | |
Boussabbeh et al. | Formal proofs of termination detection for local computations by refinement-based compositions | |
Makka et al. | A New Approach for Optimization of Program Dependence Graph using Finite Automata | |
Voit et al. | The method of translation of the diagram with one type directed links into the inhibitor petri net | |
Toman et al. | Refinement and Verification for IoT Service Composition | |
Tereshchenko et al. | Vulnerability Detection of Smart Contracts Based on Bidirectional GRU and Attention Mechanism | |
Zou et al. | A General Smart Contract Vulnerability Detection Framework with Self-attention Graph Pooling |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |