当前位置: 首页 > 专利查询>浙江大学专利>正文

一种基于多模态的函数级漏洞检测的方法技术

技术编号:38544974 阅读:15 留言:0更新日期:2023-08-22 20:55
本发明专利技术公开了一种基于多模态的函数级漏洞检测的方法,该方法利用了多模态的信息来自动识别一个新的函数源代码是否包含漏洞;对数据集进行预处理和数据划分,构建函数源代码对应的图结构,并基于图graph结构信息生成函数源代码图片;构建多模态漏洞检测模型,由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;反向传播更新多模态漏洞检测模型的参数,直到损失函数收敛,得到训练好的多模态漏洞检测模型;最终将一个新的函数源代码输入到训练好的多模态漏洞检测模型中,判断是否含有漏洞;实验结果表明本方法针对函数级别的代码进行漏洞检测具有较好的性能。有较好的性能。有较好的性能。

【技术实现步骤摘要】
conference on software engineering.2020:578

589.)介绍了一种名为DPLDP的VD方法,该方法根据代码字符的ASCII值将代码转换为图像。(Wu Y,Zou D,Dou S,et al.VulCNN:An Image

inspired Scalable Vulnerability Detection System[J].2022.)提出了一种函数级别的VD方法,通过对源代码对应的PDG结构进行中心性分析将代码转换为图像。
[0004]同时,多模态技术也在代码相关任务中表现出了良好的性能,受到了广泛关注,如(Guo D,Lu S,Duan N,et al.UniXcoder:Unified Cross

Modal Pre

training for Code Representation[J].arXiv preprint arXiv:2203.03850,2022.)提出了结合AST结构和代码注释来进行代码表示。(Gao Y,Lyu C.M2TS:Multi

Scale Multi

Modal Approach Based on Transformer for Source Code Summarization[J].arXiv preprint arXiv:2203.09707,2022.)融合了AST和代码标识符特征。(Weyssow M,Sahraoui H,Liu B.Better Modeling the Programming World with Code Concept Graphs

augmented Multi

modal Learning[J].arXiv preprint arXiv:2201.03346,2022.)提出将标识符之间的语义关系以代码概念图(Code Concept Graph,CG)的形式表示,并证明了通过与基于CG的GNN联合学习,可以增强预训练的低级别的语言模型的性能。然而,这些方法对模态信息的提取不够全面,只考虑了代码文本信息或图结构信息,而忽略了代码图像提供的信息。

技术实现思路

[0005]本专利技术的目的在于针对现有技术的不足,提供了一种基于多模态的函数级漏洞检测的方法
[0006]本专利技术的目的是通过以下技术方案来实现的:一种基于多模态的函数级漏洞检测的方法,包括以下步骤:
[0007](1)对数据集进行预处理,并将数据集划分为训练集、验证集和测试集,并得到训练集对应的真实标签集合;
[0008](2)使用开源代码分析工具Joern对训练集中每一个函数源代码抽取对应的图结构,基于图结构生成对应的函数源代码图片,得到图片训练集;
[0009](3)将训练集输入到多模态漏洞检测模型,得到训练集对应的预测标签概率分布集合;所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
[0010](4)通过训练集对应的真实标签集合和预测标签概率分布集合,得到损失函数Loss;
[0011](5)反向传播更新多模态漏洞检测模型的参数,直到损失函数Loss收敛,得到训练好的多模态漏洞检测模型;
[0012](6)将步骤(5)得到的训练好的多模态漏洞检测模型用于新的函数源代码进行漏洞检测。
[0013]进一步地,所述步骤(1)具体包括以下子步骤:
[0014](1.1)对数据集中的函数源代码进行预处理,包括去除代码中的空行、注释以及不合法的缩进以及去除异常结尾的函数代码,得到预处理后的数据集X:X={x1,x2,

,x
n
,

,x
N
},其中,x
n
为任意一个预处理后的函数源代码,n={1,2,

,n,

,N},总共N个预处理后的函数源代码;
[0015](1.2)将经过步骤(1.1)预处理后的数据集X按照8:1:1的比例划分为训练集X
A
、验证集X
B
和测试集X
C
,并保证训练集、验证集、测试集以及预处理后的数据集中漏洞比例一致,所述训练集X
A
为:其中,为任意一个训练数据,总共D
A
个训练数据,并得到训练集X
A
对应的真实标签集合Y
A
:其中,为训练数据对应的真实标签。
[0016]进一步地,所述步骤(2)具体包括以下子步骤:
[0017](2.1)将训练集X
A
中任意一个训练数据抽取出来并存成对应的.c文件,并使用Joern工具将保存的.c文件生成对应的图结构
[0018](2.2)利用graphviz画图工具将生成的图结构转化为对应的函数源代码图片进行保存;
[0019](2.3)对训练集X
A
中每一个训练数据重复步骤(2.1)和步骤(2.2),得到图片训练集I
A

[0020]进一步地,所述步骤(3)具体包括以下子步骤:
[0021](3.1)将训练集X
A
和图片训练集I
A
输入到多模态漏洞检测模型,所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
[0022](3.2)首先将训练集X
A
中任意一个训练数据拆分为M
a
条代码,并输入到代码编码器中,所述代码编码器由UniXcoder模型组成,使用UniXcoder模型中的BPE分词器对训练数据进行分词,将分词后的结果转换为函数级的代码特征表示,随后用完全连接层将函数级的代码特征表示投影到维度是512的空间上,输出函数级别的代码特征表示T
a
∈R1×
D1
,其中,D1=512;并对训练数据对应的M
a
条代码行进行分词,将分词后的结果转换为语句级的代码特征表示集合的代码特征表示集合其中,为第m条代码行对应的语句级别的代码特征表示,m={1,2,

,m,

,M
a
},D2=768;
[0023](3.3)随后将训练数据对应的函数源代码图片输入全局图片编码器中,所述全局图片编码器由SwinV2模型组成,使用SwinV2模型得到对应的图片特征表示接着通过全连接层将图片特征表示投影到维度为512的空间上,输出全局图片特征表示
[0024](3.4)使用场景文本识别器East获取函数源代码图片中所有节点的边界框坐标,经过图片大小归一化获得函数源代码图片中任意一个节点的左下角点坐标以及右上角点坐标得到节点的位置信息的位置信息并将节点的文本信息记为重复上述步骤,得到函数本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于多模态的函数级漏洞检测的方法,其特征在于,包括以下步骤:(1)对数据集进行预处理,并将数据集划分为训练集、验证集和测试集,并得到训练集对应的真实标签集合;(2)使用开源代码分析工具Joern对训练集中每一个函数源代码抽取对应的图结构,基于图结构生成对应的函数源代码图片,得到图片训练集;(3)将训练集输入到多模态漏洞检测模型,得到训练集对应的预测标签概率分布集合;所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;(4)通过训练集对应的真实标签集合和预测标签概率分布集合,得到损失函数Loss;(5)反向传播更新多模态漏洞检测模型的参数,直到损失函数Loss收敛,得到训练好的多模态漏洞检测模型;(6)将步骤(5)得到的训练好的多模态漏洞检测模型用于新的函数源代码进行漏洞检测。2.根据权利要求1所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(1)具体包括以下子步骤:(1.1)对数据集中的函数源代码进行预处理,包括去除代码中的空行、注释以及不合法的缩进以及去除异常结尾的函数代码,得到预处理后的数据集X:X={x1,x2,

,x
n
,

,x
N
},其中,x
n
为任意一个预处理后的函数源代码,n={1,2,

,n,

,N},总共N个预处理后的函数源代码;(1.2)将经过步骤(1.1)预处理后的数据集X按照8:1:1的比例划分为训练集X
A
、验证集X
B
和测试集X
C
,并保证训练集、验证集、测试集以及预处理后的数据集中漏洞比例一致,所述训练集X
A
为:其中,为任意一个训练数据,总共D
A
个训练数据,并得到训练集X
A
对应的真实标签集合Y
A
:其中,为训练数据对应的真实标签。3.根据权利要求2所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(2)具体包括以下子步骤:(2.1)将训练集X
A
中任意一个训练数据抽取出来并存成对应的.c文件,并使用Joern工具将保存的.c文件生成对应的图结构(2.2)利用graphviz画图工具将生成的图结构转化为对应的函数源代码图片进行保存;(2.3)对训练集X
A
中每一个训练数据重复步骤(2.1)和步骤(2.2),得到图片训练集I
A
:4.根据权利要求3所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(3)具体包括以下子步骤:(3.1)将训练集X
A
和图片训练集I
A
输入到多模态漏洞检测模型,所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
(3.2)首先将训练集X
A
中任意一个训练数据拆分为M
a
条代码,并输入到代码编码器中,所述代码编码器由UniXcoder模型组成,使用UniXcoder模型中的BPE分词器对训练数据进行分词,将分词后的结果转换为函数级的代码特征表示,随后用完全连接层将函数级的代码特征表示投影到维度是512的空间上,输出函数级别的代码特征表示T
a
∈R1×
D1
,其中,D1=512;并对训练数据对应的M
a
条代码行进行分词,将分词后的结果转换为语句级的代码特征表示集合的代码特征表示集合其中,为第m条代码行对应的语句级别的代码特征表示,m={1,2,

,m,

,M
a
},D2=768;(3.3)随后将训练数据对应的函数源代码图片输入全局图片编码器中,所述全局图片编码器由SwinV2模型组成,使用SwinV2模型得到对应的图片特征表示接着通过全连接层将图片特征表示投影到维度为512的空间上,输出全局图片特征表示(3.4)使用场景文本识别器East获取函数源代码图片中所有节点的边界框坐标,经过图片大小归一化获得函数源代码图片中任意一个节点的左下角点坐标以及右上角点坐标得到节点的位置信息的位置信息并将节点的文本信息记为重复上述步骤,得到函数源代码图片的位置信息集合bbox
a
:和文本信息集合lable
a
:其中,j={1,2,

,j,

,M
a
},M
a
表示函数源代码图片中总共包含M
a...

【专利技术属性】
技术研发人员:倪超郭昕蓉夏鑫杨小虎
申请(专利权)人:浙江大学
类型:发明
国别省市:

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

1