CN113221125B - 基于TreeGAN的生成带有漏洞智能合约的方法及系统 - Google Patents
基于TreeGAN的生成带有漏洞智能合约的方法及系统 Download PDFInfo
- Publication number
- CN113221125B CN113221125B CN202110599624.XA CN202110599624A CN113221125B CN 113221125 B CN113221125 B CN 113221125B CN 202110599624 A CN202110599624 A CN 202110599624A CN 113221125 B CN113221125 B CN 113221125B
- Authority
- CN
- China
- Prior art keywords
- contract
- vulnerability
- treegan
- contracts
- vulnerabilities
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/044—Recurrent networks, e.g. Hopfield 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Molecular Biology (AREA)
- Accounting & Taxation (AREA)
- Finance (AREA)
- Databases & Information Systems (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Development Economics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及一种基于TreeGAN的生成带有漏洞智能合约的方法及系统,属于区块链技术和深度学习领域。本发明方法包括根据生成合约需要包含的漏洞类型搜集真实漏洞合约数据集和与漏洞合约环境特征相似的真实合约数据集,并选用TreeGAN作为训练框架从而保证生成合约的语法正确性。为了加速收敛,将数据集转化为文法产生式序列作为输入进行模型预训练和正式训练时。同时,为了使TreeGAN更好地用于漏洞合约生成,在原有判别器的基础上新增一个标准LSTM网络用于学习漏洞信息,该网络的输入为从智能合约中提取出的和漏洞信息关系密切的语句集合。本发明训练完成后模型的生成器部分即可用于生成自然的、语法正确的、带有特定漏洞的智能合约。
Description
技术领域
本发明涉及区块链技术和深度学习领域,具体涉及一种基于TreeGAN的生成带有漏洞智能合约源代码的方法及系统。
背景技术
随着区块链技术的发展,出现了许多诸如以太坊的智能合约应用平台,这些平台的一大特点是“code is law”,这表示即使智能合约中存在着可以被利用的逻辑漏洞,并且因此产生了财产的损失,参与者也很难采取有效的挽救措施,2016年the DAO攻击事件就险些造成了数亿美金的损失。这表示着智能合约领域的漏洞检测需求旺盛,再加上几年了深度学习技术在各领域均取得了惊人的效果,结合深度学习进行智能合约领域的漏洞检测自然成为了一大研究趋势。
但如果想要得到一个效果不错的基于深度学习的漏洞检测模型,就需要准备大量的真实数据用作训练。考虑到深度学习的原理以及不同漏洞的结构信息和作用原理不尽相同,研究人员需要搜集到大量含有同一个漏洞的合约才能顺利开始训练,这个过程往往费时费力。同时由于智能合约编写语言solidity的问世时间并不算长,solidity社区内还没有一个受大众认可、质量优秀的带标签漏洞智能合约数据集。近几年的相关研究中,试图结合深度学习的智能合约漏洞检测研究大都采用两种方式解决数据集问题:一是针对自己的研究的具体漏洞,研究人员手动编写漏洞合约,这样的合约免不了收到主观影响,不够真实;二是专门聘请有足够开发经验的智能合约从业者在爬取的大量真实合约中进行寻找,这样做可以保证真实性,但从结果来看效率并不算高,而且没办法对研究需要的漏洞针对性的寻找。当然还存在一些情况是,整篇研究完全避开数据集来源方面的问题,让读者无法顺利地复现实验。
针对这种状况,有研究提出了漏洞注入这一创新性的想法。这个想法的大致思路是研究一些漏洞的特征,通过代码片段插入、减弱安全机制、代码转换等手段将一些正常的真实合约转化为带有漏洞的合约。这个想法成功解决了漏洞类型不可控以及数据集构建效率低的问题,但这个想法同样存在一些问题,即被注入了漏洞的合约会很不“自然”。从该研究的实验结果上看,作者在正常合约中每一个可以被利用的攻击点上都做了漏洞注入,平均200行的代码被注入了18个漏洞,漏洞类型不一,而一般正常部署的合约都不会有那么多的问题,即便是被攻击的智能合约往往也是在一些不起眼的地方存在一些问题。此外,这个想法也没有充分考虑到原合约的一些功能特点和编写风格,无论是什么样的合约都采取相似的注入思路。通过这种注入方式得到的漏洞合约过于不正常,作为训练数据可能会违背初衷,最后模型的效果可能在真实数据上效果不会太理想。
现有的技术的注入手段有很多,但仔细观察还是可以发现许多处理粗糙的地方,比如完整代码片段注入这个方法,由于编程习惯、命名习惯以及插入代码片段功能在原程序中没有被使用等原因,整个片段会在代码中显得很突兀,有些时候这些片段可能在编译阶段就被编译器处理了,导致注入效果不理想。至于代码转换虽然灵活一些,但能够做出的处理其实不多,相关论文中提到的仅有修改变量长度构造整数溢出和使用tx.origin这个旧版本的不推荐功能来进行漏洞注入。此外,削弱安全机制这个操作的覆盖面也不是很广。
SeqGAN以标准的用于处理图像的GAN为原型,引入了强化学习的思想对生成器进行了改进,使得GAN模型也能够处理离散型的序列数据,但从实验结果来看,如果想要生成小说、源代码一类带有预定义语法的序列,即使投入大量的优质真实数据,生成结果中也很难避免出现语法错误。从研究目的上看,生成漏洞智能合约最终是为了能更好地识别合约中的漏洞,防止已经部署到链上的智能合约被黑客利用。可如果模型生成的合约存在语法错误,连编译器的检查都没法通过,那这个生成的这个合约便是毫无价值的。
发明内容
发明目的:针对现在深度学习技术在智能合约漏洞检测领域应用时缺乏训练数据以及漏洞注入技术的方式过于粗放、不自然的问题,本发明目的在于提出了一种生成带有特定漏洞的、自然的solidity智能合约源代码方法及系统。通过对抗生成网络的变种模型TreeGAN,应用生成对抗的思想,不断学习真实漏洞合约中的结构信息,力求生成尽可能真实自然的漏洞智能合约。
技术方案:为实现上述发明目的,本发明采用如下技术方案:
一种基于TreeGAN的生成带有漏洞智能合约的方法,包括以下步骤:
(1)确定需要生成合约中包含的漏洞类型,在公共平台上收集带有此类漏洞的真实合约数据集bugSet;
(2)分析bugSet中的智能合约,提取出这类合约中除了漏洞信息之外的环境特征;爬取部署到区块链上的真实合约,从中挑选出包含上述环境特征的智能合约,构建数据集environmentSet;
(3)将bugSet和environmentSet中的合约转化为解析树,根据solidity的文法产生式,将解析树序列化,构建序列数据集bugSequenceSet和environmentSequenceSet;
(4)将bugSet中的漏洞合约中与漏洞信息相关的语句提取出来,构建bugAttention用于扩充bugSet;
(5)选用TreeGAN作为模型框架,以environmentSequenceSet为模型输入进行预训练,使模型能够生成自然的智能合约;
(6)在预训练后的TreeGAN模型的判别器部分新增一个LSTM网络用于学习bugAttention的信息,该网络与原有的树状LSTM一起用于判别输入的合约是否是真实合约;以bugSet为输入进行正式训练,使模型能够生成语法正确的、自然的,带有特定漏洞的智能合约。
作为优选,所述步骤(2)中构建environmentSet用于模型预训练,environmentSet中的智能合约从最近真实部署到链上的合约中爬取,具有和漏洞合约相似的环境信息;在漏洞类型为重入漏洞时,将包含重入漏洞的合约的环境信息定义为包含转账语句和扣款语句的合约。
作为优选,所述步骤(4)中将bugSet中的漏洞合约中与漏洞信息相关的语句提取出来,构建bugAttention,bugAttention是一个离散的语句集,用于表示与漏洞相关的信息;在漏洞类型为重入漏洞时,首先构建合约的程序依赖图,图中的每个节点代表控制谓词或语句,每条边代表着节点间的控制依赖或是数据依赖;将程序依赖图中所有的转账语句以及同转账语句有着依赖关系的控制语句和定义语句放入bugAttention。
作为优选,所述步骤(5)中TreeGAN模型的生成器选用标准的LSTM,判别器选用树状的LSTM,通过掩码矩阵消除语法错误,结合下拉自动机学习程序结构语法信息。
作为优选,所述步骤(6)中通过在TreeGAN的判别器中增加一个标准LSTM网络用于学习漏洞信息;以该网络输出的结果与原有的树状LSTM网络的结果为参数计算出置信度,作为生成器参数更新的依据。
作为优选,向量化后的bugAttention作为判别器中标准LSTM网络的输入。
作为优选,判别器的置信度ΨD=sigmoid(W(c)hr+U(c)hv+b(c)),其中hr表示tree-LSTM树根节点最终隐藏状态,hv表示新增LSTM网络的最终隐藏状态,W(c)、U(c)表示对应的权重,b(c)表示偏置项,sigmoid为激活函数。
基于相同的发明构思,本发明提供的一种基于TreeGAN的生成带有漏洞智能合约的系统,包括:
数据集构建模块,用于确定需要生成合约中包含的漏洞类型,在公共平台上收集带有此类漏洞的真实合约数据集bugSet;以及分析bugSet中的智能合约,提取出这类合约中除了漏洞信息之外的环境特征;爬取部署到区块链上的真实合约,从中挑选出包含上述环境特征的智能合约,构建数据集environmentSet;
数据预处理模块,用于将bugSet和environmentSet中的合约转化为解析树,根据solidity的文法产生式,将解析树序列化,构建序列数据集bugSequenceSet和environmentSequenceSet;
漏洞信息提取模块,用于将bugSet中的漏洞合约中与漏洞信息相关的语句提取出来,构建bugAttention用于扩充bugSet;
预训练模块,用于选用TreeGAN作为模型框架,以environmentSequenceSet为模型输入进行预训练,使模型能够生成自然的智能合约;
以及,漏洞信息学习模块,用于在预训练后的TreeGAN模型的判别器部分新增一个LSTM网络用于学习bugAttention的信息,该网络与原有的树状LSTM一起用于判别输入的合约是否是真实合约;以bugSet为输入进行正式训练,使模型能够生成语法正确的、自然的,带有特定漏洞的智能合约。
基于相同的发明构思,本发明提供的一种基于TreeGAN的生成带有漏洞智能合约的系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的基于TreeGAN的生成带有漏洞智能合约的方法。
有益效果:本发明与现有技术相比的优点在于:
(1)相对于现有的基于寻找攻击点,通过完整代码片段注入、削弱安全机制、代码转换三种方法进入漏洞注入的技术,本发明给出的基于TreeGAN的漏洞智能合约生成技术可以生成更为自然,更为接近真实部署成功的智能合约。本发明可以通过对抗生成的技术,对真实存在的漏洞合约进行模仿生成,从而生成自然的漏洞合约,漏洞类型的选择也更为灵活。这个“自然”的产生是通过“对抗”这个方法实现的,对抗生成网络的本质是试图生成与真实数据分布相似的假数据,对应到本发明中,即可以生成与真实存在漏洞合约结构信息相似的生成合约。
(2)相对于现在基于SeqGAN的序列生成方法,本发明给出的基于TreeGAN的漏洞智能合约生成技术可以把solidity已经定义好的语法信息作为另一个输入,避免了生成的智能合约中存在语法错误。本发明基于TreeGAN进行合约生成,引入了解析树这一中间表示,充分考虑了智能合约的结构信息,避免了这种情况的发生。
(3)相对于现有的直接利用TreeGAN模型进行程序语言生成的方法,本发明给出的预训练方案可以更好地学习到合约的信息,并且可以加速模型收敛。本发明通过引入合约环境特征的概念搜集预训练数据集environmentSet,利用原版的TreeGAN架构进行预训练,从而使模型学习到了漏洞智能合约中的环境特征,能够生成与真实漏洞合约类似的普通合约。
(4)相比于现有的用于生成普通序列的TreeGAN模型,本发明在正式训练阶段改进了判别器的架构,并增加了合约的漏洞信息bugAttention作为输入,使模型能够更好地学习合约的漏洞信息。
附图说明
图1为本发明实施例的方法流程图。
图2为用于预训练的TreeGAN模型的基本架构示意图。
图3为本发明实施例中针对漏洞生成改进后的TreeGAN模型架构示意图。
图4为本发明实施例中转账语句“to.call.value(amount)(“”);”对应的解析树示意图。
图5为本发明实施例中转账语句“to.call.value(amount)(“”);”对应的文法产生式序列示意图。
具体实施方式
为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本发明。
为了确保生成的漏洞智能合约可以通过编译器,不出现语法错误,本发明选用TreeGAN作为框架。在确定生成合约的漏洞类型后,在公开平台上搜集真实的漏洞智能合约数据集bugSet。
为了加速收敛,模型要先进行预训练。考虑到大多数漏洞合约进行修复时,仅需要修改一个或是少数几个语句的字符或是位置,由此可以得出漏洞合约与一部分真实合约的环境信息应该是类似的。因此本发明的预训练策略为:分析bugSet中的智能合约,提取出这类合约中除了漏洞信息之外的环境特征。爬取近期部署到链上的真实合约,从中挑选出包含上述环境特征的智能合约,构建数据集environmentSet,以此为模型输入,进行预训练。
TreeGAN通过利用语法信息确保生成序列语法正确,具体表现为生成序列时不采用传统的基于词的生成,而是采用基于文法产生式的生成。新生成的文法产生式作用于当前已生成的序列,从而扩充语句,防止了语法错误。因此训练前,bugSet和environmentSet都需要根据文法产生式进行序列化。
同时,考虑到TreeGAN框架原本的用途是用于生成普通的,语法正确的序列。而本发明需要生成的带有特定漏洞的合约,可以理解为一种带有特定功能的序列。为了实现这一点,正式训练时,模型的判别器部分增加一个标准LSTM网络用于学习漏洞信息。该网络和原来的用于学习合约结构信息的树状LSTM一起用于判断输入合约是否是真实合约。该网络的输入为bugAttention,指从bugSet中的合约中提取出的与漏洞信息相关的语句集合。bugAttention仅在判别器中用于判别输入序列是否来自真实数据集,不参与生成器的工作,因此不需要序列化。
具体地,如图1所示,本发明实施例公开的一种基于TreeGAN的生成带有漏洞智能合约的方法,包括以下步骤:
(1)确定需要生成合约包含的漏洞类型,在github、kaggle等平台上收集包含此类漏洞的智能合约,构建真实智能合约数据集bugSet。
(2)分析bugSet中的智能合约,提取出这类合约中除了漏洞信息之外的环境特征并搜集对应合约。利用Python的Scrapy框架爬取近期部署到链上的真实合约,从中挑选出包含上述环境特征的智能合约,构建数据集environmentSet,用于后续预训练。这个步骤的关键在于分析。由于不同的漏洞有着不同的特点,有时需要在特定内容的合约才能产生需要的漏洞。由于以太坊官方没有给出权威的智能合约漏洞分类标准,为了统一规范,对每一类漏洞都定制了相对应的环境特征,用于数据集搜集。下文中将以重入漏洞为例详细介绍。
(3)数据预处理。无论是bugSet,还是environmentSet,都无法直接作为模型的输入,需要进行预处理。两者预处理的策略相同,都先利用开源语法分析器ANTLR将智能合约转换为解析树,再结合solidity的文法产生式,将解析树转化为产生式序列作为模型的输入。solidity的各项文法产生式和符号会在预处理开始前向量化,向量化的方法为word2vec。下文中将以转账语句to.call.value(amount)(“”);为例进行详细说明。
(4)从漏洞智能合约中提取出bugAttention,扩充bugSet的内容。TreeGAN框架原本的用途是用于生成普通的,语法正确的序列。而本发明需要生成带有特定漏洞的合约,可以理解为一种带有特定功能的序列。为了实现这一点,本发明在网络的判别器部分新增一个标准LSTM网络用于学习漏洞信息,这个漏洞信息就是bugAttention,由与漏洞特征密切相关的多个语句构成。由于不同的漏洞有着不同的特点,这里参考了μVulDeePecker框架中codeAttention的概念,对不同的漏洞信息的提取方案进行定制。下文中将以重入漏洞为例进行介绍。
(5)以TreeGAN网络框架为基础,构建预训练模型。TreeGAN是SeqGAN的一种改进,可以用于生成语法正确的序列。两者都是生成对抗网络(Generative AdversarialNetwork)的变种。对抗生成网络由一个用于生成假数据的生成器和一个用于判断数据是否为真实数据的判别器构成。通过对生成器和判别器的交替对抗训练,不断提高两者的性能,从而得到一个可以生成以假乱真数据的生成器。SeqGAN通过结合强化学习的内容,解决了原始GAN无法处理离散数据的问题。而TreeGAN通过引入语法信息并改进判别器的网络结构解决了SeqGAN无法控制生成序列语法的问题。如图2所示,TreeGAN的生成器采用标准的LSTM,判别器采用树状的LSTM。为了后续更好地对抗训练,进行预训练。生成器的参数采用传统的最大似然估计进行初始化。作为判别器的Tree-LSTM采用判别正常树和异常树的方法来进行预训练。正常树即真实数据集中合约根据语法信息转化得到的解析树。将两颗正常树的随机子树进行调换,破坏正常树的结构则构成了异常树,通过对这两种树进行区分,使判别器学习到正常合约的结构信息。将environmentSet按照步骤(3)的方法进行预处理,得到environmentSequenceSet,作为预训练网络的输入。预训练结束的模型能够生成语法正确的,和漏洞合约结构相似的智能合约。
(6)在预训练后的TreeGAN模型的判别器部分新增一个标准LSTM网络用于学习bugAttention的信息,该网络与原有的树状LSTM一起用于判别输入的合约是否是真实合约。接下来,以bugSet为输入进行正式训练,使模型能够生成语法正确的、自然的,带有特定漏洞的智能合约。如图3所示,这个步骤中生成器部分与步骤(5)相似,不再赘述。新增的判别器网络用于学习漏洞信息,以该网络输出的结果与原有的树状网络结构的结果为参数计算出置信度,作为生成器参数更新的依据。
步骤(2)中的环境信息提取和对应合约的搜集,以重入漏洞为例,具体步骤如下:
(21)查看数据集中关于重入漏洞的部分,得到重入漏洞本身的特征为使用没有指定响应函数的转账语句将货币发送给收款人,并且转账语句的执行先于扣款语句(扣款语句将对收款账户的余额做扣除操作)。
(22)将包含重入漏洞的合约的环境信息定义为合约中包含了转账语句和扣款语句。
(23)使用Python的Scrapy框架爬取近期部署到链上的真实合约,利用官方编译器solc将每个合约编译为抽象语法树,并以json文件的形式存储这些抽象语法树。
(24)转账语句指通过transfer、send或call.value语句进行转账操作的语句。可通过遍历抽象语法树中名为"MemberAccess"的节点,并识别其中"member_name"属性来进行转账语句的识别。
(25)识别扣款语句的关键在于识别合约中用于表示账号余额的变量。可通过搜索合约中以"mapping(address=>uint256)"进行定义的变量,并判断该变量是否进行过计算操作来进行识别。
步骤(3)中将智能合约转化为产生式序列的过程,以图3的转账语句为例,具体步骤如下:
(31)图3对应的转账语句为“to.call.value(amount)(“”);”,通过开源语法分析器ANTLR处理后,可以得到如图3的解析树。
(32)解析树是源程序的树状表示,自顶而下、从左往右观察解析树可以得到语句根据文法产生式进行生成的过程。本发明根据这一点将解析树转化为生成式序列。将图4所示的解析树按照solidity文法产生式转化后,可以得到如图5那些的产生式序列,在实际运行时,会实现将各个产生式向量化,以便模型输入。
(33)从左往右遍历解析树的叶子节点可以得到对应的原始语句。通过这一点遍历产生式序列可以得到原始的合约,在最后训练结束后,生成器生成的漏洞合约可以通过这种方法进行合约还原。
步骤(4)中的漏洞信息提取,以重入漏洞为例,具体步骤如下:
(41)首先构建合约的程序依赖图,图中的每个节点代表控制谓词或语句,每条边代表着节点间的控制依赖或是数据依赖。
(42)将图中所有的转账语句以及同转账语句有着依赖关系的控制语句和定义语句放入bugAttention。
步骤(5)中对抗训练时,具体步骤如下:
(51)首先是生成器部分的训练,包括以下步骤:
S1:本发明的生成器通过标准LSTM实现,具体公式如下:
it=σ(W(i)xt+U(i)ht-1+b(i))
ft=σ(W(f)xt+U(f)ht-1+b(f))
ot=σ(W(o)xt+U(o)ht-1+b(o))
ut=tanh(W(u)xt+U(u)ht-1+b(u))
ct=it*ut+ft*ct-1
ht=ot*tanh(ct)
上述的it,ft,ot,ct,ht分别代指t时刻下的输入门、遗忘门、输出门、cell信息和隐藏状态信息。ut指输入门之前的cell信息。xt表示当前输入,ht-1表示前一个隐状态,b表示偏置项,W和U都表示对应的权重,σ和tanh都表示激活函数,*指两个矩阵对应位置元素进行乘积。对于一个数据样本D=(d1,...,dT),时刻t下的输入向量可以表示为xt=(at-1,pt),其中at-1指t-1时刻选择的action对应的向量,pt指当前时刻需要父节点的信息。
S2:预训练模型中的输入为environmentSequenceSet,模型的最终目的是为了生成和输入分布相似的文法产生式序列。如上文所述,TreeGAN参考了SeqGAN中强化学习的部分。强化学习简单说就是一个智能体(Agent)采取行动(Action)从而改变自己的状态(State)获得奖励(Reward)与环境(Environment)发生交互的循环过程。智能体的目的就是尽可能获得最大的奖励。在TreeGAN中生成器就是一个智能体,每一次选择用于生成的产生式就是动作,当前已经生成的序列就是当前状态,该序列输入判别器得到的结果就是奖励,可供选择的产生式就是环境。在训练时,生成器根据已经生成的序列,搜索所有在下一步可能用于生成的产生式,对所有的可能选择利用蒙特卡洛采样补齐序列,随后将采样后的多个完整的序列提交给判别器,判别器给出的结果决定选择哪一个产生式进行生成。
S3:此外,TreeGAN生成器在生成时会多加一层限制来防止生成会导致语法错误的产生式,这个限制通过掩码矩阵(mask matrix)来实现,掩码矩阵通过分析文法产生式得到。由于LSTM在t时刻的输出是从一个多项分布中采样得到,多项分布中的值代表生成器选择生成这个产生式的概率。掩码矩阵通过点乘将多项分布中会导致语法错误的项置为0,阻止了语法错误的产生。
S4:生成器为了更好地学习序列的结构信息,采用了类似于下推自动机(PDA)的方式,通过维护两个栈来进行父信息的追踪和子信息的追踪。在生成过程中的每个时刻t,两个栈分别出栈一个元素。父栈出栈元素是一个产生式,记为P。子栈出栈元素为一个符号,记为C。若C为终结符号,则直接生成,无需额外操作就可以进入下一个生成时刻。如果C为非终结符号,则需要调用上一时刻生成的产生式(记为at-1)和父信息P用于生成输入信息xt=(at-1,pt)。将输入信息提供给LSTM,经过S1中相关公式的操作,就得到了形如C->H的产生式作为输出,H指终结符号与非终结符号组成的序列(可以仅包含一项),该输出是通过采样经过掩码操作后的多项分布概率得到的。接着为了保存这一步操作的信息,将C入栈父栈,将H以逆置的顺序入栈子栈。到这里这一时刻的生成操作就结束了。
S5:生成器以当前的判别器输出的结果不断优化自身,等到生成器可以输出以假乱真的序列,即当前生成的序列判别器都给出了接近或高于0.5时,开始进行判别器的训练。
(52)接下来介绍判别器部分的训练:
S1:本发明要求判别器能够学习到序列丰富的语法信息,因此它应该捕获相应解析树的结构和语义。因此,TreeGAN选用Child-Sum Tree-LSTM作为判别器。由于Child-SumTree-LSTM单元根据子单元隐藏状态hk的总和调整其组件,因此适用于具有多分支或其子节点无序的树。对于一个树结构来讲,它有叶子节点和内部节点两种,叶子节点一般是序列的输入,内部节点则是LSTM单元。而且LSTM单元和常规的LSTM单元一样,需要输入输出门ij、oj,存储器状态cj和隐藏状态hj。当然它也有和标准LSTM不一样的遗忘门fjk,相关公式如下:
fjk=σ(W(f)xj+U(f)hk+b(f))
hj=oj*tanh(cj)
其中Ch(j)指节点j的子节点集合。公式部分第一个等式表示的是树节点的输入隐状态是来自它所有的孩子节点hk,其余符号的意义与步骤(51)中相同。从公式中,可以看到标准LSTM单元和Tree-LSTM单元之间的区别在于门控向量(主要的是遗忘门)和存储器单元的更新取决于该父节点的孩子节点的状态。也就是说这种结构的LSTM可以尽可能多的接受来自多个孩子节点的信息,根据遗忘门的权重可以动态的选择需要关注的信息。比如做句子相似度预测强调头信息,或者从多个情感丰富的孩子节点得到节点的情感倾向。
S2:在利用tree-LSTM进行序列相似度判别时,需要在Tree-LSTM的输出后添加一个完全连通的线性层,获得置信度:ψ=sigmoid(W(c)hr+b(c)),其中hr表示一个给定树的最终隐藏状态,r是树的根节点,b表示偏置项,W表示对应的权重,sigmoid为激活函数,Ψ∈(0,1)用于表示输入样本来自真实数据集的概率。
S3:当生成器生成的序列足够以假乱真后,将此时生成器生成的一系列假序列和environmentSequenceSet中数据一起提供给判别器训练,进行参数更新。待判别器可以重新识别假数据后,进入下一轮的生成器的训练。
步骤(6)中对漏洞信息的处理和训练,具体步骤如下:
(61)在步骤(5)中的预训练结束后,构造一个标准LSTM网络用于学习漏洞信息,网络结构和步骤(51)中描述相同。
(62)将从真实漏洞合约数据集中提取出来的bugAttention通过word2vec向量化。利用向量化后的bugAttention作为输入训练步骤(61)中提到的LSTM网络,使其学习到漏洞信息的特征。
(63)将步骤(62)中训练好的网络添加到步骤(5)中已预训练好的模型的判别器中,判别器中原有的用于学习合约整体结构的树状LSTM和新增的用于学习漏洞信息的标准LSTM网络一起作为生成器的参数更新的依据,即提供一个整体的置信度ΨD=sigmoid(W(c)hr+U(c)hv+b(c)),该公式与步骤(52)中S2阶段的置信度公式相比,增加了表示新增网络的最终隐藏状态hv和对应权重U。
(64)获得步骤(63)中改进后的TreeGAN后,将bugSet按照步骤(3)的方法进行预处理,得到bugSequenceSet,作为改进后模型的输入。生成器利用与步骤(51)相似的方法生成了一个假序列后,利用步骤(33)中的方法将假序列还原成源代码,再利用步骤(4)中的方法获得对应的漏洞信息。将生成的假序列和对应的漏洞信息和随机几个真实的序列及对应漏洞信息一起提交给判别器,利用判别器返回的结果进行生成器参数更新。
(65)当生成器可以生成以假乱真的结果,即此时判别器给出的结果多次徘徊在0.5附近时,生成器提供一系列假序列及对应漏洞信息和一系列真实序列和对应漏洞信息一起提交给判别器用于训练,直至判别器重新获得判断序列是否为真的能力。之后再进行步骤(64)中的生成器的训练。通过生成器和判别器的交替对抗训练,获得一个可以生成自然的漏洞合约的生成器。
基于相同的发明构思,本发明实施例提供的一种基于TreeGAN的生成带有漏洞智能合约的系统,包括:数据集构建模块,用于确定需要生成合约中包含的漏洞类型,在公共平台上收集带有此类漏洞的真实合约数据集bugSet;以及分析bugSet中的智能合约,提取出这类合约中除了漏洞信息之外的环境特征;爬取部署到区块链上的真实合约,从中挑选出包含上述环境特征的智能合约,构建数据集environmentSet;数据预处理模块,用于将bugSet和environmentSet中的合约转化为解析树,根据solidity的文法产生式,将解析树序列化,构建序列数据集bugSequenceSet和environmentSequenceSet;漏洞信息提取模块,用于将bugSet中的漏洞合约中与漏洞信息相关的语句提取出来,构建bugAttention用于扩充bugSet;预训练模块,用于选用TreeGAN作为模型框架,以environmentSequenceSet为模型输入进行预训练,使模型能够生成自然的智能合约;以及,漏洞信息学习模块,用于在预训练后的TreeGAN模型的判别器部分新增一个LSTM网络用于学习bugAttention的信息,该网络与原有的树状LSTM一起用于判别输入的合约是否是真实合约;以bugSet为输入进行正式训练,使模型能够生成语法正确的、自然的,带有特定漏洞的智能合约。各模块具体实现参见上述方法实施例,此处不再赘述。
基于相同的发明构思,本发明实施例提供的一种基于TreeGAN的生成带有漏洞智能合约的系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被加载至处理器时实现所述的基于TreeGAN的生成带有漏洞智能合约的方法。
Claims (9)
1.一种基于TreeGAN的生成带有漏洞智能合约的方法,其特征在于,包括以下步骤:
(1)确定需要生成合约中包含的漏洞类型,在公共平台上收集带有此类漏洞的真实合约数据集bugSet;
(2)分析bugSet中的智能合约,提取出这类合约中除了漏洞信息之外的环境特征;爬取部署到区块链上的真实合约,从中挑选出包含上述环境特征的智能合约,构建数据集environmentSet;
(3)将bugSet和environmentSet中的合约转化为解析树,根据solidity的文法产生式,将解析树序列化,构建序列数据集bugSequenceSet和environmentSequenceSet;
(4)将bugSet中的漏洞合约中与漏洞信息相关的语句提取出来,构建bugAttention用于扩充bugSet;
(5)选用TreeGAN作为模型框架,以environmentSequenceSet为模型输入进行预训练,使模型能够生成智能合约;
(6)在预训练后的TreeGAN模型的判别器部分新增一个LSTM网络用于学习bugAttention的信息,该网络与TreeGAN模型中原有的Tree-LSTM一起用于判别输入的合约是否是真实合约;以bugSet为输入进行正式训练,使模型能够生成语法正确的带有指定漏洞的智能合约。
2.根据权利要求1所述的一种基于TreeGAN的生成带有漏洞智能合约的方法,其特征在于,所述步骤(2)中构建的environmentSet用于TreeGAN模型预训练,environmentSet中的智能合约从最新真实部署到链上的合约中爬取,具有和漏洞合约相似的环境信息;在漏洞类型为重入漏洞时,将包含重入漏洞的合约的环境信息定义为包含转账语句和扣款语句。
3.根据权利要求1所述的一种基于TreeGAN的生成带有漏洞智能合约的方法,其特征在于,所述步骤(4)中将bugSet中的漏洞合约中与漏洞信息相关的语句提取出来,构建bugAttention,bugAttention是一个离散的语句集,用于表示与漏洞相关的信息;在漏洞类型为重入漏洞时,首先构建合约的程序依赖图,程序依赖图中的每个节点代表控制谓词或语句,每条边代表着节点间的控制依赖或是数据依赖;将程序依赖图中所有的转账语句以及同转账语句有着依赖关系的控制语句和定义语句放入bugAttention。
4.根据权利要求1所述的一种基于TreeGAN的生成带有漏洞智能合约的方法,其特征在于,所述步骤(5)中TreeGAN模型的生成器选用标准的LSTM,TreeGAN模型的判别器选用Tree-LSTM,通过掩码矩阵消除语法错误,结合下拉自动机学习程序结构语法信息。
5.根据权利要求1所述的一种基于TreeGAN的生成带有漏洞智能合约的方法,其特征在于,所述步骤(6)中通过在TreeGAN的判别器中增加一个标准LSTM网络用于学习漏洞信息;以该网络输出的结果与原有的Tree-LSTM网络的结果为参数计算出置信度,作为生成器参数更新的依据。
6.根据权利要求5所述的一种基于TreeGAN的生成带有漏洞智能合约的方法,其特征在于,向量化后的bugAttention作为判别器中标准LSTM网络的输入。
7.根据权利要求5所述的一种基于TreeGAN的生成带有漏洞智能合约的方法,其特征在于,判别器的置信度ΨD=sigmoid(W(c)hr+U(c)hv+b(c)),其中hr表示Tree-LSTM树根节点最终隐藏状态,hv表示新增LSTM网络的最终隐藏状态,W(c)、U(c)表示对应的权重,b(c)表示偏置项,sigmoid为激活函数。
8.一种基于TreeGAN的生成带有漏洞智能合约的系统,其特征在于,包括:
数据集构建模块,用于确定需要生成合约中包含的漏洞类型,在公共平台上收集带有此类漏洞的真实合约数据集bugSet;以及分析bugSet中的智能合约,提取出这类合约中除了漏洞信息之外的环境特征;爬取部署到区块链上的真实合约,从中挑选出包含上述环境特征的智能合约,构建数据集environmentSet;
数据预处理模块,用于将bugSet和environmentSet中的合约转化为解析树,根据solidity的文法产生式,将解析树序列化,构建序列数据集bugSequenceSet和environmentSequenceSet;
漏洞信息提取模块,用于将bugSet中的漏洞合约中与漏洞信息相关的语句提取出来,构建bugAttention用于扩充bugSet;
预训练模块,用于选用TreeGAN作为模型框架,以environmentSequenceSet为模型输入进行预训练,使模型能够生成智能合约;
以及,漏洞信息学习模块,用于在预训练后的TreeGAN模型的判别器部分新增一个LSTM网络用于学习bugAttention的信息,该网络与TreeGAN模型中原有的Tree-LSTM一起用于判别输入的合约是否是真实合约;以bugSet为输入进行正式训练,使模型能够生成语法正确的带有指定漏洞的智能合约。
9.一种基于TreeGAN的生成带有漏洞智能合约的系统,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现根据权利要求1-7任一项所述的基于TreeGAN的生成带有漏洞智能合约的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110599624.XA CN113221125B (zh) | 2021-05-31 | 2021-05-31 | 基于TreeGAN的生成带有漏洞智能合约的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110599624.XA CN113221125B (zh) | 2021-05-31 | 2021-05-31 | 基于TreeGAN的生成带有漏洞智能合约的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113221125A CN113221125A (zh) | 2021-08-06 |
CN113221125B true CN113221125B (zh) | 2022-09-27 |
Family
ID=77081860
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110599624.XA Active CN113221125B (zh) | 2021-05-31 | 2021-05-31 | 基于TreeGAN的生成带有漏洞智能合约的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113221125B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116578989B (zh) * | 2023-05-23 | 2024-03-22 | 海南大学 | 基于深度预训练神经网络的智能合约漏洞检测系统及方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977682A (zh) * | 2019-04-01 | 2019-07-05 | 中山大学 | 一种基于深度学习的区块链智能合约漏洞检测方法及装置 |
CN110543419A (zh) * | 2019-08-28 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于深度学习技术的智能合约代码漏洞检测方法 |
CN110737899A (zh) * | 2019-09-24 | 2020-01-31 | 暨南大学 | 一种基于机器学习的智能合约安全漏洞检测方法 |
CN111898134A (zh) * | 2020-08-03 | 2020-11-06 | 北京理工大学 | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 |
CN112035841A (zh) * | 2020-08-17 | 2020-12-04 | 杭州云象网络技术有限公司 | 一种基于专家规则与序列化建模的智能合约漏洞检测方法 |
-
2021
- 2021-05-31 CN CN202110599624.XA patent/CN113221125B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109977682A (zh) * | 2019-04-01 | 2019-07-05 | 中山大学 | 一种基于深度学习的区块链智能合约漏洞检测方法及装置 |
CN110543419A (zh) * | 2019-08-28 | 2019-12-06 | 杭州趣链科技有限公司 | 一种基于深度学习技术的智能合约代码漏洞检测方法 |
CN110737899A (zh) * | 2019-09-24 | 2020-01-31 | 暨南大学 | 一种基于机器学习的智能合约安全漏洞检测方法 |
CN111898134A (zh) * | 2020-08-03 | 2020-11-06 | 北京理工大学 | 基于LSTM和BiLSTM的智能合约漏洞检测方法和装置 |
CN112035841A (zh) * | 2020-08-17 | 2020-12-04 | 杭州云象网络技术有限公司 | 一种基于专家规则与序列化建模的智能合约漏洞检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113221125A (zh) | 2021-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110083705B (zh) | 一种用于目标情感分类的多跳注意力深度模型、方法、存储介质和终端 | |
US11341330B1 (en) | Applied artificial intelligence technology for adaptive natural language understanding with term discovery | |
CN110188358B (zh) | 自然语言处理模型的训练方法及装置 | |
CN113360915B (zh) | 基于源代码图表示学习的智能合约多漏洞检测方法及系统 | |
Berant et al. | Imitation learning of agenda-based semantic parsers | |
Zhang et al. | Text chunking based on a generalization of Winnow. | |
US11693630B2 (en) | Multi-lingual code generation with zero-shot inference | |
CN112232087A (zh) | 一种基于Transformer的多粒度注意力模型的特定方面情感分析方法 | |
CN107992528B (zh) | 利用可解释推理网络的多关系问答系统 | |
CN115329088B (zh) | 图神经网络事件检测模型的鲁棒性分析方法 | |
CN113535897A (zh) | 一种基于句法关系和意见词分布的细粒度情感分析方法 | |
Ferrario et al. | The art of natural language processing: classical, modern and contemporary approaches to text document classification | |
CN113221125B (zh) | 基于TreeGAN的生成带有漏洞智能合约的方法及系统 | |
CN112199503A (zh) | 一种基于特征增强的非平衡Bi-LSTM的中文文本分类方法 | |
Hu et al. | Fast-R2D2: A pretrained recursive neural network based on pruned CKY for grammar induction and text representation | |
Kumar et al. | Deep learning driven natural languages text to SQL query conversion: a survey | |
CN114610866A (zh) | 基于全局事件类型的序列到序列联合事件抽取方法和系统 | |
Jeyakarthic et al. | Optimal bidirectional long short term memory based sentiment analysis with sarcasm detection and classification on twitter data | |
Jin et al. | WordTransABSA: enhancing Aspect-based Sentiment Analysis with masked language modeling for affective token prediction | |
CN116611436B (zh) | 一种基于威胁情报的网络安全命名实体识别方法 | |
Yang et al. | Cmu livemedqa at trec 2017 liveqa: A consumer health question answering system | |
Lonsdale et al. | Positing language relationships using ALINE | |
CN114861654A (zh) | 一种中文文本中基于词性融合的对抗训练的防御方法 | |
Dang et al. | A combined syntactic-semantic embedding model based on lexicalized tree-adjoining grammar | |
CN113901758A (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 |