一种检测智能合约漏洞的方法与装置制造方法及图纸

技术编号:39037215 阅读:17 留言:0更新日期:2023-10-10 11:50
本发明专利技术公开了一种检测智能合约漏洞的方法与装置,将程序切片技术应用到智能合约漏洞检测中,结合智能合约特性,构造合约漏洞切片,使用公共特征提取模块和多分支结构进行漏洞特征学习;本发明专利技术通过创新性地使用合约切片提取智能合约中的漏洞相关的控制流和数据流信息,对合约切片进行编码输入到公共特征提取层,学习智能合约的公共特征参数,最后使用多分支结构对学习到的公共特征进行多标签分类。面对新增漏洞时,添加新增漏洞对应的分支,使用新增漏洞数据集进行训练,冻结已训练好的公共特征层和其他分支的参数,实现对模型的快速拓展的同时将现有训练数据学习到的特征应用到新增漏洞的学习上。到新增漏洞的学习上。到新增漏洞的学习上。

【技术实现步骤摘要】
一种检测智能合约漏洞的方法与装置


[0001]本专利技术涉及漏洞检测
,具体为一种检测智能合约漏洞的方法与装置。

技术介绍

[0002]智能合约是一种运行在区块链上的自动化合约,它可以实现多方之间的交易和数据共享。然而,由于智能合约的复杂性和不可逆性,广泛应用于金融、电子商务等领域,它们容易受到各种漏洞和攻击。基于静态分析的方法往往需要专家经验作为技术支撑,并且分析过程需要消耗大量时间。现有的基于深度学习和机器学习的检测方法只能检测智能合约是否存在漏洞,并不能给出漏洞的具体类型,面对新增漏洞时需要对模型进行重新训练,同时存在漏洞的智能合约所占比例较小,正负样本不平衡。
[0003]现有的基于深度学习的方法需要足量带漏洞标签的智能合约才能充分学习到漏洞特征,目前智能合约漏洞数据集并不完善,带有漏洞标签智能合约远少于不带漏洞的合约,现有的模型在训练数据少、标签不平衡的数据上学习的效果欠佳,这一点在使用二分类模型针对每一种漏洞数据进行训练的方法上最为明显,模型只能在单一漏洞数据上学习,而不是所有漏洞数据上;而基于多分类模型的方法,使用所有漏洞数据进行训练,但在面对新增漏洞时,需要赋予新增漏洞标签,使用现有的漏洞数据和新增漏洞数据重新进行模型的训练,当漏洞类型增多时,这是一个非常耗时的过程,为此我们提出一种检测智能合约漏洞的方法与装置用于解决上述问题。

技术实现思路

[0004]本专利技术的目的在于提供一种检测智能合约漏洞的方法与装置,以解决上述
技术介绍
中提出的问题。
[0005]为实现上述目的,本专利技术提供如下技术方案:一种检测智能合约漏洞的方法与装置,包括如下步骤:步骤S1、将智能合约进行标化,并标记智能合约中漏洞的位置和漏洞类型,并对漏洞进行修复,制作训练集;步骤S2、利用分析工具生成新漏洞数据库中智能合约的控制流图,通过控制流图得到程序依赖图,利用编译工具生成新漏洞数据库中智能合约的抽象语法树,通过程序依赖图对抽象语法树进行切片处理,并得到合约切片;步骤S3、使用CodeBert模型对合约切片进行标化,使用LSTM网络提取标化后合约切片的公共特征;步骤S4、在提取的合约切片的公共特征的基础上,利用多分支结构学习相应漏洞的模式并输出对应漏洞的可能性,出现新漏洞时,增加新的漏洞分支结构,并对新的漏洞分支结构单独进行训练。
[0006]优选的,步骤S1中的训练集包含存在漏洞的合约、漏洞类型、漏洞修复的方法,不含漏洞的合约。
[0007]优选的,所述步骤S1的具体操作如下:步骤S11、通过正则表达式删除智能合约源代码中的注释;步骤S12、消除智能合约源代码中语义相同的控制流语句;步骤S13、将修饰器中的语句插入到使用到修饰器的函数中;步骤S14、定义映射统一的符号和有含义符号的名称;步骤S15、根据SWC标准,对存在漏洞的智能合约漏洞出现的行号和漏洞类型进行人工标记。
[0008]优选的,所述步骤S2的具体操作如下:步骤S21、使用以太坊分析工具Slither生成智能合约中目标函数的控制流图;步骤S22、通过控制流图将目标函数的控制依赖和数据依赖信息进行合并,得到程序依赖图;步骤S23、使用solidity编译工具solc编译智能合约的源代码生成抽象语法树;步骤S24、在抽象语法树的基础上结合区块链和智能合约的特性定义漏洞特征;步骤S25、程序依赖图的基础上对智能合约漏洞特征进行切片。
[0009]优选的,步骤S3的具体操作如下:步骤S31、使用CodeBert模型将合约切片进行词向量嵌入,生成词向量嵌入矩阵;步骤S32、对较短的词向量进行填充,较长的词向量进行截取,得到长度相同的词向量矩阵;步骤S33、使用LSTM网络学习具词向量矩阵来提取公共特征。
[0010]优选的,步骤S4训练分支的步骤如下:步骤S411、每个分支结构共享来自步骤S3的输入;步骤S412、针对不同类型的漏洞数据,通过步骤S3提取公共特征,仅输入漏洞对应的分支进行训练;步骤S413、更新LSTM网络参数和对应漏洞分支的参数。
[0011]优选的,步骤S4漏洞检测的具体步骤如下:步骤S421、步骤S3提取到的待检测合约公共特征,输入每漏洞分支中;步骤S422、每个漏洞分支给出合约对应漏洞的概率;步骤S423、对于新出现的漏洞,参照步骤S1构造新漏洞数据,添加对应新的漏洞分支;优选的,步骤S423中对新漏洞分支训练的具体步骤如下:步骤S4231、冻结步骤S3公共特征的提取和其他漏洞分支的参数;步骤S4232、使用新漏洞数据对新分支进行训练,仅更新新漏洞分支的参数;步骤S4233、将公共特征的提取和其他漏洞分支的参数进行解冻。
[0012]一种检测智能合约漏洞的装置,其特征在于:包括漏洞数据库构建模块、合约切片提取模块、多标签分类与迁移学习模块和公共特征提取模块;所述漏洞数据库构建模块:将智能合约进行标化,并标记智能合约中漏洞的位置和漏洞类型,并对漏洞进行修复,并制作数据集;所述合约切片提取模块:利用分析工具生成新漏洞数据库中智能合约的控制流图,通过控制流图得到程序依赖图,利用编译工具生成新漏洞数据库中智能合约的抽象语
法树,通过程序依赖图对抽象语法树进行切片处理,并得到合约切片;所述公共特征提取模块:使用CodeBert模型对合约切片进行标化,使用LSTM网络提取标化后合约切片的公共特征;所述多标签分类与迁移学习模块:在提取的合约切片的公共特征的基础上,利用多分支结构学习相应漏洞的模式并输出对应漏洞的可能性,出现新漏洞时,增加新的漏洞分支结构,并对新的漏洞分支结构单独进行训练。
[0013]与现有技术相比,本专利技术的有益效果是:本专利技术使用多分支结构实现了智能合约漏洞多标签分类,避免针对不同漏洞的重复训练,使用迁移学习技术,将从已有漏洞合约上学习的经验应用到新增漏洞特征学习上,加快了模型训练速度,在新增漏洞数据库较小的情况下,学习到尽可能多的特征。
[0014]创新性地使用合约切片提取智能合约中的漏洞相关的控制流和数据流信息,对合约切片进行编码输入到公共特征提取层,学习智能合约的公共特征参数,最后使用多分支结构对学习到的公共特征进行多标签分类。
[0015]面对新增漏洞时,添加新增漏洞对应的分支,使用新增漏洞数据集进行训练,冻结已训练好的公共特征层和其他分支的参数,实现对模型的快速拓展的同时将现有训练数据学习到的特征应用到新增漏洞的学习上。
附图说明
[0016]图1为本专利技术基于合约切片和迁移学习的智能合约漏洞检测框架图;图2为本专利技术构造合约切片原理图;图3为本专利技术合约源程序标化处理实施例;图4为本专利技术实施例依赖关系图。
具体实施方式
[0017]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0018]参照图1,为本专利技术第一本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种检测智能合约漏洞的方法,其特征在于:包括如下步骤:步骤S1、将智能合约进行标化,并标记智能合约中漏洞的位置和漏洞类型,并对漏洞进行修复,制作训练集;步骤S2、生成新漏洞数据库中智能合约的控制流图,通过控制流图得到程序依赖图,生成新漏洞数据库中智能合约的抽象语法树,通过程序依赖图对抽象语法树进行切片处理,并得到合约切片;步骤S3、对合约切片进行标化,提取标化后合约切片的公共特征;步骤S4、在提取的合约切片的公共特征的基础上,利用多分支结构学习相应漏洞的模式并输出对应漏洞的可能性,出现新漏洞时,增加新的漏洞分支结构,并对新的漏洞分支结构单独进行训练。2.根据权利要求1所述的一种检测智能合约漏洞的方法,其特征在于:所述步骤S1的训练集包括漏洞的合约、漏洞类型、漏洞修复方案以及修改后的合约。3.根据权利要求1所述的一种检测智能合约漏洞的方法,其特征在于:所述步骤S1的具体操作如下:步骤S11、通过正则表达式删除智能合约源代码中的注释;步骤S12、消除智能合约源代码中语义相同的控制流语句;步骤S13、将修饰器中的语句插入到使用到修饰器的函数中;步骤S14、定义映射统一的符号和有含义符号的名称;步骤S15、根据SWC标准,对存在漏洞的智能合约漏洞出现的行号和漏洞类型进行人工标记。4.根据权利要求1所述的一种检测智能合约漏洞的方法,其特征在于:所述步骤S2的具体操作如下:步骤S21、使用分析工具生成智能合约中目标函数的控制流图;步骤S22、通过控制流图将目标函数的控制依赖和数据依赖信息进行合并,得到程序依赖图;步骤S23、使用编译工具solc编译智能合约的源代码生成抽象语法树;步骤S24、在抽象语法树的基础上结合区块链和智能合约的特性定义漏洞特征;步骤S25、程序依赖图的基础上对智能合约漏洞特征进行切片。5.根据权利要求1所述的一种检测智能合约漏洞的方法,其特征在于:步骤S3的具体操作如下:步骤S31、使用CodeBert模型将合约切片进行词向量嵌入,生成词向量嵌入矩阵;步骤S32、对较短的词向量进行填充,较长的词向量进行截取,得到长度相同的词...

【专利技术属性】
技术研发人员:李腾张峰陈厅韩朝阳刘运杰宋书玮王东
申请(专利权)人:杭州后量子密码科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1