基于自监督学习及多通道超图神经网络的漏洞检测方法与系统技术方案

技术编号:30686781 阅读:60 留言:0更新日期:2021-11-06 09:19
本发明专利技术公开了一种基于自监督学习及多通道超图神经网络的漏洞检测方法,包括:获取函数级代码漏洞数据集并进行预处理,将代码文本通过代码分析工具转化为代码序列图。为不同通道构建表征高阶信息的模体,根据模体对代码序列图进行采样,得到多通道的代码序列超图,对预处理的代码文本数据利用word2vec训练为词向量表示。最后将代码序列超图和标签作为训练数据,训练超图神经网络,通过学习得到节点表征与超图表征,然后将超图表征进行拼接,经过单层感知机进行图分类。本发明专利技术同时引入了自监督学习,弥补了多通道之间的信息损失,通过自监督学习融合了多通道之间的互信息,具有更好的可解释性与漏洞检测效果。本发明专利技术还提供了实现上述方法的系统。现上述方法的系统。现上述方法的系统。

【技术实现步骤摘要】
基于自监督学习及多通道超图神经网络的漏洞检测方法与系统


[0001]本专利技术属于计算机信息安全
,涉及一种基于自监督学习及多通道超图神经网络的漏洞检测方法与系统,具体为一种将函数级代码构建为超图,利用自监督学习与超图神经网络判断代码是否存在漏洞的方法。

技术介绍

[0002]近年来,随着计算机软件技术的快速发展,海量的软件被开发出来,软件中存在着隐藏的漏洞。开发人员不正确的编程习惯与测试人员不充分的软件测试导致代码中有大量隐藏的漏洞尚未被发现。黑客可以利用隐藏的漏洞,破坏系统,盗取数据,给企业和国家造成较大的危害。因此,漏洞检测技术成为了寻找未知漏洞,避免损失的关键方法。
[0003]漏洞检测技术是指对未知漏洞的探索,综合应用各种技术和工具,尽可能地找出软件中的隐藏的漏洞,并对已发现漏洞的细节进行深入分析的方法。传统的漏洞检测方法往往是使用静态分析、符号执行等方法。近年来随着深度学习的发展,使用深度学习的方法进行漏洞检测已经成为了一种趋势。但是大部分方法无法充分考虑代码的高阶结构关系,仅仅将代码建模为文本或者简单图,导致在真实的代码漏洞数据集上漏洞检测效果较差。如VulDeePecker使用一种基于双向LSTM的方法来自动化的对代码文本进行分析,该方法充分的使用了代码的文本信息,但是基于文本的建模方法仅仅能考虑到代码文本的先后序关系,忽略了代码的控制流,数据流,语法信息以及其他高阶关系。又如申请号为CN202010040159.1的中国专利公开了一种基于图神经网络的细粒度源代码漏洞检测方法,该方法将代码构建为代码属性图,使用了代码的控制流信息与数据流信息,但是代码属性图不能充分合理的表示代码的高阶关系,导致在真实的场景中漏洞检测效果较差,且缺乏可解释性。

技术实现思路

[0004]为了解决目前存在的漏洞检测方法不能充分的使用代码的高阶关系,检测漏洞效果较差的问题,本专利技术的目的是提供一种基于自监督学习及多通道超图神经网络的方法。本专利技术将代码建模为代码序列超图,通过多通道的超图神经网络聚合代码的节点信息,得到各个通道的超图表征,将多通道超图表征拼接,通过一个感知机获得最后的漏洞检测结果。为了弥补多通道超图之间的信息损失,本专利技术还引入了自监督任务,通过最大化节点级,子超图级,超图级的互信息,进行多通道超图之间的信息交互。
[0005]超图是一种广义上的图,其边可以和任意数量的节点进行连接,因此可以易于表征代码结构的高阶关系,本专利技术将代码构建为语法结构,控制流信息,数据流信息,先后序信息,语义信息五个通道,五个通道分别对应了一个高阶关系。本专利技术通过模体构建超边,将处在一个模体中的节点构建为一个超边,处于一个超边中的节点,拥有模体对应的通道的高阶关系。
[0006]自监督方法是一种具有监督形式的非监督学习方法,本专利技术基于自监督学习的方法,最大化不同层级表征的互信息,弥补不同通道之间的信息损失。本专利技术使用自监督学习方法以及超图神经网络进行训练,正确地使用了代码的高阶关系,漏洞检测效果较好。在超图神经网络中需要设置标签,所述标签为0或1,用来表示函数级代码是否存在漏洞。0代表不存在漏洞,1代表存在漏洞。标签是深度学习中重要的数据,通过对预测值与标签的差值求损失,进行梯度下降,来训练模型。
[0007]本专利技术提出了一种基于自监督学习及多通道超图神经网络的漏洞检测方法,其特征在于,所述方法包括如下步骤:
[0008]步骤一,选取代码数据集,并对所述代码数据集中的函数级代码进行预处理;
[0009]步骤二,使用代码分析工具将代码转化为代码序列图;所述代码序列图中包含语法结构,代码控制流信息,数据流向信息,代码先后序信息,语义信息上述五种高阶关系;
[0010]步骤三,利用Word2vec将代码序列图节点上的代码Token转化成代码向量特征表示;
[0011]步骤四,根据代码序列图上存在的高阶关系,将其分为多个通道,为每个通道构建可以表征高阶关系的模体;
[0012]步骤五,根据步骤四中构建获得的模体将所述代码序列图转化为多通道的代码序列超图;
[0013]步骤六,对每一个通道的超图,使用超图神经网络聚合对应所述通道的代码序列超图的节点表征,对节点表征进行平均池化,得到对应通道的超图向量;
[0014]步骤七,使用自监督学习方法,将节点级,子超图级,超图级的互信息最大化,弥补信息聚合的损失。
[0015]步骤八,将多通道超图向量进行聚合,通过一个单层感知机,得到最终的图分类结果,判断是否存在漏洞。
[0016]其中,所述代码数据是指软件未编译的高级语言源代码。
[0017]步骤一中,所述代码数据集的收集方式包括通过检查项目安全相关的代码提交,将修复代码的提交标记为安全的代码,将修复之前的代码标记为有漏洞的代码。
[0018]步骤一中,所述代码预处理的方法为去除代码字符串中没有信息量的特殊符号和链接,然后对代码进行代码标准化;
[0019]其中,所述特殊符号包括基本逗号、句号、回车符、换行符和数学符号以及表情符号;所述链接为描述对象的网站链接,在本专利技术数据预处理过程中进行去除;
[0020]所述代码标准化即为将变量名,类名,函数名进行标准化;变量名、类名、函数名按照代码编译序列,分别使用VAR、CLASS、FUNC代替。
[0021]步骤二中,所述代码分析工具包括:Joern、ANTLR、Soot;所述代码序列图为一种通过代码分析工具由代码转化成的表示代码语法结构,代码控制流信息,数据流向信息,代码先后序信息,语义信息组成的多关系复合图;
[0022]所述代码序列图的生成步骤如下:首先通过代码分析工具生成抽象语法树AST与控制流图CFG,其中抽象语法树中包含着代码语法结构信息,控制流图CFG中包含着控制流信息;接着遍历AST中叶子节点的token序列,得到叶子节点,即代码token之间的数据传递关系,生成数据流图DFG;最后遍历AST中叶子节点中的token序列,与代码文本进行匹配,生
成表示代码token前后序列关系的序列关系图SRG;对于语义信息,使用文档主题模型中的线性判别法LDA,确定代码主题词,将每个主题确定为一个节点,选择与主题相关的TOP K个词,分别与主题节点连接,构建代码主题图CTG;将多种关系聚合在同一张图上,生成代码序列图CSG。
[0023]步骤三中,所述将代码Token转化为向量特征表示的步骤如下:
[0024]对步骤一预处理后的代码文本数据,利用词向量模型word2vec进行训练,学习出整个数据集中每个词的词向量表示;记词向量的维度为d,并将对应词向量映射到代码序列图上;所述词向量是指根据word2vec预训练模型得到的向量,每个词对应一个向量,以唯一的表示词向量的信息;所述图节点是指代码序列图中的节点,其中除了控制流节点外的每个节点都对应着一个代码Token。
[0025]步骤四中,所述模体为在数据的复杂网络中频繁出现的一种网络模式,表示着复本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于自监督学习及多通道超图神经网络的漏洞检测方法,其特征在于,所述方法包括如下步骤:步骤一,选取代码数据集,并对所述代码数据集中的函数级代码进行预处理;步骤二,使用代码分析工具将代码转化为代码序列图;所述代码序列图中包含语法结构,代码控制流信息,数据流向信息,代码先后序信息,语义信息上述五种高阶关系;步骤三,利用Word2vec将代码序列图节点上的代码Token转化成代码向量特征表示;步骤四,根据代码序列图上存在的高阶关系,将其分为多个通道,为每个通道构建表征高阶关系的模体;步骤五,根据步骤四中构建获得的模体将所述代码序列图转化为多通道的代码序列超图;步骤六,对每一个通道的超图,使用超图神经网络聚合对应所述通道的代码序列超图的节点表征,对节点表征进行平均池化,得到对应通道的超图向量;步骤七,使用自监督学习方法,将节点级,子超图级,超图级的互信息最大化,弥补信息聚合的损失;步骤八,将多通道超图向量进行聚合,通过一个单层感知机,得到最终的图分类结果,判断是否存在漏洞;其中,所述代码数据是指软件未编译的高级语言源代码。2.根据权利要求1所述的漏洞检测方法,其特征在于,步骤一中,所述代码数据集的收集方式包括通过检查项目安全相关的代码提交,将修复代码的提交标记为安全的代码,将修复之前的代码标记为有漏洞的代码。3.根据权利要求1所述的漏洞检测方法,其特征在于,步骤一中,所述代码预处理的方法为去除代码字符串中没有信息量的特殊符号和链接,然后对代码进行代码标准化;其中,所述特殊符号包括基本逗号、句号、回车符、换行符和数学符号以及表情符号;所述链接为描述对象的网站链接,在本发明数据预处理过程中进行去除;所述代码标准化即为将变量名,类名,函数名进行标准化;变量名、类名、函数名按照代码编译序列,分别使用VAR、CLASS、FUNC代替。4.根据权利要求1所述的漏洞检测方法,其特征在于,步骤二中,所述代码分析工具包括:Joern、ANTLR、Soot;所述代码序列图为一种通过代码分析工具由代码转化成的表示代码语法结构,代码控制流信息,数据流向信息,代码先后序信息,语义信息组成的多关系复合图;所述代码序列图的生成步骤如下:首先通过代码分析工具生成抽象语法树AST与控制流图CFG,其中抽象语法树中包含着代码语法结构信息,控制流图CFG中包含着控制流信息;接着遍历AST中叶子节点的token序列,得到叶子节点,即代码token之间的数据传递关系,生成数据流图DFG;最后遍历AST中叶子节点中的token序列,与代码文本进行匹配,生成表示代码token前后序列关系的序列关系图SRG;对于语义信息,使用文档主题模型中的线性判别法LDA,确定代码主题词,将每个主题确定为一个节点,选择与主题相关的TOPK个词,分别与主题节点连接,构建代码主题图CTG;将多种关系聚合在同一张图上,生成代码序列图CSG。5.根据权利要求1所述的漏洞检测方法,其特征在于,步骤三中,所述将代码Token转化
为向量特征表示的步骤如下:对步骤一预处理后的代码文本数据,利用词向量模型word2vec进行训练,学习出整个数据集中每个词的词向量表示;记词向量的维度为d,并将对应词向量映射到代码序列图上;所述词向量是指根据word2vec预训练模型得到的向量,每个词对应一个向量,以唯一的表示词向量的信息;所述图节点是指代码序列图中的节点,其中除了控制流节点外的每个节点都对应着一个代码Token。6.根据权利要求1所述的漏洞检测方法,其特征在于,步骤四中,所述模体为在数据的复杂网络中频繁出现的一种网络模式,表示着复杂网络上是否存在着表征某一类型特征的超边;将表征为同一超边的模体划归一个通道,针对不同通道的超图分别进行超图卷积;在所述复杂网络中存在着两种表征复杂网络特征的元结构,分别是模体与元路径;所述模体相对于元路径,拥有更复杂的结构,表征更复杂的结构信息。7.根据权利要求1所述的漏洞检测方法,其特征在于,步骤四中,所述根据代码序列图上存在的高阶关系,将其分为多个通道,为每个通道构建表征高阶关系的模体的步骤如下:(1)根据代码序列图上存在的语法结构,控制流信息,数据流信息,先后序信息,语义信息上述五种高阶关系,将其分为5个通道,分别使用符号g,c,d,o,s来表示;(2)对于语法结构通道,控制流信息通道,数据流信息通道,先后序信息通道,语义信息通道,分别设计相对应模体来表示通道对应的含有高阶关系的信息。8.根据权利要求1所述的漏洞检测方法,其特征在于,步骤五中,所述根据模体将代码序列图转化为多通道的代码序列超图的步骤如下:(1)对代码序列图进行模体的采样,对于采样模体样本过多的通道与模体进行裁剪,样本的阈值设为模体最大采样数的百分之八十,将剩余每一个模体作为超边,模体中的每一个点作为超边的节点;(2)将同一通道的超边进行拼接,获得对应通道的超图邻接矩阵,分别用符号H
g
,H
c
,H
d
,H
o
,H
s
来表示。9.根据权利要求1所述的漏洞检测方法,其特征在于,步骤六中,所述生成各通道的超图向量的步骤如下:步骤(1)、为每一个通道设置一个可训练的转移矩阵,将Word2vec的每一个节点向量通过转移矩阵,得到该通道的初始超图节点向量,转移矩阵分别用符号W
g
,W
c
,W
d
,W
o
,W
s
来表示;其中X∈R
n
×
d
为Word2vec得到的节点向量,表示i通道对应的初始超图节点向量,n为节点数量,d为节点向量维度;步骤(2)、对每一个通道中的节点向量进行超图卷积,超图神经网络中每一层的超图卷积分为两步,第一步将节点的向量进行卷积,得到本层的超边向量,第二步将超边向量进行卷积,得到节点向量;在两个过程中,都引入了注意力机制;对于通道i,节点级注意力机制公式如下:
其中l是图神经...

【专利技术属性】
技术研发人员:王骏王志远张伟
申请(专利权)人:华东师范大学
类型:发明
国别省市:

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

1