一种基于超图神经网络的程序漏洞检测方法及系统

未命名 07-14 阅读:161 评论:0


1.本发明涉及到信息安全领域,尤其涉及到一种基于超图神经网络的程序漏洞检测方法及系统。


背景技术:

2.随着信息技术时代的发展,越来越多的人工智能技术被应用于智能软件工程的发展。程序安全性是软件工程中的重要组成部分,静态代码检测技术可以在不实际执行程序的前提下进行代码的分析和检测,并且具有对于检测环境要求低,语言覆盖面广,错误类型覆盖率高等特点,可以在软件开发早期发现错误并以此来降低开发和维护的成本。
3.但是静态代码检测技术仍然未获得工业界大多数开发者的认可,传统静态代码检测技术中基于静态语义的检测方式具有高误报率的缺点,该方法是基于一个工程项目或者一份代码文件,难以精确定位代码中缺陷的位置,具有检测粒度大的缺点,同时基于代码规约的检测工具需要针对不同的生产环境编写不同的检测方案,具有迁移困难的缺点。传统静态代码检测技术对于逻辑上等较为复杂的代码缺陷,如果没有明确的规范将难以识别,具有对复杂逻辑漏洞乏力的缺点。高误报率、检测粒度大、迁移困难以及对于复杂的逻辑漏洞的乏力是阻碍其广泛应用的主要原因。
4.在现有技术中,较为前沿的是将机器学习相关技术与传统的静态代码检测技术相融合。机器学习属于人工智能的一个类目,深度学习是机器学习中一种基于神经网络的数据表征学习方法。静态代码缺陷检测技术是智能软件工程领域的一个重要部分,这些技术为使用深度学习方法来进行静态代码缺陷检测提供了坚实的基础。然而,缺乏可靠不重复的代码数据集成为构建深度学习模型的一大难题,同时由于不同的开发环境的差异性,程序检测的准确率也会受到影响。


技术实现要素:

5.鉴于现有技术的上述不足,本发明提供一种基于超图神经网络的程序漏洞检测方法及系统,解决相关技术中程序代码检测准确率低、检测粒度大以及对于复杂的逻辑漏洞的乏力的问题。
6.第一方面,本发明提供一种基于超图神经网络的程序漏洞检测方法,所述方法包括如下步骤:
7.获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;
8.提取所述源程序的控制流信息和数据流信息,构建程序依赖图;
9.根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;
10.将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息;
11.根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;
12.利用所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。
13.作为优选的,对所述源程序的语句进行标注,得到带标签的标准数据集,包括如下步骤:
14.根据所述源程序修改和提交记录对每一条语句进行标注,在修复提交中标明安全的语句,在含有bug的提交中标明含有漏洞的语句。
15.作为优选的,提取所述源程序的控制流信息和数据流信息,构建程序依赖图,包括如下步骤:
16.利用传统静态程序分析框架提取源程序的控制流信息和数据流信息,基于控制依赖关系和数据依赖关系构建程序依赖图。
17.作为优选的,根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息,包括如下步骤:
18.利用传统静态程序分析框架识别系统api调用,采用语法解析器antlr识别算数操作符作为补充,将被识别的语句作为所述程序依赖图的兴趣点;
19.从所述兴趣点开始,沿着所述程序依赖图分别进行向前和向后遍历,获取正向切片语句集和后向切片语句集的语句,作为所述程序依赖图子图的节点;
20.根据程序依赖图的边来连接所述节点,得到所述程序依赖图子图,其中所述程序依赖图子图的边即为源程序的结构化信息。
21.作为优选的,将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息之前,还包括如下步骤:
22.将所述源程序中的变量和函数映射到设置好的符号映射表中的规范符号名进行变量名归一化。
23.作为优选的,将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息,包括如下步骤:
24.将所述程序依赖图子图输入到bert模型,采用掩码训练方式,利用每个词的上下文信息进行训练,动态地将每个词编码为固定长度的词向量,得到程序依赖图子图的节点信息,即为源程序的非结构化信息。
25.作为优选的,根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型,包括如下步骤:
26.利用所述源程序的结构化信息和非结构化信息将所有的程序依赖图子图依次构建成超图结构,输入到超图神经网络中;
27.所述超图神经网络获取每个程序依赖图子图的向量表示形式,得到相应的超图的表示向量;
28.利用所述超图的表示向量对所述超图神经网络进行训练,得到检测模型。
29.第二方面,本发明提供一种基于超图神经网络的程序漏洞检测系统,所述系统包括:
30.获取模块,用于获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;
31.程序依赖图构建模块,提取所述源程序的控制流信息和数据流信息,构建程序依赖图;
32.结构化信息获取模块,用于根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;
33.非结构化信息获取模块,用于将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息;
34.模型训练模块,用于根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;
35.检测模块,用于所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。
36.第三方面,本发明提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如本发明第一方面所述基于超图神经网络的程序漏洞检测方法的步骤。
37.第四方面,本发明提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如本发明第一方面所述基于超图神经网络的程序漏洞检测方法的步骤。
38.本发明提供的一种基于超图神经网络的程序漏洞检测方法及系统利用深度学习的相关技术,通过动态的方式学习不同项目中的程序漏洞的特征,克服传统静态检测高误报率的问题;通过构建并训练面向程序切片的深度学习模型,减小了代码检测的粒度;利用超图神经网络并以程序依赖图为基础进行训练,训练过程中保留了程序的逻辑上的关联,有利于处理复杂逻辑的代码缺陷;同时本发明构建的检测模型及其数据集可以通过迁移学习等方式快速应用于另一个项目中。
附图说明
39.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
40.图1为本发明实施例提供的基于超图神经网络的程序漏洞检测方法流程图;
41.图2为本发明实施例中程序依赖图生成程序依赖图子图的示意图;
42.图3为本发明实施例中利用bert模型对语句进行预处理的示意图;
43.图4为本发明实施例中利用bert模型将语句转化为向量表示的示意图;
44.图5为本发明实施例中将程序依赖图子图转化为超图的过程示意图;
45.图6为本发明实施例中超图神经网络模型进行代码缺陷检测的过程示意图;
46.图7为本发明实施例提供的基于超图神经网络的程序漏洞检测系统结构示意图;
47.图8为根据本发明实施例的实体结构示意图。
具体实施方式
48.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明的技术方案作进一步清楚、完整地描述。需要说明的是,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人
员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
49.本技术实施例中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。
50.本技术实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。本技术的描述中,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列部件或单元的系统、产品或设备没有限定于已列出的部件或单元,而是可选地还包括没有列出的部件或单元,或可选地还包括对于这些产品或设备固有的其它部件或单元。本技术的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
51.机器学习属于人工智能的一个类目,深度学习是机器学习中一种基于神经网络的数据表征学习方法。静态代码缺陷检测技术是智能软件工程领域的一个重要部分,这些技术为使用深度学习方法来进行静态代码缺陷检测提供了坚实的基础。然而,缺乏可靠不重复的代码数据集成为构建深度学习模型的一大难题,同时由于不同的开发环境的差异性,程序检测的准确率也会受到影响。
52.超图是一种广义上的图,其边可以和任意数量的节点进行连接,因此可以易于表征代码结构的高阶关系,超图神经网络用于学习超图中的节点表示和复杂关系。本发明利用超图神经网络,以程序依赖图为基础通过动态的方式学习不同项目中的程序漏洞的特征,构建并训练面向程序切片的深度学习模型进行程序漏洞的检测。
53.图1为本发明实施例提供的基于超图神经网络的程序漏洞检测方法流程图,如图1所示,所述方法包括以下步骤:
54.s1、获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;
55.通过程序的提交信息来提取bug修复提交记录,然后手动检测每个bug修复提交记录。根据源程序修改和提交记录对每一条语句进行标注,分别在修复提交记录中标明安全的语句,在对应含有bug的提交中标明含有漏洞的语句,并整理为带有标签的标准数据集,后续用于程序依赖图(program dependence graph,pdg)的切片以及超图神经网络的训练。
56.s2、提取所述源程序的控制流信息和数据流信息,构建程序依赖图;
57.利用传统静态程序分析框架(static value-flow analysis,svf)提取源程序的控制流信息和数据流信息,得到控制流图(control flow graph,cfg)和数据流图(data flow graph,dfg)。
58.通过程序的控制流图计算两条语句之间的控制依赖关系,其中每个节点代表一条指令(程序语句),每条边连接两个节点,表示两条指令之间的控制流或执行顺序。通过程序的程序间数据流图上的解除使用关系获得数据依赖性,在数据流图中,每个节点表示一条指令(即程序语句),每条边表示两个语句之间的一个变量的解除使用关系。
59.将控制依赖关系和数据依赖关系融合到同一张图中,即可构建程序依赖图,程序依赖图是程序的一种图形表示,它是带有标记的有向多重图,它能够表示程序的控制依赖和数据依赖关系。
60.s3、根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据
所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;
61.静态程序分析框架是一个基于llvm静态指针和程序依赖关系分析的开源框架,包括全程序调用图创建,流敏感,上下文敏感的指针分析,基于数据流和控制流的软件错误检测,例如内存泄漏,空指针,文件开关等。
62.图2为本发明实施例中程序依赖图生成程序依赖图子图的示意图,利用传统静态程序分析框架识别系统api调用,采用语法解析器antlr识别算数操作符作为补充,将被识别的语句作为所述程序依赖图的兴趣点。然后从这些兴趣点开始,沿着程序依赖图分别进行向前和向后遍历,获取正向切片语句集和后向切片语句集的语句,作为所述程序依赖图子图的节点。最后根据程序依赖图的边来连接所述节点,得到所述程序依赖图子图,其中所述程序依赖图子图的边即为源程序的结构化信息。
63.s4、将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息;
64.首先,将用户定义的变量和函数映射到设置好的符号映射表中的规范符号名来进行变量名归一化,可以减少程序变量的个性化命名约定引入的噪声。
65.再利用bert模型将所述程序依赖图子图的每个节点转化为向量,得到所述源程序的非结构化信息。
66.将程序依赖图子图的每个节点作为bert模型的输入,采用掩码训练方式,利用每个词的所有上下文信息进行训练,动态地将每个单词编码为固定长度的词向量,得到程序依赖图子图的节点信息,即为源程序的非结构化信息。
67.bert(bidirectional encoder representation from transformers)是一个面向自然语言处理任务的无监督预训练语言模型,其在结构上是一个多层的双向transformer的encoder编码模型。
68.图3为本发明实施例中利用bert模型对语句进行预处理的示意图,如图所示,对于代码中的函数声明语句int func(char*var0,int var1),取其中15%的代码单词做掩码操作后,输入到bert模型中进行训练,采用掩码训练方式,利用每个词的所有上下文信息进行训练。
69.图4为本发明实施例中利用bert模型将语句转化为向量表示的示意图,利用训练好的bert模型动态地将每个单词编码为固定长度的词向量(t1,t2,

,t10),得到程序依赖图子图的节点信息,即为源程序的非结构化信息。
70.s5、根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;
71.构建基于超图神经网络的静态代码缺陷检测模型,以源程序结构化信息(程序依赖图子图的边)和非结构化信息程序依赖图子图上每个节点信息转化而来的嵌入向量)构建超图结构,作为超图神经网络的输入进行学习训练,通过超图神经网络挖掘代码语句之间的相关信息,提高建模数据的完整性,最终检测源程序的每一个片段(即程序依赖图子图)是否包含缺陷。
72.图5为本发明实施例中超图神经网络模型进行代码缺陷检测的过程示意图,具体可以分为三个步骤:超图的构建,超图神经网络特征提取,程序缺陷检测。
73.第一步利用先前步骤获得的一批程序依赖图子图去构建超图结构,相比普通图而言,超图可以用其无度数限制的超边连接任意数量的顶点。超图g可以表示为g=(v,e,w),
其中v代表顶点元素的集合,e为超边集合,w代表超边的权重。
74.图6为本发明实施例中将程序依赖图子图转化为超图的过程示意图,我们将程序依赖图子图上每个节点信息转化而来的嵌入向量作为我们的顶点集v,利用程序依赖图子图的关联信息去构建超边集合e,具体来说首先将程序依赖图子图转换为无向图,将其邻接关系作为第一个超边组e1,依次对程序依赖图子图所有节点进行一阶宽度遍历,每个节点和其遍历的邻居节点形成一条超边,遍历所有节点即可得到超边组e2,同理进行二阶宽度遍历获得超边组e3,利用超边的可拓展性,我们将三组超边组进行融合构成超边集合e,超边权重w作为一个自适应可学习的一个集合,将所有的程序依赖图子图依次构建成超图结构,作为超图神经网络的输入。
75.第二步我们利用超图神经网络去获取每个程序依赖图子图的向量表示形式,将上一节构建的超图作为网络的输入,输入对象包含两个部分:构建的超边集合e(即结构化信息h)与嵌入的代码tokens集合v(即非结构化信息x)。
76.超图神经网络由多个特征提取模块(conv-pooling)组成,每个模块分别包含三层:超图卷积层(hgcl),超图池化层(hgpl),超图读出层(hgpl)。首先通过超图卷积层进行超边卷积操作,运算公式如下。
[0077][0078]
其中x为嵌入的代码tokens集合v的特征表示,h是由超边集合e构建的邻接矩阵,dv和de分别代表节点的度矩阵和超边的度矩阵,θ是可学习滤波器用来更新节点信息,y是超图卷积层的输出,其作用是使每个节点聚合其相邻节点信息并对节点信息进行更新。其次经过超图池化层利用top-kpool进行图塌陷,按k倍率(如k=0.7)减小超图的大小。最后经过超图读出层,将所有超图节点的信息扁平成一个固定长度的向量,以便后续进行超图的分类任务。所有模块共用一个超图读出层,每个模块后通过平均池(mean pooling)和最大池(max pooling)连接实现的超图读出层,最后再将每个模块读出的信息聚合到一起,最终得到超图的表示向量。
[0079]
第三步利用上一步中得到的超图向量进行缺陷检测,将获得的超图向量输入到一个允许检测特征之间的高阶关系的隐藏的完全连接层(mlp),进行分类工作,然后利用一个softmax层根据带标签的标准数据集来输出代码语句安全或者带漏洞的概率,从而判断代码语句是否存在缺陷。
[0080]
s6、利用所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。
[0081]
基于相同的技术构思,本发明实施例提供了一种基于超图神经网络的程序漏洞检测系统,图7为本发明实施例提供的系统结构示意图,包括:
[0082]
获取模块701,用于获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;
[0083]
程序依赖图构建模块702,提取所述源程序的控制流信息和数据流信息,构建程序依赖图;
[0084]
结构化信息获取模块703,用于根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;
[0085]
非结构化信息获取模块704,用于将所述程序依赖图子图的节点转化为向量,得到
所述源程序的非结构化信息;
[0086]
模型训练模块705,用于根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;
[0087]
检测模块706,用于所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。
[0088]
基于相同的构思,本发明实施例还提供了一种实体结构示意图,如图8所示,该服务器可以包括:处理器(processor)810、通信接口(communications interface)820、存储器(memory)830和通信总线840,其中,处理器810,通信接口820,存储器830通过通信总线840完成相互间的通信。处理器810可以调用存储器830中的逻辑指令,以执行如上述各实施例所述基于超图神经网络的程序漏洞检测方法的步骤。例如包括:
[0089]
获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;
[0090]
提取所述源程序的控制流信息和数据流信息,构建程序依赖图;
[0091]
根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;
[0092]
将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息;
[0093]
根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;
[0094]
利用所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。
[0095]
其中,处理器810可以为中央处理器(central processing unit,cpu)。处理器还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
[0096]
此外,上述的存储器830中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0097]
存储器830可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0098]
基于相同的构思,本发明实施例还提供一种非暂态计算机可读存储介质,该计算机可读存储介质存储有计算机程序,该计算机程序包含至少一段代码,该至少一段代码可
由主控设备执行,以控制主控设备用以实现如上述各实施例所述基于超图神经网络的程序漏洞检测方法的步骤。例如包括:
[0099]
获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;
[0100]
提取所述源程序的控制流信息和数据流信息,构建程序依赖图;
[0101]
根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;
[0102]
将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息;
[0103]
根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;
[0104]
利用所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。
[0105]
基于相同的技术构思,本技术实施例还提供一种计算机程序,当该计算机程序被主控设备执行时,用以实现上述方法实施例。
[0106]
所述程序可以全部或者部分存储在与处理器封装在一起的存储介质上,也可以部分或者全部存储在不与处理器封装在一起的存储器上。
[0107]
基于相同的技术构思,本技术实施例还提供一种处理器,该处理器用以实现上述方法实施例。上述处理器可以为芯片。
[0108]
综上所述,本发明提供的一种基于超图神经网络的程序漏洞检测方法及系统利用深度学习构建超图结构和节点特征与漏洞信息之间的关联,通过动态的方式学习不同项目中的程序漏洞的特征,克服传统静态检测高误报率的问题;通过构建并训练面向程序切片的深度学习模型,减小了代码检测的粒度;利用超图神经网络并以程序依赖图为基础进行训练,训练过程中保留了程序的逻辑上的关联,有利于处理复杂逻辑的代码缺陷;同时本发明构建的检测模型及其数据集可以通过迁移学习等方式快速应用于另一个项目中。
[0109]
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0110]
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
[0111]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

技术特征:
1.一种基于超图神经网络的程序漏洞检测方法,其特征在于,所述方法包括如下步骤:获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;提取所述源程序的控制流信息和数据流信息,构建程序依赖图;根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息;根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;利用所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。2.根据权利要求1所述的基于超图神经网络的程序漏洞检测方法,其特征在于,对所述源程序的语句进行标注,得到带标签的标准数据集,包括如下步骤:根据所述源程序修改和提交记录对每一条语句进行标注,在修复提交中标明安全的语句,在含有bug的提交中标明含有漏洞的语句。3.根据权利要求1所述的基于超图神经网络的程序漏洞检测方法,其特征在于,提取所述源程序的控制流信息和数据流信息,构建程序依赖图,包括如下步骤:利用传统静态程序分析框架提取源程序的控制流信息和数据流信息,基于控制依赖关系和数据依赖关系构建程序依赖图。4.根据权利要求1所述的基于超图神经网络的程序漏洞检测方法,其特征在于,根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息,包括如下步骤:利用传统静态程序分析框架识别系统api调用,采用语法解析器antlr识别算数操作符作为补充,将被识别的语句作为所述程序依赖图的兴趣点;从所述兴趣点开始,沿着所述程序依赖图分别进行向前和向后遍历,获取正向切片语句集和后向切片语句集的语句,作为所述程序依赖图子图的节点;根据程序依赖图的边来连接所述节点,得到所述程序依赖图子图,其中所述程序依赖图子图的边即为源程序的结构化信息。5.根据权利要求1所述的基于超图神经网络的程序漏洞检测方法,其特征在于,将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息之前,还包括如下步骤:将所述源程序中的变量和函数映射到设置好的符号映射表中的规范符号名进行变量名归一化。6.根据权利要求1所述的基于超图神经网络的程序漏洞检测方法,其特征在于,将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息,包括如下步骤:将所述程序依赖图子图输入到bert模型,采用掩码训练方式,利用每个词的上下文信息进行训练,动态地将每个词编码为固定长度的词向量,得到程序依赖图子图的节点信息,即为源程序的非结构化信息。7.根据权利要求1所述的基于超图神经网络的程序漏洞检测方法,其特征在于,根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型,包括如下步骤:
利用所述源程序的结构化信息和非结构化信息将所有的程序依赖图子图依次构建成超图结构,输入到超图神经网络中;所述超图神经网络获取每个程序依赖图子图的向量表示形式,得到相应的超图的表示向量;利用所述超图的表示向量对所述超图神经网络进行训练,得到检测模型。8.一种基于超图神经网络的程序漏洞检测系统,其特征在于,所述系统包括:获取模块,用于获取待检测的源程序,对所述源程序的语句进行标注,得到带标签的标准数据集;程序依赖图构建模块,提取所述源程序的控制流信息和数据流信息,构建程序依赖图;结构化信息获取模块,用于根据所述标准数据集对所述程序依赖图进行兴趣点分析并提取兴趣点,根据所述兴趣点生成程序依赖图子图,得到所述源程序的结构化信息;非结构化信息获取模块,用于将所述程序依赖图子图的节点转化为向量,得到所述源程序的非结构化信息;模型训练模块,用于根据所述源程序的结构化信息和非结构化信息将所述程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;检测模块,用于所述检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述基于超图神经网络的程序漏洞检测方法的步骤。10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至7任一项所述基于超图神经网络的程序漏洞检测方法的步骤。

技术总结
本发明提供一种基于超图神经网络的程序漏洞检测方法及系统,所述方法包括:获取待检测的源程序,对源程序的语句进行标注,得到带标签的标准数据集;提取源程序的控制流信息和数据流信息,构建程序依赖图;对程序依赖图进行兴趣点分析并提取兴趣点,根据兴趣点生成程序依赖图子图,得到源程序的结构化信息;将程序依赖图子图的节点转化为向量,得到源程序的非结构化信息;将程序依赖图子图转化为超图结构,输入到超图神经网络中进行训练,得到检测模型;利用检测模型对全部程序依赖图子图进行检测,得到程序漏洞检测结果。本发明提供的检测方法检测准确率高,检测粒度小,可以处理复杂逻辑的代码缺陷,具有迁移容易的优点。具有迁移容易的优点。具有迁移容易的优点。


技术研发人员:邝颖杰 梁宇君 侯刚 邱少健 梁云 黄琼 罗昆
受保护的技术使用者:华南农业大学
技术研发日:2023.03.14
技术公布日:2023/7/13
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐