1.一种基于异构图变换网络的语句级漏洞检测方法,其特征在于,包括:获取待检测的软件编程代码,将软件编程代码输入至预设的漏洞检测模型获得检测结果,将检测结果输入至改进的图神经网络解释器进行漏洞解释获得漏洞语句;
所述漏洞检测模型的构建过程包括:
获取软件源代码数据集,将软件源代码数据集中的源代码转换为CPG格式;
将源代码中的单个函数作为原始输入数据分割成单个语句样本,每个语句样本通过预训练的BPE标记器进行标记以及序列化后,由源代码中提取整体函数嵌入特征 和语句嵌入特征 ;将整体函数嵌入特征 和语句嵌入特征 转化为训练样本;
利用训练样本对漏洞检测模型进行训练,利用交叉熵损失函数计算训练损失值,根据训练损失值对漏洞检测模型的参数进行优化,重复迭代直至预测损失值收敛输出训练后的漏洞检测模型。
2.根据权利要求1所述的语句级漏洞检测方法,其特征在于,所述软件源代码数据集中的源代码为由Big‑Vul数据集中提取的代码数据,软件源代码数据集包含了10,000个漏洞的样本和177,000个非漏洞的样本。
3.根据权利要求1所述的语句级漏洞检测方法,其特征在于,由源代码中提取整体函数嵌入特征 和语句嵌入特征 ,包括:通过CodeBERT模型对源代码中的函数和构成函数的各个语句样本进行特征提取,获得单个整体函数嵌入特征 和n个语句嵌入特征 。
4.根据权利要求1所述的语句级漏洞检测方法,其特征在于,将整体函数嵌入特征和语句嵌入特征 转化为训练样本,包括:基于源代码中的函数和语句嵌入特征 构建代码属性图;通过异构图变换网络由代码属性图中获取语句嵌入特征 和函数嵌入特征 ;
将整体函数嵌入特征 和函数嵌入特征 进行欠采样处理后输入至线性层和剔除层,同时将语句嵌入特征 直接输入至线性层和剔除层,由所述线性层和剔除层输出每个语句的输出类和函数的输出类;对语句的输出类和函数的输出类进行同一化处理获取训练样本。
5.根据权利要求4所述的语句级漏洞检测方法,其特征在于,基于源代码中的函数和语句嵌入特征 构建代码属性图的过程包括:将语句嵌入特征 作为节点,建立每个节点之间的连接边构建图的结构,图的结构包括节点和连接边的信息;
根据源代码中的函数在相邻节点之间添加控制流、数据流和调用关系的属性,形成代码属性图。
6.根据权利要求4所述的语句级漏洞检测方法,其特征在于,通过异构图变换网络由代码属性图中获取语句嵌入特征 和函数嵌入特征 ,包括:;
其中, 表示为计算连接边的多头注意力分数函数, 表示
为在连接边上发送的消息函数, 是当前节点v的语句嵌入特征 , 为节点v的相邻节点u的语句嵌入特征 , 表示为同化所有节点v相邻的嵌入特征的变换函数, 表示为语句嵌入特征 或函数嵌入特征 。
7.根据权利要求1所述的语句级漏洞检测方法,其特征在于,将检测结果输入至改进的图神经网络解释器进行漏洞解释获得漏洞语句,过程包括:计算代码属性图中各节点的重要性特征值 ,公式为:
; ; ; ;
;
公式中, 表示为代码属性图中第i个节点的综合中心性特征值; 表示为代码属性图中第i个节点的边掩码; 表示为代码属性图中最大的边掩码; 表示为代码属性图中第i个节点的标准化度中心性特征值; 表示为代码属性图中第i个节点的卡茨中心性特征值; 表示为代码属性图中第i个节点的紧密性中心性特征值; 表示为代码属性图中最大的卡茨中心性特征值; 表示为代码属性图中最大的紧密性中心性特征值; 表示为代码属性图中第i个节点的度; 表示为代码属性图中的节点数; 和表示为设定参数; 表示为代码属性图的邻接矩阵; 表示为代码属性图中第j个节点的嵌入特征; 表示为代码属性图中第i个节点和第j个节点之间的距离;
基于重要性特征值 对检测结果进行漏洞解释获得漏洞语句。
8.一种基于异构图变换网络的语句级漏洞检测系统,其特征在于,包括:检测模块,用于获取待检测的软件编程代码,将软件编程代码输入至预设的漏洞检测模型获得检测结果,将检测结果输入至改进的图神经网络解释器进行漏洞解释获得漏洞语句;
获取模块,用于获取软件源代码数据集,将软件源代码数据集中的源代码转换为CPG格式;
提取模块,用于将源代码中的单个函数作为原始输入数据分割成单个语句样本,每个语句样本通过预训练的BPE标记器进行标记以及序列化后,由源代码中提取整体函数嵌入特征 和语句嵌入特征 ;将整体函数嵌入特征 和语句嵌入特征 转化为训练样本;
训练模块,用于利用训练样本对漏洞检测模型进行训练,利用交叉熵损失函数计算训练损失值,根据训练损失值对漏洞检测模型的参数进行优化,重复迭代直至预测损失值收敛输出训练后的漏洞检测模型。
9.电子设备包括存储介质和处理器;所述存储介质用于存储指令;其特征在于,所述处理器用于根据所述指令进行操作以执行权利要求1至权利要求7任一项所述的方法。