基于源代码和汇编代码跨模态特征增强的漏洞检测方法技术

技术编号:36249974 阅读:15 留言:0更新日期:2023-01-07 09:42
本发明专利技术公开了一种基于源代码和汇编代码跨模态特征增强的漏洞检测方法,所述方法从源代码中提取控制依赖和数据依赖相关的语法语义特征,从汇编代码中提取内存操作相关的语法语义特征,然后使用高级语言程序源代码与其语句对齐的汇编代码输入到跨模态特征增强和融合的双模态表示学习模型进行软件漏洞检测。该方法能够对高级语言源代码和汇编代码两种程序模态进行表示学习,利用源代码和汇编代码之间的语句对齐关系,分别在源代码模态和汇编代码模态提取漏洞相关的语义特征,并使用不同的深度学习网络和交叉注意力机制学习二者之间的语义关联性,充分利用两种模态程序的特征互补性进行特征级融合,从而提升软件漏洞检测的准确性。准确性。准确性。

【技术实现步骤摘要】
基于源代码和汇编代码跨模态特征增强的漏洞检测方法


[0001]本专利技术属于软件漏洞检测领域,涉及一种自动检测软件漏洞的方法,具体涉及一种基于源代码和汇编代码跨模态特征增强的软件漏洞检测方法。

技术介绍

[0002]软件漏洞(Vulnerability,也称脆弱性)是指软件在其生命周期中存在的可能被不法分子利用的缺陷,一旦被利用,将导致隐私泄漏、非法授权、勒索等严重危害。软件漏洞检测技术是减少软件安全漏洞、降低软件安全风险的重要方法和手段。程序表示学习是软件漏洞检测的基础和关键。利用深度学习技术从程序的中间表示中学习代码的语法语义特征表示的过程,称为代码的表示学习。
[0003]目前基于深度学习的软件漏洞检测,要么是在高级语言编写的源代码层面,要么是在汇编代码层面对程序进行表示学习并进行软件漏洞检测。
[0004]在高级语言程序层面,基于深度学习的漏洞检测方法大多采用语言模型,将代码看作自然语言文本进行词嵌入,然后利用深度神经网络(如LSTM和GRU)对代码进行表示学习,从代码中自动提取漏洞特征,并将其送入分类器进行漏洞检测。在汇编代码层面,大多使用RNN模型对函数级汇编代码进行表示学习,从汇编代码中提取漏洞特征,然后将模型输出的隐藏向量表示送入分类器进行漏洞检测。通过高级语言源代码得到汇编代码可分为正向和逆向两种。逆向方法是将可执行程序使用反编译工具或计算机模拟器按照执行顺序抓取汇编指令,但是编译器在编译程序时对程序进行了优化,删除了执行未覆盖的代码,因此逆向得到的汇编代码只能得到程序的调用上下文树(Calling Context Tree,CCT),损失了控制流信息,因此该方法适合源代码无法获取的漏洞检测场景。正向方法是在程序编译时由编译器编译生成完整的程序汇编代码。现有的对正向生成的汇编代码进行漏洞检测的方法,没有考虑汇编代码和源代码的语句级对齐,所以在检测软件漏洞时只能实现函数级的软件漏洞检测,检测粒度较粗无法检测定位到源代码发生漏洞的源代码位置进行决策级融合,难以实现特征级的融合,并且只能实现函数级粒度的漏洞检测。例如,《A Vulnerability Detection System Based on Fusion of Assembly Code and Source Code》一文中虽然使用了高级语言源代码、汇编代码、源代码混合汇编代码三种模态,但存在以下不足:一是仅实现了函数级的漏洞检测,检测粒度较粗。二是三种模态使用了同一种程序表示学习模型,没有根据不同模态的特点设计与其相适应的深度学习模型以提取它们各自互补而又独特的漏洞特征。三是使用了投票层(Voting layer)对三种模态的代码漏洞检测结果进行决策级融合,融合方式过于简单。
[0005]目前尚未检索到对高级语言代码和汇编代码进行特征级融合并在代码段粒度检测漏洞的方法。对高级语言和汇编语言两种模态的代码进行特征级融合的难点在于很难将汇编代码和高级语言代码进行语句级的特征对齐和双模态特征增强。

技术实现思路

[0006]本专利技术的目的是提供一种基于源代码和汇编代码跨模态特征增强的漏洞检测方法,该方法能够对高级语言源代码和汇编代码两种程序模态进行表示学习,利用源代码和汇编代码之间的语句对齐关系,分别在源代码模态和汇编代码模态提取漏洞相关的语义特征,并使用不同的深度学习网络和交叉注意力机制学习二者之间的语义关联性,充分利用两种模态程序的特征互补性进行特征级融合,从而提升软件漏洞检测的准确性。
[0007]本专利技术的目的是通过以下技术方案实现的:
[0008]一种基于源代码和汇编代码跨模态特征增强的漏洞检测方法,从源代码中提取控制依赖和数据依赖相关的语法语义特征,从汇编代码中提取内存操作相关的语法语义特征,然后使用高级语言程序源代码与其语句对齐的汇编代码输入到由源代码表示学习网络、汇编代码表示学习网络以及交叉注意力层组成的跨模态特征增强和融合的双模态表示学习模型进行软件漏洞检测,具体包括如下步骤:
[0009]步骤1:将高级语言程序源代码转化为语句对齐且带有源代码变量注释的汇编代码;
[0010]步骤2:使用静态分析工具将高级语言程序源代码生成抽象语法树(AST)和程序依赖图(PDG);
[0011]步骤3:根据源代码的切片准则生成源代码和汇编代码的切片代码段;
[0012]步骤4:根据汇编代码的切片准则生成源代码和汇编代码的切片代码段;
[0013]步骤5:将步骤3和步骤4生成的源代码切片代码段集合进行合并,并为包含漏洞语句的切片代码段标记为“有漏洞”,其余切片代码段标记为“无漏洞”,从而构成源代码切片代码段的训练数据集;同理,将步骤3和步骤4生成的汇编代码切片代码段集合进行合并,并为包含漏洞语句的切片代码段标记为“有漏洞”,其余切片代码段标记为“无漏洞”,从而构成汇编代码切片代码段的训练数据集;
[0014]步骤6:使用word2vec将源代码切片代码段中的token进行词嵌入,得到源代码切片代码段中每条语句的初始向量表示,将其送入由CNN构成的语句编码网络,得到每条语句的隐藏向量表示,再将每条语句的隐藏向量表示送入双向GRU(Gate Recurrent Unit门控循环单元)构成的程序编码网络,得到源代码切片代码段的隐藏向量表示;同理,使用word2vec将汇编代码切片代码段中的token进行词嵌入,得到汇编代码切片代码段中每条语句的初始向量表示,送入由两层双向GRU构成的汇编代码表示学习网络,得到汇编代码切片代码段的隐藏向量表示;
[0015]步骤7:步骤6得到的源代码切片代码段的隐藏向量表示和汇编切片代码段的隐藏向量表示使用交叉注意力机制(Cross

Attention)进行特征增强,生成更准确的切片代码段向量表示,然后将源代码切片代码段的隐藏向量表示和汇编切片代码段的隐藏向量表示进行注意力加权聚合拼接,得到跨模态特征增强和融合的隐藏向量表示;
[0016]步骤8:将步骤7得到的经过跨模态交叉注意力特征融合和增强的向量表示送入由全连接层(FCN)和Softmax构成的分类器,根据分类器的输出结果与代码段的实际标签计算叉熵损失(Cross Entropy Loss),反向传播更新由源代码表示学习网络、汇编代码表示学习网络以及交叉注意力层组成的跨模态特征增强和融合的双模态表示学习模型参数,直到跨模态特征增强和融合的双模态表示学习模型训练结束;
[0017]步骤9:使用训练好的跨模态特征增强和融合的双模态表示学习模型和分类器网络对待测试代码进行漏洞检测。
[0018]相比于现有技术,本专利技术具有如下优点:
[0019](1)首次引入内存操作指令作为切片准则,基于内存操作切片技术生成的切片代码漏洞数据集,通过找到与源代码变量相关的内存操作指令,其对数据流相关漏洞方面提取的切片更精准,使其更有助于代码表示学习模型学到漏洞相关语句。
[0020](2)利用代码编译预处理信息和调试跟踪信息实现跨模态的代码元素对齐,生成带有本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于源代码和汇编代码跨模态特征增强的漏洞检测方法,其特征在于所述方法包括如下步骤:步骤1:将高级语言程序源代码转化为语句对齐且带有源代码变量注释的汇编代码;步骤2:使用静态分析工具将高级语言程序源代码生成抽象语法树和程序依赖图;步骤3:根据源代码的切片准则生成源代码和汇编代码的切片代码段;步骤4:根据汇编代码的切片准则生成源代码和汇编代码的切片代码段;步骤5:将步骤3和步骤4生成的源代码切片代码段集合进行合并,并为包含漏洞语句的切片代码段标记为“有漏洞”,其余切片代码段标记为“无漏洞”,从而构成源代码切片代码段的训练数据集;同理,将步骤3和步骤4生成的汇编代码切片代码段集合进行合并,并为包含漏洞语句的切片代码段标记为“有漏洞”,其余切片代码段标记为“无漏洞”,从而构成汇编代码切片代码段的训练数据集;步骤6:使用word2vec将源代码切片代码段中的token进行词嵌入,得到源代码切片代码段中每条语句的初始向量表示,将其送入由CNN构成的语句编码网络,得到每条语句的隐藏向量表示,再将每条语句的隐藏向量表示送入双向GRU构成的程序编码网络,得到源代码切片代码段的隐藏向量表示;同理,使用word2vec将汇编代码切片代码段中的token进行词嵌入,得到汇编代码切片代码段中每条语句的初始向量表示,送入由两层双向GRU构成的汇编代码表示学习网络,得到汇编代码切片代码段的隐藏向量表示;步骤7:步骤6得到的源代码切片代码段的隐藏向量表示和汇编切片代码段的隐藏向量表示使用交叉注意力机制进行特征增强,生成更准确的切片代码段向量表示,然后将源代码切片代码段的隐藏向量表示和汇编切片代码段的隐藏向量表示进行注意力加权聚合拼接,得到跨模态特征增强和融合的隐藏向量表示;步骤8:将步骤7得到的经过跨模态交叉注意力特征融合和增强的向量表示送入由全连接层和Softmax构成的分类器,根据分类器的输出结果与代码段的实际标签计算叉熵损失,反向传播更新由源代码表示学习网络、汇编代码表示学习网络以及交叉注意力层组成的跨模态特征增强和融合的双模态表示学习模型参数,直到跨模态特征增强和融合的双模态表示学习模型训练结束;步骤9:使用训练好的跨模态特征增强和融合的双模态表示学习模型和分类器网络对待测试代码进行漏洞检测。2.根据权力要求1所述的基于源代码和汇编代码跨模态特征增强的漏洞检测方法,其特征在于所述步骤1的具体步骤如下:步骤1.1:使用程序编译器步调试源代码,按语句生成汇编代码,按语句对齐输出源代码与汇编代码;步骤1.2:使用代码编译器命令行编译方式带有特定参数生成带有源代码变量注释的汇编代码;步骤1.3:将汇编代码注释填入步骤1.1生成的与其对应的源代码语句。3.根据权利要求1的基于源代码和汇编代码跨模态特征增强的漏洞检测方法,其特征在于所述步骤3中,汇编代码切片生成的具体步骤如下:步骤3.1:根据源代码的切片准则,提取源代码的漏洞候选关键点,前向和后向遍历在步骤2中得到的程序依赖图,获取双向切片语句集合,生成高级语言形式的切片代码段;
步骤3.2:根据步骤1得到的汇编代码和高级语言源代码的语句对应关系,找到源代码切片代码段中的每条语句对应的汇编代码块,从而得到汇编语言形式的切片代码段。4.根据权利要求1的基于源代码和汇编代码跨模态特征增强的漏洞检测方法,其特征在于所述步骤4...

【专利技术属性】
技术研发人员:苏小红陶文鑫魏宏巍郑伟宁万佳元王甜甜张彦航
申请(专利权)人:哈尔滨工业大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1