一种基于静态分析和动态分析的软件漏洞检测方法技术

技术编号:37462422 阅读:31 留言:0更新日期:2023-05-06 09:35
本发明专利技术公开了一种基于静态分析和动态分析的软件漏洞检测方法,涉及软件漏洞挖掘技术领域,包括步骤1:对目标程序源代码进行预处理;步骤2:对函数进行切分并进行向量化;步骤3:使用向量化的程序语句语料库训练神经网络;步骤4:对源代码使用训练阶段获取的模型进行漏洞检测;步骤5:定向模糊测试框架提取代码依赖关系,并结合控制流图和函数调用图计算目标程序中各基本块到达可疑代码区域的距离;步骤6:编译源代码并记录基本块到可疑代码区域的距离;步骤7:对可执行文件进行动态测试,并使用路径搜索算法优化的符号执行技术辅助模糊测试执行;步骤8:分析程序崩溃,判断是否为软件漏洞。本发明专利技术可提升漏洞检测效率和准确性。本发明专利技术可提升漏洞检测效率和准确性。本发明专利技术可提升漏洞检测效率和准确性。

【技术实现步骤摘要】
一种基于静态分析和动态分析的软件漏洞检测方法


[0001]本专利技术涉及软件漏洞挖掘
,更具体地说,涉及一种基于静态分析和动态分析的软件漏洞检测方法。

技术介绍

[0002]目前,漏洞检测技术可分为静态检测技术和动态检测技术两类。静态检测技术主要通过代码相似性、模式匹配以及深度学习的方法识别代码中存在的漏洞;动态检测技术主要通过灰盒模糊测试、动态符号执行和动态污点分析技术进行软件漏洞检测。当前这些技术仍然面临以下几个问题:
[0003]深度学习方法中存在的不足:
[0004]1)代码表征不恰当导致信息丢失。
[0005]深度学习中通常使用自然语言处理技术对程序源代码进行处理和表征,然后学习代码特征并进行分类。常见的处理方法有两类:a)将源代码直接当作自然语言进行处理。b)将中间表示转换成序列。直接当作自然语言忽视了源代码中包含的逻辑结构的特征,会损失代码的结构信息;中间表示转换成序列,如直接使用token序列,虽然利用了源代码的词法和语法结构信息,但是序列化的中间表示缺少了源代码的结构化信息。<br/>[0006]本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于静态分析和动态分析的软件漏洞检测方法,其特征在于,包括以下步骤:步骤1:对目标程序源代码进行预处理;步骤2:对函数进行切分并进行向量化;步骤3:使用向量化的程序语句语料库训练神经网络;步骤4:对源代码使用训练阶段获取的模型进行漏洞检测;步骤5:定向模糊测试框架提取代码依赖关系,并结合控制流图和函数调用图计算目标程序中各基本块到达可疑代码区域的距离;步骤6:编译源代码并记录基本块到可疑代码区域的距离;步骤7:对可执行文件进行动态测试,并使用路径搜索算法优化的符号执行技术辅助模糊测试执行;步骤8:分析程序崩溃,判断是否为软件漏洞。2.根据权利要求1所述基于静态分析和动态分析的软件漏洞检测方法,其特征在于,步骤1中,使用源代码分析工具提取训练集中的函数,然后根据函数构建包含程序控制流关系和数据流关系的程序依赖图。3.根据权利要求2所述基于静态分析和动态分析的软件漏洞检测方法,其特征在于,步骤2中,获取到训练集中的函数后,将函数当作自然语言中的一个语句,对函数进一步分词,获取神经网络训练语料库;使用分词构建程序代码关系图,通过Word2Vec模型将图中的节点内容映射成数值向量,得到关系图中节点的初始表示。4.根据权利要求3所述基于静态分析和动态分析的软件漏洞检测方法,其特征在于,步骤3中,给向量化的程序代码关系图打标签,然后输入到神经网络进行训练,训练结束后将模型保存到本地,便于检测阶段使用。5.根据权利要求4所述基于静态分析和动态分析的软件漏洞检测方法,其特征在于,步骤4中,对于目标程序的待测源代码,先通过预处理进行函数切分,然后提取程序依赖图并进行向量化,最后将向量化后的代码图输入到测试阶段训练好的模型中进行测试,模型输出目标程序源代码中可能存在漏洞的代码位置。6.根据权利要求5所述基于静态分析和动态分析的软件漏洞检测方法,其特征在于,步骤6中,使用LLVM Pass进行编译插桩,插桩代码用于记录程序运行过程中基本块之间的跳转关系,并在...

【专利技术属性】
技术研发人员:范永陈许少年陈坚利王炎潘艺宁王晓楠
申请(专利权)人:天翼云科技有限公司
类型:发明
国别省市:

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

1