一种基于树结构卷积神经网络的软件安全漏洞检测方法技术

技术编号:22102138 阅读:145 留言:0更新日期:2019-09-14 03:25
本发明专利技术公开了一种基于树形结构卷积神经网络的软件漏洞检测方法,分析源代码得到抽象语法树AST结构,提取AST结构中各结点的结点类型;构建包含embedding层的神经网络预处理模型,其输入为提取的结点类型,输出为结点类型的预测概率;利用结点类型进行神经网络训练;训练完成后,将embedding层输出的向量特征值作为卷积神经网络模型的输入,以源代码是否存在漏洞为标签,训练卷积神经网络模型作为代码分类器;对于待检测源代码,提取其AST结构中的结点类型,重新训练神经网络预处理模型,将embedding层输出的向量特征值输入卷积神经网络模型,得到漏洞检测结果。本发明专利技术能更好的提取代码中的特征信息,从而给出能全面的分析结果。

A Software Security Vulnerability Detection Method Based on Tree-structured Convolutional Neural Network

【技术实现步骤摘要】
一种基于树结构卷积神经网络的软件安全漏洞检测方法
本专利技术涉及软件源代码中代码漏洞预测
,尤其涉及一种基于树形结构卷积神经网络的软件漏洞检测方法。
技术介绍
软件中的隐藏漏洞给攻击者提供了攻击入口,这些漏洞通常是由程序员在编程时遗留或处理不当的细微错误引起的。开源软件和代码重用的普遍存在也导致了漏洞的快速传播。漏洞检测模型能够检测到软件代码中存在的漏洞,软件开发者根据检测结果,可以针对那些漏洞存在几率大的模块进行二次审查,将有限的时间和经费有针对性的投入到那些存在漏洞可能性高的软件模块测试中,以此提高软件测试的效率。研究者们提出了很多基于机器学习和深度学习的漏洞检测方法,这些方法以大量开源代码为数据源,对代码使用静态分析、动态分析或混合动态分析,提取代码的特征信息,得到可以喂给深度学习模型的输入,训练漏洞检测的分类器,取得了很好的成果。Hovsepyanetal.提出了一种将SVM与BOW相结合的模型,根据Java源码来预测代码中是否含有漏洞。分析Java代码得到一系列token,由BOW算法生成一系列token的向量特征表示,然后使用SVM模型去预测代码是否具有漏洞。RebeccaL.Russelletal.提出了一种基于代码token的卷积神经网络模型,通过词法分析器获取到C/C++源码的token序列,然后通过模型中的embedding层训练得到向量化特征表示,经过卷积神经网络完成对代码的漏洞预测。类似的基于代码token序列的分析方法还有XinboBanetal.提出的基于BILSTM模型的漏洞分类器,使用SILSTM改善了RNN模型梯度消失的问题。但是,现有的技术大多是基于语义特征提取的模型,通过词法分析器提取代码中特定标识符或者根据一些人为规定的规则去提取代码中的信息。这样的处理方式有两大缺陷:(1)代码与人类自然语言的一大显著区别就是,代码的语法结构特征比人类语言语法特征更加规范且容易捕捉,代码的语法结构也是组成代码特征信息的一大部分。只获取语义信息而忽视了语法结构是一大缺陷,不利于提取代码的特征信息;(2)目前自动提取代码语义信息的工具虽然存在,但是功能都不完善,这些工具都比较具有针对性,难以处理不同类型的代码。研究者需要实现自己的语义分析器来提取代码中的关键信息,这一研究耗费了大量时间,而且效果并不显著。
技术实现思路
有鉴于此,本专利技术提供了一种基于树结构卷积神经网络的漏洞检测分析方法,使用代码的语法树结构获取代码段的语法结构特性与语义特性,能更好的提取代码中的特征信息,从而能够给出能全面的分析结果。为了解决上述技术问题,本专利技术是这样实现的:一种基于树形结构卷积神经网络的软件漏洞检测方法,包括:步骤一、分析源代码得到抽象语法树AST结构,提取AST结构中的每一个结点的结点类型;步骤二、构建包含词嵌入层embedding的神经网络预处理模型;神经网络输入为从AST结构中提取的结点类型,神经网络输出为结点类型的预测概率向量;embedding层的输出为结点类型的向量表示,称为向量特征值;利用步骤一提取的结点类型进行神经网络训练;步骤三、神经网络训练完成后,将embedding层输出的向量特征值作为卷积神经网络模型的输入,以步骤一所使用的源代码是否存在漏洞为标签,训练卷积神经网络模型作为代码分类器;步骤四、对于待检测源代码,按照步骤一和步骤二重新训练神经网络预处理模型,训练完成后将embedding层输出的向量特征值输入卷积神经网络模型,得到漏洞检测结果。优选地,所述神经网络预处理模型采用单隐藏层结构。优选地,神经网络预处理模型的输入为数字表示的结点类型。有益效果:本专利技术使用代码的语法树结构获取代码段的语法结构特性与语义特性,采用神经网络获得能够更好表达代码中特征信息的向量特征值,然后利用这个向量特征值进行基于卷积神经网络的分类,从而能够给出更全面的分析结果。附图说明图1为本专利技术基于树形结构卷积神经网络的软件漏洞检测方法流程图;图2为源代码转化为AST结构示意图。具体实施方式下面结合附图并举实施例,对本专利技术进行详细描述。基于深度学习的模型取得了一定的成果,也显示了深度学习在漏洞检测领域具有的强大能力,但是他们分析处理源码的方式都忽略了代码本身的结构化特征,这不利于获取代码的全部特征信息。本专利技术首次提出将基于代码语法树结构的卷积神经网络应用到软件漏洞检测研究中,通过代码语法树结构获取代码的语法结构和语义信息,将特征通过神经网络模型进行预处理,得到语法树节点的向量特征表示(下文中的embedding层输出),然后使用卷积神经网络作为代码分类器,预测代码是否含有漏洞。图1为本专利技术基于树形结构卷积神经网络的软件漏洞检测方法流程图,如图1所示,该方法包括以下步骤:步骤一:建立AST结构数据集:分析源代码得到抽象语法树(AST)结构,提取AST结构中的每一个结点的结点类型。本步骤中,使用Clag编译器分析得到源代码的AST结构,Clang将编译过程彼此分离成几个阶段,便于获取AST信息并且实现序列化,它提供了Clangbingdingforpython,使得可以直接在python环境中调用ClangAPI。利用编译器得到代码的AST结构(如图2所示)以后,构造树遍历器,将Clang解析得到的层次化结构转为训练模型需要的数据集。本专利技术中,对所有AST树中的结点类型进行编号,采用序列号代表一个结点类型。序列号可以将每个结点用一个数字表示,方便后期对数据进行预处理时,将对树结构进行向量值化。步骤二:训练神经网络预处理模型建立神经网络预处理模型,神经网络包括输入层,词嵌入层(embedding),单隐藏层与输出层。输入为结点类型的数字表示,经embedding层转化为结点类型的向量特征表示,输出层为结点类型的预测概率向量。embedding层得到的结果称为向量特征值。向量特征值由一组浮点数组成,一个结点类型用多少个浮点数表示,这个数值是模型的超参数,在模型训练过程中找到最适合的参数值。本专利技术输出给后续网络的正是这个向量特征值,这个向量特征值通过网络训练会不断更新,最终生成的向量特征值能较好的表达源代码的语法结构与语义特性。神经网络输出层输出概率向量,该概率向量中每一位对应一个结点类型的概率值,选择概率值最大的位置记为1,作为模型预测结点类型的结果。举个例子,输入为表示结点类型的4,会先经embedding转换为向量特征值[0.34,0.24,0.56,0.34,0.56],然后这个向量特征值经过神经网络计算,得到概率向量,例如[0.00012,0.003,0.998,0.009,0.00124],选择概率值最大的位置记为1,则最后输出结点类型向量为00100。本步骤中,对神经网络进行训练时,将步骤一提取的AST结构中的结点类型依次输入神经网络,或者组成一个矩阵输入到神经网络中,同时预先将结点类型序列号转换为结点类型向量,作为标签值;节点类型序列号和标签值组成训练样本,训练模型不断降低代价值,使得向量化的结果不断逼近树结构结点类型。神经网络完成迭代训练后,最后一轮训练得到的embedding层向量特征值输出给后端的卷积神经网络模型。本实施例中使用批量梯度下降算法(BGD,BatchGradient本文档来自技高网
...

【技术保护点】
1.一种基于树形结构卷积神经网络的软件漏洞检测方法,其特征在于,包括:步骤一、分析源代码得到抽象语法树AST结构,提取AST结构中的每一个结点的结点类型;步骤二、构建包含词嵌入层embedding的神经网络预处理模型;神经网络输入为从AST结构中提取的结点类型,神经网络输出为结点类型的预测概率向量;embedding层的输出为结点类型的向量表示,称为向量特征值;利用步骤一提取的结点类型进行神经网络训练;步骤三、神经网络训练完成后,将embedding层输出的向量特征值作为卷积神经网络模型的输入,以步骤一所使用的源代码是否存在漏洞为标签,训练卷积神经网络模型作为代码分类器;步骤四、对于待检测源代码,按照步骤一和步骤二重新训练神经网络预处理模型,训练完成后将embedding层输出的向量特征值输入卷积神经网络模型,得到漏洞检测结果。

【技术特征摘要】
1.一种基于树形结构卷积神经网络的软件漏洞检测方法,其特征在于,包括:步骤一、分析源代码得到抽象语法树AST结构,提取AST结构中的每一个结点的结点类型;步骤二、构建包含词嵌入层embedding的神经网络预处理模型;神经网络输入为从AST结构中提取的结点类型,神经网络输出为结点类型的预测概率向量;embedding层的输出为结点类型的向量表示,称为向量特征值;利用步骤一提取的结点类型进行神经网络训练;步骤三、神经网络训练完成后,将embeddin...

【专利技术属性】
技术研发人员:危胜军魏文媛单纯胡昌振赵敬宾
申请(专利权)人:北京理工大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1