本发明属于软件工程及智能合约安全领域,基于分类器链的方法解决智能合约多漏洞同时检测的问题。
背景技术:
1、目前,针对智能合约漏洞检测的研究大致有两种类型,传统方法以及基于深度学习的方法。
2、传统方法依据其技术路线可分为形式化验证、符号执行、模糊测试等方法,形式化验证通过形式化语言把合约逻辑转化为形式化模型,配以严谨的逻辑或数学证明以验证合约正确性。符号执行是为合约的所有可执行路径建立约束,得到约束求解器,即可验证新输入是否有漏洞。模糊测试是将自动或半自动化生成的随机数据输入到合约中,检测异常。传统的方法依赖专家定义的固定规则,自动化程度低。
3、基于深度学习的智能合约漏洞检测方法,从处理思路上来看,也大致分为两种类型;其一是将智能合约代码视为特殊文本,使用word2vec、n-gram、fsattext等自然语言处理技术对智能合约的代码进行特征提取,再使用深度学习模型如lstm、gru、bilstm、cnn、bigru等对智能合约进行漏洞检测;另外一种是将智能合约代码转化为中间表示,如抽象语法树、数据流图以及控制流图等等。但是,大多数方法都不能同时检测多种漏洞或者是漏洞检测种类不足。
4、为了提高智能合约漏洞检测任务的覆盖率,本发明专利提出了结合类不平衡处理及分类器链技术的智能合约多漏洞检测方法,首先采用多标签类不平衡处理技术对数据集进行处理,其次,基于分类器链技术构建了智能合约多漏洞检测模型mvdcc(multi-vulnerability detection based on classification chain)。
5、智能合约漏洞数据集往往严重类不平衡,不仅漏洞合约相对于正常合约比例极小,各漏洞类型之间的合约数量分布也严重不均。针对合约数据集的类不平衡问题,本发明采用多标签少数类过采样技术(multi label synthetic minority ove-samplingtechnique,mlsmote)对数据集进行处理:通过类不平衡比值这一指标筛选出少数类合约,采用最近邻思想合成合约特征即标签,解决多漏洞类间不平衡问题。
6、为提高漏洞检测覆盖率,本发明采用多路径adaboost结合分类器链的方法(adaboost.c2)进行智能合约多漏洞检测。adaboost.c2采用adaboost方法对每种漏洞特征进行学习,以增强(boosting)技术提升单漏洞检测的性能;同时结合分类器链技术处理多漏洞检测,以体现不同漏洞类型的相关性,训练过程中根据损失函数值动态调整链结构,从而优化检测精度。
技术实现思路
1、本发明提出一种结合类不平衡处理及分类器链技术的智能合约多漏洞检测方法,针对智能合约数据集普遍存在的类不平衡问题,采用mlsmote的处理方式减小多漏洞的类间不平衡问题;使用adaboost.c2方法对智能合约进行检测,解决现有分类工具检测的覆盖率不足的问题,adaboost.c2使用多路径的adaboost对每种漏洞进行训练,考虑不同漏洞之间的差异性,同时又使用分类器链的结构将不同漏洞进行链接,考虑漏洞相关性。
2、详细步骤如下所示:
3、(1)特征提取阶段:将数据集中的字节码反编译为操作码,再使用词频-逆文档频率对智能合约操作码进行特征提取。
4、1)转化操作码。智能合约源代码经过solc编译器编译会生成十六进制的字节码,再利用反编译的表,将字节码转化为操作码。例如:mstore对应0x52、sstore对应0x55等。
5、2)计算词频-逆文档频率(tf-idf)。tf指“词频”(term frequency,tf);idf指“逆文档频率”(inverse document frequency,idf),计算公式如下。
6、
7、
8、tf-idf=词频(tf)×逆文档频率(idf) (3)
9、(2)类不平衡处理阶段:使用mlsmote方法进行处理,先筛选出少数类样本,通过少数类样本建立一个最近邻集合;再生成合约特征以及标签。
10、1)筛选少数类。使用衡量数据集类不平衡的指标irlbl(每个标签的不平衡比值)和meanir(平均不平衡比值)进行筛选,irlbl大于meanir的标签为少数类标签,添加到尾标签的集合中。irlbl和meanir的计算公式如下:
11、
12、
13、其中,yi是第i个合约的标签集合。λ′是多数标签与λ是少数类标签。irlbl的值越大,相关标签的不平衡水平越高。
14、得到尾标签集合后,将尾标签中有标签的合约索引抽取出来,组成少数类合约子集。
15、2)生成新合约。生成新合约包含两部分:生成合约特征以及生成合约标签。合约特征采用k近邻原则生成,标签采用投票生成。
16、①新合约特征生成。将上部生成的少数类合约子集作为输入,找到少数类合约的k个最近邻,以距离为标准进行排序,新合约的特征值为原来的特征值加上最近邻特征与原特征的差值乘以一个(0,1)之间的随机数。
17、②新合约标签生成。在k近邻与原有样本之间进行投票,在k+1个合约中超过半数为有标签则生成的新合约为有此种漏洞。
18、最终输出结果为原有合约加上新生成的合约。
19、(3)多漏洞检测阶段:使用adaboost.c2方法进行检测,将adaboost和分类器链(classifier chain,cc)进行结合,为每个漏洞建立adaboost模型进行单独优化,将多个adaboost按照某种顺序链接,将部分检测性能好的漏洞输出结果输入到下一个分类器中。每个漏洞的训练都以汉明距离作为损失函数,不同漏洞建立不同boost路径进行训练,保证漏洞之间的差异性,训练过程分为以下几步:
20、1)boosting训练过程。使用svm作为基分类器,进行t轮训练,选定一个错误率阈值δ,当错误率小于阈值时停止训练,在每轮训练中使用汉明距离为目标函数更新弱学习器的权重和数据分布。
21、①adaboost开始时,为训练数据集中的每个样本分配相等的权重。假设有n个样本,每个样本的初始权重为1/n。在adaboost的每一轮迭代中,一个新的弱学习器被训练。训练过程主要关注在前一轮中被错误分类的样本,以便修正模型的缺陷。
22、②在训练完弱学习器后,根据它们的性能更新每个样本的权重。被正确分类的样本权重减小,而被错误分类的样本权重增加。
23、
24、其中,n为合约数量,q为标签数量,y为预测值。
25、
26、其中,是错误率,α是学习器权重。
27、
28、其中result为预测结果,result为1代表有漏洞,为0代表无漏洞。
29、2)cc训练过程。使用错误率对分类器进行排序,得到每轮训练中的分类器链序,每轮训练都按照新权重进行排序,动态调整链序防止错误传播,将已经训练过的分类器索引放到新集合中得到新的训练数据,一起输入到之后的分类器中,所有的分类器训练完成后,更新数据分布与错误率。数据分布与错误率按照boosting训练方法更新。
30、
31、其中,为第t轮训练中第q个标签的错误率,qt为分类器链的链序。
32、本发明的创造性主要体现在:
33、(1)针对合约数据集存在的类不平衡问题,采用多标签合成少数类过采样技术(mlsmote)进行处理。该方法通过比较类不平衡比例这一指标,筛选出少数类的实例,采用最近邻思想合成数据特征及标签,可有效地改善少数类漏洞的不平衡情况,提高后续检测效果。
34、(2)对智能合约的多漏洞检测问题,采用多路径adaboost结合分类器链(adaboost.c2)方法解决,多路径adaboost使用优化的汉明损失作为指导链连接的顺序,动态调整链结构,按损失值大小确定漏洞类型排序,损失值越小的漏洞类型排序越靠前,防止分类器链错误传输,设置合适的学习率对于提前达到训练要求的路径提前停止提高效率,使用分类器链的结构串联adaboost的分类器,在利用了标签的相关性的同时保证了模型精度。
1.一种结合类不平衡处理及分类器链技术的智能合约多漏洞检测方法,其特征在于,该方法的实现过程如下:
2.根据权利要求1所述的一种结合类不平衡处理及分类器链技术的智能合约多漏洞检测方法,其特征在于,该方法的具体实施步骤如下:
