CN115859307A - 基于树型注意力和加权图匹配的相似漏洞检测方法 - Google Patents

基于树型注意力和加权图匹配的相似漏洞检测方法 Download PDF

Info

Publication number
CN115859307A
CN115859307A CN202211678532.1A CN202211678532A CN115859307A CN 115859307 A CN115859307 A CN 115859307A CN 202211678532 A CN202211678532 A CN 202211678532A CN 115859307 A CN115859307 A CN 115859307A
Authority
CN
China
Prior art keywords
node
nodes
vulnerability
statement
graph
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.)
Pending
Application number
CN202211678532.1A
Other languages
English (en)
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.)
Harbin Institute of Technology
Original Assignee
Harbin Institute of Technology
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 Harbin Institute of Technology filed Critical Harbin Institute of Technology
Priority to CN202211678532.1A priority Critical patent/CN115859307A/zh
Publication of CN115859307A publication Critical patent/CN115859307A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于树型注意力和加权图匹配的相似漏洞检测方法,首先,分别为目标函数、漏洞函数和补丁函数生成FCG、vSCG、pSCG。其次,利用语句节点嵌入网络分别提取FCG、vSCG和pSCG语句节点的语义和语法信息。接着,利用图神经网络和加权图匹配方法构成的图匹配模型,学习并计算FCG和vSCG之间以及FCG和pSCG之间的相似度,然后利用计算的三元组损失函数调整网络参数,训练检测模型。最后,利用训练好的模型检测软件中的相似漏洞。本发明可以在捕获代码中与漏洞相关的语法和语义特征的同时,有效利用补丁信息区分仅有细微差异的漏洞和补丁函数,从而提高相似漏洞检测的准确率。

Description

基于树型注意力和加权图匹配的相似漏洞检测方法
技术领域
本发明涉及一种软件相似漏洞检测方法,具体涉及一种基于树型注意力和加权图匹配的相似漏洞检测方法。
背景技术
近年来,随着软件规模和复杂度的快速增加,代码重用越来越频繁,导致软件中出现的相似漏洞越来越多。检测软件中的相似漏洞正成为软件安全领域的一个重要问题。采用自动化的方式将正在处理的漏洞确定为与已知漏洞相似的漏洞,不仅可以避免新的漏洞被作为未知漏洞来处理,还可以为开发者提供修复漏洞的参考,加快软件漏洞修复的效率。目前,基于代码相似性的相似漏洞检测方法主要是通过比较待测代码和已知漏洞代码之间的相似性来判定相似漏洞,通常采用基于哈希函数的漏洞签名直接计算相似性。然而,现有的基于哈希函数的漏洞签名或指纹的方法不能表示漏洞相关的深层语义特征,难以适用于软件中语义相似的漏洞检测。
在相似漏洞检测任务中,存在以下挑战:1)代码的漏洞实例和补丁之间只有较小的差异,难以区分目标函数究竟相似于漏洞还是补丁。2)在真实项目的漏洞代码中,往往存在大量和漏洞无关的语句。为此,一种有效的相似漏洞检测方法应具备如下两个特性:1)它能够识别真实项目中漏洞代码和已打补丁的代码之间的细微差别。2)它能够关注漏洞和补丁中的关键信息和差异信息,而忽略甚至消除多余的与漏洞无关的信息对检测造成的干扰。
发明内容
本发明的目的是提供一种基于树型注意力和加权图匹配的相似漏洞检测方法,该方法主要由三个部分组成:(1)能够表征代码的语法和语义信息的切片复合图(SliceComposite Graph,SCG)作为代码表示;(2)基于CodeBERT模型和树型注意机制的语句节点嵌入网络来学习语句特征向量表示;(3)由图神经网络和加权图匹配方法构成的图匹配模型作为两个漏洞代码相似度的计算方法。本发明可以在捕获代码中与漏洞相关的语法和语义特征的同时,有效利用补丁信息区分仅有细微差异的漏洞和补丁函数,从而提高相似漏洞检测的准确率。
本发明的目的是通过以下技术方案实现的:
一种基于树型注意力和加权图匹配的相似漏洞检测方法,包括如下步骤:
步骤1:利用静态解析工具解析源代码,并生成代码属性图(Code PropertyGraph,CPG),该代码属性图将抽象语法树(Abstract Syntax Tree,AST)、控制流图(Control Flow Graph,CFG)和程序依赖图(Program Dependency Graph,PDG)合并为一个数据结构;
步骤2:分别为目标函数、漏洞函数和补丁函数生成函数复合图(FunctionComposite Graph,FCG)、漏洞切片复合图(Vulnerability Slice Composite Graph,vSCG)、补丁切片复合图(Patch Slice Composite Graph,pSCG);
步骤3:利用由CodeBERT模型和树型注意力机制构成的语句节点嵌入网络,分别提取FCG、vSCG和pSCG语句节点的语义和语法信息,生成由语义特征向量和语法特征向量组成的语句节点初始嵌入向量;
步骤4:利用图神经网络分别对FCG、vSCG、pSCG进行表示学习,学习每个节点的向量表示;
步骤5:利用加权图匹配方法分别计算FCG和vSCG之间、FCG和pSCG之间的相似度;
步骤6:利用标签信息和步骤5计算得到的相似度,计算三元组损失函数,根据误差反向传播调整语句节点嵌入网络和由图神经网络和加权图匹配方法构成的图匹配模型的参数,直到语句节点嵌入网络和图匹配模型对输入的响应达到预定的目标范围为止,训练结束,得到由语句节点嵌入网络和图匹配模型构成的相似漏洞检测模型;
步骤7:用训练好的相似漏洞检测模型对代码进行相似漏洞检测。
相比于现有技术,本发明具有如下优点:
(1)本发明提出的新的代码中间表示方法SCG,可以将漏洞代码和补丁代码表示为包含语法和语义信息的复合图数据结构,并尽可能地消除与漏洞和补丁无关的冗余信息。与其他代码中间表示方法相比,本发明提出的SCG不仅保留了与漏洞和补丁相关的丰富的语法和语义信息,而且还尽可能地消除了与漏洞不相关的信息,能够减少其对学习过程的干扰。
(2)本发明提出了一种树型注意力机制,并将其与CodeBERT模型相结合,学习SCG中语句节点的特征向量表示。在检测相似漏洞时,该树型注意力机制能够对AST(AbstractSyntax Tree)中包含与漏洞相关的语法子树给予更多的关注,从而使从这些关键语法结构提取的特征对SCG的匹配结果产生更大的影响。
(3)本发明使用了加权图匹配方法检测软件中的相似漏洞。与目前流行的基于漏洞签名或者使用深度学习模型先学习代码表征再通过余弦相似度计算来检测相似漏洞的方法不同的是,本发明使用加权图匹配方法,通过设置不同的权重来描述节点的漏洞相关性,能够在避免代码语法和语义信息损失的情况下实现SCG之间的有效匹配,从而提高相似漏洞检测的准确性。
(4)本发明为SCG提出了由CodeBERT和树型注意力机制构成的语句节点嵌入网络,该网络可以高效、准确地捕获语句中漏洞相关的语法和语义特征。
(5)本发明提出了由图神经网络和加权图匹配机制组成的图匹配模型,该模型使用图神经网络学习代码中的结构和语义信息,使用加权图匹配方法来计算待测代码与漏洞和补丁代码之间的结构和语义相似性,在计算代码的结构和语义相似性时充分考虑了补丁的信息、漏洞代码和补丁代码之间的差异、代码中不同语句节点的重要性,从而提高相似漏洞检测的准确率。
附图说明
图1是本发明基于树型注意力和加权图匹配的相似漏洞检测方法的流程示意图。
图2是相似漏洞代码实例。
图3是相似漏洞实例对应的FCG、vSCG、pSCG。
图4是树型注意力过程。
具体实施方式
下面结合附图对本发明的技术方案作进一步的说明,但并不局限于此,凡是对本发明技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的保护范围中。
本发明提供了一种基于树型注意力和加权图匹配的相似漏洞检测方法,首先,分别为目标函数、漏洞函数和补丁函数生成FCG、vSCG、pSCG。其次,利用由CodeBERT模型和树型注意力机制构成的语句节点嵌入网络,分别提取FCG、vSCG和pSCG语句节点的语义和语法信息。接着,利用图神经网络和加权图匹配方法构成的图匹配模型,学习并计算FCG和vSCG之间以及FCG和pSCG之间的相似度,然后利用计算的三元组损失函数调整网络参数,训练检测模型。最后,利用训练好的模型检测软件中的相似漏洞。如图1所示,具体包括如下步骤:
步骤1:利用静态解析工具解析源代码,并生成CPG,由于该图将AST、CFG和PDG合并为了一个数据结构,因此从CPG中可以为每个函数提取AST和PDG。
步骤2:分别为目标函数、漏洞函数和补丁函数生成FCG、vSCG、pSCG,具体步骤如下:
步骤21:对于待测的目标函数,首先提取其对应的PDG,然后将语句对应的AST扩展到PDG的每个节点,最后形成FCG。
步骤22:对于需要与目标函数进行匹配的漏洞函数,首先通过分析漏洞和补丁(即diff文件)找到被删除的语句,将删除的语句视为漏洞语句,将漏洞语句作为切片准则,使用程序切片技术在PDG中找到切片节点,然后通过数据依赖和控制依赖将这些节点连接起来,再以切片中的每个节点作为根节点,展开其对应的AST,形成漏洞函数的切片复合图,记为vSCG;若diff文件中只有添加的语句而没有删除语句,则通过从漏洞函数的PDG及其对应的补丁函数的pSCG中提取相同的节点和边来生成vSCG。
步骤23:生成pSCG的过程与vSCG的过程相似,对于需要与目标函数进行匹配的补丁函数,通过分析漏洞和补丁(即diff文件)找到添加的语句,将添加语句视为补丁语句,将补丁语句作为切片准则,使用程序切片技术在PDG中找到切片节点,然后通过数据依赖和控制依赖将这些节点连接起来,再以切片中的每个节点作为根节点,展开其对应的AST,形成补丁函数的切片复合图,记为pSCG;如果在diff文件中只有删除的语句而没有添加的语句,则通过从漏洞函数的PDG及在步骤22中生成的vSCG中提取相同的节点和边来生成pSCG。
步骤3:利用由CodeBERT模型和树型注意力机制构成的语句节点嵌入网络,分别提取FCG、vSCG和pSCG语句节点的语义和语法信息,生成由语义特征向量和语法特征向量组成的语句节点初始嵌入向量,具体步骤如下:
步骤31:对于FCG、vSCG、pSCG中任一语句节点vi,使用经过漏洞数据训练微调后的CodeBERT模型,来学习语句中token之间的依赖关系,以获得节点vi对应的语义特征向量表示,记为
Figure BDA0004018136350000061
步骤32:利用树型注意力机制生成节点vi的语法特征向量,具体步骤如下:
步骤321:通过深度优先遍历AST获得节点序列;
步骤322:使用word2vec模型获得所有节点的数字向量,计算节点的位置编码并添加到节点的数字向量中;
步骤323:提取AST中拥有多个孩子节点的非叶子节点,并将其作为子树的根节点;
步骤324:用子树掩码来隐藏子树根节点的兄弟节点和父节点,只计算其与自身和子节点的注意力值,将其相加得到子树的隐藏向量表示;
步骤325:利用软注意力机制求出对所有AST子树的重要性,再将这些重要性作为权重进行加权求和,从而得到语句的语法特征向量表示。
本发明使用的位置编码有三个主要部分:层序编码、父级编码和层次编码。层序编码按照AST的层序遍历顺序对当前节点进行编号,父级编码记录当前节点父亲节点的编号,层次编码记录当前节点的深度。在获得上述初始编码后,将其送入可学习的全连接网络中,以获得最终的位置编码。
本发明使用的子树掩码是一种屏蔽当前节点的兄弟节点和父节点的方法,用于实现并行计算,提高计算效率。
树型注意力机制的具体计算公式如下:
Qi=BiWQ,Ki=TiWK,Vi=TiWv
Figure BDA0004018136350000071
Figure BDA0004018136350000072
Figure BDA0004018136350000073
其中,Qi、Ki、Vi分别表示树型注意力机制中节点vi对应的查询向量、目标向量和值向量;Ti=[ti,1,ti,2,…,ti,m]∈Rm×d则是节点vi对应的语法树Ti的节点嵌入矩阵,m表示Ti中包含的树节点数量,ti,m表示Ti中第m个树节点对应的特征向量,d表示节点的向量维度;Bi=[bi,1,bi,2,…,bi,n]∈Rn×d表示Ti对应的子树根节点的嵌入矩阵,n为Ti中子树根节点的数量,bi,n表示Ti中第n个子树根节点对应的特征向量;WQ、WK、WV为可学习的权重矩阵;Mi则为Ti对应的子树掩码,Si=[si,1,si,2,…,si,n]T为得到的所有子树的向量矩阵,其中si,j表示语法树Ti中第j个子树的嵌入向量;u为可学习的随机初始化向量,ai,j表示si,j对应的注意力分数,
Figure BDA0004018136350000074
为语句节点vi最终的语法特征向量。
步骤33:将语义特征向量和语法特征向量进行拼接并送入全连接网络将其映射到同一个语义空间,最终得到节点的初始嵌入向量表示。
步骤4:利用图神经网络分别对FCG、vSCG、pSCG进行表示学习,学习每个节点的向量表示,具体步骤如下:
步骤41:对于图gG=(VG,EG,XG,DG)的任一节点vi∈VG,根据邻居节点的信息,利用GNN模型更新当前节点的状态,具体计算公式如下:
Figure BDA0004018136350000075
/>
Figure BDA0004018136350000076
其中,hi和oi表示其对应的隐藏向量表示和输出向量表示;
Figure BDA0004018136350000081
和/>
Figure BDA0004018136350000082
分别是l-1和l层GNN后得到的节点vi的隐藏向量表示,/>
Figure BDA0004018136350000083
是节点vj的隐藏向量表示;vj是vi的邻居,vj∈N(vi),存在一条从vj到vi的边,特征向量为dji,N(vi)表示vi的邻居节点集合;f是GNN模型的传播函数,用于收集邻近节点的信息以更新当前节点的状态;z是输出函数,用于计算节点的最终输出特征向量;
步骤42:用GNN模型获得FCG、vSCG和pSCG的输出图数据结构:
Figure BDA0004018136350000084
Figure BDA0004018136350000085
其中,VF、VV和VP为/>
Figure BDA0004018136350000086
和/>
Figure BDA0004018136350000087
中包含的节点的集合,EF、EV和EP为/>
Figure BDA0004018136350000088
和/>
Figure BDA0004018136350000089
中包含的边的集合,OF、OV和OP为/>
Figure BDA00040181363500000810
和/>
Figure BDA00040181363500000811
中节点的输出特征向量集,DF、DV和DP
Figure BDA00040181363500000812
和/>
Figure BDA00040181363500000813
中边的特征向量集。
步骤5:利用加权图匹配方法即改进的二部图匹配法分别计算FCG和vSCG之间、FCG和pSCG之间的相似度,具体步骤如下:
步骤51:将
Figure BDA00040181363500000814
和/>
Figure BDA00040181363500000815
组合成一个二部图/>
Figure BDA00040181363500000816
其中VFV=VF∪VV
Figure BDA00040181363500000817
同样,将/>
Figure BDA00040181363500000818
和/>
Figure BDA00040181363500000819
也合并为一个二部图/>
Figure BDA00040181363500000820
其中VFP=VF∪VP,/>
Figure BDA00040181363500000821
Figure BDA00040181363500000822
步骤52:对两个二部图
Figure BDA00040181363500000823
和/>
Figure BDA00040181363500000824
中的节点进行两两匹配,并根据相互匹配的两个节点之间的距离来计算最低匹配成本,作为两个二部图的相似度。具体地,按照以下公式计算两个节点/>
Figure BDA00040181363500000825
和/>
Figure BDA00040181363500000826
之间的匹配成本,以及节点/>
Figure BDA00040181363500000827
和/>
Figure BDA00040181363500000828
之间的匹配成本:
Figure BDA00040181363500000829
Figure BDA00040181363500000830
其中,
Figure BDA00040181363500000831
是节点/>
Figure BDA00040181363500000832
和/>
Figure BDA00040181363500000833
之间的匹配成本,/>
Figure BDA00040181363500000834
是节点/>
Figure BDA00040181363500000835
Figure BDA0004018136350000091
之间的匹配成本;/>
Figure BDA0004018136350000092
表示节点/>
Figure BDA0004018136350000093
和/>
Figure BDA0004018136350000094
之间的距离,/>
Figure BDA0004018136350000095
表示节点/>
Figure BDA0004018136350000096
Figure BDA0004018136350000097
之间的距离;/>
Figure BDA0004018136350000098
和/>
Figure BDA0004018136350000099
分别表示vSCG中节点/>
Figure BDA00040181363500000910
的数据依赖权重、控制依赖权重和综合权重;/>
Figure BDA00040181363500000911
和/>
Figure BDA00040181363500000912
则表示pSCG中节点/>
Figure BDA00040181363500000913
的数据依赖权重、控制依赖权重和综合权重;
Figure BDA00040181363500000914
和/>
Figure BDA00040181363500000915
为节点/>
Figure BDA00040181363500000916
和/>
Figure BDA00040181363500000917
对应的输出特征向量。/>
权重的计算方法如下:
对于vSCG,我们使用漏洞节点作为根节点,其数据依赖权重为
Figure BDA00040181363500000918
设存在一节点/>
Figure BDA00040181363500000919
假设该节点至少可以通过k条数据依赖边连接到根节点,则/>
Figure BDA00040181363500000920
的数据依赖权重为/>
Figure BDA00040181363500000921
其中,Lα∈(0,1)为超参数,表示数据依赖权重的衰减率。根节点的控制依赖权重为/>
Figure BDA00040181363500000922
假设该节点至少可以通过k条控制依赖边连接到根节点,则
Figure BDA00040181363500000923
的控制依赖权重为/>
Figure BDA00040181363500000924
其中,Lβ∈(0,1)为超参数,表示控制依赖权重的衰减率。根节点的综合权重为/>
Figure BDA00040181363500000925
Figure BDA00040181363500000926
假设该节点至少可以通过k条边连接到根节点,则
Figure BDA00040181363500000927
的综合权重为/>
Figure BDA00040181363500000928
Figure BDA00040181363500000929
其中,Lγ∈(0,1)为超参数,表示综合权重的衰减率。
以类似的方式计算pSCG的权重,这里我们不设置FCG的权重,因为目标函数中漏洞的位置是未知的。
步骤53:对匹配成本进行标准化,具体步骤如下:为每个复合图创建一个结构相同的空图φ,其节点的特征向量设为0向量,通过与空图进行比较,得到标准化后的匹配成本C,具体计算公式如下:
Figure BDA00040181363500000930
Figure BDA00040181363500000931
其中,
Figure BDA00040181363500000932
和/>
Figure BDA00040181363500000933
分别表示FCG和vSCG之间,FCG和pSCG之间的匹配成本;/>
Figure BDA0004018136350000101
为节点/>
Figure BDA0004018136350000102
和/>
Figure BDA0004018136350000103
之间的匹配成本,/>
Figure BDA0004018136350000104
为节点/>
Figure BDA0004018136350000105
和/>
Figure BDA0004018136350000106
之间的匹配成本;/>
Figure BDA0004018136350000107
为节点/>
Figure BDA0004018136350000108
和0向量节点之间的匹配成本,/>
Figure BDA0004018136350000109
为节点/>
Figure BDA00040181363500001010
和0向量节点之间的匹配成本,/>
Figure BDA00040181363500001011
为节点/>
Figure BDA00040181363500001012
和0向量节点之间的匹配成本。
步骤54:利用匹配成本计算得到图的相似度,其计算公式如下:
Figure BDA00040181363500001013
Figure BDA00040181363500001014
其中,
Figure BDA00040181363500001015
和/>
Figure BDA00040181363500001016
分别表示FCG和vSCG之间、FCG和pSCG之间的图相似度。
步骤6:利用标签信息和步骤5计算得到的相似度,计算三元组损失函数,根据误差反向传播调整语句节点嵌入网络和由图神经网络和加权匹配方法构成的图匹配模型的参数,直到语句节点嵌入网络和图匹配模型对输入的响应达到预定的目标范围为止,训练结束,得到由语句节点嵌入网络和图匹配模型构成的相似漏洞检测模型,其中:
三元组损失函数的具体计算公式如下:
Figure BDA00040181363500001017
其中,Loss为三元组损失;Sim表示基准样本和正样本的相似度,Diff表示基准样本和负样本的相似度。在相似漏洞检测任务中,当基准样本为漏洞代码时,正样本对应漏洞代码,负样本对应非漏洞代码;当基准样本为非漏洞代码时,正样本对应非漏洞代码,负样本对应漏洞代码。
Figure BDA00040181363500001018
作为惩罚项,用于提高基准样本和正样本的相似度,∈、c和λ都是超参数。
步骤7:用训练好的相似漏洞检测模型对代码进行相似漏洞检测,当同时满足如下两个条件时,判定目标函数与已知的漏洞函数相似:
(1)目标函数与漏洞函数之间的相似度超过某个阈值;
(2)目标函数与漏洞函数之间的相似度超过其与补丁函数的相似度。
实施例:
以图2所示的漏洞代码为例,其中图2(a)为待测代码,图2(b)为与其相似的漏洞代码及其补丁。在图2(b)代码中第7行为漏洞语句,第8行为补丁语句。
针对这一实例,可以首先提取待测代码的FCG,再以相似漏洞代码中的漏洞语句和补丁语句为切片准则,提取其对应的vSCG和pSCG,如图3所示。
然后,利用语句节点嵌入网络学习FCG、vSCG和pSCG语句节点中的语义和语法信息。具体来说,首先利用CodeBERT模型,根据语句代码中的token序列生成其对应的语义特征向量。同时,利用树型注意力机制来提取语句节点对应抽象语法树的语法特征向量。
图4(a)表示图2代码中信息泄露漏洞语句的AST,其中圆角矩形节点为语句节点,矩形节点为非叶节点,椭圆节点为叶节点。图4(b)表示(a)所示AST对应的位置编码。整个AST包含三个子树,如图4(c)所示,子树的根节点为灰色节点。这些子树的根节点被选中的条件是它们包含两个或更多的非叶子节点。对于子树1,分别计算根节点对自己和其他节点的注意力值,然后根据注意力值对所有节点进行加权求和,得到子树1的隐藏向量表示。通过子树掩码掩盖子树根节点的兄弟姐妹和父节点,可以得到其余的子树。然后,这两个剩余子树的向量表示也通过上述过程得到。最后,对三个子树的向量表示加权求和,得到最终的语法特征向量。
将语义特征向量和语法特征向量拼接后,可以得到FCG、vSCG和pSCG中语句节点的初始特征向量。利用图神经网络学习FCG、vSCG和pSCG中节点的隐藏向量表示,再利用加权图匹配方法分别计算FCG和vSCG、FCG和pSCG的相似度,分别为0.9623和0.9413。将阈值设为0.8的情况下,由于0.9623>0.8,满足判别条件1;并且由于0.9623>0.9413满足判别条件2。因此,判定待测代码为与已知漏洞函数相似的漏洞。

Claims (9)

1.一种基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述方法包括如下步骤:
步骤1:利用静态解析工具解析源代码,并生成CPG,CPG将AST、PDG合并为一个数据结构;
步骤2:分别为目标函数、漏洞函数和补丁函数生成FCG、vSCG、pSCG;
步骤3:利用由CodeBERT模型和树型注意力机制构成的语句节点嵌入网络,分别提取FCG、vSCG和pSCG语句节点的语义和语法信息,生成由语义特征向量和语法特征向量组成的语句节点初始嵌入向量;
步骤4:利用图神经网络分别对FCG、vSCG、pSCG进行表示学习,学习每个节点的向量表示;
步骤5:利用加权图匹配方法分别计算FCG和vSCG之间、FCG和pSCG之间的相似度;
步骤6:利用标签信息和步骤5计算得到的相似度,计算三元组损失函数,根据误差反向传播调整语句节点嵌入网络和由图神经网络和加权图匹配方法构成的图匹配模型的参数,直到语句节点嵌入网络和图匹配模型对输入的响应达到预定的目标范围为止,训练结束,得到由语句节点嵌入网络和图匹配模型构成的相似漏洞检测模型;
步骤7:用训练好的相似漏洞检测模型对代码进行相似漏洞检测。
2.根据权利要求1所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述步骤2的具体步骤如下:
步骤21:对于待测的目标函数,首先提取其对应的PDG,然后将语句对应的AST扩展到PDG的每个节点,最后形成FCG;
步骤22:对于需要与目标函数进行匹配的漏洞函数,首先通过分析漏洞和diff文件找到被删除的语句,将删除的语句视为漏洞语句,将漏洞语句作为切片准则,使用程序切片技术在PDG中找到切片节点,然后通过数据依赖和控制依赖将这些节点连接起来,再以切片中的每个节点作为根节点,展开其对应的AST,形成漏洞函数的切片复合图,记为vSCG;若diff文件中只有添加的语句而没有删除语句,则通过从漏洞函数的PDG及其对应的补丁函数的pSCG中提取相同的节点和边来生成vSCG;
步骤23:对于需要与目标函数进行匹配的补丁函数,通过分析漏洞和diff文件找到添加的语句,将添加语句视为补丁语句,将补丁语句作为切片准则,使用程序切片技术在PDG中找到切片节点,然后通过数据依赖和控制依赖将这些节点连接起来,再以切片中的每个节点作为根节点,展开其对应的AST,形成补丁函数的切片复合图,记为pSCG;如果在diff文件中只有删除的语句而没有添加的语句,则通过从漏洞函数的PDG及在步骤22中生成的vSCG中提取相同的节点和边来生成pSCG。
3.根据权利要求1所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述步骤3的具体步骤如下:
步骤31:对于FCG、vSCG、pSCG中任一语句节点vi,使用经过漏洞数据训练微调后的CodeBERT模型,来学习语句中token之间的依赖关系,以获得节点vi对应的语义特征向量表示,记为
Figure FDA0004018136340000021
步骤32:利用树型注意力机制生成节点vi的语法特征向量;
步骤33:将语义特征向量和语法特征向量进行拼接并送入全连接网络将其映射到同一个语义空间,最终得到节点的初始嵌入向量表示。
4.根据权利要求3所述的基于树型注意力和加权图匹配的相似漏洞检测方
法,其特征在于所述步骤32的具体步骤如下:
步骤321:通过深度优先遍历AST获得节点序列;
步骤322:使用word2vec模型获得所有节点的数字向量,计算节点的位置编码并添加到节点的数字向量中;
步骤323:提取AST中拥有多个孩子节点的非叶子节点,并将其作为子树的根节点;
步骤324:用子树掩码来隐藏子树根节点的兄弟节点和父节点,只计算其与自身和子节点的注意力值,将其相加得到子树的隐藏向量表示;
步骤325:利用软注意力机制求出对所有AST子树的重要性,再将这些重要性作为权重进行加权求和,从而得到语句的语法特征向量表示。
5.根据权利要求3所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述树型注意力机制的具体计算公式如下:
Qi=BiWQ,Ki=TiWK,Vi=TiWV
Figure FDA0004018136340000031
Figure FDA0004018136340000032
Figure FDA0004018136340000033
其中,Qi、Ki、Vi分别表示树型注意力机制中节点vi对应的查询向量、目标向量和值向量;Ti=[ti,1,ti,2,…,ti,m]∈Rm×d则是节点vi对应的语法树Ti的节点嵌入矩阵,m表示Ti中包含的树节点数量,ti,m表示Ti中第m个树节点对应的特征向量,d表示节点的向量维度;Bi=[bi,1,bi,2,…,bi,n]∈Rn×d表示Ti对应的子树根节点的嵌入矩阵,n为Ti中子树根节点的数量,bi,n表示Ti中第n个子树根节点对应的特征向量;WQ、WK、WV为可学习的权重矩阵;Mi则为Ti对应的子树掩码,Si=[si,1,si,2,…,si,n]T为得到的所有子树的向量矩阵,其中si,j表示语法树Ti中第j个子树的嵌入向量;u为可学习的随机初始化向量,ai,j表示si,j对应的注意力分数,
Figure FDA0004018136340000041
为语句节点vi最终的语法特征向量。
6.根据权利要求1所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述步骤4的具体步骤如下:
步骤41:对于图gG=(VG,EG,XG,DG)的任一节点vi∈VG,根据邻居节点的信息,利用GNN模型更新当前节点的状态,具体计算公式如下:
Figure FDA0004018136340000042
/>
Figure FDA0004018136340000043
其中,hi和oi表示其对应的隐藏向量表示和输出向量表示;
Figure FDA0004018136340000044
和/>
Figure FDA0004018136340000045
分别是l-1和l层GNN后得到的节点vi的隐藏向量表示,/>
Figure FDA0004018136340000046
是节点vj的隐藏向量表示;vj是vi的邻居,vj∈N(vi),存在一条从vj到vi的边,特征向量为dji,N(vi)表示vi的邻居节点集合;f是GNN模型的传播函数,用于收集邻近节点的信息以更新当前节点的状态;z是输出函数,用于计算节点的最终输出特征向量;
步骤42:用GNN模型获得FCG、vSCG和pSCG的输出图数据结构:
Figure FDA0004018136340000047
Figure FDA0004018136340000048
Figure FDA0004018136340000049
其中,VF、VV和VP为/>
Figure FDA00040181363400000410
和/>
Figure FDA00040181363400000411
中包含的节点的集合,EF、EV和EP为/>
Figure FDA00040181363400000412
和/>
Figure FDA00040181363400000413
中包含的边的集合,OF、OV和OP为/>
Figure FDA00040181363400000414
和/>
Figure FDA00040181363400000415
中节点的输出特征向量集,DF、DV和DP为/>
Figure FDA00040181363400000416
和/>
Figure FDA00040181363400000417
中边的特征向量集。
7.根据权利要求6所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述步骤5的具体步骤如下:
步骤51:将
Figure FDA00040181363400000418
和/>
Figure FDA00040181363400000419
组合成一个二部图/>
Figure FDA00040181363400000420
其中VFV=VF∪VV
Figure FDA0004018136340000051
将/>
Figure FDA0004018136340000052
和/>
Figure FDA0004018136340000053
也合并为一个二部图
Figure FDA0004018136340000054
其中VFP=VF∪VP,/>
Figure FDA0004018136340000055
Figure FDA00040181363400000537
步骤52:对两个二部图
Figure FDA0004018136340000056
和/>
Figure FDA0004018136340000057
中的节点进行两两匹配,并根据相互匹配的两个节点之间的距离来计算最低匹配成本,作为两个二部图的相似度;
步骤53:对匹配成本进行标准化,具体步骤如下:为每个复合图创建一个结构相同的空图φ,其节点的特征向量设为0向量,通过与空图进行比较,得到标准化后的匹配成本C;
步骤54:利用匹配成本计算得到图的相似度。
8.根据权利要求7所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述步骤52中,按照以下公式计算两个节点
Figure FDA0004018136340000058
和/>
Figure FDA0004018136340000059
之间的匹配成本以及节点/>
Figure FDA00040181363400000510
和/>
Figure FDA00040181363400000511
之间的匹配成本:
Figure FDA00040181363400000512
Figure FDA00040181363400000513
其中,
Figure FDA00040181363400000514
是节点/>
Figure FDA00040181363400000515
和/>
Figure FDA00040181363400000516
之间的匹配成本,/>
Figure FDA00040181363400000517
是节点/>
Figure FDA00040181363400000518
和/>
Figure FDA00040181363400000519
之间的匹配成本;/>
Figure FDA00040181363400000520
表示节点/>
Figure FDA00040181363400000521
和/>
Figure FDA00040181363400000522
之间的距离,/>
Figure FDA00040181363400000523
表示节点/>
Figure FDA00040181363400000524
和/>
Figure FDA00040181363400000525
之间的距离;/>
Figure FDA00040181363400000526
和/>
Figure FDA00040181363400000527
分别表示vSCG中节点/>
Figure FDA00040181363400000528
的数据依赖权重、控制依赖权重和综合权重;/>
Figure FDA00040181363400000529
和/>
Figure FDA00040181363400000530
则表示pSCG中节点/>
Figure FDA00040181363400000531
的数据依赖权重、控制依赖权重和综合权重;
Figure FDA00040181363400000532
和/>
Figure FDA00040181363400000533
为节点/>
Figure FDA00040181363400000534
和/>
Figure FDA00040181363400000535
对应的输出特征向量;
所述步骤53中,匹配成本C的具体计算公式如下:
Figure FDA00040181363400000536
Figure FDA0004018136340000061
其中,
Figure FDA0004018136340000062
和/>
Figure FDA0004018136340000063
分别表示FCG和vSCG之间,FCG和pSCG之间的匹配成本;/>
Figure FDA0004018136340000064
为节点/>
Figure FDA0004018136340000065
和/>
Figure FDA0004018136340000066
之间的匹配成本,/>
Figure FDA0004018136340000067
为节点/>
Figure FDA0004018136340000068
和/>
Figure FDA0004018136340000069
之间的匹配成本;/>
Figure FDA00040181363400000610
为节点/>
Figure FDA00040181363400000611
和0向量节点之间的匹配成本,/>
Figure FDA00040181363400000612
为节点/>
Figure FDA00040181363400000613
和0向量节点之间的匹配成本,/>
Figure FDA00040181363400000614
为节点/>
Figure FDA00040181363400000615
和0向量节点之间的匹配成本;
所述步骤54中,图的相似度的计算公式如下:
Figure FDA00040181363400000616
Figure FDA00040181363400000617
其中,
Figure FDA00040181363400000618
和/>
Figure FDA00040181363400000619
分别表示FCG和vSCG之间、FCG和pSCG之间的图相似度。
9.根据权利要求1所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述步骤7中,当同时满足如下两个条件时,判定目标函数与已知的漏洞函数相似:
(1)目标函数与漏洞函数之间的相似度超过某个阈值;
(2)目标函数与漏洞函数之间的相似度超过其与补丁函数的相似度。
CN202211678532.1A 2022-12-26 2022-12-26 基于树型注意力和加权图匹配的相似漏洞检测方法 Pending CN115859307A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211678532.1A CN115859307A (zh) 2022-12-26 2022-12-26 基于树型注意力和加权图匹配的相似漏洞检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211678532.1A CN115859307A (zh) 2022-12-26 2022-12-26 基于树型注意力和加权图匹配的相似漏洞检测方法

Publications (1)

Publication Number Publication Date
CN115859307A true CN115859307A (zh) 2023-03-28

Family

ID=85654977

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211678532.1A Pending CN115859307A (zh) 2022-12-26 2022-12-26 基于树型注意力和加权图匹配的相似漏洞检测方法

Country Status (1)

Country Link
CN (1) CN115859307A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117573084A (zh) * 2023-08-02 2024-02-20 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117573084A (zh) * 2023-08-02 2024-02-20 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法
CN117573084B (zh) * 2023-08-02 2024-04-12 广东工业大学 一种基于逐层融合抽象语法树的代码补全方法

Similar Documents

Publication Publication Date Title
CN111611586B (zh) 基于图卷积网络的软件漏洞检测方法及装置
CN111783100B (zh) 基于图卷积网络对代码图表示学习的源代码漏洞检测方法
CN108491228B (zh) 一种二进制漏洞代码克隆检测方法及***
CN109670318B (zh) 一种基于核控制流图循环验证的漏洞检测方法
CN112215013A (zh) 一种基于深度学习的克隆代码语义检测方法
CN115357904B (zh) 一种基于程序切片和图神经网络的多类漏洞检测方法
CN112733156A (zh) 基于代码属性图的软件脆弱性智能检测方法、***及介质
CN113158194B (zh) 一种基于多关系图网络的漏洞模型的构建方法及检测方法
CN113297580B (zh) 基于代码语义分析的电力信息***安全防护方法及装置
CN116305158A (zh) 一种基于切片代码依赖图语义学习的漏洞识别方法
CN115146279A (zh) 程序漏洞检测方法、终端设备及存储介质
CN115033890A (zh) 一种基于对比学习的源代码漏洞检测方法及***
Meng et al. [Retracted] A Deep Learning Approach for a Source Code Detection Model Using Self‐Attention
CN114064487A (zh) 一种代码缺陷检测方法
CN115859307A (zh) 基于树型注意力和加权图匹配的相似漏洞检测方法
CN116340952A (zh) 一种基于操作码程序依赖图的智能合约漏洞检测方法
CN113868650B (zh) 基于代码异质中间图表示的漏洞检测方法与装置
CN113742205A (zh) 一种基于人机协同的代码漏洞智能检测方法
CN114817932A (zh) 基于预训练模型的以太坊智能合约漏洞检测方法及***
CN116702160B (zh) 一种基于数据依赖增强程序切片的源代码漏洞检测方法
CN117725592A (zh) 一种基于有向图注意力网络的智能合约漏洞检测方法
CN116578989B (zh) 基于深度预训练神经网络的智能合约漏洞检测***及方法
CN116975881A (zh) 一种基于llvm的漏洞细粒度定位方法
CN116467720A (zh) 一种基于图神经网络的智能合约漏洞检测方法及电子设备
US20230075290A1 (en) Method for linking a cve with at least one synthetic cpe

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