CN111898134B - 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 - Google Patents
基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 Download PDFInfo
- Publication number
- CN111898134B CN111898134B CN202010768571.5A CN202010768571A CN111898134B CN 111898134 B CN111898134 B CN 111898134B CN 202010768571 A CN202010768571 A CN 202010768571A CN 111898134 B CN111898134 B CN 111898134B
- Authority
- CN
- China
- Prior art keywords
- intelligent contract
- vulnerability
- operation code
- short term
- term memory
- 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.)
- Active
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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/049—Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种基于长短期记忆网络或双向长短期记忆网络的智能合约漏洞检测方法;在数据处理阶段,对智能合约样本进行漏洞分类及标签标记;将智能合约样本转化为操作码序列X,提取包含关键操作码的上下文序列,并重组为新的操作码序列Y;针对每一种漏洞建立基于长短期记忆网络或双向长短期记忆网络的二元分类模型,利用智能合约样本的操作码序列Y对每一种漏洞训练一个二元分类模型,作为智能合约漏洞检测模型;在智能合约漏洞检测阶段,按照语义序列化阶段的处理方式将待检测智能合约处理成操作码序列Y,然后输入各智能合约漏洞检测模型,实现对多种漏洞的检测。使用本发明能够缩短训练时间,提高检测模型的稳定性和分类准确性。
Description
技术领域
本发明涉及漏洞检测技术,尤其涉及基于长短期记忆网络(LSTM,Long ShortTerm Memory)和双向长短期记忆网络(BiLSTM,Bi-directional Long Short TermMemory)的智能合约漏洞检测方法和装置。
背景技术
区块链出现至今已有十余年,自2016年起,每年因智能合约漏洞而导致的安全事件层出不穷,造成了严重的资产经济损失。如何高效快速的检测智能合约漏洞成了产业界和学术界研究的重点问题。目前国内外对智能合约的漏洞检测主要依赖于符号执行、形式化分析等技术,而符号执行技术执行漏洞检测的过程中需要遍历程序所有的执行路径并判定路径条件,因而执行漏洞检测过程中会耗费大量的时间。
通过深度学习模型实现的漏洞检测方法因其检测效率高、可扩展性强、不依赖于程序源代码本身等特点而开始逐渐受到国内外学者的关注。2018年新加坡国立大学的Wesley Joon-Wie Tann提出了一种检测智能合约漏洞的序列学习方法,该方法通过将智能合约表示为操作码序列并进行序列化处理,建立基于长短期记忆网络的漏洞检测的二分类模型实现对智能合约漏洞的检测。如图1所示为该方法的框架图。在对漏洞检测模型输入的选择上,该序列学习方法(sequence learning)直接截取原始序列前1600位作为模型输入,不仅训练时间较长,还具有一定的不稳定性。此外,在漏洞类别划分上,该方法在分类阶段仅仅实现了对智能合约样本的二分类,即有漏洞或无漏洞,而无法针对具体某一类漏洞进行分类,也无法轻易扩展为对多种漏洞类型的检测。
发明内容
有鉴于此,本发明提供了一种基于长短期记忆网络或双向长短期记忆网络的智能合约漏洞检测方法和装置,能够缩短训练时间,提高检测模型的稳定性和分类准确性。
为了解决上述技术问题,本发明是这样实现的:
一种基于长短期记忆网络或双向长短期记忆网络的智能合约漏洞检测方法,包括:
在数据处理阶段,对智能合约样本进行漏洞分类及标签标记;
在语义序列化阶段,将智能合约样本转化为操作码序列X,分析操作码序列X中的关键操作码,提取包含关键操作码的上下文序列,并将所有关键操作码的上下文序列重组为新的操作码序列,称为操作码序列Y;所述关键操作码为与漏洞产生相关的操作码;
在模型构建阶段,针对每一种漏洞建立基于长短期记忆网络或双向长短期记忆网络的二元分类模型,利用智能合约样本的操作码序列Y对每一种漏洞训练一个二元分类模型,作为智能合约漏洞检测模型;
在智能合约漏洞检测阶段,按照语义序列化阶段的处理方式将待检测智能合约处理成操作码序列Y,然后输入各智能合约漏洞检测模型,实现对多种漏洞的检测。
优选地,所述数据处理阶段包括:
步骤S1:根据所需实现检测的N种漏洞类型,获取智能合约数据集;
步骤S2:对智能合约数据集进行清洗,获得智能合约样本集合;
步骤S3:对智能合约样本集合中的样本进行分类标记;所述分类标记为:借用漏洞检测工具或通过手动分析方式对智能合约样本进行漏洞检测分析,根据漏洞类型为每个智能合约样本进行标签标记,以标记该智能合约样本是否包含这N种待检测漏洞的任意一种或任意几种漏洞。
优选地,所述标签为X=(x1,x2,…,xN),其中,N表示所需实现检测的N种漏洞类型;xn=0表示智能合约样本不属于第n种漏洞,xn=1表示智能合约样本属于第n种漏洞,n取值范围为1~N的正整数。
优选地,在所述语义序列化阶段,所述关键操作码的选择为:
选取与处理异常漏洞和可重入漏洞相关的CALL、CALLCODE、DELEGATECALL,与时间戳依赖漏洞相关的TIMESTAMP,以及与可重入漏洞和顺序依赖漏洞相关的GAS、GASPRICE、GASLIMIT作为关键操作码。
优选地,在所述语义序列化阶段,将所有关键操作码的上下文序列重组为操作码序列Y时,若出现前一关键操作码的下文序列和后一关键操作码的上文序列信息重叠的情况,仅需保留重叠序列部分一次。
优选地,基于长短期记忆网络和双向长短期记忆网络的二元分类模型均依次包括输入层、Embedding层、SpatialDropout1D层、双向长短期记忆网络层/长短期记忆网络层、全连接层和分类器层;其中,双向长短期记忆网络层/长短期记忆网络层用于学习操作码序列中的上下文关系。
一种基于长短期记忆网络或双向长短期记忆网络的智能合约漏洞检测装置,包括:
数据处理模块,用于获取智能合约样本,并进行漏洞分类及标签标记;
语义序列化模块,用于将所接收的智能合约转化为操作码序列X,分析操作码序列X中的关键操作码,提取包含关键操作码的上下文序列,并将所有关键操作码的上下文序列重组为新的操作码序列,称为操作码序列Y;所述关键操作码为与漏洞产生相关的操作码;
智能合约漏洞检测模型,是基于长短期记忆网络或双向长短期记忆网络建立的二元分类模型,每个模型对应一种漏洞;
模型训练模块,用于将从数据处理模块获取的智能合约样本发送给语义序列化模块处理成操作码序列Y,然后连同数据处理模块标记的标签一起,生成训练样本输入给智能合约漏洞检测模型进行模型训练;
智能合约漏洞检测模块,用于将待检测智能合约发送给语义序列化模块处理成操作码序列Y,输入各智能合约漏洞检测模型,实现对多种漏洞的检测。
优选地,所述数据处理模块在进行标签标记时,采用标签X=(x1,x2,…,xN),其中,N表示所需实现检测的N种漏洞类型;xn=0表示智能合约样本不属于第n种漏洞,xn=1表示智能合约样本属于第n种漏洞;一个智能合约样本可能包含N种漏洞的任意一种或几种。
优选地,所述语义序列化模块选用的关键操作码包括:与处理异常漏洞和可重入漏洞相关的操作码CALL、CALLCODE、DELEGATECALL,与时间戳依赖漏洞相关的操作码TIMESTAMP,以及与可重入漏洞和顺序依赖漏洞相关的操作码GAS、GASPRICE、GASLIMIT。
优选地,所述智能合约漏洞检测模型依次包括输入层、Embedding层、SpatialDropout1D层、双向长短期记忆网络层/长短期记忆网络层、全连接层和分类器层。
有益效果:
(1)本发明引入了基于关键操作码上下文截断重组的序列优化方法,将优化后的操作码序列输入漏洞检测网络,结合长短期记忆网络和双向长短期记忆网络对上下文的学习能力,实现漏洞学习和检测。由于输入漏洞检测网络的操作码序列不再是前1600个,而是根据关键操作码抽取的与漏洞密切相关的上下文信息,因此优化后的操作码序列更能够有针对性的反应漏洞信息,而且序列长度大大减小,不仅减少了漏洞检测的时间,同时解决了超长序列检测中模型梯度消失和模型不稳定的问题。
(2)通过充分分析各种类型漏洞的行为模式和产生原理,本发明针对处理异常漏洞、时间戳依赖漏洞、可重入漏洞和顺序依赖漏洞这四种漏洞类型给出了关键操作码,基于这些关键操作码能够训练出更加准确的漏洞检测模型。
(2)在漏洞类别上,现有技术方法往往只能对特定的一种或几种漏洞进行漏洞检测,因而可能存在漏洞检测类型扩展性不佳的问题。为了实现对多种漏洞类型的检测,本发明按照多标签分类的思路将多种漏洞类型检测转化为对每个标签的二元分类。以此建立并训练多个二元分类器模型从而实现对多种漏洞类型的检测,同时提高了漏洞检测的准确率。
附图说明
图1为现有技术序列化机器学习方法的框架图。
图2为本发明智能合约漏洞检测方法的流程图。
图3为本发明漏洞检测模型的结构图。(a)采用双向长短期记忆网络层Bidirectional,(b)采用长短期记忆网络层LSTM。
图4为本发明智能合约漏洞检测装置的组成框图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
为了进一步减少漏洞检测的时间,同时解决超长序列检测中模型梯度消失和模型不稳定的问题,本发明引入了基于关键操作码上下文截断重组的序列优化方法;为了进一步提高漏洞检测的准确率,本发明采用长短期记忆网络学习序列,或者采用利用序列上下文信息更有优势的双向长短期记忆网络学习序列;为了实现对多种漏洞类型的检测,按照多标签分类的思路将多种漏洞类型检测转化为对每个标签的二元分类,以此建立并训练多个二元分类器模型从而实现对多种漏洞类型的检测,同时提高了漏洞检测的准确率。
参见图2示出的本发明智能合约漏洞检测方法的流程图,整个检测方法分为四个阶段,即数据处理阶段、语义序列化阶段、漏洞检测模型构建阶段以及智能合约漏洞检测阶段。
在数据处理阶段,获取智能合约样本,组成智能合约样本集合,对智能合约样本集合中的样本进行漏洞分类及标签标记。漏洞分类可以采用现有漏洞检测方法。
在语义序列化阶段,将智能合约样本集合中的样本转化为操作码序列X,进一步分析操作码序列X中的关键操作码,提取包含关键操作码的上下文序列,并对所有关键操作码的上下文序列进行重组,这里的重组是按照原有顺序将包含关键操作码的上下文序列连接到一起,形成新的操作码序列,称为操作码序列Y。将本阶段的提取和重组命名为“截断重组”。
在模型构建阶段,针对每一种漏洞建立基于长短期记忆网络或双向长短期记忆网络的二元分类模型,利用智能合约样本的操作码序列Y对每一种漏洞训练一个二元分类模型,作为智能合约漏洞检测模型。
在智能合约漏洞检测阶段,按照语义序列化阶段的处理方式将待检测智能合约处理成操作码序列Y,然后输入各智能合约漏洞检测模型,将多个模型输出结果进行组合,实现对多种漏洞的检测。
基于上述四个阶段,本发明的漏洞检测方法具体包括以下检测步骤。其中步骤S1~S3对应数据预处理阶段,步骤S4~S6对应语义序列获取阶段,步骤S7~S9对应漏洞检测模型构建阶段,步骤S10对应智能合约漏洞检测阶段。
步骤S1:智能合约数据集获取。
本步骤首先选定希望采用漏洞检测模型实现分类的N种漏洞类型。然后,从以太坊官方网站或Google大数据平台中获取智能合约数据集。
步骤S2:对智能合约数据集进行清洗,获得智能合约样本集合。
本步骤对步骤S1中获取的智能合约数据集进行针对性的分析,定义数据集清洗规则,编写数据集清洗脚本,删除智能合约数据集可能存在的冗余数据、重复数据以及空缺数据等。
步骤S3:智能合约样本集合标记。
本步骤按照标记规则对智能合约样本集合中的样本进行分类标记。分类标记是指借用漏洞检测工具或通过手动分析的方式对智能合约样本进行漏洞检测分析,根据漏洞类型为每个智能合约样本进行标签标记,以标记该智能合约样本是否包含这N种待检测漏洞的任意一种或几种。
本发明中设定需要分类的漏洞类型类别数为N,针对每个智能合约样本构建一条标签,该标签由一个N元的多元组构成,多元组的结构表示为(x1,x2,…,xN),每个元素xn(n=1,2,…,N)的取值均为0或1。xn=0表示智能合约样本不属于第n种漏洞,xn=1表示智能合约样本属于第n种漏洞,n取值范围为1~N的正整数。一个智能合约样本可能具有1种以上的漏洞。
经过步骤S1到步骤S3的处理之后,最初的智能合约数据集就转化为了已标记的智能合约样本集合,每个样本都对应一个标签。
步骤S4:分析并选择关键操作码。
本发明定义关键操作码是指分析不同类型智能合约漏洞原理后选择出的与漏洞产生相关的操作码,因此需要按照待检测的漏洞类型分析每种类型漏洞的产生原理,选择与漏洞产生相关的关键操作码。
本申请人通过充分分析各种类型漏洞的行为模式和产生原理,针对处理异常漏洞、时间戳依赖漏洞、可重入漏洞和顺序依赖漏洞这四种漏洞类型,选取了与处理异常漏洞和可重入漏洞相关的CALL、CALLCODE、DELEGATECALL,与时间戳依赖漏洞相关的TIMESTAMP,以及与可重入漏洞和顺序依赖漏洞相关的GAS、GASPRICE、GASLIMIT作为关键操作码。
需要说明的是,本步骤可以预先执行一次,不需要每次训练时都执行。
步骤S5:获取智能合约操作码序列。
本步骤取步骤S3中已标记的智能合约样本集合,样本集合中的智能合约源代码经过编译后得到智能合约字节码,进而通过反汇编器,将智能合约字节码转化为包含操作数的智能合约操作码序列的形式。再通过十六进制编码将序列转化为一段由十六进制数表示的不含操作数的操作码序列,记为操作码序列X,以便与截断重组后的操作码序列相区分。
步骤S6:操作码序列优化处理。
经过对漏洞产生原理的分析,拟定七个关键操作码一定与这四种漏洞类型相关。但这些关键操作码并非产生漏洞的充分条件,漏洞的产生除了与这些关键操作码相关外,还依赖于序列中的上下文环境。因此在选定关键操作码后还需截取关键操作码的上下文序列并重组为新的操作码序列。
具体来说,分析操作码序列X中的关键操作码,针对每个关键操作码,选择该关键操作码的前后多位序列,与关键操作码本身一起形成上下文序列,将所有关键操作码的上下文序列按照原来的顺序重组为新的操作码序列,称为操作码序列Y,即优化后的操作码序列。该操作码序列Y有针对性地提取了与漏洞极为相关的序列部分,与直接输入原始序列前1600位相比,提升了样本的针对性,减少了序列长度,从而能够缩短训练时间,训练获得的模型还具有更好的稳定性。
本步骤中,将所有关键操作码的上下文序列重组为操作码序列Y时,若出现前一关键操作码的下文序列和后一关键操作码的上文序列信息重叠的情况,仅需保留重叠序列部分一次。
经过步骤S4到步骤S6处理之后,已标记的样本集转化为了已标记且序列优化的样本集。
步骤S7:针对每一种漏洞,构建基于双向长短期记忆网络/长短期记忆网络的二元分类模型。“/”表示模型结构并非同时使用双向长短期记忆网络和长短期记忆网络,而是使用其中一种。
本步骤中,为了实现对多种漏洞类型的检测,将智能合约多标签分类转化为了对每个标签(即每种类型漏洞)的二元分类,即构建基于双向长短期记忆网络/长短期记忆网络的二元分类模型。二元分类模型的输出为一个输出节点,针对每种漏洞类型,该模型都能将结果输出为正负两类,也就是二元分类。而多个模型的输出组合就可以得到多种漏洞类型的检测结果。
智能合约漏洞检测模型包括输入层、隐藏层以及输出层,输入层接收已标记且序列优化的样本集作为模型输入,隐藏层主要通过双向长短期记忆网络或长短期记忆网络学习操作码序列中的上下文之间的潜在语义关系,输出层针对每种漏洞类型实现二元分类任务。此外,隐藏层可以有任意多个,如加入全连接层用于特征降维等。
本发明优选实施例中,整个二元分类模型的结构组成如下,参见图3。
(1)输入层:将训练集输入模型。输入数据为经过序列优化的操作码序列。
(2)Embedding层:在输入层中每个词都会被看作一个向量,该层能够将输入的每个操作码转化为词向量的形式,从而将操作码序列映射到多维空间中。在该层使用Embedding算法能够捕捉编码中的操作码之间的潜在关系,如句法结构、语义意义和上下文紧密性,以便于在接下来的双向长短期记忆网络层/长短期记忆网络层中学习这些操作码之间的关系。
(3)SpatialDropout1D层:该层用于在模型训练每次更新参数的过程中保留一定比例的神经元连接而断开其他的神经元连接,从而防止漏洞检测模型过拟合。
(4)双向长短期记忆网络层/长短期记忆网络层:该层主要用于学习操作码序列中的上下文关系。智能合约漏洞中的多种漏洞,如可重入漏洞,都与上下文信息相关。
(5)全连接层:在双向长短期记忆网络层/长短期记忆网络层后加入了全连接层用于给智能合约的操作码序列特征降维,从而提高模型的准确率。
(6)分类器层:针对每个漏洞标签实现二元分类任务,即对于单独的一个标签而言,将每条样本分为有无漏洞两类。模型使用针对二元分类任务的sigmoid函数进行分类操作。
步骤S8:平衡和划分数据集。本步骤以步骤S6中的已标记且序列优化的数据集作为处理对象。对于x1~xN这N种漏洞类型中每一种类型的漏洞,根据是否存在该类漏洞将样本集分别划分为正类和负类,通过采样算法平衡数据集,保证正类样本和负类样本数量相同。例如样本A的x3=1,x5=1,则样本属于第3种和第5种漏洞,那么针对第3种漏洞和第5种漏洞,该样本A属于正样本,针对其他漏洞,该样本A属于负样本。将样本集按照N种漏洞类型划分后得到N种不同的样本集。从该样本集中提取一部分作为训练集,另一部分作为测试集。虽然每个模型的输出节点为1个,而标签X为N维,但在训练时,标签仅采用对应漏洞类型的那一个元素xn。例如标签X为3维,维度1-3分别对应漏洞1、漏洞2、漏洞3,针对漏洞1进行训练时,选择标签X中的第一维即可,其他维忽略。
步骤S9:训练N个二元分类模型。针对x1~xN这N种漏洞类型,以步骤S8确定的训练集作为模型输入,基于步骤S7中构建的二元分类模型,训练N个二元分类器,每个二元分类器能够对N种漏洞中的一种有良好的检测效果。训练后采用测试集进行效果验证。
步骤S10:实际检测应用中,对于待测试的智能合约,按照步骤S4-S6的方式获取智能合约的操作码序列Y,将该操作码序列Y输入由步骤9训练的N个二元分类模型中执行漏洞检测,即可得到针对N种类型漏洞的最终检测结果。
为了实现上述方法,本发明还提供了一种基于长短期记忆网络或双向长短期记忆网络的智能合约漏洞检测装置,如图4所示,该装置包括如下模块:
数据处理模块,用于获取智能合约样本,并进行漏洞分类及标签标记。本数据处理模块在进行标签标记时,采用标签X=(x1,x2,…,xN),其中,xn=0表示智能合约样本不属于第n种漏洞,xn=1表示智能合约样本属于第n种漏洞;一个智能合约样本可能包含这N种待检测漏洞的任意一种或任意几种漏洞。
语义序列化模块,用于将所接收的智能合约转化为操作码序列X,分析操作码序列X中的关键操作码,提取包含关键操作码的上下文序列,并将所有关键操作码的上下文序列重组为操作码序列Y。本语义序列化模块选用的关键操作码包括:与处理异常漏洞和可重入漏洞相关的操作码CALL、CALLCODE、DELEGATECALL,与时间戳依赖漏洞相关的操作码TIMESTAMP,以及与可重入漏洞和顺序依赖漏洞相关的操作码GAS、GASPRICE、GASLIMIT。
智能合约漏洞检测模型,是基于长短期记忆网络或双向长短期记忆网络建立的二元分类模型,每个模型对应一种漏洞。无论是基于长短期记忆网络还是双向长短期记忆网络建立,本实施例中的智能合约漏洞检测模型均依次包括输入层、Embedding层、SpatialDropout1D层、双向长短期记忆网络层/长短期记忆网络层、全连接层和分类器层。
模型训练模块,用于将从数据处理模块获取的智能合约样本发送给语义序列化模块处理成操作码序列Y,然后连同数据处理模块标记的标签一起,生成训练样本输入给智能合约漏洞检测模型进行模型训练。
智能合约漏洞检测模块,用于将待检测智能合约发送给语义序列化模块处理成操作码序列Y,输入各智能合约漏洞检测模型,实现对多种漏洞类型的检测。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于长短期记忆网络或双向长短期记忆网络的智能合约漏洞检测方法,其特征在于,包括:
在数据处理阶段,对智能合约样本进行漏洞分类及标签标记;
在语义序列化阶段,将智能合约样本转化为操作码序列X,分析操作码序列X中的关键操作码,提取包含关键操作码的上下文序列,并将所有关键操作码的上下文序列重组为新的操作码序列,称为操作码序列Y;所述关键操作码为与漏洞产生相关的操作码;
在模型构建阶段,针对每一种漏洞建立基于长短期记忆网络或双向长短期记忆网络的二元分类模型,利用智能合约样本的操作码序列Y对每一种漏洞训练一个二元分类模型,作为智能合约漏洞检测模型;
在智能合约漏洞检测阶段,按照语义序列化阶段的处理方式将待检测智能合约处理成操作码序列Y,然后输入各智能合约漏洞检测模型,实现对多种漏洞的检测。
2.如权利要求1所述的方法,其特征在于,所述数据处理阶段包括:
步骤S1:根据所需实现检测的N种漏洞类型,获取智能合约数据集;
步骤S2:对智能合约数据集进行清洗,获得智能合约样本集合;
步骤S3:对智能合约样本集合中的样本进行分类标记;所述分类标记为:借用漏洞检测工具或通过手动分析方式对智能合约样本进行漏洞检测分析,根据漏洞类型为每个智能合约样本进行标签标记,以标记该智能合约样本是否包含这N种待检测漏洞的任意一种或任意几种漏洞。
3.如权利要求1或2所述的方法,其特征在于,所述标签为X=(x1,x2,…,xN),其中,N表示所需实现检测的N种漏洞类型;xn=0表示智能合约样本不属于第n种漏洞,xn=1表示智能合约样本属于第n种漏洞,n取值范围为1~N的正整数。
4.如权利要求1所述的方法,其特征在于,在所述语义序列化阶段,所述关键操作码的选择为:
选取与处理异常漏洞和可重入漏洞相关的CALL、CALLCODE、DELEGATECALL,与时间戳依赖漏洞相关的TIMESTAMP,以及与可重入漏洞和顺序依赖漏洞相关的GAS、GASPRICE、GASLIMIT作为关键操作码。
5.如权利要求1所述的方法,其特征在于,在所述语义序列化阶段,将所有关键操作码的上下文序列重组为操作码序列Y时,若出现前一关键操作码的下文序列和后一关键操作码的上文序列信息重叠的情况,仅需保留重叠序列部分一次。
6.如权利要求1所述的方法,其特征在于,基于长短期记忆网络和双向长短期记忆网络的二元分类模型均依次包括输入层、Embedding层、SpatialDropout1D层、双向长短期记忆网络层/长短期记忆网络层、全连接层和分类器层;其中,双向长短期记忆网络层/长短期记忆网络层用于学习操作码序列中的上下文关系。
7.一种基于长短期记忆网络或双向长短期记忆网络的智能合约漏洞检测装置,其特征在于,包括:
数据处理模块,用于获取智能合约样本,并进行漏洞分类及标签标记;
语义序列化模块,用于将所接收的智能合约转化为操作码序列X,分析操作码序列X中的关键操作码,提取包含关键操作码的上下文序列,并将所有关键操作码的上下文序列重组为新的操作码序列,称为操作码序列Y;所述关键操作码为与漏洞产生相关的操作码;
智能合约漏洞检测模型,是基于长短期记忆网络或双向长短期记忆网络建立的二元分类模型,每个模型对应一种漏洞;
模型训练模块,用于将从数据处理模块获取的智能合约样本发送给语义序列化模块处理成操作码序列Y,然后连同数据处理模块标记的标签一起,生成训练样本输入给智能合约漏洞检测模型进行模型训练;
智能合约漏洞检测模块,用于将待检测智能合约发送给语义序列化模块处理成操作码序列Y,输入各智能合约漏洞检测模型,实现对多种漏洞的检测。
8.如权利要求7所述的装置,其特征在于,所述数据处理模块在进行标签标记时,采用标签X=(x1,x2,…,xN),其中,N表示所需实现检测的N种漏洞类型;xn=0表示智能合约样本不属于第n种漏洞,xn=1表示智能合约样本属于第n种漏洞;一个智能合约样本可能包含N种漏洞的任意一种或几种。
9.如权利要求7所述的装置,其特征在于,所述语义序列化模块选用的关键操作码包括:与处理异常漏洞和可重入漏洞相关的操作码CALL、CALLCODE、DELEGATECALL,与时间戳依赖漏洞相关的操作码TIMESTAMP,以及与可重入漏洞和顺序依赖漏洞相关的操作码GAS、GASPRICE、GASLIMIT。
10.如权利要求7所述的装置,其特征在于,所述智能合约漏洞检测模型依次包括输入层、Embedding层、SpatialDropout1D层、双向长短期记忆网络层/长短期记忆网络层、全连接层和分类器层。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010768571.5A CN111898134B (zh) | 2020-08-03 | 2020-08-03 | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010768571.5A CN111898134B (zh) | 2020-08-03 | 2020-08-03 | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111898134A CN111898134A (zh) | 2020-11-06 |
CN111898134B true CN111898134B (zh) | 2022-11-11 |
Family
ID=73183567
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010768571.5A Active CN111898134B (zh) | 2020-08-03 | 2020-08-03 | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111898134B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113221125B (zh) * | 2021-05-31 | 2022-09-27 | 河海大学 | 基于TreeGAN的生成带有漏洞智能合约的方法及系统 |
CN114168972B (zh) * | 2021-12-15 | 2024-05-03 | 东北大学 | 一种npm生态系统安全漏洞阻塞点的检测与修复方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101947760B1 (ko) * | 2018-09-04 | 2019-02-13 | 김종현 | 스마트콘트랙트의 보안 인증 서버 |
CN110543419A (zh) * | 2019-08-28 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于深度学习技术的智能合约代码漏洞检测方法 |
CN111310191A (zh) * | 2020-02-12 | 2020-06-19 | 广州大学 | 一种基于深度学习的区块链智能合约漏洞检测方法 |
-
2020
- 2020-08-03 CN CN202010768571.5A patent/CN111898134B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101947760B1 (ko) * | 2018-09-04 | 2019-02-13 | 김종현 | 스마트콘트랙트의 보안 인증 서버 |
CN110543419A (zh) * | 2019-08-28 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于深度学习技术的智能合约代码漏洞检测方法 |
CN111310191A (zh) * | 2020-02-12 | 2020-06-19 | 广州大学 | 一种基于深度学习的区块链智能合约漏洞检测方法 |
Non-Patent Citations (1)
Title |
---|
智能合约安全漏洞研究综述;倪远东等;《信息安全学报》;20200515(第03期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111898134A (zh) | 2020-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109426722B (zh) | Sql注入缺陷检测方法、系统、设备及存储介质 | |
Thomas et al. | PASTIS: an R package to facilitate phylogenetic assembly with soft taxonomic inferences | |
CN102844759B (zh) | 用于将输入串与正则表达式匹配的设备和方法 | |
CN106295338B (zh) | 一种基于人工神经元网络的sql漏洞检测方法 | |
CN112364352B (zh) | 可解释性的软件漏洞检测与推荐方法及系统 | |
CN113326187B (zh) | 数据驱动的内存泄漏智能化检测方法及系统 | |
CN112288079B (zh) | 图神经网络模型训练方法、软件缺陷检测方法及系统 | |
CN111459799A (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN110287702A (zh) | 一种二进制漏洞克隆检测方法及装置 | |
CN111898134B (zh) | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 | |
CN111427775B (zh) | 一种基于Bert模型的方法层次缺陷定位方法 | |
CN113239358A (zh) | 基于知识图谱的开源软件漏洞挖掘方法 | |
CN113821804A (zh) | 一种面向第三方组件及其安全风险的跨架构自动化检测方法与系统 | |
CN112115326B (zh) | 一种以太坊智能合约的多标签分类和漏洞检测方法 | |
CN113609488B (zh) | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 | |
CN115017513A (zh) | 一种基于人工智能的智能合约漏洞检测方法 | |
CN110399286A (zh) | 一种基于独立路径的测试数据自动生成方法 | |
CN114611115A (zh) | 一种基于混合图神经网络的软件源码漏洞检测方法 | |
CN116383833A (zh) | 软件程序代码的测试方法及其装置、电子设备、存储介质 | |
CN113591093A (zh) | 基于自注意力机制的工业软件漏洞检测方法 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN116150757A (zh) | 一种基于cnn-lstm多分类模型的智能合约未知漏洞检测方法 | |
CN113886832A (zh) | 智能合约漏洞检测方法、系统、计算机设备和存储介质 | |
CN117574383A (zh) | 一种基于特征融合和代码可视化技术的软件漏洞检测模型的方法 | |
CN116702157A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |