一种基于多模态特征自适应融合的软件漏洞检测方法

    专利查询2025-09-13  69


    本发明涉及一种基于多模态特征自适应融合的软件漏洞检测方法,属于计算机安全。


    背景技术:

    1、随着信息技术的广泛应用,软件系统的复杂性和规模显著增加,从而导致软件安全问题日益突显。软件漏洞作为网络安全的重要风险,如果未能及时识别和修复,可能会引发严重的安全事件。

    2、传统漏洞检测方法主要依赖于专家制定的预定义规则进行代码分析。尽管这些规则在某些情况下能够发挥作用,但其显著缺陷包括规则的开发和维护成本高昂,且难以覆盖所有潜在漏洞,从而影响检测的全面性和准确性。近年来,深度学习技术的应用显著提升了漏洞检测的能力。深度学习模型不依赖于预定义规则,而是通过自动学习漏洞模式来提高检测性能。这些模型能够从大规模数据集中提取特征,增强检测的准确性和泛化能力,并简化了系统的构建和部署过程,从而提升了效率和安全性。

    3、基于深度学习的软件漏洞检测方法主要分为两类:一类将代码视为特殊的自然语言问题,转化为自然语言处理任务,从代码序列中提取特征;另一类则利用代码的图结构,如控制流图、程序依赖图和代码属性图,通过图神经网络模型(例如图卷积网络)学习代码中的层次信息和依赖关系。

    4、然而,现有技术存在以下不足:在代码序列模态方面,目前的方法通常将代码转换为单行序列,或通过代码切片、符号化或路径提取等方式处理,这些方法主要关注代码序列的词法层次信息,而忽视了词法、语法和语义信息的综合交互。在模态交互融合方面,尽管有些方法尝试通过构建代码行为图模型并与其他模型融合来展示多模态的潜力,但这些方法在模态融合时往往仅在最终层简单拼接特征,缺乏深度的交互和高效融合,这限制了其在漏洞检测中的效果。


    技术实现思路

    1、针对现有技术的不足,本发明提出了一种基于多模态特征自适应融合的软件漏洞检测方法。该方法通过综合利用编译器前端信息,包括代码序列的词法、语法以及代码预训练中的语义信息,显著增强了代码序列特征。其次,构建协同损失函数以缓解代码序列与代码图结构不同模态之间的差距。采用样本内损失函数提取代码模态的共享特征和特有特征,同时引入对比学习损失函数,以实现不同样本间特征的有效区分。最后,通过自适应融合共享特征与各模态的特有特征,最终显著提升了对真实漏洞代码的检测精度。

    2、一种基于多模态特征自适应融合的软件漏洞检测方法,包括以下步骤:

    3、步骤s1:对软件的代码样本进行预处理;

    4、步骤s2:构建软件漏洞检测模型,模型包括代码序列信息提取模块、图结构信息提取模块、模态优化模块、代码生成模块和分类器;

    5、代码序列信息提取模块从预处理后的代码样本中提取代码序列特征信息,在此过程中综合编译器的前端信息对代码序列特征信息进行增强,编译器的前端信息包括代码样本的词法信息和句法信息;

    6、步骤s3:图结构信息提取模块获取代码样本的图结构特征表示;

    7、其中,步骤s2的代码序列特征信息和步骤s3的图结构特征表示构成代码样本的多模态信息;

    8、步骤s4:模态优化模块构建内损失函数,导入多模态信息至模态优化模块,获取代码样本的在两种模态下的共享特征和特有特征,在此过程中采用对比学习损失函数,增强代码样本间的区分度;

    9、步骤s5:代码生成模块在步骤s4的共享特征基础上自适应融合两种模态下的特有特征,生成代码样本的综合代码表示;

    10、步骤s6:将步骤s5的代码样本的综合代码表示输入分类器,根据预测分数,判断代码样本是否有漏洞。

    11、进一步的,步骤s1具体为:

    12、步骤s11:通过代码清理去除代码样本的冗余信息,冗余信息包括注释和日志,提升样本数据的有效性并降低噪声干扰;

    13、步骤s12:删除重复的代码片段,防止模型在训练过程中依赖重复样本,确保漏洞识别的准确性;

    14、步骤s13:使用静态分析工具对清理后的代码样本进行解析,生成代码属性图,以捕捉数据流和控制流信息;如果无法生成代码属性图或生成的代码属性图结构不完整,则删除代码样本。

    15、进一步的,步骤s2具体为:

    16、步骤s21:将代码样本转化为字符序列格式,并应用bpe方法进行分词处理,以获取代码样本的词法信息;表示为:

    17、;

    18、其中,表示代码样本的词法信息, 表示通过bpe分词生成的词法单元,表示bpe分词方法,表示字符序列格式的代码样本;

    19、步骤s22:利用tree-sitter工具解析代码样本,生成抽象语法树ast,并通过先序遍历将抽象语法树ast转化为线性序列,以获取代码样本的语法信息;表示为:

    20、ast=tree-sitter(code);

    21、;

    22、其中,tree-sitter表示解析器生成工具和增量解析库,code表示代码样本,表示先序遍历;,n 是当前节点,children(n) 返回当前节点的子节点;

    23、步骤s23:对步骤s21的代码样本的词法信息和步骤s22的代码样本的语法信息分别使用预训练模型生成词法特征和语法特征;

    24、具体为:通过多头注意力机制,捕捉代码样本的词法特征和语法特征,生成组合嵌入;将这些组合嵌入拼接,得到代码样本的嵌入向量;最后,将这些组合嵌入拼接,得到完整的代码序列特征向量;

    25、;

    26、;

    27、;

    28、;

    29、其中,表示代码样本的词法特征,代码样本表示代码样本的语法特征,表示预训练模型,表示多头注意力机制,表示代码样本的组合嵌入,也即代码序列特征信息,表示沿着特定维度进行拼接。

    30、进一步的,步骤s3具体为:

    31、步骤s31:获取步骤s13代码样本对应的代码属性图cpg,对生成的代码属性图cpg进行节点嵌入,获取代码样本对应的图节点特征;

    32、具体为:使用词嵌入方法将代码样本的每个节点及其类型转换为节点的综合向量表示,也即图节点特征,表示为:

    33、;

    34、其中,每个节点  由类型 和对应代码行组成,v 是图节点特征,表示词嵌入方法;

    35、步骤s32: 应用增强的图表示学习方法,通过结合异构边缘类型信息优化节点嵌入表达,并通过扩大卷积核尺寸捕捉远距离节点之间的关系,最终生成代码样本的图结构的特征表示,表示为:

    36、;

    37、g=(v,e);

    38、其中,g表示代码属性图cpg, v 代表图中的节点,e代表边, 代表增强的图表示学习方法参数,表示扩大卷积核尺寸。

    39、进一步的,步骤s3中,将每个代码模态特征分离为共享特征和特有特征,并构建协同损失函数,包括样本内损失函数、对比学习损失函数和交叉熵损失函数,以优化共享特征与特有特征的学习过程,确保不同模态特征的充分分离与有效融合,步骤s3具体为:

    40、步骤s31:设计模态公共编码器和模态特有编码器;模态公共编码器用于将代码模态特征映射到共享特征向量空间,模态特有编码器用于将代码模态特征映射到特有特征向量空间,模态公共编码器和模态特有编码器均为带有激活函数的多层感知器层mlp,表示为;

    41、;

    42、 ;

    43、;

    44、;

    45、其中,和均属于,表示维的实数向量空间;分别是代码序列特征信息和图结构特征向量的对齐特征表示;表示代码双模态下的共享参数,表示特有编码器第一专有参数,表示特有编码器第二专有参数;和分别表示代码序列特征信息和图结构特征向量的公共特征向量,也即共享特征;和分别表示代码序列特征信息和图结构特征向量的特有特征向量,也即特有特征;

    46、步骤s32:构建协同损失函数来优化获取的共享特征和特有特征,协同损失函数包括样本内损失函数、对比学习损失函数以及交叉熵损失函数;

    47、样本内损失函数表示为:

    48、;

    49、其中,表示最小化相似性损失,减少不同域之间潜在特征表征的差异,表示正交性约束损失,表示均方误差损失;

    50、步骤s321:最小化相似性损失采用cmd损失函数来衡量不同模态特征分布的相似性;cmd损失函数通过比较不同模态的高阶中心矩来度量分布间的差异,其公式如下:

    51、;

    52、其中,和分别表示代码序列模态ct和代码图结构模态cg在共享特征空间中的第i阶中心矩,k为最大中心矩的阶数;

    53、通过最小化cmd损失函数,能够有效减少不同模态在共享特征空间中的分布差异,保证不同模态的共享特征能够更好地对齐;

    54、步骤s322:正交性约束损失构建最小化正交性损失函数来减少模态特有特征的差异性,其公式如下:

    55、;

    56、其中,和 分别表示模态公共编码器和模态特有编码器输出的特征表示矩阵,表示弗罗贝尼乌斯范数,用于计算矩阵的元素平方和的平方根;

    57、通过最小化正交性损失函数,使得和 正交,从而确保能够独立地对不同模态数据的不同方面进行建模;

    58、步骤s323:设计了一个解码器,输入代码模态 m的共享特征和特有特征,输出能够重构该模态的初始特征,使用均方误差衡量重构误差,公式如下:

    59、;

    60、;

    61、其中,  表示代码模态 m 经过编码器提取后,并经过对齐处理的特征表示;解码器将模态m共享特征与特有特征结合在一起,形成新的特征表示,以有效地重构模态 m的原始特征 ;其中,为解码器的参数,为正则化项,用于防止过拟合;

    62、步骤s33:构建对比学习损失函数,用于解决样本内损失函数未考虑不同样本之间的特征对齐问题,优化不同样本之间的全局表示,具体为:

    63、使用各自模态编码器模型最后一层的特征嵌入作为每个代码序列和图结构样本的全局表示;最大化批处理中b对真实对的代码序列嵌入和图结构嵌入的余弦相似度,同时最小化对错误对嵌入的余弦相似度,表示为:

    64、;

    65、上式中,表示对模态特征嵌入 z 的期望值计算,表示负样本指示函数,用于选择不等于当前样本索引j的其他样本,表示从样本索引为j的代码序列模态ct中获取的特征,表示从样本索引为j的代码图结构模态cg中获取的正样本特征,表示从样本索引为k的代码图结构模态cg中获取的负样本特征;表示从样本索引为j的代码图结构模态cg中获取的特征,表示从样本索引为j的代码序列模态ct中获取的正样本特征,表示从样本索引为k的代码序列模态ct中获取的负样本特征;

    66、为标准对比损失函数,公式为:

    67、;

    68、其中,为可学习的参数。

    69、进一步的,所述步骤s5基于模态共享特征自适应融合模态差异特征,包括:

    70、步骤s51:应用交叉注意力机制提取代码序列特征信息和图结构特征向量的共性信息,并将此共性信息与模态共享特征进行交互,得到增强共享特征;

    71、具体为:

    72、在交叉注意力机制中,查询矩阵q、键矩阵k和值矩阵v的输入来自于两个不同的模态,其中序列x 作为查询矩阵q的输入,而序列 y 作 为 键矩阵k和值矩阵v 的输入,公式如下:

    73、 ;

    74、其中,、和是查询、键和值的投影矩阵,是维度的缩放因子,用于稳定训练过程中的梯度,表示交叉注意力机制;

    75、接着,将和与共享特征和一起输入到多头注意力机制,该机制通过以下公式进一步提取和融合特征:

    76、;

    77、 ;

    78、其中,表示多头机制,表示注意力机制,表示多头注意力调整参数,表示第i个头输出,、和分别表示多头注意力机制中第i个头对应查询矩阵、键矩阵和值矩阵的调整参数;

    79、最终,通过拼接各个头输出,得到增强的模态共享特征;

    80、步骤s52:基于交叉注意力机制分别计算增强的模态共享特征与特有特征和之间的关联特征,将这些关联特征分别输入到门控神经单元中,以获取可学习的第一融合权重和第二融合权重,表示为:

    81、 ;

    82、 ;

    83、其中,表示门控神经单元,通过sigmoid激活函数实现,通过为输入特征分配重要性权重来调节信息流动;

    84、步骤s53:根据增强的模态共享特征、特有特征和,自适应得到最终的多模态融合特征,也即代码样本的综合代码表示,表示为:

    85、;

    86、其中,表示第一融合权重,表示第二融合权重。

    87、进一步的,步骤s6中具体为:

    88、将代码样本的综合代码表示输入分类器,以获得漏洞检测的预测结果;

    89、;

    90、上式中,为权重矩阵,为偏置项,为代码样本的综合代码表示,为sigmoid激活函数,表示预测分数,用于表示概率;

    91、其中,分类器通过线性变换和激活函数对多模态融合特征进行处理,分别输出代码样本为有漏洞或无漏洞的预测分数,依据预测分数的大小来预测输出结果,输出结果包括漏洞样本或无漏洞样本。

    92、本发明的有益效果是:

    93、(1)本发明提出了一种基于多模态特征自适应融合的软件漏洞检测方法,综合利用包括代码序列特征信息和图结构特征表示,能够自动检测未知代码中的潜在漏洞,并精准定位到函数级别。该方法通过结合代码序列的词法和语法信息,以及预训练模型的强大语义能力,模拟编译器的前端,增强了代码序列的模态特征。此外,还充分利用了代码图结构信息。这种综合方法有效提升了漏洞检测的效率和准确性,辅助人工审查,显著减少了漏检和误检的可能性。

    94、(2)现有的多模态代码漏洞检测方法在融合不同模态特征时,往往未能充分考虑模态间的差异,通常采用简单的特征拼接,缺乏有效的交互手段,导致检测效果不佳。相比之下,本发明充分考虑了不同模态之间的差异性,通过构建样本内损失函数挖掘共享特征与特有特征,并采用对比学习增强样本的区分度。通过提取模态共享特征作为桥梁,自适应融合各模态的特有特征,从而生成高效的综合代码表示,显著提升了漏洞检测的准确性和效率。


    技术特征:

    1.一种基于多模态特征自适应融合的软件漏洞检测方法,其特征在于,包括以下步骤:

    2.根据权利要求1所述的一种基于多模态特征自适应融合的软件漏洞检测方法,其特征在于,步骤s1具体为:

    3.根据权利要求1所述的一种基于多模态特征自适应融合的软件漏洞检测方法,其特征在于,步骤s2具体为:

    4.根据权利要求2所述的一种基于多模态特征自适应融合的软件漏洞检测方法,其特征在于,步骤s3具体为:

    5.根据权利要求4所述的一种基于多模态特征自适应融合的软件漏洞检测方法,其特征在于,步骤s3中,将每个代码模态特征分离为共享特征和特有特征,并构建协同损失函数,包括样本内损失函数、对比学习损失函数和交叉熵损失函数,以优化共享特征与特有特征的学习过程,确保不同模态特征的充分分离与有效融合,步骤s3具体为:

    6.根据权利要求5所述的一种基于多模态特征自适应融合的软件漏洞检测方法,其特征在于,所述步骤s5基于模态共享特征自适应融合模态差异特征,包括:

    7.根据权利要求6所述的一种基于多模态特征自适应融合的软件漏洞检测方法,其特征在于,步骤s6中具体为:


    技术总结
    本发明公开了一种基于多模态特征自适应融合的软件漏洞检测方法,包括以下步骤:对代码样本进行预处理;从样本中提取多模态特征信息,综合编译器前端信息以增强代码序列表征,并应用增强的图表示学习方法提升代码图结构表征能力;构建样本内损失函数,充分挖掘这两种模态的共享特征和特有特征,同采用对比学习损失函数,增强样本间的区分度;以模态共享特征作为桥梁,自适应融合各模态的特有特征,生成高效的综合代码表示;将代码综合表示输入分类器,根据预测分数,判断代码样本是否有漏洞。本发明设计了一个多模态漏洞检测模型,有效提升了特征提取的完整性和漏洞检测的准确性。

    技术研发人员:郭帆,万文凯,王锦平,朱敏敏,赖丽强
    受保护的技术使用者:江西师范大学
    技术研发日:
    技术公布日:2024/11/26
    转载请注明原文地址:https://tc.8miu.com/read-31227.html

    最新回复(0)