技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种切片级源代码漏洞检测方法  >  正文

一种切片级源代码漏洞检测方法

  • 国知局
  • 2024-08-05 12:00:44

本发明涉及源代码漏洞检测的,尤其是指一种切片级源代码漏洞检测方法。

背景技术:

1、学术界和工业界的研究人员对源代码漏洞检测方法进行了深入研究。尽管传统的基于规则的漏洞静态分析技术仍然有效,但在快速的软件开发周期中,其人力成本较高。为了提高效率,研究者们开始探索基于模型的漏洞检测方法。起初,研究者们将基于深度学习的技术应用于源代码漏洞检测。深度学习方法主要是将源代码转化为文本序列进行特征提取,忽视了源代码中数据流、控制流等结构特征,导致源代码信息损失。为解决这一问题,研究者们进一步将源代码表示为图结构,以图深度学习技术保留程序代码的结构信息。尽管如此,虽然现有的基于图深度学习技术的漏洞检测方法弥补了基于深度学习技术的缺陷,但其大多使用欧氏空间方法进行嵌入,这在代码结构信息嵌入方面仍存在较高失真度,并且其检测粒度大多都是函数级别。为应对这些挑战,提出了一种创新的切片级源代码漏洞检测方法。基于程序依赖图切片,将漏洞检测粒度精确到切片级别以进行源代码细粒度的检测;其中双曲图卷积神经网络的应用,与传统的欧几里得空间相比,双曲空间提供了一种更加符合源代码层次结构和复杂依赖关系表达的嵌入方式,能够捕捉到更丰富和精细的信息,实现低失真的数据嵌入表示。通过这种高级别的嵌入和表示,能够在切片级别更准确地识别和定位源代码中的潜在漏洞。

技术实现思路

1、本发明的目的在于克服现有技术的缺点与不足,提出了一种切片级源代码漏洞检测方法,能够捕捉到更丰富和精细的信息,实现低失真的源代码数据嵌入表示,更准确地识别和定位源代码中的潜在漏洞。

2、为实现上述目的,本发明所提供的技术方案为:一种切片级源代码漏洞检测方法,包括以下步骤:

3、s1:获取源代码的程序依赖图pdg,并对其进行切片处理得到切片级子图,称为s-pdg,为模型训练提供切片级别的代码图,使得模型能够在细粒度级别对漏洞进行预测;

4、s2:对s-pdg进行标准化和嵌入处理,具体是执行s-pdg中节点的代码标准化以及将每个s-pdg的节点的代码令牌嵌入到向量表示中,从而减少程序变量个性化命名带来的噪音,提升原始代码语义的保留;

5、s3:构造基于双曲图卷积神经网络的源代码漏洞检测模型,该模型称为dhgcn,dhgcn能自动学习输入代码图的低失真漏洞嵌入特征,在切片级别对源代码是否包含漏洞进行精准预测;dhgcn包括双曲映射层、双曲图卷积神经网络层、全局注意力池化层以及分类预测层;由于步骤s2中得到的向量属于欧氏空间特征向量,为此设计了双曲映射层来将欧氏空间特征向量转换为双曲空间特征向量;然后,双曲图卷积神经网络层将双曲映射层得到的双曲空间特征向量作为输入进行双曲嵌入处理;为了考虑整个输入代码图双曲嵌入后的全局信息,将双曲图卷积神经网络层嵌入的结果输入到全局注意力池化层进行处理得到代表整个s-pdg的向量;最后,将代表整个图的向量输入包含多层感知机的分类预测层进行漏洞分类预测;利用步骤s2中的向量表示输入到dhgcn进行训练,最终得到训练好的最优源代码漏洞检测模型,而后利用训练好的该最优源代码漏洞检测模型对新的源代码进行漏洞预测即可。

6、进一步,步骤s1的具体操作步骤如下:

7、s11:考虑源代码的控制依赖性和数据依赖性,采用joern工具来生成程序依赖图pdg;

8、s12:利用svf自动识别系统api调用,并使用antlr来识别算术运算符,将它们视为程序切片基准点,并基于程序切片基准点进行代码切片;

9、s13:通过程序切片基准点迭代遍历pdg执行前向和后向切片:首先,s-pdg的节点是从程序切片基准点开始进行前向和后向切片得到的;对于前向切片,从程序切片基准点开始沿着pdg执行前向遍历,得到前向切片语句集sf;对于后向切片,从程序切片基准点开始遍历pdg以包含所有访问过的语句得到后向切片语句集sb;sf和sb中的语句是最终的语句集,即sf∪sb,它们保留源代码的控制流和数据流信息,并根据最终的语句集生成s-pdg的节点;然后,根据pdg的边连接sf∪sb中的节点以生成最终的s-pdg,从而在切片级别捕获程序的控制依赖性和数据依赖性。

10、进一步,步骤s2的具体操作步骤如下:

11、s21:用符号名称替换用户定义的变量名和函数名,将每个变量名和函数名映射到一个通用标识符和一个单独的索引,即自定义函数名与变量名统一规范为fun0、fun1、var0、var1这样的统一索引表示;

12、s22:对于构建的每个s-pdg,采用预训练好的doc2vec执行非结构化代码信息,即s-pdg上每个标准化后节点代码令牌的嵌入,其中所述doc2vec能够将s-pdg整个节点代码语句而不是单个代码令牌编码为固定长度的向量。

13、进一步,在步骤s3,所述双曲映射层、双曲图卷积神经网络层、全局注意力池化层和分类预测层的具体情况如下:

14、a、双曲映射层:

15、dhgcn的输入包括s-pdg的结构化和非结构化信息,即邻接矩阵和节点特征向量矩阵,步骤s2代码标准化和嵌入后的节点特征依然是属于欧几里得特征,需要将欧氏空间的节点特征向量映射到双曲空间中,双曲映射层将s-pdg的节点特征向量矩阵映射到双曲空间中,双曲映射层中的变换操作如公式:

16、

17、式中,是欧几里得空间中的节点特征向量,是映射后双曲空间中的节点特征向量;c是双曲空间的曲率;表示从欧几里得空间到双曲空间的指数映射,基于原点o,设表示d维曲率为c的双曲空间中的原点;表示向量的欧几里得范数;cosh和sinh分别是双曲余弦和双曲正弦函数;

18、b、双曲图卷积神经网络层:

19、经双曲映射层得到节点特征向量的双曲空间表示后,输入到双曲图卷积神经网络层对其进一步处理,双曲图卷积神经网络层包括双曲线性层、双曲聚合层和双曲激活层,在双曲图卷积神经网络层中的消息传递如公式:

20、

21、

22、

23、式中,hi是双曲线性层更新后的节点特征向量,h′i是双曲聚合层聚合后的节点特征向量,h″i是双曲激活层激活后的节点特征向量;j∈n(i)表示节点i的邻居节点j;hj是节点i的邻居节点j经双曲线性层更新后的的节点特征向量;w是双曲线性变换的权重矩阵;是对数映射;表示双曲空间中的莫比乌斯向量乘法;n(i)是节点i的邻居节点集合,|n(i)|是节点i的邻居节点数量;σ是欧几里得空间中的激活函数;

24、双曲图卷积神经网络层以低失真度保留了代码图的树结构,通过这种方式,双曲图卷积神经网络层顺利地将欧几里得特征转换为保留节点层次结构的双曲嵌入,在双曲空间中进行注意力聚合,能够更多地关注到程序代码中具有高层次结构的节点;

25、dhgcn能够堆叠多个双曲图卷积神经网络层,在每一层,双曲图卷积神经网络层都会变换并聚合中心节点切线空间中邻居的嵌入,并将结果投影到具有不同曲率的双曲空间,最后一层的双曲嵌入结果输入全局注意力池化层。

26、c、全局注意力池化层:

27、将最后一层双曲图卷积神经网络层输出后得到的双曲嵌入的节点特征向量输入全局注意力池化层对其进一步处理,全局注意力池化层能够从双曲图卷积神经网络层输出的代码图的双曲嵌入隐藏表示中提取全局信息,而不仅仅局限于局部区域,通过计算权重并加权汇总,该全局注意力池化层能够将输入的复杂性降低为一个全局表示,从而提高计算效率,通过对全局上下文进行建模,全局注意力池化层还有助于减少模型对局部噪音的过拟合,全局注意力池化层的处理如公式:

28、

29、式中,ri是全局注意力池化后的图特征向量;n是s-pdg中节点的总数;xi是第i个节点的特征向量;⊙表示hadamard乘积;hgate是一个门控图序列神经网络,hθ是另一个可选的神经网络,用于在注意力权重应用于节点特征之前对节点特征进行转换,这里使用一个线性层进行简单变换;hgate的输出通过softmax函数在图中的节点上进行归一化,以得到每个节点的注意力权重;然后这些权重与hθ处理后的节点特征进行hadamard乘积运算,最后将s-pdg中节点按照索引进行求和,从而得到每个s-pdg的加权特征表示,用于下一步的s-pdg漏洞预测;

30、d、分类预测层:

31、最后代表整个图的特征向量ri被输入包含多层感知机的分类预测层进行最终预测,它允许检测特征之间的高阶关系,多层感知机中每个隐藏层包含一个线性层、一个relu激活函数层和一个dropout层,最后使用softmax层输出类标签的概率。

32、本发明与现有技术相比,具有如下优点与有益效果:

33、1、本发明设计了一种基于双曲空间嵌入进行训练的源代码漏洞检测模型dhgcn,将源代码特征映射至双曲空间中进行嵌入,能够捕捉到源代码更丰富和精细的信息,实现低失真的数据嵌入表示。

34、2、本发明针对源代码提取切片,生成程序依赖图的切片表示,即s-pdg,并对切片中用户定义的变量名和函数名映射为规范符号名称来进行命名规范化,并且使用doc2vec将源代码的每个语句,即s-pdg上的每个节点的令牌转换为向量表示。减少样本冗余信息对漏洞检测的干扰,减少了程序变量个性化命名带来的噪音,提升了原始代码语义的保留。

35、总之,本发明在处理程序源代码图结构信息时有效降低了失真度,通过将源代码转换为包含数据和控制依赖的切片依赖图,即s-pdg,并对其节点和边进行编码,本发明在双曲空间中对源代码图节点进行了有效的表示学习,从而实现了准确的漏洞预测。

本文地址:https://www.jishuxx.com/zhuanli/20240802/260616.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。