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

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

【技术实现步骤摘要】
基于树型注意力和加权图匹配的相似漏洞检测方法


[0001]本专利技术涉及一种软件相似漏洞检测方法,具体涉及一种基于树型注意力和加权图匹配的相似漏洞检测方法。

技术介绍

[0002]近年来,随着软件规模和复杂度的快速增加,代码重用越来越频繁,导致软件中出现的相似漏洞越来越多。检测软件中的相似漏洞正成为软件安全领域的一个重要问题。采用自动化的方式将正在处理的漏洞确定为与已知漏洞相似的漏洞,不仅可以避免新的漏洞被作为未知漏洞来处理,还可以为开发者提供修复漏洞的参考,加快软件漏洞修复的效率。目前,基于代码相似性的相似漏洞检测方法主要是通过比较待测代码和已知漏洞代码之间的相似性来判定相似漏洞,通常采用基于哈希函数的漏洞签名直接计算相似性。然而,现有的基于哈希函数的漏洞签名或指纹的方法不能表示漏洞相关的深层语义特征,难以适用于软件中语义相似的漏洞检测。
[0003]在相似漏洞检测任务中,存在以下挑战:1)代码的漏洞实例和补丁之间只有较小的差异,难以区分目标函数究竟相似于漏洞还是补丁。2)在真实项目的漏洞代码中,往往存在大量和漏洞无关的语句。为此,一种有效的相似漏洞检测方法应具备如下两个特性:1)它能够识别真实项目中漏洞代码和已打补丁的代码之间的细微差别。2)它能够关注漏洞和补丁中的关键信息和差异信息,而忽略甚至消除多余的与漏洞无关的信息对检测造成的干扰。

技术实现思路

[0004]本专利技术的目的是提供一种基于树型注意力和加权图匹配的相似漏洞检测方法,该方法主要由三个部分组成:(1)能够表征代码的语法和语义信息的切片复合图(Slice Composite Graph,SCG)作为代码表示;(2)基于CodeBERT模型和树型注意机制的语句节点嵌入网络来学习语句特征向量表示;(3)由图神经网络和加权图匹配方法构成的图匹配模型作为两个漏洞代码相似度的计算方法。本专利技术可以在捕获代码中与漏洞相关的语法和语义特征的同时,有效利用补丁信息区分仅有细微差异的漏洞和补丁函数,从而提高相似漏洞检测的准确率。
[0005]本专利技术的目的是通过以下技术方案实现的:
[0006]一种基于树型注意力和加权图匹配的相似漏洞检测方法,包括如下步骤:
[0007]步骤1:利用静态解析工具解析源代码,并生成代码属性图(Code Property Graph,CPG),该代码属性图将抽象语法树(Abstract Syntax Tree,AST)、控制流图(Control Flow Graph,CFG)和程序依赖图(Program Dependency Graph,PDG)合并为一个数据结构;
[0008]步骤2:分别为目标函数、漏洞函数和补丁函数生成函数复合图(Function Composite Graph,FCG)、漏洞切片复合图(Vulnerability Slice Composite Graph,
vSCG)、补丁切片复合图(Patch Slice Composite Graph,pSCG);
[0009]步骤3:利用由CodeBERT模型和树型注意力机制构成的语句节点嵌入网络,分别提取FCG、vSCG和pSCG语句节点的语义和语法信息,生成由语义特征向量和语法特征向量组成的语句节点初始嵌入向量;
[0010]步骤4:利用图神经网络分别对FCG、vSCG、pSCG进行表示学习,学习每个节点的向量表示;
[0011]步骤5:利用加权图匹配方法分别计算FCG和vSCG之间、FCG和pSCG之间的相似度;
[0012]步骤6:利用标签信息和步骤5计算得到的相似度,计算三元组损失函数,根据误差反向传播调整语句节点嵌入网络和由图神经网络和加权图匹配方法构成的图匹配模型的参数,直到语句节点嵌入网络和图匹配模型对输入的响应达到预定的目标范围为止,训练结束,得到由语句节点嵌入网络和图匹配模型构成的相似漏洞检测模型;
[0013]步骤7:用训练好的相似漏洞检测模型对代码进行相似漏洞检测。
[0014]相比于现有技术,本专利技术具有如下优点:
[0015](1)本专利技术提出的新的代码中间表示方法SCG,可以将漏洞代码和补丁代码表示为包含语法和语义信息的复合图数据结构,并尽可能地消除与漏洞和补丁无关的冗余信息。与其他代码中间表示方法相比,本专利技术提出的SCG不仅保留了与漏洞和补丁相关的丰富的语法和语义信息,而且还尽可能地消除了与漏洞不相关的信息,能够减少其对学习过程的干扰。
[0016](2)本专利技术提出了一种树型注意力机制,并将其与CodeBERT模型相结合,学习SCG中语句节点的特征向量表示。在检测相似漏洞时,该树型注意力机制能够对AST(Abstract Syntax Tree)中包含与漏洞相关的语法子树给予更多的关注,从而使从这些关键语法结构提取的特征对SCG的匹配结果产生更大的影响。
[0017](3)本专利技术使用了加权图匹配方法检测软件中的相似漏洞。与目前流行的基于漏洞签名或者使用深度学习模型先学习代码表征再通过余弦相似度计算来检测相似漏洞的方法不同的是,本专利技术使用加权图匹配方法,通过设置不同的权重来描述节点的漏洞相关性,能够在避免代码语法和语义信息损失的情况下实现SCG之间的有效匹配,从而提高相似漏洞检测的准确性。
[0018](4)本专利技术为SCG提出了由CodeBERT和树型注意力机制构成的语句节点嵌入网络,该网络可以高效、准确地捕获语句中漏洞相关的语法和语义特征。
[0019](5)本专利技术提出了由图神经网络和加权图匹配机制组成的图匹配模型,该模型使用图神经网络学习代码中的结构和语义信息,使用加权图匹配方法来计算待测代码与漏洞和补丁代码之间的结构和语义相似性,在计算代码的结构和语义相似性时充分考虑了补丁的信息、漏洞代码和补丁代码之间的差异、代码中不同语句节点的重要性,从而提高相似漏洞检测的准确率。
附图说明
[0020]图1是本专利技术基于树型注意力和加权图匹配的相似漏洞检测方法的流程示意图。
[0021]图2是相似漏洞代码实例。
[0022]图3是相似漏洞实例对应的FCG、vSCG、pSCG。
[0023]图4是树型注意力过程。
具体实施方式
[0024]下面结合附图对本专利技术的技术方案作进一步的说明,但并不局限于此,凡是对本专利技术技术方案进行修改或者等同替换,而不脱离本专利技术技术方案的精神和范围,均应涵盖在本专利技术的保护范围中。
[0025]本专利技术提供了一种基于树型注意力和加权图匹配的相似漏洞检测方法,首先,分别为目标函数、漏洞函数和补丁函数生成FCG、vSCG、pSCG。其次,利用由CodeBERT模型和树型注意力机制构成的语句节点嵌入网络,分别提取FCG、vSCG和pSCG语句节点的语义和语法信息。接着,利用图神经网络和加权图匹配方法构成的图匹配模型,学习并计算FCG和vSCG之间以及FCG和pSCG之间的相似度,然后利用计算的三元组损失函数调整网络参数,训练检测模型。最后,利用训练好的模型检测软件中的相本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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中任一语句节点v
i
,使用经过漏洞数据训练微调后的CodeBERT模型,来学习语句中token之间的依赖关系,以获得节点v
i
对应的语义特征向量表示,记为步骤32:利用树型注意力机制生成节点v
i
的语法特征向量;
步骤33:将语义特征向量和语法特征向量进行拼接并送入全连接网络将其映射到同一个语义空间,最终得到节点的初始嵌入向量表示。4.根据权利要求3所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述步骤32的具体步骤如下:步骤321:通过深度优先遍历AST获得节点序列;步骤322:使用word2vec模型获得所有节点的数字向量,计算节点的位置编码并添加到节点的数字向量中;步骤323:提取AST中拥有多个孩子节点的非叶子节点,并将其作为子树的根节点;步骤324:用子树掩码来隐藏子树根节点的兄弟节点和父节点,只计算其与自身和子节点的注意力值,将其相加得到子树的隐藏向量表示;步骤325:利用软注意力机制求出对所有AST子树的重要性,再将这些重要性作为权重进行加权求和,从而得到语句的语法特征向量表示。5.根据权利要求3所述的基于树型注意力和加权图匹配的相似漏洞检测方法,其特征在于所述树型注意力机制的具体计算公式如下:Q
i
=B
i
W
Q
,K
i
=T
i
W
K
,V
i
=T
i
W
VVV
其中,Q
i
、K
i
、V
i
分别表示树型注意力机制中节点v
i
对应的查询向量、目标向量和值向量;T
i
=[t
i,1
,t
i,2
,

,t
i,m
]∈R
m
×
d
则是节点v
i
对应的语法树T
i
的节点嵌入矩阵,m表示T
i
中包含的树节点数量,t
i,m
表示T
i
中第m个树节点对应的特征向量,d表示节点的向量维度;B
i
=[b
i,1
,b
i,2
,

,b
i,n
]∈R
n
×
d
表示T
i
对应的子树根节点的嵌入...

【专利技术属性】
技术研发人员:苏小红郑伟宁魏宏巍魏子越陶文鑫蒋远王甜甜张彦航
申请(专利权)人:哈尔滨工业大学
类型:发明
国别省市:

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

1