一种函数级软件漏洞检测方法技术

技术编号:20917724 阅读:27 留言:0更新日期:2019-04-20 09:56
本发明专利技术涉及软件安全漏洞检测技术领域,具体涉及一种函数级软件漏洞检测方法,包括以下步骤:A)导入训练代码;B)获得训练代码的抽象语义树,形成初始特征向量;C)函数名以及变量名统一化处理;D)获得原始特征;E)获得特征表达;F)训练神经网络模型;G)获得待检测软件代码的特征表达,将待检测特征表达输入步骤F训练出的神经网络模型,得到漏洞检测结果。本发明专利技术的实质性效果是:本方案通过使用一系列简便的方法配合Bi‑LSTM神经网络对代码的处理,能够直接提取函数的高级抽象语义特征,节省了人力物力,而且所提取的高级抽象语义特征还可以实施跨项目的漏洞检测。

A Functional Software Vulnerability Detection Method

The invention relates to the technical field of software security vulnerability detection, and specifically relates to a function-level software vulnerability detection method, including the following steps: A) importing training code; B) obtaining abstract semantic tree of training code to form initial feature vectors; C) unifying function names and variable names; D) obtaining original features; E) obtaining feature expression; F) training neural network model; G) Get the feature expression of the software code to be detected, and input the feature expression to the neural network model trained by step F to get the vulnerability detection results. The substantive effect of the present invention is that the scheme can directly extract the high-level abstract semantic features of functions, save manpower and material resources, and the extracted high-level abstract semantic features can also implement cross-project vulnerability detection by using a series of simple methods combined with Bi_LSTM neural network to process code.

【技术实现步骤摘要】
一种函数级软件漏洞检测方法
本专利技术涉及软件安全漏洞检测
,具体涉及一种函数级软件漏洞检测方法。
技术介绍
软件漏洞检测技术作为一种预防性的攻击抵御措施,在计算机安全领域备受关注。从实施检测时是否需要运行软件系统的角度分类,现有的软件缺陷和漏洞检测可以分为静态,动态和混合三类技术。静态分析技术比如:基于规则匹配和符号执行是通过分析软件源代码来实现的。动态的软件分析技术通常包括模糊测试和污点分析技术。这些技术主要侧重于分析软件运行时可能存在的漏洞。混合分析技术结合了静态和动态分析的优势,成为软件工程领域中较为先进的分析方式。随着机器学习技术的发展,将机器学习技术应用到软件漏洞检测的研究也逐渐受到重视。现有的采用机器学习技术来检测软件缺陷和软件漏洞的方案主要侧重于检测存在漏洞的软件模块和文件。Neuhaus等人发现,那些存在漏洞的软件模块通常具有相同的库引用和函数调用。他们将库引用和函数调用抽象成为特征,并使用支持向量机(SVM)作为分类器。他们使用早起版本的Mozilla软件项目作为训练分类器的样本,并用训练好的分类器来检测较新版本的Mozilla软件。他们的实验表明,用库引用和函数调用作为软件漏洞的预测指标是颇为有效的。Scandariato等人采用文本挖掘技术将Java源代码直接作为文本进行处理。他们通过统计代码中关键字和词的频率并将这些作为特征来训练模型。他们的实验证明,直接将源代码作为文本结合机器学习技术也能够在软件模块级别上检测漏洞。Chowdhury和Zulkernine,以及Shin等人构建了基于文件级别的漏洞检测方案。他们的方案所依赖的特征主要来源于:软件代码复杂度度量,代码改动日志和预先发现的软件缺陷。基于这些特征所训练的分类器能够帮助定位某个文件是否存在漏洞。Yamaguchi等人提出了细粒度的漏洞检测方案,可以检测函数级别漏洞。详细说明见F.Yamaguchi,F.Lindner,andK.Rieck,“Vulnerabilityextrapolation:assisteddiscoveryofvulnerabilitiesusingmachinelearning,”inProceedingsofthe5thUSENIXconferenceonOffensivetechnologies.USENIXAssociation,2011,pp.13–13.。他们的方案是对源代码中具有漏洞的函数代码的模式(pattern)进行主成分分析(PCA)。通过将其他函数的代码的模式和有漏洞函数的代码的模式进行比较,根据比较的相似性来排名从而推断可能存在漏洞的函数。但现有的采用机器学习技术来检测软件缺陷和软件漏洞的方案有缺少泛化能力的问题。不同软件项目之间的差距使得跨项目漏洞检测具有很大挑战。首先,不同软件项目在文件、变量命名,使用的依赖库和功能上存在巨大差距。这就使得传统的检测方案,尤其是基于机器学习技术的方案无法直接将项目A上训练的模型用于项目B的检测。究其根本,是由于软件项目的不同,所实现的代码自然千差万别,所具有的漏洞也各不相同。传统的技术之所以未能实现跨项目漏洞检测,其原因在于无法捕捉漏洞代码的本质的,深层次的特征。其次,大多数的方案停留在解决项目模块和文件漏洞层面,还没有方案实现跨项目、且在函数级别的漏洞检测,因此本方案提出填补了该空白。中国专利CN101847121B,公开日2012年1月18日,一种软件漏洞挖掘方法,属于软件工程和信息安全领域。本方法为:1)将多个正常数据输入目标程序,收集该目标程序的运行时信息;2)生成畸形数据,并将其输入该目标程序,收集该目标程序的运行时信息;3)根据1)、2)收集的运行时信息,识别该目标程序中校验和的检测代码;4)修改校验和的检测代码,使得目标程序处理畸形数据时的执行行为与处理正常数据时一致;5)生成若干畸形数据并输入修改后的目标程序,将使其崩溃的畸形数据作为样本数据;6)修改每个样本数据中校验和的域值并将其输入原目标程序,如果原目标程序崩溃或发生异常则报告一个潜在的安全漏洞。与现有技术相比,本专利技术可以大大提高漏洞挖掘的效率。其采用了污点分析技术,污点数据,即畸形数据,在每个软件项目上均不同,且有些软件漏洞并不能通过畸形数据体现出来,因而其没有解决目前软件漏洞检测的方案缺少泛化能力的问题。
技术实现思路
本专利技术要解决的技术问题是:目前软件漏洞检测的方案缺少泛化能力的问题。提出了一种提取软件代码深层特征的能够方便的跨项目检测的函数级软件漏洞检测方法。为解决上述技术问题,本专利技术所采取的技术方案为:一种函数级软件漏洞检测方法,包括以下步骤:A)导入训练代码,所述训练代码的漏洞已知;B)获得训练代码的抽象语义树,逐个抽取抽象语义树的元素形成一维的向量,称为初始特征向量;C)将初始特征向量中包含的函数名以及变量名统一化处理;D)截取步骤B处理后的特征向量的前N个元素,作为原始特征;E)将原始特征输入已训练的双向循环神经网络(Bi-LSTM)获得特征表达;F)将特征表达与训练代码已知的漏洞作为训练数据,训练神经网络模型;G)将待检测软件代码按照步骤B-E的方法获得待检测特征表达,将待检测特征表达输入步骤F训练出的神经网络模型,得到待检测软件的漏洞检测结果。将函数名以及变量名统一化处理能够消除函数名以及变量名命名方式不同带来的影响,为跨项目检测提供条件。将原始特征经过双向循环神经网络(Bi-LSTM)进一步处理后,可以将具有相同特征的代码分类到一类,进而通过步骤F中获取的神经网络模型获得软件漏洞检测的结果。作为优选,获得训练代码的方法为:A1)获取已知安全漏洞信息的软件源代码以及安全漏洞信息;A2)使用安全漏洞标记其所对应的代码段;A3)将带有安全漏洞标记的代码段作为训练代码。作为优选,初始特征向量的生成方法为:将抽象语义树中的元素,以深度优先遍历的方式逐个取出,获得一个序列,所述序列作为初始特征向量。作为优选,双向循环神经网络(Bi-LSTM)的训练方法为:E1)获取已知安全漏洞信息的软件源代码以及安全漏洞信息;E2)提取每个安全漏洞对应的代码段;E3)将步骤E2获得的若干个代码段,按照步骤B-D分别获得其原始特征;E4)使用代码段标记其原始特征作为训练样本数据;E5)使用步骤E4获得的训练样本数据训练双向循环神经网络(Bi-LSTM)。作为优选,双向循环神经网络(Bi-LSTM)的训练方法为:E1)获取已知安全漏洞信息的软件源代码以及安全漏洞信息;E2)提取每个安全漏洞对应的代码段;E3)人工撰写若干个与步骤E2获得的若干个代码段具有同样安全漏洞的扩展代码段,将步骤E2获得的若干个代码段及其由人工撰写的具有同样安全漏洞的扩展代码段,按照步骤B-D分别获得其原始特征;E4)使用代码段标记代码段以及其扩展代码段的原始特征作为训练样本数据;E5)使用步骤E4获得的训练样本数据训练双向循环神经网络(Bi-LSTM)。作为优选,步骤B中截取抽象语义树的前10层用于生成初始特征向量,所述初始特征向量的元素规整为620个,规整方法为:舍弃初始特征向量中超过620个的元素,初始特征向量元素数量不足620个时,在初始特征向量后补0凑足620个元素。作为优选,函本文档来自技高网
...

【技术保护点】
1.一种函数级软件漏洞检测方法,其特征在于,包括以下步骤:A)导入训练代码,所述训练代码的漏洞已知;B)获得训练代码的抽象语义树,逐个抽取抽象语义树的元素形成一维的向量,称为初始特征向量;C)将初始特征向量中包含的函数名以及变量名统一化处理;D)截取步骤B处理后的特征向量的前N个元素,作为原始特征;E)将原始特征输入已训练的双向循环神经网络(Bi‑LSTM)获得特征表达;F)将特征表达与训练代码已知的漏洞作为训练数据,训练神经网络模型;G)将待检测软件代码按照步骤B‑E的方法获得待检测特征表达,将待检测特征表达输入步骤F训练出的神经网络模型,得到待检测软件的漏洞检测结果。

【技术特征摘要】
1.一种函数级软件漏洞检测方法,其特征在于,包括以下步骤:A)导入训练代码,所述训练代码的漏洞已知;B)获得训练代码的抽象语义树,逐个抽取抽象语义树的元素形成一维的向量,称为初始特征向量;C)将初始特征向量中包含的函数名以及变量名统一化处理;D)截取步骤B处理后的特征向量的前N个元素,作为原始特征;E)将原始特征输入已训练的双向循环神经网络(Bi-LSTM)获得特征表达;F)将特征表达与训练代码已知的漏洞作为训练数据,训练神经网络模型;G)将待检测软件代码按照步骤B-E的方法获得待检测特征表达,将待检测特征表达输入步骤F训练出的神经网络模型,得到待检测软件的漏洞检测结果。2.根据权利要求1所述的一种函数级软件漏洞检测方法,其特征在于,获得训练代码的方法为:A1)获取已知安全漏洞信息的软件源代码以及安全漏洞信息;A2)使用安全漏洞标记其所对应的代码段;A3)将带有安全漏洞标记的代码段作为训练代码。3.根据权利要求1或2所述的一种函数级软件漏洞检测方法,其特征在于,初始特征向量的生成方法为:将抽象语义树中的元素,以深度优先遍历的方式逐个取出,获得一个序列,所述序列作为初始特征向量。4.根据权利要求1或2所述的一种函数级软件漏洞检测方法,其特征在于,双向循环神经网络(Bi-LSTM)的训练方法为:E1)获取已知安全漏洞信息的软件源代码以及安全漏洞信息;E2)提取每个安全漏洞对应的代码段;E3)将步骤E2获得的若干个代码段,按照步骤B-D分别获得其原始特征;E4)使用代码段标记其原始特征作为训练样本数据;E5)使用步骤E4获得的训练...

【专利技术属性】
技术研发人员:项阳张军王宇项亮
申请(专利权)人:杭州英视信息科技有限公司
类型:发明
国别省市:浙江,33

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

1