CN113609488A - 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 - Google Patents

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

Info

Publication number
CN113609488A
CN113609488A CN202110812286.3A CN202110812286A CN113609488A CN 113609488 A CN113609488 A CN 113609488A CN 202110812286 A CN202110812286 A CN 202110812286A CN 113609488 A CN113609488 A CN 113609488A
Authority
CN
China
Prior art keywords
code
node
hypergraph
channel
vector
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110812286.3A
Other languages
English (en)
Other versions
CN113609488B (zh
Inventor
王骏
王志远
张伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
East China Normal University
Original Assignee
East China Normal University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by East China Normal University filed Critical East China Normal University
Priority to CN202110812286.3A priority Critical patent/CN113609488B/zh
Publication of CN113609488A publication Critical patent/CN113609488A/zh
Application granted granted Critical
Publication of CN113609488B publication Critical patent/CN113609488B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Molecular Biology (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

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

Description

基于自监督学习及多通道超图神经网络的漏洞检测方法与 系统
技术领域
本发明属于计算机信息安全技术领域,涉及一种基于自监督学习及多通道超图神经网络的漏洞检测方法与系统,具体为一种将函数级代码构建为超图,利用自监督学习与超图神经网络判断代码是否存在漏洞的方法。
背景技术
近年来,随着计算机软件技术的快速发展,海量的软件被开发出来,软件中存在着隐藏的漏洞。开发人员不正确的编程习惯与测试人员不充分的软件测试导致代码中有大量隐藏的漏洞尚未被发现。黑客可以利用隐藏的漏洞,破坏系统,盗取数据,给企业和国家造成较大的危害。因此,漏洞检测技术成为了寻找未知漏洞,避免损失的关键方法。
漏洞检测技术是指对未知漏洞的探索,综合应用各种技术和工具,尽可能地找出软件中的隐藏的漏洞,并对已发现漏洞的细节进行深入分析的方法。传统的漏洞检测方法往往是使用静态分析、符号执行等方法。近年来随着深度学习的发展,使用深度学习的方法进行漏洞检测已经成为了一种趋势。但是大部分方法无法充分考虑代码的高阶结构关系,仅仅将代码建模为文本或者简单图,导致在真实的代码漏洞数据集上漏洞检测效果较差。如VulDeePecker使用一种基于双向LSTM的方法来自动化的对代码文本进行分析,该方法充分的使用了代码的文本信息,但是基于文本的建模方法仅仅能考虑到代码文本的先后序关系,忽略了代码的控制流,数据流,语法信息以及其他高阶关系。又如申请号为CN202010040159.1的中国专利公开了一种基于图神经网络的细粒度源代码漏洞检测方法,该方法将代码构建为代码属性图,使用了代码的控制流信息与数据流信息,但是代码属性图不能充分合理的表示代码的高阶关系,导致在真实的场景中漏洞检测效果较差,且缺乏可解释性。
发明内容
为了解决目前存在的漏洞检测方法不能充分的使用代码的高阶关系,检测漏洞效果较差的问题,本发明的目的是提供一种基于自监督学习及多通道超图神经网络的方法。本发明将代码建模为代码序列超图,通过多通道的超图神经网络聚合代码的节点信息,得到各个通道的超图表征,将多通道超图表征拼接,通过一个感知机获得最后的漏洞检测结果。为了弥补多通道超图之间的信息损失,本发明还引入了自监督任务,通过最大化节点级,子超图级,超图级的互信息,进行多通道超图之间的信息交互。
超图是一种广义上的图,其边可以和任意数量的节点进行连接,因此可以易于表征代码结构的高阶关系,本发明将代码构建为语法结构,控制流信息,数据流信息,先后序信息,语义信息五个通道,五个通道分别对应了一个高阶关系。本发明通过模体构建超边,将处在一个模体中的节点构建为一个超边,处于一个超边中的节点,拥有模体对应的通道的高阶关系。
自监督方法是一种具有监督形式的非监督学习方法,本发明基于自监督学习的方法,最大化不同层级表征的互信息,弥补不同通道之间的信息损失。本发明使用自监督学习方法以及超图神经网络进行训练,正确地使用了代码的高阶关系,漏洞检测效果较好。在超图神经网络中需要设置标签,所述标签为0或1,用来表示函数级代码是否存在漏洞。0代表不存在漏洞,1代表存在漏洞。标签是深度学习中重要的数据,通过对预测值与标签的差值求损失,进行梯度下降,来训练模型。
本发明提出了一种基于自监督学习及多通道超图神经网络的漏洞检测方法,其特征在于,所述方法包括如下步骤:
步骤一,选取代码数据集,并对所述代码数据集中的函数级代码进行预处理;
步骤二,使用代码分析工具将代码转化为代码序列图;所述代码序列图中包含语法结构,代码控制流信息,数据流向信息,代码先后序信息,语义信息上述五种高阶关系;
步骤三,利用Word2vec将代码序列图节点上的代码Token转化成代码向量特征表示;
步骤四,根据代码序列图上存在的高阶关系,将其分为多个通道,为每个通道构建可以表征高阶关系的模体;
步骤五,根据步骤四中构建获得的模体将所述代码序列图转化为多通道的代码序列超图;
步骤六,对每一个通道的超图,使用超图神经网络聚合对应所述通道的代码序列超图的节点表征,对节点表征进行平均池化,得到对应通道的超图向量;
步骤七,使用自监督学习方法,将节点级,子超图级,超图级的互信息最大化,弥补信息聚合的损失。
步骤八,将多通道超图向量进行聚合,通过一个单层感知机,得到最终的图分类结果,判断是否存在漏洞。
其中,所述代码数据是指软件未编译的高级语言源代码。
步骤一中,所述代码数据集的收集方式包括通过检查项目安全相关的代码提交,将修复代码的提交标记为安全的代码,将修复之前的代码标记为有漏洞的代码。
步骤一中,所述代码预处理的方法为去除代码字符串中没有信息量的特殊符号和链接,然后对代码进行代码标准化;
其中,所述特殊符号包括基本逗号、句号、回车符、换行符和数学符号以及表情符号;所述链接为描述对象的网站链接,在本发明数据预处理过程中进行去除;
所述代码标准化即为将变量名,类名,函数名进行标准化;变量名、类名、函数名按照代码编译序列,分别使用VAR、CLASS、FUNC代替。
步骤二中,所述代码分析工具包括:Joern、ANTLR、Soot;所述代码序列图为一种通过代码分析工具由代码转化成的表示代码语法结构,代码控制流信息,数据流向信息,代码先后序信息,语义信息组成的多关系复合图;
所述代码序列图的生成步骤如下:首先通过代码分析工具生成抽象语法树AST与控制流图CFG,其中抽象语法树中包含着代码语法结构信息,控制流图CFG中包含着控制流信息;接着遍历AST中叶子节点的token序列,得到叶子节点,即代码token之间的数据传递关系,生成数据流图DFG;最后遍历AST中叶子节点中的token序列,与代码文本进行匹配,生成表示代码token前后序列关系的序列关系图SRG;对于语义信息,使用文档主题模型中的线性判别法LDA,确定代码主题词,将每个主题确定为一个节点,选择与主题相关的TOP K个词,分别与主题节点连接,构建代码主题图CTG;将多种关系聚合在同一张图上,生成代码序列图CSG。
步骤三中,所述将代码Token转化为向量特征表示的步骤如下:
对步骤一预处理后的代码文本数据,利用词向量模型word2vec进行训练,学习出整个数据集中每个词的词向量表示;记词向量的维度为d,并将对应词向量映射到代码序列图上;所述词向量是指根据word2vec预训练模型得到的向量,每个词对应一个向量,以唯一的表示词向量的信息;所述图节点是指代码序列图中的节点,其中除了控制流节点外的每个节点都对应着一个代码Token。
步骤四中,所述模体为在数据的复杂网络中频繁出现的一种网络模式,表示着复杂网络上是否存在着可以表征某一类型特征的超边。将可以表征为同一超边的模体划归一个通道,针对不同通道的超图分别进行超图卷积。
在所述复杂网络中存在着两种可以表征复杂网络特征的元结构,分别是模体与元路径。模体相对与元路径,拥有更复杂的结构,能够表征更复杂的结构信息。
步骤四中,所述高阶关系是指更高层次的关系,相对于简单图而言,超图的边同时连接多个节点,可以表示出更高阶的关系。如,对于引文网络(也就是论文引用关系图)包含了作者,论文,期刊,以及作者论文之间的关系,论文期刊之间的关系,而超图将多个异构节点之间的关系建模为模体,通过模体构建超边,一个超边直接可以表达关于一篇文章的共同作者关系等多节点(甚至是异构节点之间的关系),即其中的高阶关系。
于本发明而言,高阶关系主要针对这几个通道:语法结构,控制流信息,数据流信息,先后序信息,语义信息高阶关系,如针对数据流,简单图只能表征从一个变量到另一个变量的数据流关系,而不能表示出此变量是多少变量如何计算得出。而超图可以完全地表示这个变量的表征是由多少变量流入,以及这些变量之间是如何进行计算的。
步骤四中,所述根据代码序列图上存在的高阶关系,将其分为多个通道,为每个通道构建可以表征高阶关系的模体的步骤如下:
(1)根据代码序列图上存在的语法结构,控制流信息,数据流信息,先后序信息,语义信息上述五种高阶关系,将其分为5个通道。分别使用符号g,c,d,o,s来表示这五个通道。
(2)对于语法结构通道,控制流信息通道,数据流信息通道,先后序信息通道,语义信息通道,分别设计相对应模体来表示通道对应的含有高阶关系的信息。
在本发明的实施中,可以将语义信息的这个高阶关系先建模到简单图中,然后使用和其他通道相同的方法构建模体与超图,表示高阶关系。
步骤五中,所述根据模体将代码序列图转化为多通道的代码序列超图的步骤如下:
(1)根据文献Motif-based convolutional neural network on graphs的方法对代码序列图进行模体的采样,对于采样模体样本过多的通道与模体进行裁剪,样本的阈值设为模体最大采样数的百分之八十,将剩余每一个模体作为超边,模体中的每一个点作为超边的节点。
(2)将同一通道的超边进行拼接,获得对应通道的超图邻接矩阵,分别用符号Hg,Hc,Hd,Ho,Hs来表示。
步骤六中,所述生成各通道的超图向量的步骤如下:
步骤(1)、为每一个通道设置一个可训练的转移矩阵,将Word2vec的每一个节点向量通过转移矩阵,得到该通道的初始超图节点向量。转移矩阵分别用符号Wg,Wc,Wd,Wo,Ws来表示。
Figure BDA0003168661630000041
其中X∈Rn×d为Word2vec得到的节点向量,
Figure BDA0003168661630000042
表示i通道对应的初始超图节点向量。n为节点数量,d为节点向量维度。
步骤(2)、对每一个通道中的节点向量进行超图卷积,超图神经网络中每一层的超图卷积分为两步,第一步将节点的向量进行卷积,得到本层的超边向量,第二步将超边向量进行卷积,得到节点向量。在两个过程中,都引入了注意力机制。对于通道i,节点级注意力机制公式如下:
Figure BDA0003168661630000051
Figure BDA0003168661630000052
Figure BDA0003168661630000053
其中l是图神经网络的层数,H是某一通道超图的邻接矩阵,矩阵每一列代表一个超边,矩阵每一行代表一个节点,每一个矩阵元素代表此节点是否存在此超边中,0为节点不在超边中,1为节点在超边中,k,p为节点标号,j为超边标号,υkυp代表k,p节点,ej代表超边j,vp∈ej代表属于超边j的所有节点,
Figure BDA0003168661630000054
是超边j在l的表征,a1是可训练的注意力向量,角标T为转置矩阵,uk是针对每个节点的可训练的注意力向量,αjk为超边j节点k的注意力权重,exp为指数函数,σ与LeakyReLU为非线性的激活函数。
对于通道i,超边级的注意力机制公式如下:
Figure BDA0003168661630000055
Figure BDA0003168661630000056
Figure BDA0003168661630000057
其中l是图神经网络的层数,H是某一通道超图的邻接矩阵,矩阵每一列代表一个超边,矩阵每一行代表一个节点,每一个矩阵元素代表此节点是否存在此超边中,0为节点不在超边中,1为节点在超边中,j为节点标号,k,p为超边标号,vk,vp代表k,p超边,εj代表节点j,ep∈εj代表连接节点j的所有节点,
Figure BDA0003168661630000058
是超边j在l的表征,a2是可训练的注意力向量,角标T为转置矩阵,vk是针对每个超边的可训练的注意力向量,βjk为节点j超边k的注意力权重,exp为指数函数,σ与LeakyReLU为非线性的激活函数。
步骤(3)、将节点表征经过平均池化,得到该通道的超图向量。
Figure BDA0003168661630000059
其中AVGPOOL为平均池化操作,其中
Figure BDA00031686616300000510
为i通道第l层的节点向量,ci为i通道的超图表征向量。
步骤七中,所述使用自监督学习方法,将节点级,子超图级,超图级的互信息最大化步骤如下:
(1)通过对节点连接的超边进行平均池化,得到子超图表征。公式如下:
Figure BDA0003168661630000061
其中k为节点标号,Xi为超图在i通道的节点表征矩阵,其中每一行代表一个节点的节点向量,
Figure BDA0003168661630000062
为k节点在i通道的超图邻接向量,0代表着节点不存在于超边中,1代表节点存在于超边中,即代表着节点连接着的超边,
Figure BDA0003168661630000063
即为节点连接的超边数量,
Figure BDA0003168661630000064
为i通道关于k节点的子超图表征向量。
(2)将超图节点转移矩阵随机打乱,得到新的转移矩阵
Figure BDA0003168661630000065
同样对节点连接的超边进行平均池化,得到消极样例超图表征。公式如下:
Figure BDA0003168661630000066
其中k为节点标号,Xi为超图在i通道的节点表征矩阵,其中每一行代表一个节点的节点向量,
Figure BDA0003168661630000067
为打乱后的k节点在i通道的关于新的邻接矩阵超图邻接向量,0代表着节点不存在于超边中,1代表节点存在于超边中,即代表着节点连接着的超边,
Figure BDA0003168661630000068
即为打乱后的节点连接的超边数量,
Figure BDA0003168661630000069
为i通道关于打乱后的k节点的子超图表征向量。
(3)计算节点级,超图级与子超图级的互信息,并以自监督学习损失函数的形式使其最大化。所述自监督学习的损失函数公式如下:
Figure BDA00031686616300000610
其中fD:Rd×Rd→R是一个向量相似性的判别器,在实现中通常采用点积函数作为此判别器,Ls为自监督损失函数,σ为非线性的激活函数。
步骤八中将多通道超图向量进行聚合,通过一个单层感知机,得到最终的图分类结果,判断是否存在漏洞,具体公式如下:
x=xg||xc||xd||xo||xs
其中||为向量拼接操作,cg,cc,cd,co,cs为每个通道对应向量,c为最终用于图分类的超图向量;
Figure BDA00031686616300000611
其中Wfull为全连接层权重,b为全连接层偏移向量,softmax与tanh为非线性的激活函数。
上述公式计算的
Figure BDA00031686616300000612
为一个0-1的值,代表着代码漏洞检测的结果,越接近1代表函数级代码中存在漏洞的概率越大,越接近0代码函数级代码中出现漏洞的概率越小;在使用中算法将
Figure BDA0003168661630000071
大于0.5的时候看作函数级代码存在漏洞,将
Figure BDA0003168661630000072
小于等于0.5看作函数级代码不存在漏洞;
根据标签值与真实值计算得到超图神经网络的损失函数:
Figure BDA0003168661630000073
其中λ||Φ||2是神经网络所有参数的l2正则项,yi为标签值,
Figure BDA0003168661630000074
为预测值,将所有代码样本的预测值与标签值的交叉熵相加即为损失函数的第一项。损失函数的第二项为l2正则项,其中λ1为正则项权重,Φ代表了超图神经网络的所有参数。
结合上述自监督任务损失函数,神经网络最终的损失函数为:
Figure BDA0003168661630000075
其中λ2为自监督任务的损失函数权重,由损失函数反向传播即可进行模型的训练。
本发明还提供了一种实现上述所述漏洞检测方法的系统,所述系统包括:代码处理及分析模块、超图生成及转化模块、代码检测模块;
所述代码处理及分析模块用于对代码进行预处理,并通过代码分析工具将代码转化为代码序列图,将代码序列图节点上的代码Token转化成代码向量特征表示;
所述超图生成及转化模块用于构建不同通道上的模体,并通过模体将代码序列图转化为多通道的代码序列超图,得到代码序列超图上的节点表征;
所述代码检测模块用于聚合不同通道上的节点表征与超边表征,通过MEANPOOL将超图聚合后的节点表征表示转化为多通道的超图表征,最后将多通道超图向量进行拼接,通过感知机获得漏洞分类结果。本模块还引入了自监督学习,通过节点级,子超图级,超图级的表征互信息最大化,弥补不同通道之间的信息损失。
本发明的有益效果包括:
提出了一种新的代码图结构—代码序列图,能够同时考虑代码的数据流信息,控制流信息,以及代码序列信息,将数据流信息下放到叶子节点,让图中只有一种数据流边,精简了代码图结构,使数据流信息更加干净。
将代码编译为超图,从代码语法结构,数据流,控制流,代码前后序列,代码语义信息,五个方面学习代码内部的高阶关系,让本发明拥有了更低的误报率并且能够检测到更多的漏洞。
对于代码语法结构,数据流,控制流,代码前后序列,本发明使用模体创建超图,降低了生成超图的时间开销。
附图说明
图1为本发明的流程图。
图2为本发明实施例中代码处理流程图。
图3为本发明实施例中自监督学习及多通道超神经网络的模型架构图。
图4为本发明系统模块图。
具体实施方式
结合以下具体实施例和附图,对本发明作进一步的详细说明。实施本发明的过程、条件、实验方法等,除以下专门提及的内容之外,均为本领域的普遍知识和公知常识,本发明没有特别限制内容。
本发明提供的代码漏洞检测方法,如图1所示,该方法包括以下步骤:
步骤一,选取代码数据集,并对所述代码数据集中的函数级代码进行预处理;
步骤二,使用代码分析工具将代码转化为代码序列图;所述代码序列图中包含语法结构,代码控制信息,数据流向信息,代码先后序信息,语义信息上述五种高阶关系;
步骤三,利用Word2vec将代码序列图节点上的代码Token转化成代码向量特征表示;
步骤四,根据代码序列图上存在的高阶关系,将其分为多个通道,为每个通道构建可以表征高阶关系的模体。
步骤五,根据步骤四中构建获得的模体将所述代码序列图转化为多通道的代码序列超图。
步骤六,对每一个通道的超图,使用超图神经网络聚合对应所述通道的代码序列超图的节点表征,对节点表征进行平均池化,得到此通道的超图向量。
步骤七,使用自监督学习方法,将节点级,子超图级,超图级的互信息最大化,弥补信息聚合的损失。
步骤八,将多通道超图向量进行聚合,通过一个单层感知机,得到最终的图分类结果,判断是否存在漏洞。
其中,所述代码数据是指软件未编译的高级语言源代码。
本发明还提供了一种实现上述所述漏洞检测方法的系统,所述系统包括:代码处理及分析模块、超图生成及转化模块、代码检测模块;
所述代码处理及分析模块用于对代码进行预处理,并通过代码分析工具将代码转化为代码序列图,将代码序列图节点上的代码Token转化成代码向量特征表示;
所述超图生成及转化模块用于构建不同通道上的模体,并通过模体将代码序列图转化为多通道的代码序列超图,得到代码序列超图上的节点表征;
所述代码检测模块用于聚合不同通道上的节点表征与超边表征,通过MEANPOOL将超图聚合后的节点表征表示转化为多通道的超图表征,最后将多通道超图向量进行拼接,通过感知机获得漏洞分类结果。本模块还引入了自监督学习,通过节点级,子超图级,超图级的表征互信息最大化,弥补不同通道之间的信息损失。
实施例
本实施例的具体流程如下:
首先,选取代码数据集QEMU与FFmpeg:
对于选取的代码数据,下面描述了对代码文本的转换方式,如图二所示:
(1)对代码进行预处理,去除代码中的链接,特殊字符等。
(2)对代码变量名进行标准化。
(3)使用编译工具Joern生成函数代码的抽象语法树(AST图)与控制流图(CFG图)。
(4)接着遍历AST中叶子节点的token序列,得到代码token之间的数据传递关系,生成数据流图(DFG图)。
(5)接着遍历AST中叶子节点中的token序列,与代码文本进行匹配,生成表示代码token前后序列关系的序列关系图(SRG图)。
(6)接着根据文档主题模型中的线性判别法(LDA)确定多个主题词,针对每个主题词,确定最相关的Top k个代码token节点,在本实施例中,k取3。将多个主题词视为节点分别与最相关的代码token节点构建边,生成了代码主题图(CTG)。
(7)将多张图聚合在同一张图上,生成代码序列图。
(8)对预处理后的代码文本数据,利用词向量模型word2vec进行训练,学习数据集中每个词的词向量表示。记词向量的维度为d。
(9)根据模体将代码序列图转化为多通道的代码序列超图。将多通道的代码序列超图放入pytorch实现的超图神经网络中,得到多张超图的表征,将多个超图的表征进行拼接通过一个分类器,获得最后的代码漏洞判断结果。其中训练集,验证集,测试集比例为7:2:1。
本发明方法还可以适用于其他各类代码数据集,具体过程不再详细说明。
本发明上述实施例中的参数是根据验证集实验结果确定的,即在验证集上测试不同的参数组合,选取准确率较优的一组参数。具体来说对于可训练的参数,如权重W,根据神经网络的梯度下降算法进行训练。对于学习率,超图神经网络层数,正则化参数等超参数往往通过经验或者网格搜索的方法确定。在以往的经验中,学习率为0.00001,超图神经网络层数为6,正则化参数为0.000005。在实际以上的测试中,根据需求对上述参数进行适当调整也可实现本发明的目的。
本发明的保护内容不局限于以上实施例。在不背离本发明构思的精神和范围下,本领域技术人员能够想到的变化和优点都被包括在本发明中,并且以所附的权利要求书为保护范围。

Claims (12)

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)将同一通道的超边进行拼接,获得对应通道的超图邻接矩阵,分别用符号Hg,Hc,Hd,Ho,Hs来表示。
9.根据权利要求1所述的漏洞检测方法,其特征在于,步骤六中,所述生成各通道的超图向量的步骤如下:
步骤(1)、为每一个通道设置一个可训练的转移矩阵,将Word2vec的每一个节点向量通过转移矩阵,得到该通道的初始超图节点向量,转移矩阵分别用符号Wg,Wc,Wd,Wo,Ws来表示;
Figure FDA0003168661620000031
其中X∈Rn×d为Word2vec得到的节点向量,
Figure FDA0003168661620000032
表示i通道对应的初始超图节点向量,n为节点数量,d为节点向量维度;
步骤(2)、对每一个通道中的节点向量进行超图卷积,超图神经网络中每一层的超图卷积分为两步,第一步将节点的向量进行卷积,得到本层的超边向量,第二步将超边向量进行卷积,得到节点向量;在两个过程中,都引入了注意力机制;对于通道i,节点级注意力机制公式如下:
Figure FDA0003168661620000033
Figure FDA0003168661620000034
Figure FDA0003168661620000035
其中l是图神经网络的层数,H是某一通道超图的邻接矩阵,矩阵每一列代表一个超边,矩阵每一行代表一个节点,每一个矩阵元素代表此节点是否存在此超边中,0为节点不在超边中,1为节点在超边中,k,p为节点标号,j为超边标号,υkp代表k,p节点,ej代表超边j,vp∈ej代表属于超边j的所有节点,
Figure FDA0003168661620000036
是超边j在l层的表征,a1是可训练的注意力向量,角标T为转置矩阵,uk是针对每个节点的可训练的注意力向量,αjk为超边j节点k的注意力权重,exp为指数函数,σ与LeakyReLU为非线性的激活函数;
对于通道i,超边级的注意力机制公式如下:
Figure FDA0003168661620000037
Figure FDA0003168661620000038
Figure FDA0003168661620000041
其中l是图神经网络的层数,H是某一通道超图的邻接矩阵,矩阵每一列代表一个超边,矩阵每一行代表一个节点,每一个矩阵元素代表此节点是否存在此超边中,0为节点不在超边中,1为节点在超边中,j为节点标号,k,p为超边标号,vk,vp代表k,p超边,εj代表节点j,ep∈εj代表连接节点j的所有节点,
Figure FDA0003168661620000042
是超边j在l层的表征,a2是可训练的注意力向量,角标T为转置矩阵,vk是针对每个超边的可训练的注意力向量,βjk为节点j超边k的注意力权重,exp为指数函数,σ与LeakyReLU为非线性的激活函数;
步骤(3)、将节点表征经过平均池化,得到该通道的超图向量:
Figure FDA0003168661620000043
其中AVGPOOL为平均池化操作,其中
Figure FDA0003168661620000044
为i通道第l层的节点向量,ci为i通道的超图表征向量。
10.根据权利要求1所述的漏洞检测方法,其特征在于,步骤七中,所述使用自监督学习方法,将节点级,子超图级,超图级的互信息最大化步骤如下:
(1)通过对节点连接的超边进行平均池化,得到子超图表征,公式如下:
Figure FDA0003168661620000045
其中k为节点标号,Xi为超图在i通道的节点表征矩阵,其中每一行代表一个节点的节点向量,
Figure FDA0003168661620000046
为k节点在i通道的超图邻接向量,0代表着节点不存在于超边中,1代表节点存在于超边中,即代表着节点连接着的超边,
Figure FDA0003168661620000047
即为节点连接的超边数量,
Figure FDA0003168661620000048
为i通道关于k节点的子超图表征向量;
(2)将超图节点转移矩阵随机打乱,得到新的转移矩阵
Figure FDA0003168661620000049
同样对节点连接的超边进行平均池化,得到消极样例超图表征,公式如下:
Figure FDA00031686616200000410
其中k为节点标号,Xi为超图在i通道的节点表征矩阵,其中每一行代表一个节点的节点向量,
Figure FDA00031686616200000411
为打乱后的k节点在i通道的关于新的邻接矩阵超图邻接向量,0代表着节点不存在于超边中,1代表节点存在于超边中,即代表着节点连接着的超边,
Figure FDA00031686616200000412
即为打乱后的节点连接的超边数量,
Figure FDA00031686616200000413
为i通道关于打乱后的k节点的子超图表征向量;
(3)计算节点级,超图级与子超图级的互信息,并以损失函数的形式使其最大化,所述损失函数公式如下:
Figure FDA0003168661620000051
其中fD:Rd×Rd→R是一个向量相似性的判别器,在实现中采用点积函数作为此判别器,Ls为自监督损失函数,σ为非线性的激活函数。
11.根据权利要求1所述的漏洞检测方法,其特征在于,步骤八中将多通道超图向量进行聚合,通过一个单层感知机,得到最终的图分类结果,判断是否存在漏洞,具体公式如下:
c=cg||cc||cd||co||cs
其中||为向量拼接操作,cg,cc,cd,co,cs为每个通道对应向量,c为最终用于图分类的超图向量;
Figure FDA0003168661620000052
其中Wfull为全连接层权重,b为全连接层偏移向量,softmax与tanh为非线性的激活函数;上述公式计算的
Figure FDA0003168661620000053
为一个0-1的值,代表着代码漏洞检测的结果,越接近1代表函数级代码中存在漏洞的概率越大,越接近0代表函数级代码中出现漏洞的概率越小;在使用中算法将
Figure FDA0003168661620000054
大于0.5的时候看作函数级代码存在漏洞,将
Figure FDA0003168661620000055
小于等于0.5看作函数级代码不存在漏洞;
根据标签值与真实值计算得到超图神经网络的损失函数:
Figure FDA0003168661620000056
其中λ1||Φ||2是神经网络所有参数的l2正则项,yi为标签值,
Figure FDA0003168661620000057
为预测值,将所有代码样本的预测值与标签值的交叉熵相加即为损失函数的第一项。损失函数的第二项为l2正则项,其中λ1为正则项权重,Φ代表了超图神经网络的所有参数;
结合权利要求10的自监督任务损失函数,神经网络最终的损失函数为:
Figure FDA0003168661620000058
其中λ2为自监督任务的损失函数权重,由损失函数反向传播即可进行模型的训练。
12.一种实现如1-11之任一项所述漏洞检测方法的系统,所述系统包括:代码处理及分析模块、超图生成及转化模块、代码检测模块;
所述代码处理及分析模块用于对代码进行预处理,并通过代码分析工具将代码转化为代码序列图,将代码序列图节点上的代码Token转化成代码向量特征表示;
所述超图生成及转化模块用于构建不同通道上的模体,并通过模体将代码序列图转化为多通道的代码序列超图,得到代码序列超图上的节点表征;
所述代码检测模块用于聚合不同通道上的节点表征与超边表征,通过MEANPOOL将超图聚合后的节点表征表示转化为多通道的超图表征,最后将多通道超图向量进行拼接,通过感知机获得漏洞分类结果;
所述代码检测模块还引入了自监督学习,通过节点级,子超图级,超图级的表征互信息最大化,弥补不同通道之间的信息损失。
CN202110812286.3A 2021-07-19 2021-07-19 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 Active CN113609488B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110812286.3A CN113609488B (zh) 2021-07-19 2021-07-19 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110812286.3A CN113609488B (zh) 2021-07-19 2021-07-19 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统

Publications (2)

Publication Number Publication Date
CN113609488A true CN113609488A (zh) 2021-11-05
CN113609488B CN113609488B (zh) 2022-07-08

Family

ID=78337860

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110812286.3A Active CN113609488B (zh) 2021-07-19 2021-07-19 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统

Country Status (1)

Country Link
CN (1) CN113609488B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114547619A (zh) * 2022-01-11 2022-05-27 扬州大学 一种基于树的漏洞修复系统及修复方法
CN117421392A (zh) * 2023-12-15 2024-01-19 武汉大学 一种基于词级对齐的代码搜索方法及装置
CN117541844A (zh) * 2023-09-27 2024-02-09 合肥工业大学 一种基于超图学习的弱监督组织病理学全切片图像分析方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190052665A1 (en) * 2016-02-10 2019-02-14 Cortex Insight Limited Security system
CN111259394A (zh) * 2020-01-15 2020-06-09 中山大学 一种基于图神经网络的细粒度源代码漏洞检测方法
US10783257B1 (en) * 2019-12-20 2020-09-22 Capital One Services, Llc Use of word embeddings to locate sensitive text in computer programming scripts
CN111783100A (zh) * 2020-06-22 2020-10-16 哈尔滨工业大学 基于图卷积网络对代码图表示学习的源代码漏洞检测方法
US20200380118A1 (en) * 2019-05-29 2020-12-03 Anomalee Inc. Post-Training Detection and Identification of Human-Imperceptible Backdoor-Poisoning Attacks
US20210034753A1 (en) * 2019-07-29 2021-02-04 Ventech Solutions, Inc. Method and system for neural network based data analytics in software security vulnerability testing
CN112699377A (zh) * 2020-12-30 2021-04-23 哈尔滨工业大学 基于切片属性图表示学习的函数级代码漏洞检测方法
WO2021114093A1 (zh) * 2019-12-10 2021-06-17 中国科学院深圳先进技术研究院 一种基于深度学习的智能合约漏洞检测方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190052665A1 (en) * 2016-02-10 2019-02-14 Cortex Insight Limited Security system
US20200380118A1 (en) * 2019-05-29 2020-12-03 Anomalee Inc. Post-Training Detection and Identification of Human-Imperceptible Backdoor-Poisoning Attacks
US20210034753A1 (en) * 2019-07-29 2021-02-04 Ventech Solutions, Inc. Method and system for neural network based data analytics in software security vulnerability testing
WO2021114093A1 (zh) * 2019-12-10 2021-06-17 中国科学院深圳先进技术研究院 一种基于深度学习的智能合约漏洞检测方法
US10783257B1 (en) * 2019-12-20 2020-09-22 Capital One Services, Llc Use of word embeddings to locate sensitive text in computer programming scripts
CN111259394A (zh) * 2020-01-15 2020-06-09 中山大学 一种基于图神经网络的细粒度源代码漏洞检测方法
CN111783100A (zh) * 2020-06-22 2020-10-16 哈尔滨工业大学 基于图卷积网络对代码图表示学习的源代码漏洞检测方法
CN112699377A (zh) * 2020-12-30 2021-04-23 哈尔滨工业大学 基于切片属性图表示学习的函数级代码漏洞检测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
XIAOKE HAO 等: "Hypergraph Neural Network for Skeleton-Based", 《IEEE》 *
段亚男: "基于代码属性图和图卷积神经网络的软件漏洞检测方法研究", 《中国优秀博硕士学位论文全文数据库(硕士) 信息科技辑》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114547619A (zh) * 2022-01-11 2022-05-27 扬州大学 一种基于树的漏洞修复系统及修复方法
CN114547619B (zh) * 2022-01-11 2024-04-19 扬州大学 一种基于树的漏洞修复系统及修复方法
CN117541844A (zh) * 2023-09-27 2024-02-09 合肥工业大学 一种基于超图学习的弱监督组织病理学全切片图像分析方法
CN117421392A (zh) * 2023-12-15 2024-01-19 武汉大学 一种基于词级对齐的代码搜索方法及装置
CN117421392B (zh) * 2023-12-15 2024-03-08 武汉大学 一种基于词级对齐的代码搜索方法及装置

Also Published As

Publication number Publication date
CN113609488B (zh) 2022-07-08

Similar Documents

Publication Publication Date Title
CN113609488B (zh) 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统
CN109697162B (zh) 一种基于开源代码库的软件缺陷自动检测方法
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
Wang et al. Prioritizing test inputs for deep neural networks via mutation analysis
US20220405592A1 (en) Multi-feature log anomaly detection method and system based on log full semantics
CN113742733B (zh) 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置
CN112711953A (zh) 一种基于注意力机制和gcn的文本多标签分类方法和系统
CN111866004B (zh) 安全评估方法、装置、计算机系统和介质
CN111143840B (zh) 一种主机操作指令异常识别的方法及系统
CN112115326B (zh) 一种以太坊智能合约的多标签分类和漏洞检测方法
CN111709225B (zh) 一种事件因果关系判别方法、装置和计算机可读存储介质
CN111639185B (zh) 关系信息抽取方法、装置、电子设备和可读存储介质
CN116340952A (zh) 一种基于操作码程序依赖图的智能合约漏洞检测方法
CN112035345A (zh) 一种基于代码片段分析的混合深度缺陷预测方法
Shreda et al. Identifying non-functional requirements from unconstrained documents using natural language processing and machine learning approaches
CN116595537A (zh) 一种基于多模态特征的生成式智能合约的漏洞检测方法
CN116628695A (zh) 基于多任务学习的漏洞挖掘方法及装置
CN114817934A (zh) 一种基于漏洞事件论元的漏洞严重度评估方法及系统
CN113326371A (zh) 一种融合预训练语言模型与抗噪声干扰远程监督信息的事件抽取方法
Rahim et al. Hyper-Tuned Convolutional Neural Networks for Authorship Verification in Digital Forensic Investigations.
KR20210142443A (ko) 사이버 공간에서 실시간 공격 탐지를 위한 시간에 따른 지속적인 적응형 학습을 제공하는 방법 및 시스템
CN116561814B (zh) 纺织化纤供应链信息防篡改方法及其系统
Xu et al. Incorporating forward and backward instances in a bi-lstm-cnn model for relation classification
CN117435246B (zh) 一种基于马尔可夫链模型的代码克隆检测方法
CN117349186B (zh) 一种基于语义流图的程序语言缺陷定位方法、系统及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant