【技术实现步骤摘要】
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 ...
【技术保护点】
【技术特征摘要】
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...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。