一种基于多任务学习的智能合约漏洞检测方法技术

技术编号:32776983 阅读:11 留言:0更新日期:2022-03-23 19:33
本发明专利技术公开了一种基于多任务学习的智能合约漏洞检测方法,利用基于硬参数共享的多任务学习框架实现智能合约漏洞检测技术。首先在数据准备阶段,对智能合约数据集进行清洗,并通过现有检测工具进行漏洞分类及标签标记;在数据预处理阶段,将智能合约样本源码编译形成字节码,然后对字节码进行清洗处理,然后反编译转化成操作码序列,形成模型的输入;接着在模型构建阶段,构建基于多任务学习的智能合约检测模型;最后在训练阶段,按照数据预处理阶段得到的操作码序列输入到模型中进行训练,实现对漏洞的判断及检测。该模型在智能合约的数据集上展现了较好的识别功能,检测时间较短且恒定,而且由于多任务学习的特性,该模型具有较好的泛化能力。较好的泛化能力。较好的泛化能力。

【技术实现步骤摘要】
一种基于多任务学习的智能合约漏洞检测方法


[0001]本专利技术属于区块链智能合约安全
,具体涉及一种针对智能合约的基于多任务学习(MTL,Multi

Task Learning)的漏洞检测方法。

技术介绍

[0002]区块链技术,是一种按照时间顺序将数据区块以顺序相连的方式组合形成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分部署账本。从宏观角度上说,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
[0003]智能合约是执行合约条款的计算机交易协议,其本质上是一段可以执行的代码,当用户访问到该地址上时,智能合约将会自动运行。随着技术的不断发展,智能合约被广泛运用到各种领域,特别是金融和保险领域。尽管智能合约的快速发展带来了种种好处,但它的安全问题也令众多研究人员倍加关注。自2016年起,每年因智能合约漏洞而导致的安全事件层出不穷,造成了严重的资产经济损失。因此,如何有效快速的检测智能合约漏洞成为学术界研究的重点问题。目前国内对智能合约的漏洞检测主要依赖于符号执行、形式化验证、模糊测试及其他技术等。但这些方法都各有缺点,如基于符号分析的漏洞检测技术速度较慢,耗费时间长;基于形式化方法的漏洞检测方法准确率高,但花费成本高,且局限于已知漏洞,对未知漏洞的形式无法分析或检测;基于模糊测试的漏洞检测技术则受困于随机测试的生成策略,智能合约的全局状态以及调用序列。
[0004]通过机器学习实现的漏洞检测方法检测效率高、可扩展性强,检测时间短等特点而逐渐受到国内外学者的关注。然而,现有的机器学习方法都存在如泛化性能弱,需要源代码等特点,限制了其适用性。此外,在漏洞类别划分上,多种方法只实现了对智能合约样本的二分类问题,即有无漏洞,而无法具体识别漏洞的类型,也无法轻易扩展到其他漏洞类型。为解决上述提及的一些缺陷,本专利技术提供了一种基于多任务学习的智能合约漏洞检测方法,能够利用较少的检测时间,完成漏洞二分类和多分类两个任务,提高模型的分类准确性。

技术实现思路

[0005]本专利技术利用迁移学习的一种特殊形式——多任务学习来解决模型的泛化性能。多任务学习是机器学习的一种,其目的是联合学习多个相关任务,使任务中包含的知识能够被其他任务所利用,从而提高所有任务的泛化性能。多任务学习已成功应用于机器学习,从自然语言处理、语音识别到计算机视觉等,因此本专利技术将其引入到智能合约漏洞检测领域中。除此之外,使用较容易获得合约操作码作为模型的输入,既能减少获取合约源码的难度,还能提高检测模型的稳定性。
[0006]为了解决上述技术问题,本专利技术提供一种基于多任务学习的智能合约漏洞检测方
法,如图1所示,包括构建智能合约数据集、检测样本数据集确定漏洞标签、编译智能合约生成操作码序列并简化、采用过采样方法平衡并划分数据集、训练机器学习模型、使用模型进行漏洞检测等流程。
[0007]具体地,包括:
[0008]在数据准备阶段,对智能合约样本集进行漏洞标签分类以及标签标记;
[0009]在数据预处理阶段,将智能合约源码进行编译转化为合约字节码,同时删除无效字节码,然后将有效字节码进行反编译转化为操作码序列,作为模型的输入;
[0010]在模型构建阶段,构建基于硬参数共享的多任务学习框架。在框架的底部共享层,构建基于自注意力的特征网络层,提取学习操作码序列特征;并在特定任务层,针对漏洞判断任务,建立基于卷积神经网络的二分类模型;针对漏洞识别任务,建立基于卷积神经网络的多标签分类模型,作为智能合约的漏洞检测模型;
[0011]在智能合约漏洞检测阶段,按照数据预处理阶段的处理方式将待检测智能合约处理成操作码序列,然后输入到基于多任务的智能合约漏洞检测模型,实现多任务功能,包括漏洞的判断(二分类)、多种漏洞的检测(多标签分类)等。
[0012]综上如图2所示,本专利技术漏洞检测方法的步骤如下几个阶段:
[0013](1)所述数据准备阶段包括:
[0014]1.1)根据所需实现检测的漏洞类型,收集并获取智能合约数据集;
[0015]1.2)对智能合约数据集进行清洗,获得有效的智能合约数据样本;
[0016]1.3)对智能合约数据样本进行分类标记:借用漏洞检测工具对智能合约样本进行漏洞检测分析,根据漏洞类型对每个智能合约进行样本标记,包含是否存在漏洞的标签,以及漏洞类型;
[0017]1.4)所述标签为X=[x1,x2,...,x
n
],其中,n表示需要实现检测的多种漏洞类型,x
i
=0表示智能合约样本不属于第i种漏洞,x
i
=1表示该合约样本属于第i种漏洞。(2)所述数据预处理阶段包括:
[0018]2.1)将智能合约源码编译转化为合约字节码,并进行有效处理;
[0019]2.2)将字节码反编译,获取操作码序列;
[0020]字节码是是由一系列十六进制数字组成,表示了特定的操作序列和参数。但其往往是长序列的,对其进行分析建模需要占据极大的内存空间,使得直接使用字节码作为直接输入是不切实际的。因此,需要对获取到的合约字节码进行进一步的处理,反编译生成操作码序列,以简化模型的输入,提高模型训练效率和训练效果。
[0021](3)所述模型构造阶段包括:
[0022]3.1)构建基于硬参数共享的多任务学习框架。在框架的底部共享层,构建基于自注意力的特征网络层,提取学习操作码序列特征;并在特定任务层,针对漏洞判断任务,建立基于卷积神经网络的二分类模型;针对漏洞识别任务,建立基于卷积神经网络的多标签分类模型,作为智能合约的漏洞检测模型;所述模型总体架构如图3所示。
[0023]3.2)底部共享层设计
[0024]如图4所示,底部共享层构建基于自注意力层的特征提取网络。使用词编码(Word Embedding)层和位置编码(Positional Embedding)层对智能合约操作码序列进行描述。词编码(Word Embedding)将输入的每个操作码转化为词向量的形式,从而将操作码序列映射
到多维空间中,同时为了使本模型了解操作码序列的顺序,将位置向量添加到词编码中使得在后面的计算中,能够更好地表达词与词之间的距离,完成对输入序列的描述。位置编码的计算如公式(1)和公式(2)所示:
[0025]PE
(pos,2i)
=sin(pos/10000
2i/d
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)
[0026]PE
(pos,2i+1)
=cos(pos/10000
2i/d
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)
[0027]使用正弦本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于多任务学习的智能合约漏洞检测方法,其特征在于,包括:(1)在数据准备阶段,对智能合约样本集进行漏洞分类及标签标记;(2)在数据预处理阶段,将智能合约源码进行编译转化为合约字节码,同时删除无效字节码,然后将有效字节码进行反编译转化为操作码序列,作为模型的输入;(3)在模型构建阶段,构建基于硬参数共享的多任务学习框架;在框架的底部共享层,构建基于自注意力的特征网络层,提取学习操作码序列特征;并在特定任务层,针对漏洞判断任务,建立基于卷积神经网络的二分类模型;针对漏洞识别任务,建立基于卷积神经网络的多标签分类模型,作为智能合约的漏洞检测模型;(4)在智能合约漏洞检测阶段,按照数据预处理阶段的处理方式将待检测智能合约处理成操作码序列,然后输入到基于多任务的智能合约漏洞检测模型,实现多任务功能,包括漏洞的判断、多种漏洞的检测。2.根据权利要求1所述的一种基于多任务学习的智能合约漏洞检测方法,其特征在于,所述数据准备阶段包括:(1)根据所需实现检测的漏洞类型,收集并获取智能合约数据集;(2)对智能合约数据集进行清洗,获得有效的智能合约数据样本;(3)对智能合约数据样本进行分类标记:借用漏洞检测工具对智能合约样本进行漏洞检测分析,根据漏洞类型对每个智能合约进行样本标记,包含是否存在漏洞的标签,以及漏洞类型;(4)所述标签为N=[n1,n2,...,n
k
],其中,k表示需要实现检测的多种漏洞类型,n
i
=0表示智能合约样本不属于第n种漏洞,n

【专利技术属性】
技术研发人员:黄静周阔韩红桂公备王茜卜奎健王梦晓李东萌丁金飞
申请(专利权)人:北京工业大学
类型:发明
国别省市:

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

1