一种基于图神经网络的源代码漏洞检测与定位方法技术

技术编号:34687018 阅读:18 留言:0更新日期:2022-08-27 16:20
本发明专利技术公开了一种基于图神经网络的源代码漏洞检测与定位方法,涉及计算机网络安全领域,该方法首先将目标程序拆解为函数代码,并解析所述函数代码生成代码属性图,所述代码属性图以抽象语法树、控制流图和数据流图融合表达代码语义、结构信息,并以所述抽象语法树节点类型和节点对应代码块表达代码语法、属性信息;接着,采用word2vec算法对节点进行向量化,并使用所述图神经网络模型GIN对所述代码属性图进行节点与图的表示学习,将漏洞检测与定位问题转化为图分类与节点分类问题,实现所述图神经网络模型对源代码信息的端到端学习。本发明专利技术不仅能实现代码函数级别的漏洞检测,还能定位到漏洞代码所在行,可快速定位到代码漏洞成因。因。因。

【技术实现步骤摘要】
一种基于图神经网络的源代码漏洞检测与定位方法


[0001]本专利技术涉及计算机网络安全领域,尤其涉及一种基于图神经网络的源代码漏洞检测与定位方法。

技术介绍

[0002]软件漏洞是由于软件开发者开发软件时的疏忽所形成的易被攻击者进行恶意利用的程序缺陷。随着全球软件数量越来越多,软件漏洞数量也增长迅速,且随着开源软件的盛行,上游软件漏洞的出现会给其所有下游软件带来安全威胁。因此,源代码漏洞检测技术在软件漏洞排查中起到关键作用。传统代码审查技术依赖基于专家经验设计的漏洞检测规则,在代码体量和复杂程度日渐增加的情况下难以满足对新型、未知漏洞检测的需求。采用机器学习的源代码漏洞检测方法虽然不再依赖于手工规则,但是仍然需要提取基于专家经验设计的源代码特征。近年来蓬勃发展的深度学习技术可以降低源代码漏洞检测技术对于专家经验的依赖,并大幅度提高了源代码漏洞检测精度,且深度学习模型的高泛化能力给新型漏洞的检测提供了可能。
[0003]现有的基于深度学习的源代码漏洞检测技术可以分为两种。第一种技术将源代码类比为自然语言,将代码关键字、变量等视为单词,整段代码视为由多个单词构成的句子。并采用自然语言处理领域常用的时间序列神经网络如LSTM、GRU对序列进行特征抽取与漏洞存在性分类。与自然语言相比,代码有既定的语法规则已经固定的关键字,具有结构化的特点。直接将代码视为单词序列会丢失代码的结构化信息,此外,将代码表示为固定长度序列还会丢失一定部分的上下文关联信息。因此,基于自然语言模型的源代码漏洞检测技术仍然存在较高的漏报率和误报率。第二种技术从源代码中提取结构化信息,将代码表示为图数据结构并采用图神经网络处理。代码属性图是一种常用的图表征,它融合了抽象语法树、控制流图和数据流图。抽象语法树是源代码的一种有序的树状表示结构,通常它是编译器用于理解程序的基本结构和检查语法错误的第一步代码表征,其节点包括代码块、语句、声明、变量等,充分表达了程序的语法信息。控制流图描述了程序执行过程中可能遍历到的所有路径,路径的选择是由条件语句决定的。控制流图中的节点表示语句和条件,它们由有向边连接以表示控制的转移。数据流图则描述了程序变量之间的计算依赖关系。控制流和数据流充分表达了程序的语义信息。代码属性图是三者的并集,以图的数据结构充分表征了源代码的语义语法特征,是一种理想的用于代码漏洞检测的代码表征方法。处理图结构的深度学习模型是图神经网络,故采用图神经网络对代码属性图进行图特征抽取与漏洞存在性分类。基于代码属性图和图神经网络的源代码漏洞检测方法相比基于自然语言模型的源代码漏洞检测方法,能更好地捕捉代码结构化特征,且图神经网络支持任意大小的图作为输入,解决了后者需要对序列裁剪拼接带来的信息丢失问题。由此可见,基于图神经网络的检测方法具有更好的有效性和通用性。
[0004]然而,现有的源代码漏洞检测方法多停留在函数级别或代码切片级别,无法定位到具体的漏洞代码所在行,属于粗粒度检测。而提供细粒度的检测结果能使得安全分析人
员或程序员能快速定位到漏洞成因,并做出相应的漏洞修复,具有实用性。
[0005]基于此,本专利技术提出了基于图神经网络的源代码漏洞检测与定位方法,该方法将函数代码表示为代码属性图,并采用图神经网络,对代码属性图的节点以及全图提取特征,全图特征用于代码函数级别漏洞检测,节点特征用于代码细粒度漏洞定位。

技术实现思路

[0006]有鉴于现有技术的上述缺陷,本专利技术所要解决的技术问题是如何对源代码进行漏洞检测与定位。
[0007]为实现上述目的,本专利技术提供了一种基于图神经网络的源代码漏洞检测与定位方法,其特征在于,该方法首先将目标程序拆解为函数代码,并解析所述函数代码生成代码属性图,所述代码属性图以抽象语法树、控制流图和数据流图融合表达代码语义、结构信息,并以所述抽象语法树节点类型和节点对应代码块表达代码语法、属性信息;接着,采用word2vec算法对节点进行向量化,并使用所述图神经网络模型GIN对所述代码属性图进行节点与图的表示学习,将漏洞检测与定位问题转化为图分类与节点分类问题,实现所述图神经网络模型对源代码信息的端到端学习。
[0008]进一步地,所述方法包括以下步骤:
[0009]步骤1:将所述目标程序拆解为所述函数代码;
[0010]步骤2:使用开源工具Joern提取函数的所述代码属性图;
[0011]步骤3:从所述代码属性图中还原函数的代码符号序列,基于所有函数的所述代码符号序列训练一个word2vec模型,并使用该模型对所述代码属性图节点进行向量化;
[0012]步骤4:使用所述图神经网络模型GIN对向量化后的图数据进行表示学习,学习每个节点的向量表示,并将所有节点的向量求平均值作为图的向量表示;节点的向量作为节点表征,图的向量作为图的表征;
[0013]步骤5:将节点表征和全图表征输入全连接层和softmax层得到漏洞预测与定位结果,并与标签信息计算交叉熵损失,调整网络参数;
[0014]步骤6:用训练好的图神经网络模型对代码进行漏洞检测与定位。
[0015]进一步地,所述步骤3还包括以下步骤:
[0016]步骤31:对于训练集中所有函数的所述代码属性图,按照深度优先搜索的顺序,提取所述代码属性图的叶子结点所对应的代码元素,从而构成代码元素序列库;
[0017]步骤32:基于所述代码元素序列库,训练所述word2vec模型;
[0018]步骤33:采用所述word2vec模型,对所述代码属性图的所有节点进行向量化。
[0019]进一步地,所述步骤33中,其中叶子结点对应单个代码元素,可直接从模型词典中获取词向量,非叶子结点对应代码块,将其按语法结构拆分为所述代码元素,并将所有所述代码元素的向量求和作为非叶子结点的所述词向量。
[0020]进一步地,所述步骤4还包括以下步骤:
[0021]步骤41:将节点对应代码的向量化与节点类型独热编码结果求和最为节点初始化向量
[0022]步骤42:将向量化后的所述代码属性图输入所述图神经网络模型GIN进行前向传播;
[0023]步骤43:将得到的节点特征向量求和作为全图特征向量。
[0024]进一步地,所述步骤42中所述图神经网络模型GIN通过pytorch geometric提供的api实现。
[0025]进一步地,所述步骤5中,所述全图表征用于函数级别漏洞预测,与标签信息计算交叉熵损失L1,若为漏洞函数,则选择所有节点中表达语句的节点向量,送入全连接层和softmax层得到漏洞定位结果,与细粒度标签信息计算交叉熵损失L2,两个损失求和得到最终损失,通过反向传播调整网络参数直到收敛。
[0026]进一步地,所述步骤6中训练得到的所述图神经网络模型对于未知函数能计算得到图特征表示和节点特征表示。
[0027]进一步地,所述图特征表示用于判断函数是否存在漏洞。
[0028]进一步地,所述节点特征可用于定位所述漏洞所在本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于图神经网络的源代码漏洞检测与定位方法,其特征在于,该方法首先将目标程序拆解为函数代码,并解析所述函数代码生成代码属性图,所述代码属性图以抽象语法树、控制流图和数据流图融合表达代码语义、结构信息,并以所述抽象语法树节点类型和节点对应代码块表达代码语法、属性信息;接着,采用word2vec算法对节点进行向量化,并使用所述图神经网络模型GIN对所述代码属性图进行节点与图的表示学习,将漏洞检测与定位问题转化为图分类与节点分类问题,实现所述图神经网络模型对源代码信息的端到端学习。2.如权利要求1所述的基于图神经网络的源代码漏洞检测与定位方法,其特征在于,所述方法包括以下步骤:步骤1:将所述目标程序拆解为所述函数代码;步骤2:使用开源工具Joern提取函数的所述代码属性图;步骤3:从所述代码属性图中还原函数的代码符号序列,基于所有函数的所述代码符号序列训练一个word2vec模型,并使用该模型对所述代码属性图节点进行向量化;步骤4:使用所述图神经网络模型GIN对向量化后的图数据进行表示学习,学习每个节点的向量表示,并将所有节点的向量求平均值作为图的向量表示,节点的向量作为节点表征,图的向量作为图的表征;步骤5:将所述节点表征和所述全图表征输入全连接层和softmax层得到漏洞预测与定位结果,并与标签信息计算交叉熵损失,调整网络参数;步骤6:用训练好的图神经网络模型对代码进行漏洞检测与定位。3.如权利要求2所述的基于图神经网络的源代码漏洞检测与定位方法,其特征在于,所述步骤3还包括以下步骤:步骤31:对于训练集中所有函数的所述代码属性图,按照深度优先搜索的顺序,提取所述代码属性图的叶子结点所对应的代码元素,从而构成代码元素序列库;步骤32:基于所述代码元素序列库,训练所述word2vec模型;步骤33:采用所述word2vec模型,...

【专利技术属性】
技术研发人员:王佳慧吴搏伦
申请(专利权)人:天桐苏州网络科技有限公司
类型:发明
国别省市:

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

1