当前位置: 首页 > 专利查询>四川大学专利>正文

一种基于数据依赖增强程序切片的源代码漏洞检测方法技术

技术编号:38760044 阅读:9 留言:0更新日期:2023-09-10 09:44
本发明专利技术公开了一种基于数据依赖增强程序切片的源代码漏洞检测方法,通过对源代码的分析,获得其数据依赖信息和控制依赖信息,并构建程序依赖图,而后对程序依赖图进行增强操作;将程序切片兴趣点作为切点进行程序切片,获得程序依赖图的子图,子图的漏洞分类标签由是否包含漏洞代码语句决定;将源代码中的用户定义标识符进行匿名化,然后将代码中的各语义单元利用Word2Vec技术转化为向量,形成词典;将程序切片后得到的子图中各结点的代码语句依据词典转化为向量序列;通过对待检测代码进行检测,给出漏洞的位置信息帮助漏洞修复人员快速定位漏洞,并给出漏洞的类型,为快速修复漏洞提供帮助。漏洞提供帮助。漏洞提供帮助。

【技术实现步骤摘要】
一种基于数据依赖增强程序切片的源代码漏洞检测方法


[0001]本专利技术涉及源代码漏洞检测技术等领域,具体的说,是一种基于数据依赖增强程序切片的源代码漏洞检测方法。

技术介绍

[0002]随着人们日益依赖互联网,软件程序作为人们与互联网连接的桥梁,被越来越多的人所需要。由于人们的需求变得越来越复杂,软件程序的代码结构随之自然而然地变得复杂,变得更加容易引入漏洞,软件程序的安全性也就变得不可忽视。相关调查显示,对于一些百万级的软件程序,平均每1000行代码中就会包含一个漏洞。软件漏洞带来严重损失的事件也层出不穷。自从软件程序出现,人们就不断尝试通过各种方法来检测程序的漏洞,例如:规则匹配式扫描,污点分析,符号执行,模糊测试,代码相似性度量,等等。对源代码进行漏洞检测可以在程序开发阶段避免漏洞。漏洞发现得越早,漏洞带来的影响和修复漏洞的成本就越小。
[0003]近几年随着人工智能的普及和成功应用,有一些学者尝试使用人工智能算法来检测漏洞,研究成果表现出优秀的检测性能。目前,基于人工智能算法的漏洞检测算法处理步骤通常分为三步:首先通过静态分析技术对源代码进行预处理,提取和构造出包含源码语法和语义信息的表征形式,然后将字符形式的数据转化为向量,并使用神经网络进行特征提取,最后使用提取到的特征向量训练分类器进行分类。预处理阶段目前常用的是数据流和控制流分析技术、抽象语法树(Abstract Syntax Tree,AST)构造,程序切片技术等。在特征提取步骤中通常使用图神经网络和循环神经网络。循环神经网络主要对预处理后的字符序列(例如抽象语法树遍历序列,程序片段的字符序列)进行特征提取,图神经网络主要对预处理后的图结构数据(例如抽象语法树,控制流图,数据依赖图,程序依赖图,代码属性图等等)进行特征提取。在分类步骤中,通常依靠提取到的特征向量进行分类,通过大量的数据来训练分类器,提高分类器正确分类新数据的能力。
[0004]然而,由于真实项目中的漏洞模式变得越来越复杂,目前的先进方法在预处理部分通常使用较为基础的静态分析技术,缺少对复杂漏洞的语法和语义信息提取。最早使用深度学习算法进行漏洞检测的Li等人(Li Z, Zou D, Xu S, et al. Sysevr: A framework for using deep learning to detect software vulnerabilities[J]. IEEE Transactions on Dependable and Secure Computing, 2021, 19(4): 2244

2258.)提出在程序依赖图上获取程序切片,并将其转化为字符串,使用BiLSTM(Bi

directionalLong Short

Term Memory)网络来提取特征,并使用多层感知器进行漏洞检测。然而常用的循环神经网络由于只接受序列信息,让代码简单地排列为序列,会使得其中部分强相关的语法语义代码片段相隔较远,导致代码之间的语义信息不能够有效地传递,而不利于模型识别。因此,部分学者尝试使用图神经网络进行漏洞检测,例如庄荣飞等人(庄荣飞. 基于图网络的漏洞挖掘关键技术研究[D].哈尔滨工业大学,2020.),将代码转化为图结构表示,并使用图网络进行特征提取,漏洞检测效果明显优于传统的机器学习方法。然而,图神经网络将代
码语句嵌入为图节点向量时,采用简单的Word2Vec或者Doc2Vec等静态技术,会让整个模型受预训练模型的影响,而无法实现良好的泛化性。

技术实现思路

[0005]本专利技术的目的在于提供一种基于数据依赖增强程序切片的源代码漏洞检测方法,通过对待检测代码进行检测,给出漏洞的位置信息帮助漏洞修复人员快速定位漏洞,并给出漏洞的类型,为快速修复漏洞提供帮助。
[0006]本专利技术通过下述技术方案实现:一种基于数据依赖增强程序切片的源代码漏洞检测方法,包括下述步骤:1)生成程序依赖图并进行数据增强:通过对源代码的分析,获得其数据依赖信息和控制依赖信息,并构建程序依赖图,而后对程序依赖图进行增强操作;2)将程序切片兴趣点作为切点进行程序切片,获得程序依赖图的子图,子图的漏洞分类标签由是否包含漏洞代码语句决定;子图的漏洞分类标签由是否包含漏洞代码语句决定的具体方式为:若子图包含漏洞代码语句,则该子图视为有漏洞的,且漏洞类型与生成该子图的程序依赖图的标签相同,若子图不包含漏洞代码语句,则该子图视为无漏洞的。
[0007]3)将源代码中的用户定义标识符进行匿名化,然后将代码中的各语义单元利用Word2Vec技术转化为向量,形成词典;4)将程序切片后得到的子图中各结点的代码语句依据步骤3)生成的词典转化为向量序列;5由于各结点的原始代码长度不同,导致结点的向量序列长度也不同,为了能够在后续步骤中使用图神经网络,因此采用门控循环递归神经网络将初始的结点向量嵌入为统一长度的向量。
[0008]6)将完成结点向量嵌入的子图送入图神经网络模型进行训练和测试,得到软件源代码的漏洞多分类检测模型。
[0009]7)对待检测源代码进行上述步骤1)至步骤4)的处理后,利用步骤6)训练好的软件源代码的漏洞多分类检测模型对处理后的待检测源代码进行推理预测,完成漏洞类型的检测。
[0010]进一步为更好地实现本专利技术所述的一种基于数据依赖增强程序切片的源代码漏洞检测方法,特别采用下述设置方式:由于传统的程序依赖图存在对函数调用语句的特殊处理,导致在函数调用语句中发生的数据污染行为不能被记录,因此本方法对程序依赖图进行数据依赖增强操作,通过对函数调用语句的特殊处理,修正传统程序依赖图中的数据依赖不准确的问题,并增强各代码语句与函数调用语句之间的数据依赖关系,而对所述程序依赖图进行增强操作的具体步骤包括:1.1)完成程序依赖图的构建后,先扫描所有结点,找出以引用类型或者指针类型作为参数的函数调用结点;1.2)对找到的函数调用结点进一步处理,找到其参数的数据依赖结点,并以该结点为起始结点在程序依赖图上进行后向切片;1.3)对于步骤1.2)所获得后向切片结果中的结点,选择结点索引(即对应的代码行行号)大于函数调用结点索引的结点,将该结点与函数调用结点之间建立数据依赖关系
并加入到原程序依赖图中。
[0011]进一步为更好地实现本专利技术所述的一种基于数据依赖增强程序切片的源代码漏洞检测方法,特别采用下述设置方式:所述程序切片的具体步骤如下:2.1)从切点出发进行常规的前向切片和后向切片,将切片结果纳入最终切片结果中;2.2)识别出最终切片结果中的条件语句结点,并将其作为切点进行前向切片,寻找其数据依赖结点;2.3)将步骤2.2)中的前向切片结果中的结点作为起始点再次进行后向切片,并将切片结果中结点索引大于条件结点索引的结点纳入最终切片结果。
[0012]进一步为更好地实现本专利技术所述的一种基于数据依赖增强程序切片的源代码漏洞检测方法,特别采用下述设置方式:所述程序切片兴趣点指包含容易造成程序本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于数据依赖增强程序切片的源代码漏洞检测方法,其特征在于:包括下述步骤:1)生成程序依赖图并进行数据增强:通过对源代码的分析,获得其数据依赖信息和控制依赖信息,并构建程序依赖图,而后对程序依赖图进行增强操作;2)将程序切片兴趣点作为切点进行程序切片,获得程序依赖图的子图,子图的漏洞分类标签由是否包含漏洞代码语句决定;3)将源代码中的用户定义标识符进行匿名化,然后将代码中的各语义单元利用Word2Vec技术转化为向量,形成词典;4)将程序切片后得到的子图中各结点的代码语句依据步骤3)生成的词典转化为向量序列;5)采用门控循环递归神经网络将初始的结点向量嵌入为统一长度的向量;6)将完成结点向量嵌入的子图送入图神经网络模型进行训练和测试,得到软件源代码的漏洞多分类检测模型;7)对待检测源代码进行步骤1)至步骤4)的处理后,利用步骤6)训练好的软件源代码的漏洞多分类检测模型对处理后的待检测源代码进行推理预测,完成漏洞类型的检测。2.根据权利要求1所述的一种基于数据依赖增强程序切片的源代码漏洞检测方法,其特征在于:对所述程序依赖图进行增强操作的具体步骤包括:1.1)完成程序依赖图的构建后,先扫描所有结点,找出以引用类型或者指针类型作为参数的函数调用结点;1.2)对找到的函数调用结点进一步处理,找到其参数的数据依赖结点,并以该结点为起始结点在程序依赖图上进行后向切片;1.3)对于步骤1.2)所获得后向切片结果中的结点,选择结点索引大于函数调用结点索引的结点,将该结点与函数调用结点之间建立数据依赖关系并加入到原程序依赖图中。3.根据权利要求1所述的一种基于数据依赖增强程序切片的源代码漏洞检测方法,其特征在于:所述程序切片的具体步骤如下:2.1)从切点出发进行常规的前向切片和后向切片,将切片结果纳入最终切片结果中;2.2)识别出最终切片结果中的条件语句结点,并将其作为切点进行前向切片,寻找其数据依赖结点;2.3)将步骤2.2)中的前向切片结果中的结点作为起始点再次进行后向切片,并将切片结果中结点索引大于条件结点索引的结点纳入最终切片结果。4.根据权利要求1所述的一种基于数据依赖增强程序切片的源代码漏洞检测方法,其特征在于:所述程序切片兴趣...

【专利技术属性】
技术研发人员:胡勇陈晓
申请(专利权)人:四川大学
类型:发明
国别省市:

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

1