一种基于AdaBoost的智能合约多标签漏洞检测方法及系统
未命名
08-07
阅读:92
评论:0

rest模型将多分类问题转化为多个二进制分类问题,转换的思想是选择其中一个类别为阳性,并使所有其他类别为阴性,然后为每个二进制分类任务通过一个adaboost分类器,共计六个adaboost分类器进行分类,其分类结果被组合以提供多标签分类的最终结果。
13.本发明的系统所采用的技术方案是:一种基于adaboost的智能合约多标签漏洞检测系统,包括以下模块:
14.字节码提取模块,用于对于待检测的智能合约,提取其字节码;
15.操作码提取模块用于将字节码反编译成操作码;
16.切片特征提取模块,用于提取操作码的切片特征;
17.漏洞检测模块,用于针对切片特征,使用one-vs-rest模型和adaboost模型进行联合漏洞检测;所述漏洞包括可重入漏洞,整数溢出漏洞,异常处理漏洞,调用栈溢出漏洞,tx.origin漏洞,时间戳依赖漏洞和交易顺序依赖漏洞;
18.所述使用one-vs-rest模型和adaboost模型进行联合漏洞检测,是采用one-vs-rest模型将多分类问题转化为多个二进制分类问题,转换的思想是选择其中一个类别为阳性,并使所有其他类别为阴性,然后为每个二进制分类任务通过一个adaboost分类器,共计六个adaboost分类器进行分类,其分类结果被组合以提供多标签分类的最终结果。
19.本发明基于word2vec和adaboost实现了一种基于adaboost的智能合约多标签漏洞检测,该方案主要研究智能合约的操作码,操作码由多个操作码片段组成。由于操作码中包括该合约执行的逻辑,通过word2vec和pca提取操作码的切片特征,以切片特征作为adaboost模型的输入进行学习训练,因此可以有效提升智能合约安全漏洞的检测性能。
附图说明
20.图1为本发明实施例的检测方法原理图。
21.图2为本发明实施例的one-vs-rest模型和adaboost模型训练流程图;
具体实施方式
22.为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
23.请见图1,本发明提供的一种基于adaboost的智能合约多标签漏洞检测方法,包括以下步骤:
24.步骤1:对于待检测的智能合约,通过solc命令提取字节码;
25.步骤2:通过vandal工具将字节码反编译成操作码,操作码由若干操作码片段组成;
26.步骤3:提取操作码的切片特征;
27.本实施例中,通过word2vec模型提取每一段操作码特征,生成一个词向量矩阵,将词向量矩阵求和得到一个特征,将每个操作码片段的特征组成切片特征,该切片特征表示该合约的特征;
28.本实施例中,word2vec模型由cbow模型和skip-gram模型组成,包括输入层、隐藏层和输出层;cbow模型,用于通过上下文的内容预测中间的目标词,将当前词的上下文词语
的one-hot编码输入到输入层,分别乘以同一个中心词矩阵wv×n,得到各自1*n向量,其中,v为词汇表中的词汇数量,n为词向量维度;再将这些1*n向量取平均为一个1*n向量;将1*n向量乘以上下文矩阵uv×n得到一个1*v向量,将1*v向量softmax归一化后输出取每个词的概率向量1*v,将概率值最大的数对应的词作为预测词;若预测值与上下文的词不符,使用反向传播算法修正中心词矩阵wv×n和上下文矩阵uv×n;skip-gram模型,用于通过中心词来预测其上下文,将中心词的one-hot编码作为输入,为1*v向量;将1*v向量乘以中心词矩阵wv×n得到一个1*n向量;将1*n向量乘以上下文矩阵uv×n得到一个v维向量,将v维向量softmax归一化处理,概率最大的数对应的词为模型预测词,若模型的预测值与上下文的词不符,使用反向传播算法修正权重向量中心词矩阵wv×n和上下文矩阵uv×n;
29.在cbow模型中,在已知上下文w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
前提下,预测当前词w
(t)
,学习的目标函数p
cbow
为最大化对数似然公式;
30.p
cbow
=∑logp(w
(t)
|w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
);
31.在skip-gram模型中,在已知当前词w
(t)
,预测其上下文w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
,目标函数p
skip-gram
为:
32.p
skip-gram
=∑logp(w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
|w
(t)
)。
33.步骤4:针对切片特征,使用one-vs-rest模型和adaboost模型进行联合漏洞检测;漏洞包括可重入漏洞,整数溢出漏洞,异常处理漏洞,调用栈溢出漏洞,tx.origin漏洞,时间戳依赖漏洞和交易顺序依赖漏洞;
34.本实施例中,使用one-vs-rest模型和adaboost模型进行联合漏洞检测,是采用one-vs-rest模型将多分类问题转化为多个二进制分类问题,转换的思想是选择其中一个类别为阳性,并使所有其他类别为阴性,然后为每个二进制分类任务通过一个adaboost分类器,共计六个adaboost分类器进行分类,其分类结果被组合以提供多标签分类的最终结果。
35.请见图2,本实施例的one-vs-rest模型和adaboost模型,是训练好的模型;具体训练过程包括以下步骤:
36.(1)收集原始数据集及预处理;
37.收集以太坊智能合约,形成原始数据集;对原始数据进行预处理,通过智能合约漏洞检测工具oyente对数据进行打标签,对合约是否含有漏洞以及漏洞种类进行标记;通过solc命令将合约源码编译成字节码;
38.(2)将数据集通过vandal工具将源码的字节码反编译成操作码,该操作码由若干操作码片段组成;
39.由于操作码片段长度不一致,导致各个合约的特征长度不同,本实施例采用pca算法降维特征以及固定特征,采用补0原则(按照最长的特征长度,对其余数据特征进行补0)进行操作码片段归一化处理;
40.(3)通过word2vec提取每一段操作码特征,生成一个词向量矩阵,将词向量矩阵求和得到一个特征,将每个操作码片段的特征组成切片特征,该切片特征表示该合约的特征,组成特征数据集;
41.(4)对特征数据集使用过采样smote算法、欠采样smotetomek和smotenn算法从而得到3个训练数据集;
42.本实施例中,对特征数据集使用过采样smote算法,得到smote数据集;具体实现包括以下步骤:
43.1)对于数量少于阈值的样本中每一个样本a,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻;
44.2)根据样本不平衡比例设置一个采样比例以确定采样倍率n,对于每一个少数类样本a,从其k近邻中随机选择若干个样本,假设选择的近邻为b;
45.3)对于每一个随机选出的近邻b,分别与原样本a按照如下的公式构建新的样本c=a+rand(0,1)*|a-b|。
46.本实施例中,对特征数据集使用欠采样smotetomek算法,得到smotetomek数据集;具体实现包括以下步骤:
47.1)利用smote方法生成新的少数类样本,得到扩充后的数据集t;
48.2)剔除t中的tomeklinks对,清洗数据;
49.其中tomek links定义为相反类最近邻样本之间的一对连接,给定一个样本对(xi,xj),其中xi∈s
maj,
xj∈s
min
,记d(xi,xj)是样本xi和xj之间的距离,如果不存在任何样本xk,使得d(xi,xk)<d(xi,xj),那么样本对(xi,xj)被称为tomek links。
50.本实施例中,对特征数据集使用欠采样smotenn算法,得到smotenn数据集;具体实现包括以下步骤:
51.1)利用smote方法生成新的少数类样本,得到扩充后的数据集t;
52.2)对t中的每一个样本使用knn(一般k取3)方法预测,若预测结果与实际类别标签不符,则剔除该样本,清洗数据;
53.其中knn方法包括4个步骤:
①
准备数据,对数据进行预处理;
②
计算测试样本点到其他每个样本点的距离;
③
对每个距离进行排序,然后选择出距离最小的k个点;
④
对k个点所属的类别进行比较,据少数服从多数的原则,将测试样本点归入在k个点中占比最高的那一类。
54.(5)利用训练数据集训练one-vs-rest模型和adaboost模型;
55.本实施例中,训练one-vs-rest模型,具体实现包括以下步骤:
56.1)选择其中一个类别为正类,并使所有其他类别为负类;
57.2)为每个二分类任务训练一个adaboost分类器,最后训练六个adaboost分类器;
58.3)将六个分类器的结果组合以提供多标签分类的最终结果。
59.本实施例中,训练adaboost模型,具体实现包括以下步骤:
60.1)初始化训练数据的权值分布,每一个训练样本开始时都被赋予相同的权重:
61.d1=(w
11
,w
12
,w
13
...,w
1i
,w
1n
);
62.其中w
1j
表示第j个训练样本开始时的权重,n表示样本总数,1≤j≤n;
63.2)进行m次迭代,每次迭代进行以下步骤:
64.a.使用具有权值分布的dm的训练数据集进行学习,得到基分类器gm(x):
65.gm(x):x
→
{-1,+1};
66.b.计算gm(x)在训练数据集上的分类误差率em:
67.68.其中gm(xi)表示基分类器gm(x)在训练集上xi上的分类结果,yi表示训练数据xi的真实分类,w
m,i
表示第m次迭代时样本xi的权值,p()表示某个事件的概率,i()表示括号内事件为真时结果为1,反之结果为0;
69.c.计算gm(x)的系数,得到基本分类器在最终分类器中的权重αm:
[0070][0071]
其中em表示gm(x)在训练数据集上的分类误差率;
[0072]
d.更新训练数据集的权值分布:
[0073]dm+1
=(w
m+1,1
,w
m+1,2
,w
m+1,3
,...,w
m+1,i
,w
m+1,n
);
[0074][0075][0076]
其中w
m+1,i
表示第i个训练样本迭代m次后的更新权重;zm表示规范化因子,exp()表示以自然常数e为底的指数函数;
[0077]
(3)组合全部的基分类器,最终的分类结果由全部的基分类器表示:
[0078][0079]
其中gm(x)为基分类器,αm为基本分类器gm(x)在最终分类器的权重,m为迭代次数。
[0080]
本发明基于word2vec和adaboost实现了一种基于adaboost的智能合约多标签漏洞检测,该方案主要研究智能合约的操作码,操作码由多个操作码片段组成。由于操作码中包括该合约执行的逻辑,通过word2vec和pca提取操作码的序列切片特征,切片特征作为adaboost模型的输入进行学习训练,因此可以有效提升智能合约安全漏洞的检测性能。
[0081]
上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
技术特征:
1.一种基于adaboost的智能合约多标签漏洞检测方法,其特征在于,包括以下步骤:步骤1:对于待检测的智能合约,提取其字节码;步骤2:将字节码反编译成操作码;步骤3:提取操作码的切片特征;步骤4:针对切片特征,使用one-vs-rest模型和adaboost模型进行联合漏洞检测;所述漏洞包括可重入漏洞,整数溢出漏洞,异常处理漏洞,调用栈溢出漏洞,tx.origin漏洞,时间戳依赖漏洞和交易顺序依赖漏洞;所述使用one-vs-rest模型和adaboost模型进行联合漏洞检测,是采用one-vs-rest模型将多分类问题转化为多个二进制分类问题,转换的思想是选择其中一个类别为阳性,并使所有其他类别为阴性,然后为每个二进制分类任务通过一个adaboost分类器,共计六个adaboost分类器进行分类,其分类结果被组合以提供多标签分类的最终结果。2.根据权利要求1所述的基于adaboost的智能合约多标签漏洞检测方法,其特征在于:步骤1中,通过solc命令提取字节码。3.根据权利要求1所述的基于adaboost的智能合约多标签漏洞检测方法,其特征在于:步骤2中,通过vandal工具将字节码反编译成操作码,所述操作码由若干操作码片段组成。4.根据权利要求1所述的基于adaboost的智能合约多标签漏洞检测方法,其特征在于:步骤3中,通过word2vec模型提取每一段操作码特征,生成一个词向量矩阵,将词向量矩阵求和得到一个特征,将每个操作码片段的特征组成切片特征,该切片特征表示该合约的特征;所述word2vec模型,由cbow模型和skip-gram模型组成,包括输入层、隐藏层和输出层;所述cbow模型,用于通过上下文的内容预测中间的目标词,将当前词的上下文词语的one-hot编码输入到输入层,分别乘以同一个中心词矩阵wv×
n
,得到各自1*n向量,其中,v为词汇表中的词汇数量,n为词向量维度;再将这些1*n向量取平均为一个1*n向量;将1*n向量乘以上下文矩阵uv×
n
得到一个1*v向量,将1*v向量softmax归一化后输出取每个词的概率向量1*v,将概率值最大的数对应的词作为预测词;若预测值与上下文的词不符,使用反向传播算法修正中心词矩阵wv×
n
和上下文矩阵uv×
n
;所述skip-gram模型,用于通过中心词来预测其上下文,将中心词的one-hot编码作为输入,为1*v向量;将1*v向量乘以中心词矩阵wv×
n
得到一个1*n向量;将1*n向量乘以上下文矩阵uv×
n
得到一个v维向量,将v维向量softmax归一化处理,概率最大的数对应的词为模型预测词,若模型的预测值与上下文的词不符,使用反向传播算法修正权重向量中心词矩阵wv×
n
和上下文矩阵uv×
n
;在cbow模型中,在已知上下文w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
前提下,预测当前词w
(t)
,学习的目标函数p
cbow
为最大化对数似然公式;p
cbow
=∑logp(w
(t)
|w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
);在skip-gram模型中,在已知当前词w
(t)
,预测其上下文w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
,目标函数p
skip-gram
为:p
skip-gram
=∑logp(w
(t-2)
,w
(t-1)
,w
(t+1)
,w
(t+2)
|w
(t)
)。5.根据权利要求1-4任意一项所述的基于adaboost的智能合约多标签漏洞检测方法,其特征在于:所述one-vs-rest模型和adaboost模型,是训练好的模型;具体训练过程包括以下步骤:
(1)收集原始数据集及预处理;收集以太坊智能合约,形成原始数据集;对原始数据进行预处理,通过智能合约漏洞检测工具oyente对数据进行打标签,对合约是否含有漏洞以及漏洞种类进行标记;通过solc命令将合约源码编译成字节码;(2)将数据集通过vandal工具将源码的字节码反编译成操作码,该操作码由若干操作码片段组成;采用pca算法降维特征以及固定特征,采用补0原则进行操作码片段归一化处理;(3)通过word2vec提取每一段操作码特征,生成一个词向量矩阵,将词向量矩阵求和得到一个特征,将每个操作码片段的特征组成切片特征,该切片特征表示该合约的特征,组成特征数据集;(4)对特征数据集使用过采样smote算法、欠采样smotetomek和smotenn算法从而得到3个训练数据集;(5)利用训练数据集训练one-vs-rest模型和adaboost模型;所述训练one-vs-rest模型,具体实现包括以下步骤:1)选择其中一个类别为正类,并使所有其他类别为负类;2)为每个二分类任务训练一个adaboost分类器,最后训练六个adaboost分类器;3)将六个分类器的结果组合以提供多标签分类的最终结果。所述训练adaboost模型,具体实现包括以下步骤:1)初始化训练数据的权值分布,每一个训练样本开始时都被赋予相同的权重:d1=(w
11
,w
12
,w
13
...,w
1j
,w
1n
);其中w
1j
表示第j个训练样本开始时的权重,n表示样本总数,1≤j≤n;2)进行m次迭代,每次迭代进行以下步骤:a.使用具有权值分布的d
m
的训练数据集进行学习,得到基分类器g
m
(x):g
m
(x):x
→
{-1,+1};b.计算g
m
(x)在训练数据集上的分类误差率e
m
:其中g
m
(x
i
)表示基分类器g
m
(x)在训练集上x
i
上的分类结果,y
i
表示训练数据x
i
的真实分类,w
m,i
表示第m次迭代时样本x
i
的权值,p()表示某个事件的概率,i()表示括号内事件为真时结果为1,反之结果为0;c.计算g
m
(x)的系数,得到基本分类器在最终分类器中的权重α
m
:其中e
m
表示g
m
(x)在训练数据集上的分类误差率;d.更新训练数据集的权值分布:d
m+1
=(w
m+1,1
,w
m+1,2
,w
m+1,3
,...,w
m+1,i
,w
m+1,n
););其中w
m+1,i
表示第i个训练样本迭代m次后的更新权重;z
m
表示规范化因子,exp()表示以
自然常数e为底的指数函数;(3)组合全部的基分类器,最终的分类结果由全部的基分类器表示:其中g
m
(x)为基分类器,α
m
为基本分类器g
m
(x)在最终分类器的权重,m为迭代次数。6.根据权利要求5所述的基于adaboost的智能合约多标签漏洞检测方法,其特征在于:所述对特征数据集使用过采样smote算法,得到smote数据集;具体实现包括以下步骤:(1)对于数量少于阈值的样本中每一个样本a,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻;(2)根据样本不平衡比例设置一个采样比例以确定采样倍率n,对于每一个少数类样本a,从其k近邻中随机选择若干个样本,假设选择的近邻为b;(3)对于每一个随机选出的近邻b,分别与原样本a按照如下的公式构建新的样本c=a+rand(0,1)*|a-b|。7.根据权利要求6所述的基于adaboost的智能合约多标签漏洞检测方法,其特征在于:所述对特征数据集使用欠采样smotetomek算法,得到smotetomek数据集;具体实现包括以下步骤:(1)利用smote方法生成新的少数类样本,得到扩充后的数据集t;(2)剔除t中的tomek links对,清洗数据;其中tomek links定义为相反类最近邻样本之间的一对连接,给定一个样本对(x
i
,x
j
),其中x
i
∈s
maj
,x
j
∈s
min
,记d(x
i
,x
j
)是样本x
i
和x
j
之间的距离,如果不存在任何样本x
k
,使得d(x
i
,x
k
)<d(x
i
,x
j
),那么样本对(x
i
,x
j
)被称为tomek links。8.根据权利要求6所述的基于adaboost的智能合约多标签漏洞检测方法,其特征在于:所述对特征数据集使用欠采样smotenn算法,得到smotenn数据集;具体实现包括以下步骤:(1)利用smote方法生成新的少数类样本,得到扩充后的数据集t;(2)对t中的每一个样本使用knn方法预测,若预测结果与实际类别标签不符,则剔除该样本,清洗数据;其中knn方法包括4个步骤:
①
准备数据,对数据进行预处理;
②
计算测试样本点到其他每个样本点的距离;
③
对每个距离进行排序,然后选择出距离最小的k个点;
④
对k个点所属的类别进行比较,据少数服从多数的原则,将测试样本点归入在k个点中占比最高的那一类。9.一种基于adaboost的智能合约多标签漏洞检测系统,其特征在于,包括以下模块:字节码提取模块,用于对于待检测的智能合约,提取其字节码;操作码提取模块用于将字节码反编译成操作码;切片特征提取模块,用于提取操作码的切片特征;漏洞检测模块,用于针对切片特征,使用one-vs-rest模型和adaboost模型进行联合漏洞检测;所述漏洞包括可重入漏洞,整数溢出漏洞,异常处理漏洞,调用栈溢出漏洞,tx.origin漏洞,时间戳依赖漏洞和交易顺序依赖漏洞;所述使用one-vs-rest模型和adaboost模型进行联合漏洞检测,是采用one-vs-rest模型将多分类问题转化为多个二进制分类问题,转换的思想是选择其中一个类别为阳性,并使所有其他类别为阴性,然后为每个二进制分类任务通过一个adaboost分类器,共计六个
adaboost分类器进行分类,其分类结果被组合以提供多标签分类的最终结果。
技术总结
本发明公开了一种基于AdaBoost的智能合约多标签漏洞检测方法及系统,首先对于待检测的智能合约,提取其字节码;然后将字节码反编译成操作码;接着提取操作码的切片特征;最后针对切片特征,使用One-Vs-Rest模型和AdaBoost模型进行联合漏洞检测;本发明有效提升了以太坊智能合约安全漏洞的检测性能,准确度较高。度较高。度较高。
技术研发人员:张明武 黄梦
受保护的技术使用者:湖北工业大学
技术研发日:2023.04.13
技术公布日:2023/8/5
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/