首页> 中国专利> 一种基于深度学习的图自信学习软件漏洞检测方法

一种基于深度学习的图自信学习软件漏洞检测方法

摘要

本发明公开了一种基于深度学习的图自信学习软件漏洞检测方法,包括:对源代码进行构图:将唯一的单词表示为顶点,将单词之间的协同表示为边来构造代码的图,获取每个图的连接的边的初始特征以及每个节点的初始特征值;构建深度置信网络模型,将转化为图结构的数据集输入至该模型中,找出数据集中是噪音的样本,把噪音样本从数据集中删除;使用门控图神经网络聚集和传递代码图中相邻代码节点的信息,学习代码节点的特征并进行图级预测从而对软件代码漏洞进行检测。该方法通过深度学习的图自信学习软件漏洞检测方法来训练识别软件漏洞模型,在检测软件漏洞方面取得了良好的效果,提高了在软件性能问题。

著录项

  • 公开/公告号CN113378178B

    专利类型发明专利

  • 公开/公告日2023.08.22

    原文格式PDF

  • 申请/专利权人 大连海事大学;

    申请/专利号CN202110687688.5

  • 申请日2021.06.21

  • 分类号G06F21/57(2013.01);G06F8/41(2018.01);G06F40/30(2020.01);G06N3/048(2023.01);G06N3/08(2023.01);

  • 代理机构大连东方专利代理有限责任公司 21212;大连东方专利代理有限责任公司 21212;

  • 代理人姜玉蓉;李洪福

  • 地址 116026 辽宁省大连市高新园区凌海路1号

  • 入库时间 2023-09-15 19:05:41

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-08-22

    授权

    发明专利权授予

说明书

技术领域

本发明涉及软件漏洞检测技术领域,尤其涉及一种基于深度学习的图自信学习软件漏洞检测方法。

背景技术

代码漏洞与缺陷从有软件开始就一直伴随。早期的漏洞检测方法有静态分析方法、动态分析方法和符号执行方法。静态分析主要通过量化软件代码为静态属性或特征,用这个特征来代表软件代码的一个模块或者一个方法,然后标记这些特征对应的状态(有无漏洞),通过对这些特征向量和对应的标记信息进行统计分析,构建预测模型。然后对新的软件代码量化为同样的特征属性,用预测模型进行预测是否有漏洞或者缺陷。动态分析预测是通过采集软件运行过程中的漏洞缺陷信息以及状态与过程信息等,挖掘和探究这些信息与漏洞发生的相关关系,进而根据软件系统运行过程中的状态与过程信息,预测软件代码的漏洞与缺陷情况。符号执行用符号值替换输入数据,并在程序的控制流图上分析他们的使用。除了上面的静态分析方法、动态分析方法、符号执行的这些经典方法之外,越来越多的工作将机器学习方法应用于代码漏洞检测,并取得了许多进步。使用机器学习的方法是将人类专家手工制作的特征或者模式作为输入来检测漏洞。但是由于漏洞类型和库的不同,利用手工制作的特征来表征众多库的所有漏洞是不切实际的。

为了避免人类安全专家花费大量的时间和精力进行手工定义漏洞特征和模式,现有技术中采用基于深度特征表示学习的漏洞检测工具,即使用卷积神经网络和循环神经网络从嵌入的源代码进行特征提取,并输入到集成分类器(RF)中,预测代码是否含有漏洞,但是该方法大部分工作中使用的模型传统神经网络都是基于序列的模型,但是基于序列的模型在学习源代码表示时存在一个问题:与自然语言相比,编程语言是形式语言,用他们编写的源代码是明确的和结构化的。因此他们按照顺序处理代码token时,并不会对源代码的非顺序结构建模,从而忽略了代码的结构信息。

发明内容

根据现有技术存在的问题,本发明公开了一种基于深度学习的图自信学习软件漏洞检测方法,具体包括如下步骤:

对源代码进行构图:将唯一的单词表示为顶点,将单词之间的协同表示为边来构造代码的图,获取每个图的连接的边的初始特征以及每个节点的初始特征值;

构建深度置信网络模型,将转化为图结构的数据集输入至该模型中,找出数据集中是噪音的样本,把噪音样本从数据集中删除;

使用门控图神经网络将代码图中相邻代码节点的信息进行聚集和传递,学习代码节点的特征并进行图级预测从而对软件代码漏洞进行检测。

进一步的,对于边的初始特征,使用NL Graph Embedding方法来获得边权,对于节点的初始特征使用一个经过Glove训练的一个单词嵌入字典来获得每个单词的嵌入向量。

进一步的,对源代码进行构图时首先对单词节点初始化,将源代码的构成的图作为输入,对于每个单词节点v∈V进行初始化,公式为

单词节点间的相互作用:在每个时间步t≤T,每个单词节点既接受相邻节点的信息、又向相邻节点发送信息,使用邻接矩阵表示节点和节点之间的相邻关系,节点之间的相互作用公式为

进一步的,深度置信网络模型识别现有代码脆弱性数据集中的表征噪声和标记错误包括以下三个步骤:

使用置信联合描述和查找标签错误:联合分布描述了数据中噪声标签和真实标签的分布情况,对于数据中的样本计数统计属于另一个类别的例子并进行校准;

置信联合矩阵

其中,阈值t

通过置信联合矩阵

找出并过滤掉错误样本:在进行联合估计得到

过滤样本后重新训练:采用上述方法过滤掉数据集中的噪声样本,将去噪后数据集中源代码构图并输入至门控图神经网络中重新训练并进行代码漏洞的预测分析。

由于采用了上述技术方案,本发明提供的一种基于深度学习的图自信学习软件漏洞检测方法,该方法综合考虑源代码丰富的结构和语义信息,对源代码进行构图,由于漏洞的多样性和复杂性,数据中含有大量的噪声,使用该方法可以对参与训练的数据进行去噪处理,基于去噪之后数据集再对模型进行训练,因此可以更加有效的对代码漏洞进行预测分析。该方法通过深度学习的图自信学习软件漏洞检测方法来训练识别软件漏洞模型,捕捉源代码中重要的结构和语义信息,并且能去除数据集中的噪音数据,在一个公共数据集上进行性能调查,结果表明,本发明在检测软件漏洞方面取得了良好的效果,提高了在软件性能问题。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明GCL4SVD模型图;

图2为本发明实施例中滑动窗口示例图。

具体实施方式

为使本发明的技术方案和优点更加清楚,下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚完整的描述:

如图1所示的一种基于深度学习的图自信学习软件漏洞检测方法,具体包括如下步骤:

S1:对源代码进行构图:将唯一的单词表示为顶点,将单词之间的协同表示为边来构造代码的图,获取每个图的连接的边的初始特征以及每个节点的初始特征值。

我们通过将唯一的单词表示为顶点,将单词之间的协同表示为边,来构造代码的图,表示为G=(V,E),其中V是顶点集,E是边。在构图过程中不仅需要获得每个图的连接的边的初始特征,也需要获得每个节点的初始特征值。对于边的初始特征,我们使用了NLGraph Embedding的方法来获得边权,对于节点的初始特征,我们使用一个经过Glove训练的一个单词嵌入字典(glove.6B.300)来获得每个单词的嵌入向量。

考虑源代码的结构信息和语义信息,我们采用了滑动窗口词共现机制对函数级别的代码构图。如图2所示,使用窗口大小等于3,来进行详细的说明。对于NL”static voidcheck_lowpass_line(int depth)”,我们首先将所有单词去重,将每个单词映射到一个索引,然后获取所有的滑动窗口,之后,我们对于每个滑动窗口进行处理。具体为,对于每个滑动窗口中的每一个单词,我们将其认为是一个节点V,我们统计当前滑动窗口W

基于置信学习(CL)框架提出了一种图置信学习(GCL)方法来解决代码脆漏洞数据集中存在大量表征噪声和标注错误的问题

S2:构建深度置信网络模型,将转化为图结构的数据集输入至该模型中,找出数据集中是噪音的样本,把噪音样本从数据集中删除。

在含有噪声标签的代码漏洞数据集中,[m]表示不同标签类别的集合,X表示n个实例和相关噪声标签y~的代码漏洞数据集,

基于CL框架,该框架通过计数、排序和剪枝来估计噪声标签和真实标签的联合分布,GCL需要两个输入:(1)对于每一个样本x

S3:使用门控图神经网络将代码图中相邻代码节点的信息进行聚集和传递,学习代码节点的特征并进行图级预测从而对软件代码漏洞进行检测。

在该组件中,使用GGNNs聚集和传递代码图中相邻代码token节点的信息,学习代码令牌节点的特征,并进行图级预测,检测软件代码漏洞。

单词节点初始化,将源代码的构成的图作为输入,对于每个单词节点v∈V,在开始我们对其进行初始化,公式为

单词节点间的相互作用:在每个时间步t≤T,每个单词节点既可以接受相邻节点的信息,又可以向相邻节点发送信息。使用邻接矩阵表示节点和节点之间的相邻关系,节点之间的相互作用公式为

更新门的计算:更新门能帮助模型决定将多少过去的单词节点交互信息传递到未来,或前一时间步和当前时间步的信息有多少需要继续传递。在时间步t,我们使用以下公式计算更新门

重置门的计算:重置门与更新门类似,但是线性变换的参数和用处不一样,它能帮助模型决定到底有多少过去的信息需要遗忘。

单词节点状态的更新:对于单词节点状态的更新需要综合考虑过去的信息以及新的记忆信息。计算表达式为

在经过前面一系列的计算之后,得到了更新门、重置门以及新的记忆信息,最后计算

在单词节点被充分更新后,它们被聚合到函数代码的图形级表示,并基于该表示生成最终预测,即是否源代码是否有缺陷。我们将readout功能定义如下

最后,通过将图级向量输入到softmax层来预测标签。我们通过交叉熵函数将损失最小化

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号