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等人构建了基于文件级别的漏洞检测方案。他们的方案所依赖 ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。