1.一种基于序列模型的智能合约可重入漏洞检测方法,其特征在于,包括以下步骤:S1:获取智能合约源代码;
S2:将所述智能合约源代码转换为向量形式,得到智能合约片段向量;
S3:构建基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型;
S4:将所述智能合约片段向量输入可重入漏洞检测序列模型,通过双向循环神经网络对智能合约片段向量进行特征提取并利用多注意力机制对重要特征进行捕捉,得到可重入漏洞检测结果;
其中,所述双向循环神经网络包括依次连接的输入层、隐藏层和输出层;所述隐藏层包括注意力层;所述输出层包括softmax层;将智能合约片段向量输入双向循环神经网络,智能合约片段向量依次经过的输入层和隐藏层进行特征提取和重要特征捕捉,得到包括智能合约特征信息的隐藏状态;softmax层采用softmax函数对所述隐藏状态进行激活,得到可重入漏洞检测结果;
其中,所述隐藏层还包括前向隐藏层和后向隐藏层;将所述智能合约片段向量沿前向隐藏层传播方向输入双向循环神经网络,得到前向隐藏状态;将所述智能合约片段向量沿后向隐藏层传播方向输入双向循环神经网络,得到后向隐藏状态;将前向隐藏状态和后向隐藏状态连接起来,获得需要送入输出层的隐藏状态Ht;具体表达式如下所示:(front) (front) (front)
Ht前=φ(xtW xh+Ht‑1前W hh+b h)
(back) (back) (back)
Ht后=φ(xtW xh+Ht+1后W hh+b h)
Ht=[Ht前,Ht后]
n×h n×h n×d
其中,Ht前∈R 表示前向隐藏状态,Ht后∈R 表示后向隐藏状态,xt∈R 表示输入的智能合约片段向量,n表示智能合约的样本数,d表示每个智能合约样本中的智能合约片段(front) d×h (front) h×h向量的输入数,h为隐藏层中隐藏单元的数目,权重矩阵W xh∈R 和W hh∈R 分(back) d×h (back) h×h别为前向隐藏层的权重矩阵,W xh∈R 和W hh∈R 分别为后向隐藏层的权重矩阵,(front) 1×h (back) 1×h偏置b h∈R 为前向隐藏状态的偏置,b h∈R 为后向隐藏状态的偏置;
将隐藏状态Ht输入输出层,采用softmax函数对所述隐藏状态进行激活,得到智能合约*片段向量的标签y作为可重入漏洞检测结果,其表达式如下所示:
其中,whq为输出层的权重矩阵,bq为输出层的偏置,h表示双向循环神经网络中隐藏单元的数量,q表示输出单元的数量。
2.根据权利要求1所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2具体包括以下步骤:S2.1:对智能合约源代码进行数据清理;
S2.2:将与可重入漏洞无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码;
S2.3:将所述简化代码中的智能合约片段划分为若干令牌序列;
S2.4:对所述令牌序列进行矢量化,得到智能合约片段向量。
3.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.1中,所述对智能合约源代码进行数据清理包括删除智能合约源代码中的空行、非ASCII字符和不相关的注释。
4.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.2中,将经过数据清理,并且与call.value核心节点和withdraw函数无关的智能合约源代码转换成标识符,得到包括智能合约片段的简化代码,具体包括以下步骤:S2.2.1:统一智能合约源代码字母的大小写;
S2.2.2:利用标识符来替换智能合约源代码中的字符和/或关键字,得到简化代码。
5.根据权利要求4所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.2.2中,利用与移行操作或换行操作相对应的标识符chr(10)替换智能合约源代码中的字符和/或关键字,得到简化代码。
6.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.4中,使用doc2vec对所述令牌序列进行矢量化,得到智能合约片段向量。
7.根据权利要求2所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S2.4中,对所述令牌序列进行矢量化,得到智能合约片段向量之后,若智能合约片段向量的长度小于固定长度,则在智能合约片段向量首部添加关联节点控制信息;若智能合约片段向量的长度大于固定长度,则截取出大于固定长度的部分长度,并将截取的部分长度进行转移;所述固定长度为已知的一维智能合约片段向量长度的最大值。
8.根据权利要求1所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,S3中,还包括训练所述可重入漏洞检测序列模型,具体步骤包括:将智能合约片段向量输入可重入漏洞检测序列模型,根据可重入漏洞检测序列模型的输出结果,利用Focal Loss损失函数自适应平衡正样本和负样本的损失,并利用反向传播算法进行梯度更新,更新可重入漏洞检测序列模型的参数;所述正样本为正常智能合约源代码,所述负样本为智能合约可重入漏洞。
9.一种基于序列模型的智能合约可重入漏洞检测系统,应用于如权利要求1~8任一项所述的基于序列模型的智能合约可重入漏洞检测方法,其特征在于,包括:数据获取模块,用于获取智能合约源代码;
向量转换模块,用于将所述智能合约源代码转换为向量形式,得到智能合约片段向量;
基于双向循环神经网络与注意力机制融合的可重入漏洞检测序列模型;将所述智能合约片段向量输入训练好的可重入漏洞检测序列模型中,可重入漏洞检测序列模型输出可重入漏洞检测结果。