【技术实现步骤摘要】
一种基于多尺度代码度量的软件安全漏洞检测方法
[0001]本专利技术属于计算机
,特别涉及软件漏洞检测,具体是一种基于多尺度代码度量的软件安全漏洞检测方法,用于面向源代码的软件安全漏洞检测。
技术介绍
[0002]随着信息化的蓬勃发展,软件的应用越来越广泛,软件规模也逐渐增大,开源软件的数量也在高速增长。开源软件的快速发展,一方面可以突破技术壁垒、推动创新,另一方面面临着安全漏洞、软件供应链安全等风险。软件安全和网络安全等问题导致网络信息安全威胁日益上升,软件安全问题引起了各行业乃至国家的高度重视,而软件漏洞是导致软件安全问题的主要根源之一。例如,2017年美国征信巨头Equifax资料外泄事件,在此次事件中,黑客窃取了超过1.6亿名美国、英国及加拿大民众的个人身分识别信息,其中包括:姓名、社会安全码、住址、电子邮件、生日、支付卡号码以及电话号码。事后经过调查与分析,发现黑客利用了一个开源web应用框架Apache Struts 2中的漏洞,该漏洞的漏洞编号为CVE
‑
2017
‑
5 ...
【技术保护点】
【技术特征摘要】
1.一种基于多尺度代码度量的软件安全漏洞检测方法,其特征在于:使用多尺度代码度量特征对源代码进行漏洞检测,包括有以下步骤,步骤1)获取漏洞信息:从公开漏洞数据网站NVD获取待检测漏洞信息,从代码托管平台GitHub上获取待检测漏洞的软件源代码,待检测漏洞信息包括漏洞的CVE编号、漏洞的CWE编号、漏洞描述、漏洞类型、漏洞函数信息、CVSS等级、受影响版本、漏洞编程语言,将待检测漏洞信息和其软件源代码作为一个漏洞信息数据,按漏洞类型存储;步骤2)构建多尺度代码度量数据集:对获取的漏洞信息和对应的源代码分别进行分析与处理,通过统计确定软件源代码部分行粒度下的代码行数、空行数、改变行数,得到软件源代码部分行粒度代码度量;从软件的版本历史、搭建平台、组件版本获得漏洞的组件粒度代码度量;并用代码度量计算公式计算得到软件源代码函数粒度和剩余部分行粒度两种不同粒度下的代码度量数据,其中行粒度代码度量为:程序简单长度、程序预测长度、程序可维护性指数、行均漏洞提交数、圈复杂度;函数粒度代码度量为:不同操作符数、不同操作数数、总操作符数、总操作数数、程序词汇数、程序容量;将三种不同粒度的代码度量数据按照列序号顺序整合成为单个多尺度代码度量数据样本,生成代码度量一维序列;重复执行步骤1
‑
2,即通过重复获取漏洞信息数据和软件源代码数据构成的漏洞信息样本,扩大样本数量,由所有的多尺度代码度量数据样本按行序号顺序排列,完成多尺度代码度量数据集的构建;步骤3)使用卷积神经网络进行多尺度代码度量特征抽取:多尺度代码度量数据集的最小单位为代码度量一维序列,使用目标识别中的图像金字塔理论,将多尺度代码度量数据集按照列序号自左到右的顺序分割为组件粒度、函数粒度和行粒度下的代码度量序列,使用一组非对称卷积核,形成依次包含有输入层、卷积层、池化层和输出层的卷积神经网络,分别对不同尺度下的代码度量序列进行特征抽取,使用1*1、1*3和1*5大小的卷积核分别对组件粒度、函数粒度和行粒度下的代码度量序列进行卷积操作,将卷积得到的结果分别输入到神经网络中的池化层进行池化以减小输出大小和降低过拟合,最终得到了组件粒度、函数粒度和行粒度多尺度下代码度量的特征向量;步骤4)多尺度代码度量特征向量拼接:采用向量首尾拼接Concat的方法,将三种粒度下的代码度量特征向量按照组件粒度、函数粒度和行粒度的顺序拼接成一个多尺度代码度量特征向量,简称为特征向量,即将前一向量的末尾位置与后一向量的起始位置连接在一起,将三种不同尺度下代码度量的特征向量拼接在一起,使用多尺度代码度量表征方法更好的表征了软件源代码;步骤5)使用双向长短期记忆网络进行漏洞表征学习:将拼接完成的软件源代码的多尺度代码度量特征向量输入到双向长短期记忆网络Bi
‑
LSTM中进行训练,双向长短期记忆网络的最小单元为长短期记忆网络LSTM,每个LSTM单元中,通过对每个单元状态中信息遗忘和记忆新的信息使得对后续时刻的计算有用的信息得以传递,将经Bi
‑
LSTM训练得到的向量输入池化层,对多尺度代码度量特征向量进行降采样,得到的结果输入稠密层Dense Layer,最后将稠密层输出的特征向量输入分类器中进行检测结果判定;步骤6)检测结果判定:分类器采用S型曲线函数Sigmoid作为激活函数,Sigmoid函数的定义域为任意常数,值域为(0,1),Sigmoid函数将分类器的原始输入值映射为概率,得到基于多尺度代码度量的软件安全漏洞检测结果,若经过激活函数处理后的概率大于或等于
0.5,则分类器输出1,为待检测软件源代码中存在漏洞;若经激活函数处理后的概率小于0.5,则分类器输出0,表示待检测软件源代码中不存在漏洞。2.根据权利要求1所述的一种基于多尺度代码度量的软件安全漏洞检测方法,其特征是:步骤2所述构建多尺度代码度量数据集,具体包括有如下步骤:步骤2.1)漏洞信息分析:首先对从公开漏洞数据网站NVD获取的待检测漏洞信息进行分析,分析待检测漏洞信息中各项信息的有效性,剔除可能无...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。