[发明专利]一种基于语法特征和语义特征的软件安全漏洞检测方法有效
申请号: | 202011488425.3 | 申请日: | 2020-12-16 |
公开(公告)号: | CN112541180B | 公开(公告)日: | 2022-09-13 |
发明(设计)人: | 危胜军;胡昌振;钟浩;陶莎;赵敬宾 | 申请(专利权)人: | 北京理工大学;鹏城实验室 |
主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F11/36;G06N3/04 |
代理公司: | 北京中海智圣知识产权代理有限公司 11282 | 代理人: | 杨树芬 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 语法 特征 语义 软件 安全漏洞 检测 方法 | ||
本发明公开了一种基于语法特征和语义特征的软件安全漏洞检测方法。包括以下步骤:步骤1、确定检测对象的粒度;步骤2、建立软件历史漏洞库;步骤3、建立检测对象的抽象语法树;步骤4、对抽象语法树进行嵌入;步骤5、对检测对象软件源代码进行编译;步骤6、建立检测对象的程序依赖图;步骤7、对程序依赖图进行嵌入,步骤8、使用图卷积神经网络对AST的特征进行学习:步骤9、使用双向LSTM对PDG的特征进行学习;本发明的优越效果是:提高了检测模型的精度、准确率、召回率的性能指标;采用一种图神经网络直接对AST树形结构进行学习,因此不会丢失任何信息,基于图神经网络的特征直接提取方式能够极大提高模型的检测性能。
技术领域
本发明属于软件安全技术领域,尤其涉及一种基于语法特征和语义特征的软件安全漏洞检测方法。
背景技术
目前,随着软件源代码及其漏洞数据的大量公开,相关数据能够低成本海量获取,基于数据驱动的方法被用于漏洞检测。其中,思路是利用深度学习技术的特征学习能力自动提取源代码模块的漏洞特征建立漏洞检测模型,整个过程分为两个阶段。一是模型建立阶段,二是模型应用阶段。在模型建立阶段中,首先确定分析对象的粒度,也就是确定软件源代码模块的大小,软件软代码模块是一段有相互关系的代码,可自行定义,可以是一个文件、一个函数、一个组件或者任意大小的一段代码;第二步是针对分析的对象进行预处理,解析出可用于分析的代码中间表示,中间表示包括Token序列、AST和CFG,第三步是针对中间表示进行数量化,采用空间嵌入的方式,第四步是选择合适的深度学习算法,将第三步的数量化的向量作为深度学习算法的输入且输出即为学习到的特征,第五步,将学习到的特征作为一个分类器的输入,同时将对应代码模块的是否具有漏洞标签或者漏洞的具体类别作为分类器的输出,对分类器进行训练,训练好的分类器即可用于模型应用阶段:针对一个新的软件源代码模块,对其进行预处理转换为中间代码后使用相同的量化和嵌入向量作为深度学习模型的输入学习提取特征,特征作为分类器的输入,分类器的输出为漏洞类别的概率。
现有技术1(VulDeePecker:A Deep Learning-Based System for VulnerabilityDetection,2018)的分析粒度为一个code gadget,一个code gadget是一段语义相关的代码语句集合,通过分析程序的数据流生成。针对code gadget通过lexical analysis将gadget表示成token序列,基于word2vec将每个token转换为向量,之后得到每个gadget的矢量表示,再采用一个Bidirectional LSTM(BLSTM)进行特征学习建立漏洞检测模型。现有技术2(SySeVR:A Framework for Using Deep Learning to Detect SoftwareVulnerabilities)对现有技术1的工作进行扩展,基于Bidirectional Gated RecurrentUnit(BGRU)建立漏洞检测模型。现有技术3(μVulDeePecker:A Deep Learning-BasedSystem for Multiclass Vulnerability Detection)针对现有技术1的不足,基于现有技术1中相同的code gadget思路,采用深度学习方法设计了一个漏洞多分类器,能够精确指出漏洞的类型。现有技术4(VulDeeLocator:A Deep Learning-based Fine-grainedVulnerability Detector)在现有技术2的基础上进行扩展,基于LLVM的中间代码获取语义相关的LLVM slice,使用BRNN建立模型。现有技术5(Towards a Deep Learning Model forVulnerability Detection on Web Application Variants)针对一个PHP slices建立漏洞检测模型,首先将PHP slices转换为基于操作码的中间表示,然后对操作码进行分词,使用word2vec进行向量化,之后使用一个5层的LSTM神经网络建立分类模型,一个Slice是一个代码片段,代码片段中的程序语句具有一定的关联关系,关联关系由人为定义,比如语句间具有数据依赖关系、控制依赖关系。现有技术6(Automatic feature learning forvulnerability prediction)针对JAVA文件建立漏洞分类模型,以JAVA文件中的method为单位进行分词后,使用LSTM深度学习对每个token进行嵌入,同时得到了每个method的语法特征,经过池化后得到每个file的语法特征。对所有的token向量进行聚类分析,得到分类的类别,再将计算构成每个file的token落入到每个类别的数量,数量即为file的语义特征。将语法和语义特征作为分类器的输入建立分类模型。现有技术7(Project Achilles:APrototype Tool for Static Method-Level Vulnerability Detection of Java SourceCode Using a Recurrent Neural Network)采用了现有技术6中类似的方法,将LSTM模型应用于JAVA程序,分析粒度不是一个file,针对不同的具体类型的漏洞检测进行了测试。现有技术8(Automated Vulnerability Detection in Source Code Using DeepRepresentation Learning)的分析粒度为C/C++函数,对每个函数进行分词得到token,再采用与句子情感分类类似的特征提取方法提取特征,基于卷积神经网络(CNNs)和递归神经网络(RNNs)进行漏洞分类。现有技术9(Automated software vulnerability detectionwith machine learning)的分析粒度为C/C++函数,对多种不同输入特征的性能进行了对比,分析了词袋模型和词向量方法,词袋模型采用extremely random trees分类器,词向量的方法采用TextCNN模型。现有技术10(A deep tree-based model for software defectprediction)针对一个Java源代码文件,首先建立文件的抽象语法树(AST),再基于AST采用一种树结构的LSTM网络建立漏洞检测模型。现有技术11(Cross-Project TransferRepresentation Learning for Vulnerable Function Discovery)、现有技术12(POSTER:Vulnerability Discovery with Function Representation Learning from UnlabeledProjects)针对C/C++源程序的函数,建立每个函数的AST,采用深度优先搜索得到AST的节点序列,之后使用Word2vec对节点序列进行嵌入,再使用5层的LSTM网络建立分类模型。现有技术13针对一个java文件,建立其AST,提取AST的节点,所有不同的AST节点构成一个库,对每个节点分配一个整数表示节点,将节点换成整数作为DBN的输入建立分类模型。现有技术14(Software Defect Prediction via Convolutional Neural Network)在现有技术13(Automatically Learning Semantic Features for Defect Prediction)的基础上,对AST的节点采用CNN进行词嵌入得到其向量表示,同时学习到整个AST节点序列的特征,将特征作为Logistic Regression classifier的输入建立分类模型。现有技术15(StaticDetection of Control-Flow-Related Vulnerabilities Using Graph Embedding)使用图卷积神经网络(graph convolutional network),针对控制流相关的漏洞建立检测模型,首先建立一个method的控制流图,之后使用Doc2Vec对控制流图的节点进行嵌入,然后使用graph convolutional network对整个控制流图进行学习得到图的特征表示建立漏洞检测模型。现有技术16(Convolutional Neural Networks over Control Flow Graphs forSoftware Defect Prediction)针对一个源file,首先对源文件编译得到汇编指令,建立基于汇编指令的CFG,基于CFG使用directed graph-based convolutional neural network建立漏洞检测模型。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学;鹏城实验室,未经北京理工大学;鹏城实验室许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011488425.3/2.html,转载请声明来源钻瓜专利网。