[发明专利]一种基于语法特征和语义特征的软件安全漏洞检测方法有效
申请号: | 202011488425.3 | 申请日: | 2020-12-16 |
公开(公告)号: | CN112541180B | 公开(公告)日: | 2022-09-13 |
发明(设计)人: | 危胜军;胡昌振;钟浩;陶莎;赵敬宾 | 申请(专利权)人: | 北京理工大学;鹏城实验室 |
主分类号: | G06F21/57 | 分类号: | G06F21/57;G06F11/36;G06N3/04 |
代理公司: | 北京中海智圣知识产权代理有限公司 11282 | 代理人: | 杨树芬 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 语法 特征 语义 软件 安全漏洞 检测 方法 | ||
1.一种基于语法特征和语义特征的软件安全漏洞检测方法,其特征在于,包括以下步骤:
步骤1、确定检测对象的粒度:
检测对象的粒度是一个函数、一个文件、一个组件或者任意一段有关联关系的代码片段,根据实际的检测项目需要确定,检测项目的语言是C/C++、Java、PHP;
步骤2、建立软件历史漏洞库:
从公开的软件漏洞库中搜集与检测软件项目编程语言相同的软件安全漏洞,建立针对语言类的漏洞样本库,样本大小为检测粒度大小,漏洞库表明了检测粒度大小的样本具有漏洞的情况,即每个样本是否具有漏洞和具有漏洞的类型和数量;
使用公共漏洞数据库SARD数据集,JTS的版本为JTS-1.3,共包含246852个函数,具有漏洞的函数105244,占总样本的42%,通过直接分析文件名与函数名就能得到每个函数的漏洞有无的标签,也就是采用的漏洞标签是1和0,表示漏洞的有和无;
步骤3、建立检测对象的抽象语法树:
在步骤1的基础上,基于LLVM编译器对检测对象进行解析,基于编译器提供的第三方接口Clang Lib,建立检测对象的抽象语法树;
步骤4、对抽象语法树进行嵌入:
在步骤3的基础上,针对得到的检测对象的抽象语法树,按照深度优先搜索算法对抽象语法树进行遍历,生成针对语法树节点的节点序列,针对步骤2中的所有样本,生成每个样本的抽象语法树,并生成每个抽象语法树的节点序列,基于步骤2的漏洞库中所有样本对应的抽象语法树的节点序列,使用word2vec嵌入算法对每个节点进行嵌入,得到节点的向量表示;
步骤5、对检测对象软件源代码进行编译:
在步骤1的基础上,基于LLVM编译器对检测对象进行编译,获取代码的中间表示;
步骤6、建立检测对象的程序依赖图:
在步骤5的基础上,基于代码的中间表示IR,通过LLVM提供的Pass框架,建立检测对象的程序依赖图;
步骤7、对程序依赖图进行嵌入,在步骤6的基础上,针对得到的检测对象的PDG,对PDG进行遍历,生成针对PDG的节点序列,具体包括以下步骤:
步骤7.1、设一个PDG图的节点集合为V,遍历集合V,输出所有入度为0的节点,设为V1,且V=V-V1;
步骤7.2、对于V1中所有节点的在V中的后继节点,其入度减1;
步骤7.3、重复步骤7.1和步骤7.2,直到V中节点数为0,结束;
步骤7.4、针对步骤2中的所有样本,同样的方法生成每个样本的PDG,并生成每个PDG的节点序列,基于步骤2的漏洞库中所有样本对应的PDG的节点序列,使用word2vec嵌入算法对每个节点进行嵌入,得到节点的向量表示;
步骤8、使用图卷积神经网络对AST的特征进行学习;
步骤9、使用双向LSTM对PDG的特征进行学习:
在步骤7的基础上,选取双向长短期记忆网络建立针对PDG语义特征的深度学习模型,BLSTM对时间序列输入具有好的学习能力,PDG为时间序列结构,选择BLSTM模型;
使用的BLSTM包括四层:输入层、双向LSTM处理单元层、Attention层与全连接层;
步骤10、建立针对语法特征和语义特征的融合模型,在步骤8和9的基础上,选择两层的全连接神经网络和softmax分类器建立融合模型,将步骤8和步骤9的输出作为全连接层的输入,全连接层的输出作为softmax的输入,Softmax的输出为漏洞的概率;
步骤11、训练和测试检测模型;
步骤12、将检测模型应用于新的软件模块,将步骤11中获得的检测模型应用于新的软件模块,首先建立新的软件模块的AST和PDG,转换为向量表示,将向量作为模型的输入,模型运行的输出即为新的软件模块具有漏洞的概率。
2.根据权利要求1所述的一种基于语法特征和语义特征的软件安全漏洞检测方法,其特征在于,所述步骤8包括以下步骤:
步骤8.1、在步骤4的基础上,选取图卷积神经网络建立针对AST语法特征的深度学习模型;
步骤8.2、将步骤4中得到的节点的向量表示作为图卷积神经网络的输入,基于图卷积神经网络直接对AST的树形结构的特征进行学习,使用的图卷积神经网络包括四层:输入层、卷积层、池化层和全连接层。
3.根据权利要求1所述的一种基于语法特征和语义特征的软件安全漏洞检测方法,其特征在于,所述步骤11包括以下步骤:
步骤11.1、在步骤2建立的漏洞数据库的基础上,基于步骤3将步骤2中的检测对象转换为AST,基于步骤4得到AST的向量表示;基于步骤6将步骤2中的检测对象转换为PDG;
步骤11.2、基于步骤7得到PDG的向量表示;将AST的向量表示以及PDG的向量表示,分别作为图卷积神经网络和BLSTM的输入,检测对象的标签作为分类器的输出,采用Adam优化训练算法对整个模型进行训练和测试。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学;鹏城实验室,未经北京理工大学;鹏城实验室许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011488425.3/1.html,转载请声明来源钻瓜专利网。