掌桥专利:专业的专利平台
掌桥专利
首页

一种面向智能合约的漏洞检测系统及方法

文献发布时间:2024-04-18 19:58:30


一种面向智能合约的漏洞检测系统及方法

技术领域

本发明涉及区块链和智能合约技术领域,特别是涉及一种面向智能合约的漏洞检测系统及方法。

背景技术

随着计算机技术的不断发展,区块链凭借其去中心化的特点得到了广泛的应用。智能合约是一种基于区块链技术的自动化数字合约,在区块链上部署运行,其具有自动执行和不可篡改等特点,在金融、物流、物联网等领域得到广泛应用。近年来在国家的规划中也在大力发展区块链技术,将其应用到关键领域。然而,由于开发者水平的不一致,导致很多智能合约中或多或少的存在漏洞,给用户带来巨大的潜在经济损失和安全风险,因此智能合约的漏洞检测成为了智能合约开发和应用中的重要问题,在对智能合约进行漏洞检测时,需要考虑检测方法的准确性、自适应性、可扩展性和可靠性等方面。例如,在实际应用中,智能合约的代码结构和逻辑可能会因为需求变化而不断改变,这就需要快速适应变化的代码结构和逻辑,及时更新漏洞检测模型。同时,智能合约的开发和应用也呈现出快速增长的趋势,需要一种高效、可扩展的智能合约漏洞检测系统来应对大规模的智能合约检测需求。

现有的智能合约漏洞检测技术包括传统的人工审计和自动化漏洞检测技术等。人工审计的缺点在于时间长、效率低、人为因素干扰大、难以适应大规模智能合约的开发和应用等问题。而自动化的智能合约漏洞检测技术又可以分为基于形式化验证、基于符号执行和基于机器学习的方法。例如使用F*语言去验证智能合约是否存在漏洞的形式化验证方法(Bhargavan K,Delignat-Lavaud A,Fournet C,etal.Formal verification of smartcontracts:Short paper[C]//Proceedings of the 2016ACM workshop on programminglanguages and analysis for security.2016:91-96.),通过模式匹配方法在给定特征的情况下分析智能合约是否存在漏洞的符号执行方法(Securify(Tsankov P,Dan A,Drachsler-Cohen D,etal.Securify:Practical security analysis of smartcontracts[C]//Proceedings of the 2018ACM SIGSAC Conference on Computer andCommunications Security.2018:67-82.)以及一种通过构造智能合约合约图并使用图神经网络进行智能合约漏洞检测的机器学习方法(Zhuang Y,Liu Z,Qian P,etal.SmartContract Vulnerability Detection using Graph Neural Network[C]//IJCAI.2020:3283-3290.)。虽然上述几种方法能够在一定程度上提高检测效率,但仍存在漏洞检测不全面、误报率高、适用范围有限等问题。

综上所述,目前对于智能合约方面的漏洞检测所存在的分类不够全面、结果不够准确的问题,本发明提出了一种基于深度学习的智能合约漏洞检测模型及其方法。通过使用CodeBert,BiGRU及注意力机制来处理智能合约solidity源代码,可以有效应对智能合约上漏洞检测精确率低的问题。

发明内容

本发明的目的是提供了一种面向智能合约的漏洞检测系统及方法,旨在解决智能合约上漏洞检测精确率低的问题。

为实现上述目的,本发明提供了如下方案:

一种面向智能合约的漏洞检测系统,包括:

数据预处理模块,用于收集智能合约,将所述智能合约进行无用信息删除、以获取包含与漏洞形成有关的智能合约切片,将所述智能合约切片进行不同漏洞种类标注,获取标注结果;

特征提取模块,用于基于所述标注结果,构建智能合约漏洞检测模型,基于所述智能合约漏洞检测模型,获取检测结果;

分类模块,用于对所述检测结果进行分类,完成漏洞检测;

所述数据预处理模块、所述特征提取模块和所述分类模块依次连接。

可选地,所述数据预处理模块包括:

合约切片子模块,用于将所述智能合约进行无用信息删除,获取包含与漏洞形成有关的智能合约切片;

标注子模块,用于对所述智能合约切片进行不同漏洞种类标注,获取所述标注结果;其中,所述漏洞种类包括:可重入漏洞、整数溢出漏洞、拒绝服务漏洞、TxOrigin漏洞、时间戳依赖漏洞以及低级调用漏洞;

传输子模块,用于将所述标注结果传输至所述特征提取模块。

可选地,所述特征提取模块包括:

切片获取子模块,用于获取标注后的历史智能合约切片;

检测模型构建子模块,用于将标注后的所述历史智能合约切片通过CodeBert预训练模型形成历史词嵌入矩阵,将所述历史词嵌入矩阵输入注意力机制的BiGRU模型中进行训练,获取所述智能合约漏洞检测模型。

可选地,所述检测模型构建子模块包括:

预训练模型构建单元,用于将所述CodeBert预训练模型中加入仅属于solidity的词语,获取微调后的CodeBert模型,将标注后的所述历史智能合约切片输入微调后的所述CodeBert模型形成所述历史词嵌入矩阵;

检测模型构建单元,用于将所述历史词嵌入矩阵输入注意力机制的BiGRU模型中进行训练,获取所述智能合约漏洞检测模型。

可选地,所述特征提取模块还包括:

所述检测结果获取子模块,用于将所述标注结果输入微调后的所述CodeBert模型形成所述词嵌入矩阵,将所述词嵌入矩阵输入所述智能合约漏洞检测模型进行特征提取,获取特征向量;其中,所述智能合约漏洞检测模型包括:Bi-GRU编码部分和注意力机制部分。

可选地,所述特征提取模块还包括:

词嵌入矩阵获取单元,用于将所述标注结果输入微调后的所述CodeBert模型形成所述词嵌入矩阵;

隐藏层向量获取单元,用于将所述词嵌入矩阵输入所述Bi-GRU编码部分,获取前向隐藏层的输出结果和和后向隐藏层的输出结果,对所述前向隐藏层的输出结果和所述后向隐藏层的输出结果进行拼接,获取隐藏层向量;

特征向量获取单元,用于将隐藏层向量输入所述注意力机制部分,对所述隐藏层向量中的词语按不同重要程度进行权重配置,并进行组合,获取所述特征向量。

可选地,获取前向隐藏层的输出结果和和后向隐藏层的输出结果的方法为:

其中,

可选地,获取所述特征向量的方法为:

其中,m

可选地,所述分类模块包括:

分类子模块,用于通过softmax作为激活函数,交叉熵信息函数作为其损失函数,计算所述特征向量中每种标签的概率得分,获取分类结果。

为实现上述目的,本发明还提供了一种面向智能合约的漏洞检测方法,包括:

收集智能合约,将所述智能合约进行无用信息删除与不同漏洞种类标注,获取标注结果;

构建智能合约漏洞检测模型,将所述标注结果输入所述智能合约漏洞检测模型,获取检测结果,对所述检测结果进行分类,完成漏洞检测。

本发明的有益效果为:

(1)本发明通过对智能合约的源代码进行切片检测,降低了输入信息的长度,减少了训练的工作量,使代码片段中有用的部分更加密集,提升了智能合约漏洞检测系统的可靠性和准确性。

(2)本发明通过分析多种漏洞的成因确定了六种不同的智能合约漏洞,实现了针对可重入漏洞、整数溢出漏洞、拒绝服务漏洞、TxOrigin漏洞、时间戳依赖漏洞以及低级调用漏洞的多分类模型。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例的一种面向智能合约的漏洞检测系统示意图;

图2为本发明实施例的生成智能合约代码切片的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明公开了一种面向智能合约的漏洞检测系统,包括:数据预处理模块,用于收集智能合约,将智能合约进行无用信息删除与不同漏洞种类标注,获取标注结果;特征提取模块,用于构建智能合约漏洞检测模型,将标注结果输入智能合约漏洞检测模型,获取检测结果;分类模块,用于对检测结果进行分类,完成漏洞检测;数据预处理模块、特征提取模块和分类模块依次连接。

数据预处理模块包括:合约切片子模块,用于将智能合约进行无用信息删除,获取包含与漏洞形成有关的智能合约切片;标注子模块,用于对智能合约切片进行不同漏洞种类标注,获取标注结果;其中,漏洞种类包括:可重入漏洞、整数溢出漏洞、拒绝服务漏洞、TxOrigin漏洞、时间戳依赖漏洞以及低级调用漏洞;传输子模块,用于将标注结果传输至特征提取模块;合约切片子模块、标注子模块、传输子模块和特征提取模块依次连接。

特征提取模块包括:切片获取子模块,用于获取标注后的历史智能合约切片;检测模型构建子模块,用于将标注后的历史智能合约切片通过CodeBert预训练模型形成历史词嵌入矩阵,将历史词嵌入矩阵输入注意力机制的BiGRU模型中进行训练,获取智能合约漏洞检测模型;切片获取子模块和检测模型构建子模块连接。

检测模型构建子模块包括:预训练模型构建单元,用于将CodeBert预训练模型中加入仅属于solidity的词语,获取微调后的CodeBert模型,将标注后的历史智能合约切片输入微调后的CodeBert模型形成历史词嵌入矩阵;检测模型构建单元,用于将历史词嵌入矩阵输入注意力机制的BiGRU模型中进行训练,获取智能合约漏洞检测模型;预训练模型构建单元和检测模型构建单元连接。

特征提取模块还包括:检测结果获取子模块,用于将标注结果输入微调后的CodeBert模型形成词嵌入矩阵,将词嵌入矩阵输入智能合约漏洞检测模型进行特征提取,获取特征向量;其中,智能合约漏洞检测模型包括:Bi-GRU编码部分和注意力机制部分;检测模型构建子模块与检测结果获取子模块连接。

特征提取模块还包括:词嵌入矩阵获取单元,用于将标注结果输入微调后的CodeBert模型形成词嵌入矩阵;隐藏层向量获取单元,用于通过词嵌入矩阵,获取文本序列,将文本序列输入Bi-GRU编码部分,获取前向隐藏层的输出结果和和后向隐藏层的输出结果,对前向隐藏层的输出结果和后向隐藏层的输出结果进行拼接,获取隐藏层向量;特征向量获取单元,用于将隐藏层向量输入注意力机制部分,对隐藏层向量中的词语按不同重要程度进行权重配置,并进行组合,获取特征向量;词嵌入矩阵获取单元、隐藏层向量获取单元和特征向量获取单元依次连接。

分类模块包括:分类子模块,用于通过softmax作为激活函数,交叉熵信息函数作为其损失函数,计算特征向量中每种标签的概率得分,获取分类结果。

本发明还公开了一种面向智能合约的漏洞检测方法,包括:收集智能合约,将智能合约进行无用信息删除与不同漏洞种类标注,获取标注结果;构建智能合约漏洞检测模型,将标注结果输入智能合约漏洞检测模型,获取检测结果,对检测结果进行分类,完成漏洞检测。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

如图1所示,本发明提出一种基于深度学习的智能合约漏洞检测系统,旨在解决智能合约上漏洞检测精确率低的问题。

本发明的主要思想是通过CodeBert提取智能合约切片的词嵌入矩阵表示形式,利用BiGRU结合注意力机制对智能合约切片序列进行特征提取获得序列特征,解决已有的检测方法中存在的特征提取能力不足,分类精确率低的问题。

本发明所采用的技术方案如下:

本发明提出的基于深度学习的智能合约漏洞检测系统由三个模块组成,分别是数据预处理模块、特征提取模块和分类模块,这些模块之间的关系遵循如下规则:

(1)数据预处理模块负责对收集到的智能合约进行无用信息的删除,生成仅包含与漏洞形成有关的智能合约切片,如图2,对智能合约切片进行不同类别的标注,如可重入漏洞、整数溢出漏洞、拒绝服务漏洞等。数据预处理模块生成的智能合约切片结果将发送给特征提取模块。

(2)特征提取模块接收来自数据预处理模块生成的智能合约切片,首先在该模块使用CodeBert预训练模型形成词嵌入矩阵,然后将该词嵌入矩阵送入加入了注意力机制的BiGRU模型中进行训练,得到最终的智能合约漏洞检测模型。

(3)分类模块对最终的智能合约漏洞检测模型的输出结果进行分类。

前述的数据预处理模块中的代码切片生成过程包含如下步骤:生成数据流图,生成控制流图,提取出程序中的依赖关系并生成程序依赖图,按照不同的漏洞生成不同的智能合约切片,对智能合约切片进行类别的标注。

前述的特征提取模块的具体实施方式为:

①通过使用CodeBert预训练模型,将S1中获取的智能合约切片序列进行词嵌入矩阵生成,由于CodeBert预训练模型并不包含solidity,我们在语料库中加入了仅属于solidity的词语,使其共同参与训练,使用微调后的CodeBert模型生成词嵌入矩阵。

②将①生成的词嵌入矩阵输入BiGRU神经网络模型,并结合注意力机制对词嵌入矩阵进行特征的提取,得到特征向量Vec。

在特征学习完成后,可以得到智能合约的代码切片的特征向量表示Vec,将该向量输入单层连接层,通过全连接层,将Bi-GRU-Att提取出的特征映射到K个实数,这些实数是由多分类任务定义的类别数量决定的。

③使用softmax作为激活函数,交叉熵信息函数作为其损失函数,计算每种标签的概率得分,最后得出分类结果,即通过softmax函数,使这些实数可以被转换成K个0-1之间的值,从而反映出每一类的可能性。最后使用交叉熵信息函数作为损失函数进行训练得到模型参数。

进一步地,对于智能合约切片,其含有漏洞的种类共包含以下六种,分别为可重入漏洞、整数溢出漏洞、拒绝服务漏洞、TxOrigin漏洞、时间戳依赖漏洞以及低级调用漏洞。通过CodeBert预训练模型将含有这些漏洞的智能合约切片转换为词嵌入矩阵,并按照8:2的比例将其划分为训练集与测试集。

对于②中的预测结果的具体组成细节如下:

Ⅰ.Bi-GRU编码部分:对于一个给定的已经转换为代码切片的长度为L(L为单词个数)的文本序列(词向量矩阵),规定其中每一个单词的向量用x

其中,

Ⅱ.注意力机制部分:获得

在上述公式中,W

通过线性变换,我们将拼接的隐藏层向量映射到一个新的表示m

最后,使用注意力权重向量a

以上所述的实施例仅是对本发明优选方式进行的描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方案做出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。

相关技术
  • 面向智能合约代码的漏洞预测方法、系统、计算机设备和存储介质
  • 一种基于智能合约调用网络的智能合约漏洞检测方法
技术分类

06120116500067