基于深度学习的跨文件调用漏洞挖掘方法技术

技术编号:37155074 阅读:10 留言:0更新日期:2023-04-06 22:15
本发明专利技术公开了一种基于深度学习的跨文件调用漏洞挖掘方法,该方法包括以下步骤:1)将待检测的当前文件的源代码转换为程序依赖图;2)在程序依赖图的基础上遍历图节点,通过图节点信息观察函数调用关系,融合当前文件与被调用文件的图特征为PDGcross特征;3)将PDGcross特征处理为特征矩阵,为每一矩阵贴上漏洞标签,生成训练样本;4)利用神经网络在含有标签的数据集上训练出分类模型,进行漏洞检测与漏洞类别的预测。本发明专利技术方法在检测未知漏洞时,在检测多文件调用漏洞方面具有优良的识别率和准确率。和准确率。和准确率。

【技术实现步骤摘要】
基于深度学习的跨文件调用漏洞挖掘方法


[0001]本专利技术涉及信息安全技术,尤其涉及一种基于深度学习的跨文件调用漏洞挖掘方法。

技术介绍

[0002]随着软件的复杂性不断提高,漏洞的形态变得多样化,软件漏洞检测技术需求不断增加。为了实现漏洞检测的高准确率、低误报率,大量的深度学习方法被尝试用于检测源代码漏洞问题中,以实现漏洞检测的自动化和智能化。在目前的漏洞检测中,重点关注于单个文件内部是否存在漏洞。然而在实际的项目开发中代码规模大,多包含文件与文件之间的函数调用与参数传递,检测过程中都忽略了文件与文件之间可能存在的调用关系以及可能由于该类调用关系而产生的漏洞,多文件间的函数调用关系而产生的漏洞危害性较高,但关注度较低,检测难度较高。

技术实现思路

[0003]本专利技术要解决的技术问题在于针对现有技术中的缺陷,提供一种基于深度学习的跨文件调用漏洞挖掘方法。
[0004]本专利技术解决其技术问题所采用的技术方案是:一种基于深度学习的跨文件调用漏洞挖掘方法,包括以下步骤:
[0005]1)将待检测的当前文件的源代码通过开源工具Sourcedg转换为程序依赖图;
[0006]所述程序依赖图包括控制依赖图(CDG,Control Dependence Graph)和数据依赖图(DDG,Data Dependence Graph);
[0007]2)在程序依赖图的基础上遍历图节点,通过图节点信息观察函数调用关系,融合当前文件与被调用文件的图特征为PDGcross特征;
>[0008]具体如下:
[0009]2.1)在程序依赖图的基础上遍历图节点,判断当前文件代码中有无跨文件的函数调用事件;若无则不做处理,若有函数调用事件,则确定被调用文件,将被调用文件划分在当前文件的代码群中;
[0010]2.2)在当前文件所拥有的代码群中,通过数据流分析和控制流分析,融合被调用文件的节点,通过节点间数据依赖关系和控制依赖关系添加边信息,为当前文件形成一个新的跨文件图表征;
[0011]所述边信息为:在构建代码群时的过程中,用字典的形式来存储任一单文件内的方法和声明方法的节点地址,即字典名{方法名:节点地址};在产生调用关系之后,查找被调用文件中该方法的节点地址,最后存储为{调用节点地址:被调用地址}的格式,即为图融合中需要新增的边信息;
[0012]3)采用Node2Vec的图嵌入算法将PDGcross特征处理为特征矩阵,为每一矩阵贴上漏洞标签生成训练样本;
[0013]在PDGcross特征的基础上通过图嵌入得到特征矩阵后,在仅需要区分有无漏洞时,可按照文件是否含有漏洞为该文件对应的特征矩阵添加相应的标签,1为有漏洞,0为无漏洞;在需要对漏洞进行分类时,可按照文件含有漏洞类型为该文件对应的特征矩阵添加相应的标签。
[0014]4)利用神经网络在含有标签的数据集上训练出分类模型,进行漏洞检测和漏洞类别的预测。
[0015]按上述方案,所述步骤1)中,还包括对当前文件的源代码数据集进行处理的步骤,所述处理包括对数据集进行清洗、集成、规约;然后将软件程序数据集解析为程序依赖图,方便后续模型的训练。
[0016]按上述方案,所述步骤1)中,在Sourcedg通过JAVA源代码生成程序依赖图(PDG)的过程中,将程序依赖图的节点和边划分为多种类型,通过不同类型之间的关系进行图的绘制,有选择的保留节点和边;
[0017]其中,保留节点的类型包括类声明、实参的传入传出、形参的传入传出、方法入口和赋值;保留边的关系为用实线边表示的实际控制边和用虚线边表示的非实际控制边。
[0018]本专利技术产生的有益效果是:
[0019]本专利技术方法用于多文件间调用产生的漏洞检测,确定了被调用的文件范围,利用图表征技术中的程序依赖图实现了多文件的融合。采用LSTM神经网络,利用批标准化进行归一化处理,学习且训练出相应的漏洞分类模型。实验在CWE15、CWE89、CWE90这三种漏洞的小规模数据集上取得了91%的精确率和90%的召回率,在检测多文件调用漏洞方面优于现有工具。
附图说明
[0020]下面将结合附图及实施例对本专利技术作进一步说明,附图中:
[0021]图1是本专利技术实施例的方法流程图;
[0022]图2是本专利技术实施例的调用漏洞代码示例图。
具体实施方式
[0023]为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合实施例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本专利技术,并不用于限定本专利技术。
[0024]如图1所示,一种基于深度学习的跨文件调用漏洞挖掘方法,包括以下步骤:
[0025]1)将待检测的当前文件的源代码通过开源工具Sourcedg转换为程序依赖图;
[0026]所述程序依赖图包括控制依赖图(CDG,Control Dependence Graph)和数据依赖图(DDG,Data Dependence Graph);
[0027]2)在程序依赖图的基础上遍历图节点,通过图节点信息观察函数调用关系,融合当前文件与被调用文件的图特征为PDGcross特征;
[0028]具体如下:
[0029]2.1)在程序依赖图的基础上遍历图节点,判断当前文件代码中有无跨文件的函数调用事件;若无则不做处理,若有函数调用事件,则确定被调用文件,将被调用文件划分在
当前文件的代码群中;
[0030]2.2)在当前文件所拥有的代码群中,通过数据流分析和控制流分析,融合被调用文件的节点,通过节点间数据依赖关系和控制依赖关系添加边信息,为当前文件形成一个新的跨文件图表征;
[0031]所述边信息为:在构建代码群时的过程中,用字典的形式来存储任一单文件内的方法和声明方法的节点地址,即字典名{方法名:节点地址};在产生调用关系之后,查找被调用文件中该方法的节点地址,最后存储为{调用节点地址:被调用地址}的格式,即为图融合中需要新增的边信息;
[0032]对于跨文件的函数调用,Sourcedg无法发现文件之间及函数之间的关系,仅仅依靠PDG的表征方法对多文件的函数调用产生的漏洞检测效率低下。
[0033]以图2所示的代码为例,源文件A调用BC源文件,ABC源文件在单个检测时并无漏洞,但由于A调用了BC,导致在参数传递之后在A中形成了一个较为典型的SQL注入漏洞语句。在常见的漏洞检测方法中,一般在文件粒度上进行检测,即ABC分别检测,A中调用语句产生的数据流和控制流并不会被过多的关注,仅仅是作为普通的语句进行检测。对于单个文件即造成漏洞的对于ABC该种文件间调用传参而造成的代码漏洞则被一定程度上忽略,可能变成漏洞攻击的薄弱之处。因此,本申请的主要研究目的是要捕获ABC代码块之间的调用关系,通过观察调用关系而产生的数据流和控制流进一步的进行漏洞检测。
[0034]本申请在PDG的基础上进行节点的遍历,确定当前文件是否调用了本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于深度学习的跨文件调用漏洞挖掘方法,其特征在于,包括以下步骤:1)将待检测的当前文件的源代码转换为程序依赖图;所述程序依赖图包括控制依赖图和数据依赖图;2)在程序依赖图的基础上遍历图节点,通过图节点信息观察函数调用关系,融合当前文件与被调用文件的图特征为PDGcross特征;具体如下:2.1)在程序依赖图的基础上遍历图节点,判断当前文件代码中有无跨文件的函数调用事件;若无则不做处理,若有函数调用事件,则确定被调用文件,将被调用文件划分在当前文件的代码群中;2.2)在当前文件所拥有的代码群中,通过数据流分析和控制流分析,融合被调用文件的节点,通过节点间数据依赖关系和控制依赖关系添加边信息,为当前文件形成一个新的跨文件图表征;所述边信息为:在构建代码群时的过程中,用字典的形式来存储任一单文件内的方法和声明方法的节点地址,即字典名{方法名:节点地址};在产生调用关系之后,查找被调用文件中该方法的节点地址,最后存储为{调用节点地址:被调用地址}的格式,即为图融合中需要新增的边信息;3)将PDGcross特征处理为特征矩阵,为每一矩阵贴上漏洞标签,生成训练样本...

【专利技术属性】
技术研发人员:李涛
申请(专利权)人:武汉市教云慧智信息技术有限公司
类型:发明
国别省市:

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

1