一种基于图对比学习的代码漏洞检测方法

文档序号:34372315发布日期:2023-06-05 05:21阅读:78来源:国知局
一种基于图对比学习的代码漏洞检测方法

本发明属于代码漏洞检测领域,更为具体地讲,是一种基于图对比学习的代码漏洞检测方法vdgcl(vulnerability detection with graph contrastive learning)。


背景技术:

1、1)代码漏洞检测

2、当代码漏洞是指软件源代码中可利用的代码缺陷,通常由软件的设计、开发或配置中的错误引起,而这些缺陷可能会被不法分子利用,绕过系统的访问控制,非法窃取较高的权限从而任意操纵系统,如触发特权命令、访问敏感信息、冒充身份、监听系统运行等,进而使系统或其应用数据的保密性、完整性、可用性、访问控制等面临严重威胁,因此,急需针对漏洞检测领域开展系统的研究工作,以便高效及时地发现软件系统的漏洞,实时修补,提高网络空间的安全等级。

3、代码漏洞检测可分为传统检测方法、基于机器学习的方法和基于深度学习的方法等,传统检测方法在应对大型复杂软件系统和新型漏洞时表现不佳,需要大量的人工参与,有许多漏洞无法识别,并且误报率较高,基于机器学习的方法在一定程度上实现了代码漏洞检测工作的自动化,但其仍需要人工来抽取数据特征、制定漏洞模式,同时也面临假阳性率较高、数据集信息不准确和编程语言多样性等问题,基于深度学习的方法可以自动识别代码中的漏洞特征,但是许多方法将原始源代码转化的平面序列化数据,忽略了源代码中跳转、循环、判断形成的控制流特征,对代码中的逻辑和语义信息利用率不高,为了更好地对复杂的代码结构进行建模,根据源代码的结构特征将其抽象为图结构数据,然后利用图神经网络(graphneural networks,gnn)检测漏洞,但是这些方法设计的编码器通常使用叠加的多层图神经网络,无法更充分利用源代码中的语义信息。

4、2)图对比学习

5、对比学习思想的提出可以追溯到上世纪90年代,具体方法为选出锚样本、正例与负例样本,最大化正例样本和锚样本之间的一致性,同时最小化负例样本与锚样本之间的一致性,它无需数据标签的参与,因此在许多领域得到了广泛应用,例如在推荐系统中,cl4srec对用户交互序列进行编码,最大化不同视图之间同一用户交互序列的一致性,最小化不同视图之间不同用户交互序列的一致性,在自然语言处理中,varclr将源代码变量名作为输入,最大化相似变量名之间的一致性,最大化不相似变量名之间一致性,在计算机视觉中,dim利用“局部信息与全局信息一致性最大化”的思想进行对比学习,而dgi将这种思想引入到图领域,利用局部信息(节点表示)与全局信息(图表示)的一致性最大化进行对比学习操作,并在节点分类、图分类以及链接预测任务中取得了良好效果,但是对比学习在函数级漏洞检测领域尚无人使用。


技术实现思路

1、本发明的目的是提供一种基于图对比学习的代码漏洞检测方法,目标是在无标签的前提下训练模型并检测代码漏洞,本发明首次在代码漏洞检测任务中引入图对比学习,利用局部信息与全局信息一致性最大化来学习图数据特征,并通过实验验证了vdgcl的有效性。

2、实现本发明目的具体技术方案是:

3、一种基于图对比学习的代码漏洞检测方法,可分为初始节点表示获取和基于图对比学习的代码漏洞检测两个阶段;包括以下步骤:

4、初始节点表示获取(s1-s3):

5、s1:根据源代码构建抽象语法树(abstract syntax tree,ast):以函数或方法为单位,将软件代码进行切片,并将其中的变量进行统一重命名,统一代码中变量的命名风格,避免对生成的图节点表示造成影响,最后使用代码分析工具joern将变量统一命名后的代码生成ast。

6、s2:在s1中获取的ast的基础上添加多种表示数据流向、代码跳转关系的边:本发明在构建代码的ast扩展图时,拟在前面得到的ast中添加8种类型的双向边来增强图中的逻辑信息,进而有助于ast扩展图中节点关系的信息传播。

7、s3:获取初始节点表示:根据ast扩展图中的代码信息,对图中节点进行初始化向量训练,本发明使用word2vec对上述ast扩展图中的节点表示进行初始化。

8、设对比学习中的原始视图为α,扩充后的新视图为β,两个视图中的ast扩展图分别为和本发明使用和的最终节点表示ha、hβ和最终图表示ha、hβ进行对比学习。

9、基于图对比学习的代码漏洞检测(s4-s6):

10、s4:扩充视图:

11、通过图对比学习中的视图扩充操作,使用个性化pagerank(personalizedpagerank,ppr)针对图的拓扑结构扩充视图。

12、s5:获取最终节点表示与图表示:

13、a)通过图对比学习中的表示获取操作,将两个图的初始节点表示与邻接矩阵输入到ggnn编码器gθ(·)、与mlp编码器fψ(·)获取两个ast扩展图的最终节点表示hα、hβ。

14、b)通过图对比学习中的表示获取操作,将ggnn编码器gθ(·)、(·)的输出结果输入到池化函数pooling与mlp编码器fψ(·)中,得到两个ast扩展图最终图表示hα、hβ。

15、s6:一致性最大化

16、通过图对比学习中的一致性最大化操作,本发明使用graph barlow twins计算不同表示之间的一致性,具体公式为即为最大化hα和hβ之间的一致性,同时最大化hβ和hα之间的一致性,n为ast扩展图中的节点数量,和分别为节点vi在hα和hβ中的表示向量。

17、本发明的有益效果包括:

18、1)面向软件代码漏洞检测具体应用,对图对比学习的方式和架构进行了针对性地设计,通过图中不同视图的局部信息和全局信息的一致性进行对比学习操作,对图数据的利用比多层神经网络更充分;

19、2)使用真实场景中的多种漏洞,从多个方面进行了对比实验,结果表明所提无监督的代码漏洞检测方法vdgcl的效果在大多数情况下甚至高于当前最先进的有监督学习方法,证明了图对比学习在代码漏洞检测中的有效性。



技术特征:

1.一种基于图对比学习的代码漏洞检测方法,分为初始节点表示获取和基于图对比学习的代码漏洞检测两个阶段;其特征在于,包括以下步骤:

2.根据权利要求1所述的基于图对比学习的代码漏洞检测方法,其特征在于,所述步骤s1中的ast由joern生成。

3.根据权利要求1所述的基于图对比学习的代码漏洞检测方法,其特征在于,所述步骤s2中的ast扩展图要在s1中生成的ast的基础上添加多种边。

4.根据权利要求1所述的基于图对比学习的代码漏洞检测方法,其特征在于,步骤s3所述初始节点表示向量通过word2vec生成。

5.根据权利要求1所述的基于图对比学习的代码漏洞检测方法,其特征在于,步骤s4所述扩充一个新的ast扩展图使用个性化pagerank算法在扩展图的拓扑结构上扩充,通过删除原始ast扩展图中的一部分边扩充新的ast扩展图。

6.根据权利要求1所述的基于图对比学习的代码漏洞检测方法,其特征在于,所述步骤s5,使用ggnn编码器(·)、与mlp编码器(·)获取两个ast扩展图的最终节点表示、;与此同时,将ggnn编码器(·)、的输出结果输入到池化函数pooling与mlp编码器(·)中,得到两个ast扩展图的最终图表示h、h。

7.根据权利要求1所述的基于图对比学习的代码漏洞检测方法,其特征在于,计算一致性的公式为最大化和h的一致性,同时最大化和h的一致性,其中为衡量两个矩阵一致性的graph barlow twins损失函数,n为ast扩展图中的节点数量,和分别为节点v在和中的表示向量。


技术总结
本发明将图对比学习思想引入到代码漏洞检测任务中,提出了一种基于图对比学习的代码漏洞检测方法,可分为初始节点表示获取和基于图对比学习的代码漏洞检测两个阶段。在初始节点表示获取中,首先根据代码生成抽象语法树,然后在抽象语法树的基础上添加多种代表节点之间关系的边,得到代码AST扩展图,最后使用word2vec生成初始节点表示。在基于图对比学习的代码漏洞检测阶段中过,首先通过图编码器来生成最终节点与最终图表示,然后利用这些表示之间信息的交互判断代码是否有漏洞。本发明使用无监督方式训练模型,因此无需数据标签即可检测代码漏洞,在包含多种语言代码漏洞的开源数据集SARD上的6种漏洞检测的对比实验验证了本发明的有效性。

技术研发人员:梁策,林莹,卢兴见
受保护的技术使用者:华东师范大学
技术研发日:
技术公布日:2024/1/13
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1