本技术公开了一种基于跨模态细粒度特征对齐和融合的语句级漏洞检测方法,所述方法将高级程序语言代码转换为源代码语句与汇编代码指令序列对齐且源代码变量与汇编代码寄存器对齐的双模态融合信息的汇编代码,通过双模态互切和双模态净化方法对代码进行预处理,得到净化后的源代码切片和汇编代码切片;将净化后到的双模态切片代码段送入编码网络进行双模态特征融合并学习语句的长依赖关系;将双模态信息融合的代码切片高级向量表示送入解码网络,将编码器得到的语义向量转换为特定序列;将解码网络的输出结果送入分类器中判别待测代码语句是否含有漏洞。本发明可检测出包含多种类型的漏洞或跨越多行语句的复杂漏洞结构,有效地降低误报率和漏报率。
背景技术
软件漏洞检测是指通过分析、扫描或测试软件系统,识别出其潜在的安全问题或设计缺陷,以防止攻击者利用这些漏洞进行恶意活动。目前常用的基于深度学习的漏洞检测方法包括基于token序列的方法、基于图神经网络的方法以及基于双模态代码的方法。然而,现有的这些方法普遍只能检测一个函数或切片代码段是否包含漏洞,而无法定位引发漏洞的具体语句位置,为此需要研究语句级的细粒度漏洞检测方法,以辅助软件维护人员根据定位出的语句位置理解并快速修复漏洞。细粒度漏洞检测方法,即漏洞定位技术旨在自动定位触发漏洞的具体代码语句。现有的基于深度学习的漏洞定位方法可以分为基于序列的方法、基于Transformer架构的方法、Transformer架构与图结合的方法以及基于大规模语言模型微调的方法,然而这些方法存在以下不足:一是没有利用源代码和汇编代码等多模态的代码语义信息。二是一些方法只能输出最可能为漏洞的语句行,即预测最可能包含漏洞的1行代码,对于包含多行漏洞语句的代码段无法定位引发漏洞的漏洞结构,使得这种方法缺乏实用性。现有的使用汇编代码和源代码双模态信息的方法只利用了代码片段级的对齐信息,并没有深入到更细节的层面,未充分利用细粒度的双模态对齐信息并进行语句级的漏洞检测。目前尚未检索到结合源代码和汇编代码的细粒度对齐信息进行细粒度软件漏洞定位的方法。
实现思路