基于深度神经网络的软件漏洞自动分类方法与流程

文档序号:17928137发布日期:2019-06-15 00:34阅读:447来源:国知局
基于深度神经网络的软件漏洞自动分类方法与流程

本发明属于计算机软件安全领域,具体地涉及一种基于深度神经网络的软件漏洞自动分类方法。



背景技术:

随着信息技术的快速发展,互联网与计算机的应用给各行各业带来了极大的便利,同时也带来了巨大的风险和隐患。近些年来,伴随着各个行业信息化程度的提高,信息安全问题也日渐凸显。漏洞是指系统的软硬件缺陷,可被非授权的人员非法利用。一旦信息系统的漏洞被恶意攻击利用,信息系统的安全性将会有很大的风险,可能会造成不可估量的后果。近些年来,漏洞的种类和数量逐渐增多,因此对软件漏洞的管理和分析变得越来越重要。如果能够对漏洞进行有效地分类管理,不但可以提高漏洞的修复和管理的效率,也可以减少系统被攻击和破坏的风险,对系统的安全性能尤为重要。由于软件漏洞在网络安全攻击事件中扮演着重要的角色,使得相关安全研究员针对软件漏洞分类的研究越来越多。目前主要有传统的人工漏洞分类方法和自动化漏洞分类方法。

传统的risos漏洞分类方法,它所针对的特性是计算机的操作系统,主要从攻击的角度将操作系统的漏洞分为七类并且描述了如何利用漏洞。pa漏洞分类方法,不仅对操作系统漏洞进行了研究,而且还针对应用程序存在的漏洞进行了分类。

近年来,机器学习算法被广泛应用于各个研究领域,并取得了进展,同样将机器学习应用于软件漏洞分类上形成了自动漏洞分类方法,并取得了较好的效果。基于lda模型的svm分类方法被boshuai等人应用于漏洞分类领域,构建的基于主题模型的svm可以充分利用分布的漏洞数量进行分类,实验证明了svm在漏洞分类上取得了较好的效果。dumiduwijayasekara等人通过使用来自错误描述的文本信息,对bayes分类器进行了测试,分析说明了bayes分类器根据漏洞描述文本信息实现分类上的可行性。sarangna等人提出了一种使用bayes分类器将无法提供足够信息的cve条目进行分类的方法。mariangawron等人又将naivebayes算法和简单的人工神经网络算法应用于漏洞分类,并在相同的数据集上进行对比,对比实验结果表明人工神经网络算法在漏洞分类效果上要优于naivebayes算法。

但是,由于软件漏洞的种类和数量比较多,每一条漏洞的描述信息相对较少,使得每条漏洞在生成的词向量空间上呈现出高维度和稀疏的特点。这些基于机器学习算法漏洞自动分类方法在处理高维和稀疏问题上表现的效果不是很好,同时忽略了特定的漏洞信息,而使得软件漏洞分类的准确性不高。基于深度神经网络(dnn)可以提高软件漏洞分类的准确性,因此,提出了一种基于深度神经网络(dnn)的软件漏洞自动分类方法。



技术实现要素:

本发明针对软件漏洞分类进行研究,在国际公认的美国国家计算机通用漏洞数据库(nationalvulnerabilitydatabase,nvd)中的漏洞数据进行软件漏洞分类研究。本发明能够适应实时更新的软件漏洞数据,对漏洞进行有效地分类管理。本发明主要包括5个部分:漏洞预处理、特征词集提取、词向量空间模型(vsm)建立、分类器训练和漏洞分类。首先对nvd漏洞信息进行提取,然后使用分词、词性还原和停用词过滤等方法对漏洞进行预处理,其次使用基于词频逆向文档频率(tf-idf)和信息增益(ig)相融合的算法进行特征选择,获得最优特征词集,然后根据特征词集将漏洞向量化表示,接下来构建深度神经网络模型(dnn)并对其进行训练,最后对测试数据集进行漏洞分类。本发明在国际通用漏洞数据库nvd上进行实验,能够有效的提高软件漏洞分类的效果,对日益增多的软件漏洞种类和数量进行有效的分类管理和研究分析显得尤为重要。

本申请公开了一种基于深度神经网络(dnn)的软件漏洞自动分类方法,包括以下步骤:

s1,漏洞描述信息集合中包括多条漏洞描述信息,对漏洞信息进行预处理后形成词集列表,预处理包括:对漏洞描述信息进行分词、词性还原和停用词过滤;

s2,对样本漏洞描述信息集合将tf-idf算法和信息增益算法相融合对经过分词、词性还原和停用词过滤后的漏洞描述信息中的每个词的权重进行计算,获取重要特征词集列表,具体包括步骤:

s21,遍历词集列表中的每个词,对词集列表进行词统计,存储在词统计字典里;

s22,遍历词统计字典,计算每个词的词频值存入词频字典,计算每个词的逆向文件频率值,存入逆向文件频率字典,再计算每个词的tf-idf权重值存入tf-idf字典中;

s23,按每个词的tf-idf权重值对tf-idf字典进行降序排序,选择前n个词作为特征词集,将特征词集存入特征列表;

s24,遍历特征列表,根据漏洞类别数目划分特征词集并将子集并存入特征子集列表中,每个漏洞类别对应一个特征子集,然后计算相应漏洞类别对应的样本数目与样本漏洞描述信息集合中样本总数目的比例作为漏洞类别出现的概率;

s25,采用信息增益算法计算特征列表中每个词的经验条件熵存入熵值字典,再计算特征列表中每个词的信息增益值,将每个词和对应的信息增益值存入信息增益值字典;

s26,对信息增益值进行权重处理后,将信息增益值字典进行降序排序,选择前m个词作为重要特征词集,将重要特征词集存入重要特征词集列表;

s3,生成词向量空间,把每一条漏洞描述信息表述成一个m维的向量,m是重要特征词集中特征词的数量;

对于样本漏洞描述信息集合中每一个样本漏洞描述信息进行向量化后,形成样本集合,将样本集合分为训练集和测试集;

对于需要进行分类的漏洞描述信息集合中每一个样本漏洞描述信息进行向量化后,形成分类集合;

s4,使用dnn模型获得软件漏洞分类器,具体步骤包括:

s41,输入训练集,初始化权重系数矩阵w和偏置向量b

s42,对每个神经元xi进行线性计算,计算公式为:其中,xi为每个神经元,wi为每个神经元对应的权值矩阵,b是偏置向量,m为神经元总数,z是神经元线性计算输出,使用tanh激活函数进行激活运算,然后根据前向传播算法逐层计算得到最终输出结果al=σ(zl)=σ(wlal-1+bl);

s43,对最终输出结果使用softmax激活函数给不同的最终输出结果分配概率,将多个神经元的输出,映射到(0,1)区间内;

s44,选择交叉熵作为损失函数,来度量训练集计算出的输出和真实的训练集输出之间的损失;

s45,选择批量梯度下降算法作为优化算法,极小化损失函数,设置批次大小、迭代阈值和学习率α,其中0<α≤1,对dnn模型进行迭代训练;

s46,使用训练集对dnn分类器进行训练,使用测试集对dnn分类器进行测试,当达到迭代次数后结束训练,选择分类准确率最大的dnn分类器作为软件漏洞分类器;

s5,漏洞分类

对新的漏洞描述信息集合进行分类时,首先使用步骤s1对新的漏洞描述信息集合进行预处理,然后根据步骤s3将新的漏洞描述信息集合中的每一个漏洞描述信息表述成一个m维的向量构成分类集;将分类集合输入到步骤s4中的软件漏洞分类器,输出新的漏洞描述信息集合中漏洞描述信息的分类。

优选的,词频tf计算公式:

其中,tfij表示文件j中单词i的重要性,i和j都是正整数,ni,j表示该词在文件j中出现的频数,∑knk,j表示所有词的词频之和;

逆向文件频率idf计算公式:

其中,idfi表示单词i的逆向文件频率,|d|表示语料库中的文件总数,|{j:ti∈dj}|表示包含词语ti的文件数目;

每个单词的权重tf-idf公式:

tf-idf=tfij*idfi(3)

tf-idf值与单词在文件中出现的次数成正比,与单词在语料库中出现的频率成反比。

优选的,步骤s41中使用标准差为0.1的正态分布函数初始化权重系数矩阵w,偏置向量b的初始值为0.1。

优选的,步骤s45中批次大小为100,迭代阈值为20,学习率为0.2。

优选的,步骤s3中把每一条漏洞描述信息表述成一个m维的向量,一个漏洞描述信息vi的具体表示方式为:vi={t1,t2,…,tr,…,tm};其中,r=1,2,…,m,r为正整数,m是特征词的个数,tr取值为0或1,表示词对应的向量值,当漏洞描述信息中包含对应重要特征词集中的第r个词时,tr=1,否则tr=0。

本发明是基于词频逆向文档频率(tf-idf)和信息增益(ig)算法构建的深度神经网络(dnn)漏洞自动分类模型(tfi-dnn)。使用tf-idf和ig算法对漏洞描述信息进行特征提取能够获得最优特征词集,降低了高维词向量空间的维度,同时也利用了深度神经网络自动提取特征的优势。与上述的其他发明相比,本发明能更好的提取漏洞信息,同时也能更好的处理词向量空间的高维性和稀疏性。从而在准确率、召回率、精度等多维评价指标中表现出较好性能。

与现有技术相比,本发明的优点在于:

1.本发明能够适应不断更新的软件漏洞数据集(包括漏洞数量和种类的增加)。

2.本发明使用了融合的特征词集提取方法,达到很好的降维效果。

3.本发明将深度神经网络应用于软件漏洞分类领域,充分利用神经网络自动特征提取的优势,获得较好的分类器。

4.本发明能够有效地处理词向量空间的高维性和稀疏性。在准确率、召回率、精度等多维评价指标中表现出较好性能。

附图说明

图1基于深度神经网络的软件漏洞自动分类方法;

图2深度神经网络(dnn)模型。

具体实施方式

本发明针对软件漏洞自动分类研究,主要分为5个部分:数据预处理、特征词集获取、生成词向量空间、构建dnn模型和漏洞分类。详细算法框架及流程图如图1所示:

数据预处理、特征词集获取、生成词向量空间、构建dnn模型和漏洞分类详细介绍如下:

1)数据预处理

(1)对漏洞描述信息进行分词

漏洞描述信息集合中包括多条漏洞描述信息,分词是指将连贯的漏洞描述信息切分成一个一个的单词,即将整个漏洞描述信息转换为可以通过统计学进行统计的最小语义单元,这是漏洞文本预处理过程中的第一步,也是最重要的一步。对于英文描述的漏洞文本,分词是非常简单的,只需要通过识别文本之间的空格或者标点符号即可将整条漏洞描述划分成一个一个的单词。

(2)对漏洞描述信息进行词性还原

词性还原是指将经过分词得到的单词集合中非词根形式转换为词根形式,即将英文描述中的动词根据人称不同而变化的单词转换为动词原形;将名词的复数形式转换为名词的单数形式;将动词的ing形式转换为动词原形等。从数据挖掘的角度观察,这些词都应该属于同一类的语义相近的词。比如“attack”,“attacking”,“attacked”则可划分为同属于一个词,用词根形式“attack”表示即可。

(3)对漏洞描述信息进行停用词过滤

停用词过滤是指在文本中频繁出现且对文本信息的内容或分类类别贡献不大甚至无贡献的词语,如常见的介词、冠词、助词、情态动词、代词以及连词等。同时针对漏洞分类的漏洞文本中有些词如“information”,“security”,“vulnerability”等词对于漏洞分类来说毫无意义,因此这类词语也应该被过滤掉。通过参考通用停用词表,并结合漏洞描述信息自身的特点,根据词频统计构建针对漏洞分类专属的专用停用词表实现频繁无用词的过滤。

(4)对漏洞描述信息经过分词、词性还原和停用词过滤后形成漏洞描述信息词集。

对于样本漏洞描述信息集合,还需要将漏洞描述信息词集存入词集列表words_list,词集列表words_list包括样本漏洞描述信息中所使用的有意义的所有基本单词。

2)特征词集获取

(1)使用tf-idf算法对经过分词、词性还原和停用词过滤后的漏洞描述信息中的每个词的权重进行计算,并将结果按降序排列,根据权重值获取候选特征词集。

词频-逆向文件频率算法(tf-idftermfrequency–inversedocumentfrequency)是一种基于统计方法的常用加权技术,基于是词频-逆向文件频率。

词频tf计算公式如下:

其中,tfij表示文件j中单词i的重要性,i和j都是正整数,ni,j表示该词在文件j中出现的频数,∑knk,j表示所有词的词频之和。

逆向文件频率idf计算公式如下:

其中,idfi表示单词i的逆向文件频率,|d|表示语料库中的文件总数,|{j:ti∈dj}|表示包含词语ti的文件数目。

每个单词的权重tf-idf公式如下:

tf-idf=tfij*idfi(3)

tf-idf用以评估字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

(2)采用信息增益算法(ig算法)计算候选特征词集中的每个词的信息增益值,同样将结果按降序排列,根据信息增益值对候选特征词集进行降维,获得最优特征词集。

ig(informationgain)是信息增益表示得知特征x的信息而使得类y的信息的不确定性减少的程度。设训练数据集为d,|d|表示其样本容量,即样本个数。设有k个类ck,k=1,2,…,k,|ck|为属于类ck的样本个数,设特征a有n个不同的取值{a1,a2,…,an},根据特征a的取值将d划分为n个子集d1,d2,…,dn,|di|为di的样本个数,记子集di中属于类ck的样本的集合为dik,即dik=di∩dk,|dik|为dik的样本个数。

数据集d的经验熵h(d)计算公式如下:

特征a对数据集d的经验条件熵h(d|a)计算公式如下:

每个特征的信息增益计算公式如下:

g(d,a)=h(d)-h(d|a)(6)

根据信息增益准则的特征选择方法,计算出每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。

(3)特征词集提取算法描述

输入:样本漏洞描述信息集合经过分词、词性还原和停用词过滤后形成的词集列表words_list

输出:最优特征词集feature_words

①遍历词集列表words_list中的每个词,对词集列表words_list进行词统计,存储在词统计字典doc_frequency里,词统计字典doc_frequency中包括遍历词集列表words_list中的每个词在漏洞描述信息集合中出现的次数。

②遍历词统计字典doc_frequency,根据公式(1)计算每个词的词频值tfij存入词频字典word_tf,根据公式(2)计算每个词的逆向文件频率值idfi值存入逆向文件频率字典word_idf,根据公式(3)计算每个词的tf-idf权重值存入tf-idf字典word_tf_idf中;

③按每个词的tf-idf权重值对tf-idf字典word_tf_idf进行降序排序,选择前n个词作为特征词集,将特征词集存入特征列表features_vocabset。

④遍历特征列表features_vocabset,根据样本漏洞描述信息集合中漏洞的类别数目划分features_vocabset为多个特征子集,并将特征子集并存入特征子集列表subdataset中,每个类别对应一个特征子集,然后计算相应类别对应的样本数据与样本漏洞描述信息集合中样本总数目的比例作为漏洞类别出现的概率prob。

⑤根据公式(4)和(5)并利用④中求得的概率prob计算特征列表features_vocabset每个词的经验条件熵存入熵值字典newentropy,根据公式(6)计算特征列表features_vocabset中每个词的信息增益值info_gain,将每个词和对应的信息增益值存入信息增益值字典info_gain_dict

⑥对信息增益值info_gain进行权重处理后,再对信息增益值字典info_gain_dict进行降序排序,选择前m个词作为重要特征词集,m为正整数,将重要特征词集存入重要特征词集列表feature_words

⑦返回重要特征词集列表feature_words

3)生成词向量空间

把每一条漏洞描述信息表述成一个m维的向量(m是重要特征词集中特征词的数量)。所有的漏洞描述信息通过这个m维的多维空间进行向量化后,漏洞描述信息的向量表示即建立完成,。每一条漏洞描述信息就可以看成是高维空间中的一个点,其中一个漏洞描述信息vi的表示方式为:

vi={t1,t2,…,tr,…,tm}(7)

其中,r=1,2,…,m,r为正整数,m是特征词的个数,和漏洞向量空间的维数相一致,tr取值为0或1,表示词对应的向量值,当漏洞描述信息中包含对应重要特征词集中的第r个词时,tr=1,否则tr=0。

对于样本漏洞描述信息集合中每一个样本漏洞描述信息进行向量化后,形成样本集合,将样本集合分为训练集和测试集用于下面dnn模型的构建。

对于需要进行分类的漏洞描述信息集合中每一个样本漏洞描述信息进行向量化后,形成分类集合。

4)构建深度神经网络(dnn)模型

(1)dnn模型描述

dnn模型由一个输入层、多个隐藏层和一个输层组成,其输入为实例的特征向量,输出为实例的类别。主要包括两个传播过程,分别是前向传播和反向传播。

前向传播算法也就是利用若干个权重系数矩阵w,偏置向量b和输入值向量x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,直到运算到输出层,得到最终输出结果。计算方法如下:

首先初始化a1=x,然后逐层循环forl=2tol,计算:

al=σ(zl)=σ(wlal-1+bl)(8)

其中,l为神经网络总层数,w为隐藏层和输出层对应的矩阵,b为偏置向量,x为输入值向量,al为最终输出结果,σ()表示tanh激活函数,zl表示第l层神经元的线性计算结果,forl=2tol表示l从2开始循环计算公式(8),每次增加1,直到l为l后循环结束。

反向传播算法是在所有的参数上使用梯度下降算法使损失函数达到一个较小的值,最终求得损失最小的模型的所有参数,计算公式如下:

其中,α表示学习率,θi表示第i个参数,m表示样本的个数,yj表示样本j的真实类别,hθ(xj)表示第j个样本的输出类别,表示样本j的第i个特征。

本申请使用批量梯度下降算法对dnn模型进行调优。使dnn模型在训练数据集上的交叉熵损失函数最小。

交叉熵是刻画两个概率分布之间的距离,即刻画的是实际输出(概率)与期望输出(概率)的距离。计算公式如下:

其中,y为期望的输出,a为神经元的实际输出,n为样本总数,x为每条样本。

交叉熵的值越小,表明两个概率分布就越接近,它是分类问题中使用比较广泛的一种损失函数。

dnn模型传播过程如下:

输入:经过向量化表示后的训练集

输出:dnn模型的系数矩阵w和偏置向量b

①输入训练数据集,初始化权重系数矩阵w和偏置向量b

②对每个神经元xi进行线性计算,计算公式为:其中,xi为每个神经元,wi为每个神经元对应的权值矩阵,b是偏置向量,m为神经元总数,z是神经元线性计算输出,使用tanh激活函数进行激活运算,然后根据前向传播算法逐层计算得到最终输出结果al=σ(zl)=σ(wlal-1+b1)

③对最终输出结果使用softmax激活函数给不同的最终输出结果分配概率,将多个神经元的输出,映射到(0,1)区间内

④选择交叉熵作为损失函数,来度量训练集计算出的输出和真实的训练集输出之间的损失。

⑤选择批量梯度下降算法作为优化算法,极小化损失函数,设置批次大小、迭代阈值和学习率α(0<α≤1),对dnn模型进行迭代训练

⑥最终输出dnn模型的权重系数矩阵w和偏置向量b,过程。

(2)dnn模型参数配置

漏洞描述信息经过向量化表示后,即通过自然语言描述的漏洞文本数据被转换为可以通过统计学习等方法表达的机器能够识别的数据结构。然后使用深度学习框架tensorflow构建dnn模型,经过测试dnn模型的各种配置参数包括隐藏层的数量,每层的神经元个数,还有神经网络的学习率以及迭代次数等。最终选择效果较好的dnn模型。dnn模型如图2所示:

dnn模型参数设置在具体实现时可采用如下步骤:

①使用标准差为0.1的正态分布函数初始化dnn模型的权重系数矩阵w

②设置输入层和隐藏层的偏置向量b值为0.1

③输入层和隐藏层前向传播使用tanh作为激活函数,输出层使用softmax作为激活函数

④使用tensorflow中的dropout函数防止过拟合

⑤使用批量梯度下降算法优化dnn模型,其中批次大小设置为100,学习率设置为0.2

⑥训练dnn模型迭代次数为20,

⑦使用训练集对dnn分类器进行训练,使用测试集对dnn分类器进行测试,当达到迭代次数后结束训练,选择分类准确率最大的dnn分类器作为软件漏洞分类器。

5)漏洞分类

对新的漏洞描述信息集合进行分类时,首先使用步骤s1对新的漏洞描述信息集合进行预处理,然后根据步骤s3将新的漏洞描述信息集合中的每一个漏洞描述信息表述成一个m维的向量,新的漏洞描述信息集合构成分类集合;将分类集合输入到步骤s4中的软件漏洞分类器,输出新的漏洞描述信息集合中漏洞描述信息的分类。

使用本申请公开的基于深度神经网络的软件漏洞自动分类方法,以国际公认的美国国家计算机通用漏洞数据库(nationalvulnerabilitydatabase,nvd)中的漏洞记录为实验数据,通过实验证明漏洞分类效果较为理想,和设计的预期一致。本发明构建的基于深度神经网络(dnn)的漏洞自动分类方法与基于svm,bayes和knn的漏洞自动分类方法在nvd数据集上进行对比实验,结果表明了本发明在准确率、召回率、精度和f1-score等指标中具有较好的性能,分别达到了87%,78%,85%,81%。综合评价指标要优于传统的机器学习算法。

可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分或全部技术特征进行等同替换;而这些修改或替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1