CN116611071A - 一种基于多模态的函数级漏洞检测的方法 - Google Patents
一种基于多模态的函数级漏洞检测的方法 Download PDFInfo
- Publication number
- CN116611071A CN116611071A CN202310599590.3A CN202310599590A CN116611071A CN 116611071 A CN116611071 A CN 116611071A CN 202310599590 A CN202310599590 A CN 202310599590A CN 116611071 A CN116611071 A CN 116611071A
- Authority
- CN
- China
- Prior art keywords
- code
- node
- picture
- source code
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 69
- 238000000034 method Methods 0.000 claims abstract description 31
- 238000010586 diagram Methods 0.000 claims abstract description 8
- 238000007781 pre-processing Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 107
- 238000012549 training Methods 0.000 claims description 98
- 239000011159 matrix material Substances 0.000 claims description 27
- 238000004364 calculation method Methods 0.000 claims description 12
- 238000012360 testing method Methods 0.000 claims description 12
- 238000012795 verification Methods 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 10
- 230000011218 segmentation Effects 0.000 claims description 10
- 238000013528 artificial neural network Methods 0.000 claims description 7
- 238000004458 analytical method Methods 0.000 claims description 5
- 230000004913 activation Effects 0.000 claims description 3
- 230000004931 aggregating effect Effects 0.000 claims description 3
- 238000003475 lamination Methods 0.000 claims description 3
- 238000010606 normalization Methods 0.000 claims description 3
- 238000011176 pooling Methods 0.000 claims description 3
- 238000013135 deep learning Methods 0.000 description 9
- 238000013527 convolutional neural network Methods 0.000 description 4
- 238000011156 evaluation Methods 0.000 description 4
- 230000001419 dependent effect Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000007637 random forest analysis Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000002457 bidirectional effect Effects 0.000 description 1
- 238000013145 classification model Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 238000012905 input function Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000013526 transfer learning Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/042—Knowledge-based neural networks; Logical representations of neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/047—Probabilistic or stochastic networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/764—Arrangements for image or video recognition or understanding using pattern recognition or machine learning using classification, e.g. of video objects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/77—Processing image or video features in feature spaces; using data integration or data reduction, e.g. principal component analysis [PCA] or independent component analysis [ICA] or self-organising maps [SOM]; Blind source separation
- G06V10/774—Generating sets of training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V10/00—Arrangements for image or video recognition or understanding
- G06V10/70—Arrangements for image or video recognition or understanding using pattern recognition or machine learning
- G06V10/82—Arrangements for image or video recognition or understanding using pattern recognition or machine learning using neural networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06V—IMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
- G06V20/00—Scenes; Scene-specific elements
- G06V20/60—Type of objects
- G06V20/62—Text, e.g. of license plates, overlay texts or captions on TV images
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Computer Security & Cryptography (AREA)
- Life Sciences & Earth Sciences (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Computer Hardware Design (AREA)
- Biomedical Technology (AREA)
- Multimedia (AREA)
- Medical Informatics (AREA)
- Databases & Information Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Virology (AREA)
- Probability & Statistics with Applications (AREA)
- Image Analysis (AREA)
Abstract
本发明公开了一种基于多模态的函数级漏洞检测的方法,该方法利用了多模态的信息来自动识别一个新的函数源代码是否包含漏洞;对数据集进行预处理和数据划分,构建函数源代码对应的图结构,并基于图graph结构信息生成函数源代码图片;构建多模态漏洞检测模型,由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;反向传播更新多模态漏洞检测模型的参数,直到损失函数收敛,得到训练好的多模态漏洞检测模型;最终将一个新的函数源代码输入到训练好的多模态漏洞检测模型中,判断是否含有漏洞;实验结果表明本方法针对函数级别的代码进行漏洞检测具有较好的性能。
Description
技术领域
本发明涉及漏洞检测方法,尤其涉及一种基于多模态的函数级漏洞检测的方法。
背景技术
软件漏洞在软件系统中非常常见,会导致各种安全问题,包括信息丢失或系统故障。因此,对软件漏洞的早期检测在安全性至关重要的软件系统中是非常重要的。由于深度学习(DL)可以从源代码中自动学习代码特性,因此近几年提出了各种基于深度学习的方法来检测软件系统的漏洞,基于DL的方法可以根据其代码表示的不同进一步分为三种类型,如基于token的方法将源代码视为文本,并利用自然语言处理技术来检测漏洞,如(Dam HK,Tran T,Pham T,et al.Automatic feature learning for vulnerability prediction[J].arXiv preprint arXiv:1708.02368,2017.)提出了一种使用长短期记忆(LSTM)直接从源代码中学习特征的方法,(Li Z,Zou D,Xu S,et al.Sysevr:A framework for usingdeep learning to detect software vulnerabilities[J].IEEE Transactions onDependable and Secure Computing,2021.)提出了一个基于双向门循环单元(BGRU)的切片级别的漏洞检测(VD)模型,该方法提取源代码的语法和语义特征用于漏洞检测,(Russell R,Kim L,Hamilton L,et al.Automated vulnerability detection in sourcecode using deep representation learning[C]//2018 17th IEEE internationalconference on machine learning and applications(ICMLA).IEEE,2018:757-762.)提出了一种基于卷积神经网络(CNN)和随机森林(RF)的函数级别的VD模型。基于树的方法利用程序中包含的结构信息进行漏洞检测,如(Mou L,Li G,Jin Z,et al.TBCNN:A tree-based convolutional neural network for programming language processing[J].arXiv preprint arXiv:1409.5718,2014.)提出了一种基于源代码抽象语法树(AST)的树状卷积神经网络(TBCNN)用于程序分析。基于图的方法如(Yamaguchi F,Golde N,Arp D,etal.Modeling and discovering vulnerabilities with code property graphs[C]//2014IEEE Symposium on Security and Privacy.IEEE,2014:590-604.)引入了代码属性图(Code Property Graph,CPG),该图是抽象语法树(AST)、控制流图(CFG)和程序依赖图(PDG)形成的一个联合的数据结构,并使用图神经网络(GNN)进行漏洞检测,同样(Zhou Y,Liu S,Siow J,et al.Devign:Effective vulnerability identification by learningcomprehensive program semantics via graph neural networks[J].Advances inneural information processing systems,2019,32.)和(Chakraborty S,Krishna R,Ding Y,et al.Deep learning based vulnerability detection:Are we there yet[J].IEEE Transactions on Software Engineering,2021.)都利用门控图神经网络(GGNN)提取源代码的图特征。
此外,一些工作探索了将源代码表示为图像进行漏洞检测的潜力。(Chen J,Hu K,Yu Y,etal.Software visualization and deep transfer learning for effectivesoftware defect prediction[C]//Proceedings of the ACM/IEEE 42nd internationalconference on software engineering.2020:578-589.)介绍了一种名为DPLDP的VD方法,该方法根据代码字符的ASCII值将代码转换为图像。(Wu Y,Zou D,Dou S,et al.VulCNN:AnImage-inspired Scalable Vulnerability Detection System[J].2022.)提出了一种函数级别的VD方法,通过对源代码对应的PDG结构进行中心性分析将代码转换为图像。
同时,多模态技术也在代码相关任务中表现出了良好的性能,受到了广泛关注,如(Guo D,Lu S,Duan N,et al.UniXcoder:Unified Cross-Modal Pre-training for CodeRepresentation[J].arXiv preprint arXiv:2203.03850,2022.)提出了结合AST结构和代码注释来进行代码表示。(Gao Y,Lyu C.M2TS:Multi-Scale Multi-Modal Approach Basedon Transformer for Source Code Summarization[J].arXiv preprint arXiv:2203.09707,2022.)融合了AST和代码标识符特征。(Weyssow M,Sahraoui H,Liu B.BetterModeling the Programming World with Code Concept Graphs-augmented Multi-modalLearning[J].arXiv preprint arXiv:2201.03346,2022.)提出将标识符之间的语义关系以代码概念图(Code Concept Graph,CG)的形式表示,并证明了通过与基于CG的GNN联合学习,可以增强预训练的低级别的语言模型的性能。然而,这些方法对模态信息的提取不够全面,只考虑了代码文本信息或图结构信息,而忽略了代码图像提供的信息。
发明内容
本发明的目的在于针对现有技术的不足,提供了一种基于多模态的函数级漏洞检测的方法。
本发明的目的是通过以下技术方案来实现的:一种基于多模态的函数级漏洞检测的方法,包括以下步骤:
(1)对数据集进行预处理,并将数据集划分为训练集、验证集和测试集,并得到训练集对应的真实标签集合;
(2)使用开源代码分析工具Joern对训练集中每一个函数源代码抽取对应的图结构,基于图结构生成对应的函数源代码图片,得到图片训练集;
(3)将训练集输入到多模态漏洞检测模型,得到训练集对应的预测标签概率分布集合;所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
(4)通过训练集对应的真实标签集合和预测标签概率分布集合,得到损失函数Loss;
(5)反向传播更新多模态漏洞检测模型的参数,直到损失函数Loss收敛,得到训练好的多模态漏洞检测模型;
(6)将步骤(5)得到的训练好的多模态漏洞检测模型用于新的函数源代码进行漏洞检测。
进一步地,所述步骤(1)具体包括以下子步骤:
(1.1)对数据集中的函数源代码进行预处理,包括去除代码中的空行、注释以及不合法的缩进以及去除异常结尾的函数代码,得到预处理后的数据集X:X={x1,x2,…,xn,…,xN},其中,xn为任意一个预处理后的函数源代码,n={1,2,…,n,…,N},总共N个预处理后的函数源代码;
(1.2)将经过步骤(1.1)预处理后的数据集X按照8:1:1的比例划分为训练集XA、验证集XB和测试集XC,并保证训练集、验证集、测试集以及预处理后的数据集中漏洞比例一致,所述训练集XA为:其中,/>为任意一个训练数据,总共DA个训练数据,并得到训练集XA对应的真实标签集合YA:/>其中,/>为训练数据/>对应的真实标签。
进一步地,所述步骤(2)具体包括以下子步骤:
(2.1)将训练集XA中任意一个训练数据抽取出来并存成对应的.c文件,并使用Joern工具将保存的.c文件生成对应的图结构/>
(2.2)利用graphviz画图工具将生成的图结构转化为对应的函数源代码图片/>进行保存;
(2.3)对训练集XA中每一个训练数据重复步骤(2.1)和步骤(2.2),得到图片训练集IA:
进一步地,所述步骤(3)具体包括以下子步骤:
(3.1)将训练集XA和图片训练集IA输入到多模态漏洞检测模型,所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
(3.2)首先将训练集XA中任意一个训练数据拆分为Ma条代码,并输入到代码编码器中,所述代码编码器由UniXcoder模型组成,使用UniXcoder模型中的BPE分词器对训练数据/>进行分词,将分词后的结果转换为函数级的代码特征表示,随后用完全连接层将函数级的代码特征表示投影到维度是512的空间上,输出函数级别的代码特征表示Ta∈R1×D1,其中,D1=512;并对训练数据/>对应的Ma条代码行进行分词,将分词后的结果转换为语句级的代码特征表示集合/> 其中,/>为第m条代码行对应的语句级别的代码特征表示,m={1,2,…,m,…,Ma},D2=768;
(3.3)随后将训练数据对应的函数源代码图片/>输入全局图片编码器中,所述全局图片编码器由SwinV2模型组成,使用SwinV2模型得到对应的图片特征表示/>接着通过全连接层将图片特征表示/>投影到维度为512的空间上,输出全局图片特征表示
(3.4)使用场景文本识别器East获取函数源代码图片中所有节点的边界框坐标,经过图片大小归一化获得函数源代码图片/>中任意一个节点/>的左下角点坐标以及右上角点坐标/>得到节点/>的位置信息/> 并将节点/>的文本信息记为/>重复上述步骤,得到函数源代码图片/>的位置信息集合bboxa:/>和文本信息集合lablea:/>其中,j={1,2,…,j,…,Ma},Ma表示函数源代码图片/>中总共包含Ma个节点;
(3.5)随后将函数源代码图片的位置信息集合bboxa输入到节点位置编码器,使用全连接层将其映射到维度是32的空间上,得到位置特征向量表示集合bboouta:其中,/>为位置信息/>输入到节点位置编码器后输出的位置特征向量表示;
(3.6)将函数源代码图片的语句级别的代码特征表示集合/>输入到多模态图结构编码器,代码特征表示集合/>任意一个语句级别的代码特征表示/>先经过第一层图注意力网络,通过公式(1)-公式(4),得到节点特征向量/>计算公式如下:
其中,W1为第一层的可学习的权重矩阵;(za,m)′为语句级别的代码特征表示经过权重矩阵处理后的第一特征表示;/>为函数源代码图片/>中第m个节点相对于第o个节点的第一注意力值;(za,o)′为语句级别的代码特征表示/>经过权重矩阵处理后的第一特征表示,其中,o={1,2,…,o,…,Ma};/>为第一层的可学习的权重向量;/>为第m个节点相对于第o个节点的第一归一化数据;σ为激活函数;
随后节点特征向量经过第二层图注意力网络,重复公式(1)-公式(4),得到节点特征向量/>但用W2替代W1以及用/>替代/>W2为第二层的可学习的权重矩阵,为第二层的可学习的权重向量;
(3.7)对语句级别的代码特征表示集合中每一个语句级别的代码特征表示重复步骤(3.6),得到节点特征向量集合/> 接着将节点特征向量集合/>传递到完全连接层,得到节点特征表示集合/> 其中,D3=480;
(3.8)将节点特征表示集合与位置特征向量表示集合bboouta拼接起来作为初始化节点特征表示集合V:/>通过图卷积神经网络根据函数源代码图片/>中的节点关系构建图结构G=(V,Q),其中,Q为相似度矩阵集合;
(3.9)利用包含残差连接的GCN对图结构G进行推理,将任意一个和相似度矩阵qi,j输入第一层图卷积层,得到经过第一层图卷积层后的节点特征/>计算公式如下:
其中,为第l层的残差权重矩阵;/>为第l层的可学习的GCN网络的权重矩阵;φ(·)和γ(·)分别为2个全连接层,可在训练时通过反向传播进行学习;
随后将节点特征输入下一层图卷积层,重复上述步骤,直到得到节点特征
(3.10)对图结构G中每一个和相似度矩阵qi,j重复步骤(3.9),得到最终节点特征集合/> 然后对最终节点特征集合/>使用平均池化层,得到平均节点特征/>计算公式如下:
(3.11)然后将全局图片特征表示平均节点特征/>和函数级别的代码特征表示Ta连接在一起,得到训练数据/>对应的多模态代码特征表示/>然后将输入到分类模块,通过全连接层得到输出结果Ja,并对输出结果Ja进行归一化处理得到训练数据/>对应的预测标签概率分布/>并设置概率阈值为0.5得到训练数据/>对应的预测标签/>
(3.12)对训练集XA中每一个训练数据重复步骤(3.2)-步骤(3.11),得到训练集XA对应的预测标签概率分布集合PA:以及预测标签集合YA′:
进一步地,所述步骤(4)具体为:
通过训练集XA对应的真实标签集合YA和预测标签概率分布集合PA,得到损失函数Loss,计算公式如下:
进一步地,所述步骤(6)具体包括以下子步骤:
(6.1)对新的函数源代码xfunc重复步骤(2.1)-步骤(2.2),得到新的函数源代码xfunc对应的函数源代码图片ifunc;
(6.2)将新的函数源代码xfunc和函数源代码图片ifunc输入到步骤(5)得到的训练好的多模态漏洞检测模型,重复步骤(3.1)-步骤(3.10),得到新的函数源代码xfunc对应的预测标签(yfunc)′,实现对新的函数源代码xfunc的漏洞检测。
本发明的有益效果是:本发明构建了一个函数级的多模态漏洞检测模型,充分利用了程序的语义信息和语法信息进行漏洞检测,将代码的文本特征、图结构特征以及代码图像特征通过深度学习网络融合起来;本发明利用代码结构信息构建代码对应的图结构以及相应的代码图像,并构建全局图像编码器、代码编码器、位置编码器、多模态图结构编码器和分类模块来搭建多模态漏洞检测模型,该方法的使用有效提高了对函数级别的代码进行漏洞检测的性能。
附图说明
图1为一种基于多模态的函数级漏洞检测的方法的流程图;
图2为一种基于多模态的函数级漏洞检测的方法的总体框架图。
具体实施方式
为了使本发明的目的、技术方案及优点更加明白清楚,结合附图和实施例,对本发明进一步的详细说明,应当理解,此处所描述的具体实施例仅仅用以解释本发明,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,均在本发明保护范围。
实施例1
本发明的核心技术是应用深度学习技术和多模态技术构造漏洞检测的分类模型,并利用数据集bigvul来完成模型的训练。
如图1所示,本发明提供了一种基于多模态的函数级漏洞检测的方法,包括以下步骤:
(1)针对Bigvul数据集进行数据预处理,预处理之后将Bigvul数据集划分为训练集、验证集和测试集,并得到训练集对应的真实标签集合。
所述步骤(1)具体包括以下子步骤:
(1.1)首先对Bigvul数据集中的函数源代码进行预处理,包括去除代码中的空行、注释以及不合法的缩进以及去除异常结尾的函数代码,得到预处理后的数据集X:X={x1,x2,…,xn,…,xN},其中,xn为任意一个预处理后的函数源代码,n={1,2,…,n,…,N},总共N个预处理后的数据。
由于Bigvul数据集是C和C++的数据集,因此去除数据集中不以“}”和“;”结尾的函数。
(1.2)将经过步骤(1.1)预处理后的数据集X按照8:1:1的比例划分为训练集XA、验证集XB和测试集XC,并保证训练集、验证集、测试集以及预处理后的数据集中漏洞比例一致,所述训练集XA为:其中,/>为任意一个训练数据,总共DA个训练数据,并得到训练集XA对应的真实标签集YA:/>其中,/>为训练数据/>对应的真实标签。所述验证集XB为:/>其中,/>为任意一个验证数据,总共DB个验证数据;所述测试集XC为:/>其中,/>为任意一个测试数据,总共DC个测试数据。DA:DB:DC=8:1:1且DA+DB+DC=N。
(2)使用开源代码分析工具Joern对训练集中每一个函数源代码抽取对应的图结构,基于图结构生成对应的函数源代码图片,得到图片训练集;
所述开源代码分析工具Joern记载于已公开论文:F.Yamaguchi,N.Golde,D.Arp,and K.Rieck,“Modeling and discovering vulnerabilities with code propertygraphs,”in 2014IEEE Symposium on Security and Privacy.IEEE,2014,pp.590–604。
所述步骤(2)具体包括以下子步骤:
(2.1)将训练集XA中任意一个训练数据抽取出来并存成对应的.c文件,并使用Joern工具将保存的.c文件生成对应的图结构/>——代码属性图CPG。CPG综合考虑了AST、CFG和PDG三种类型的图结构,由点集和边集两部分组成,其中,点集中的每个节点对应于函数源代码中的每条代码行。
(2.2)利用graphviz画图工具将生成的图结构转化为对应的函数源代码图片进行保存。函数源代码图片中的每一个节点表示函数源代码中的每一行代码语句。
(2.3)对训练集XA中每一个训练数据重复步骤(2.1)和步骤(2.2),得到图片训练集IA:
(3)将训练集输入到多模态漏洞检测模型,得到训练集对应的预测标签概率分布集合;所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
所述步骤(3)具体包括以下子步骤:
(3.1)将训练集XA和图片训练集IA输入到多模态漏洞检测模型,所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
(3.2)首先将训练集XA中任意一个训练数据拆分为Ma条代码,并输入到代码编码器中,所述代码编码器由UniXcoder模型组成,使用UniXcoder模型中的BPE分词器对训练数据/>进行分词,将分词后的结果转换为函数级的代码特征表示,随后用完全连接层将函数级的代码特征表示投影到维度是512的空间上,输出函数级别的代码特征表示Ta∈R1×D1,其中,D1=512;并对训练数据/>对应的Ma条代码行进行分词,将分词后的结果转换为语句级的代码特征表示集合/> 其中,/>为第m条代码行对应的语句级别的代码特征表示,m={1,2,…,m,…,Ma},D2=768;
(3.3)随后将训练数据对应的函数源代码图片/>输入全局图片编码器中,所述全局图片编码器由SwinV2模型组成,使用SwinV2模型得到对应的图片特征表示/>接着通过全连接层将图片特征表示/>投影到维度为512的空间上,输出全局图片特征表示
所述SwinV2模型基于ImageNet数据集进行预训练,在各种任务(例如,图像分类、对象检测和语义分割)上都显示了良好的性能。
(3.4)使用场景文本识别器East获取函数源代码图片中所有节点的边界框坐标,经过图片大小归一化获得函数源代码图片/>中任意一个节点/>的左下角点坐标以及右上角点坐标/>得到节点/>的位置信息/> 并将节点/>的文本信息记为/>重复上述步骤,得到函数源代码图片/>的位置信息集合bboxa:/>和文本信息集合lablea:/>其中,j={1,2,…,j,…,Ma},Ma表示函数源代码图片/>中总共包含Ma个节点;
(3.5)随后将函数源代码图片的位置信息集合bboxa输入到节点位置编码器,使用全连接层将其映射到维度是32的空间上,得到位置特征向量表示集合bboouta:其中,/>为位置信息/>输入到节点位置编码器后输出的位置特征向量表示;
(3.6)将函数源代码图片的语句级别的代码特征表示集合/>输入到多模态图结构编码器,代码特征表示集合/>任意一个语句级别的代码特征表示/>先经过第一层图注意力网络(GAT),通过公式(1)-公式(4),得到节点特征向量/>计算公式如下:
其中,W1为第一层的可学习的权重矩阵;(za,m)′为语句级别的代码特征表示经过权重矩阵处理后的第一特征表示;/>为函数源代码图片/>中第m个节点相对于第o个节点的第一注意力值;(za,o)′为语句级别的代码特征表示/>经过权重矩阵处理后的第一特征表示,其中,o={1,2,…,o,…,Ma};/>为第一层的可学习的权重向量;/>为第m个节点相对于第o个节点的第一归一化数据;σ为激活函数;
随后节点特征向量经过第二层图注意力网络,重复公式(1)-公式(4),得到节点特征向量/>但用W2替代W1以及用/>替代/>W2为第二层的可学习的权重矩阵,为第二层的可学习的权重向量;
(3.7)对语句级别的代码特征表示集合中每一个语句级别的代码特征表示重复步骤(3.6),得到节点特征向量集合/> 接着将节点特征向量集合/>传递到完全连接层,得到节点特征表示集合/> 其中,D3=480;
(3.8)将节点特征表示集合与位置特征向量表示集合bboouta拼接起来作为初始化节点特征表示集合V:/>GCN根据函数源代码图片/>中的节点关系构建图结构G=(V,Q),其中,Q为相似度矩阵集合;
(3.9)利用包含残差连接的GCN对图结构G进行推理,将任意一个和相似度矩阵qi,j输入第一层图卷积层,得到经过第一层图卷积层后的节点特征/>计算公式如下:
其中,为第l层的残差权重矩阵;/>为第l层的可学习的GCN网络的权重矩阵;φ(·)和γ(·)分别为2个全连接层,可在训练时通过反向传播进行学习;
随后将节点特征输入下一层图卷积层,重复上述步骤,直到得到节点特征
(3.10)对图结构G中每一个和相似度矩阵qi,j重复步骤(3.9),得到最终节点特征集合/> 然后对最终节点特征集合/>使用平均池化层,得到平均节点特征/>计算公式如下:
(3.11)然后将全局图片特征表示平均节点特征/>和函数级别的代码特征表示Ta连接在一起,得到训练数据/>对应的多模态代码特征表示/>然后将输入到分类模块,通过全连接层得到输出结果Ja,并对输出结果Ja进行归一化处理得到训练数据/>对应的预测标签概率分布/>并设置概率阈值为0.5得到训练数据/>对应的预测标签/>
(3.12)对训练集XA中每一个训练数据重复步骤(3.2)-步骤(3.11),得到训练集XA对应的预测标签概率分布集合PA:以及预测标签集合YA′:
(4)通过训练集对应的真实标签集合和标签概率分布集合,得到损失函数Loss;
所述步骤(4)具体为:
通过训练集XA对应的真实标签集合YA和预测标签概率分布集合PA,得到损失函数Loss,计算公式如下:
(5)反向传播更新多模态漏洞检测模型的参数,直到损失函数Loss收敛,得到训练好的多模态漏洞检测模型;
(6)将步骤(5)得到的训练好的多模态漏洞检测模型用于新的函数源代码进行漏洞检测。
所述步骤(6)具体包括以下子步骤:
(6.1)对新的函数源代码xfunc重复步骤(2.1)-步骤(2.2),得到新的函数源代码xfunc对应的函数源代码图片ifunc;
(6.2)将新的函数源代码xfunc和函数源代码图片ifunc输入到步骤(5)得到的训练好的多模态漏洞检测模型,重复步骤(3.1)-步骤(3.10),得到新的函数源代码xfunc对应的预测标签(yfunc)′,实现对新的函数源代码xfunc的漏洞检测。
(7)多模态漏洞检测模型的评估。模型评估通常在模型训练和模型选择之后,可以用来评价来自不同方法的模型的泛化能力。我们评估了模型在函数级软件漏洞检测任务上的性能,实验结果验证了我们提出的多模态漏洞检测模型相较于之前漏洞检测模型均有有效的提升。函数级软件漏洞检测任务主要是判断输入的函数是否会引入漏洞,该任务共有两种输出:函数有漏洞和无漏洞,评估指标我们选择了分类任务常用的指标:准确率、精确率、召回率、F1得分、PR-AUC指标。其中准确率表示分类正确的样本占总样本个数的比例,可以用来评估分类任务的准确性;精确率表示预测结果为正例的样本中实际为正样本的比例,即数据集中被检测为有漏洞的函数有多少是真的有漏洞;召回率表示预测结果为正样本中实际正样本数量占全样本中正样本的比例,即数据集中被正确检测为有漏洞的函数占全部有漏洞函数的比例;F1得分是精确率和召回率的调和平均值,PR-AUC指标的是计算精确率-召回率曲线下的面积。函数级软件漏洞检测任务参与比较的其他模型有4个:格式不太确定:UniXcoder(Unixcoder:Unified cross-modal pre-training for coderepresentation)、IVDetect(Vulnerability detection with fine-grainedinterpretations)、Devign(Devign:Effective vulnerability identification bylearning comprehensive program semantics via graph neural networks)、Reveal(Deep learning based vulnerability detection:Are we there yet)。其中IVDetect融合了源代码的五种代码特征,即结合token序列、AST、变量名称和类型、数据依赖上下文和控制依赖上下文来表示程序代码的语义信息,并使用特征注意力图卷积网络(FA-GCN)进行漏洞检测;Devign将门控图神经网络(GGNN)应用于丰富的代码语义表示(即AST、CFG、PDG和代码序列)进行函数级的漏洞检测;Reveal利用代码属性图(CPG)构建漏洞检测模型,同时考虑了AST、CFG、CDG和DDG,利用GGNN学习源代码的图结构特征进而进行漏洞检测;UniXcoder则构建了一个多层Transformer框架,利用多模态内容,即融合AST和代码注释来表示代码的程序语义,并进行漏洞检测。评估结果如表1所示,MMVD(多模态漏洞检测方法)在整体的指标上的表现均超过了前述4个模型,MMVD的F1得分为0.272,准确率为0.880,精确率为0.183,PR-AUC指标为0.231,对比前述4个模型分别提高了30.8%-81.3%、12.8%-27.4%、48.8%-115%和22.9%-141%。
表1:函数级软件漏洞检测任务上的性能评估表
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (6)
1.一种基于多模态的函数级漏洞检测的方法,其特征在于,包括以下步骤:
(1)对数据集进行预处理,并将数据集划分为训练集、验证集和测试集,并得到训练集对应的真实标签集合;
(2)使用开源代码分析工具Joern对训练集中每一个函数源代码抽取对应的图结构,基于图结构生成对应的函数源代码图片,得到图片训练集;
(3)将训练集输入到多模态漏洞检测模型,得到训练集对应的预测标签概率分布集合;所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
(4)通过训练集对应的真实标签集合和预测标签概率分布集合,得到损失函数Loss;
(5)反向传播更新多模态漏洞检测模型的参数,直到损失函数Loss收敛,得到训练好的多模态漏洞检测模型;
(6)将步骤(5)得到的训练好的多模态漏洞检测模型用于新的函数源代码进行漏洞检测。
2.根据权利要求1所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(1)具体包括以下子步骤:
(1.1)对数据集中的函数源代码进行预处理,包括去除代码中的空行、注释以及不合法的缩进以及去除异常结尾的函数代码,得到预处理后的数据集X:X={x1,x2,…,xn,…,xN},其中,xn为任意一个预处理后的函数源代码,n={1,2,…,n,…,N},总共N个预处理后的函数源代码;
(1.2)将经过步骤(1.1)预处理后的数据集X按照8:1:1的比例划分为训练集XA、验证集XB和测试集XC,并保证训练集、验证集、测试集以及预处理后的数据集中漏洞比例一致,所述训练集XA为:其中,/>为任意一个训练数据,总共DA个训练数据,并得到训练集XA对应的真实标签集合YA:/>其中,/>为训练数据/>对应的真实标签。
3.根据权利要求2所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(2)具体包括以下子步骤:
(2.1)将训练集XA中任意一个训练数据抽取出来并存成对应的.c文件,并使用Joern工具将保存的.c文件生成对应的图结构/>
(2.2)利用graphviz画图工具将生成的图结构转化为对应的函数源代码图片/>进行保存;
(2.3)对训练集XA中每一个训练数据重复步骤(2.1)和步骤(2.2),得到图片训练集IA:
4.根据权利要求3所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(3)具体包括以下子步骤:
(3.1)将训练集XA和图片训练集IA输入到多模态漏洞检测模型,所述多模态模型由代码编码器、全局图片编码器、节点位置编码器、多模态图结构编码器和分类模块组成;
(3.2)首先将训练集XA中任意一个训练数据拆分为Ma条代码,并输入到代码编码器中,所述代码编码器由UniXcoder模型组成,使用UniXcoder模型中的BPE分词器对训练数据进行分词,将分词后的结果转换为函数级的代码特征表示,随后用完全连接层将函数级的代码特征表示投影到维度是512的空间上,输出函数级别的代码特征表示Ta∈R1×D1,其中,D1=512;并对训练数据/>对应的Ma条代码行进行分词,将分词后的结果转换为语句级的代码特征表示集合/> 其中,/>为第m条代码行对应的语句级别的代码特征表示,m={1,2,…,m,…,Ma},D2=768;
(3.3)随后将训练数据对应的函数源代码图片/>输入全局图片编码器中,所述全局图片编码器由SwinV2模型组成,使用SwinV2模型得到对应的图片特征表示/>接着通过全连接层将图片特征表示/>投影到维度为512的空间上,输出全局图片特征表示/>
(3.4)使用场景文本识别器East获取函数源代码图片中所有节点的边界框坐标,经过图片大小归一化获得函数源代码图片/>中任意一个节点/>的左下角点坐标/>以及右上角点坐标/>得到节点/>的位置信息/> 并将节点/>的文本信息记为/>重复上述步骤,得到函数源代码图片/>的位置信息集合bboxa:/>和文本信息集合lablea:其中,j={1,2,…,j,…,Ma},Ma表示函数源代码图片/>中总共包含Ma个节点;
(3.5)随后将函数源代码图片的位置信息集合bboxa输入到节点位置编码器,使用全连接层将其映射到维度是32的空间上,得到位置特征向量表示集合bboouta:其中,/>为位置信息/>输入到节点位置编码器后输出的位置特征向量表示;
(3.6)将函数源代码图片的语句级别的代码特征表示集合/>输入到多模态图结构编码器,代码特征表示集合/>任意一个语句级别的代码特征表示/>先经过第一层图注意力网络,通过公式(1)-公式(4),得到节点特征向量/>计算公式如下:
其中,W1为第一层的可学习的权重矩阵;(za,m)′为语句级别的代码特征表示经过权重矩阵处理后的第一特征表示;/>为函数源代码图片/>中第m个节点相对于第o个节点的第一注意力值;(za,o)′为语句级别的代码特征表示/>经过权重矩阵处理后的第一特征表示,其中,o={1,2,…,o,…,Ma};/>为第一层的可学习的权重向量;/>为第m个节点相对于第o个节点的第一归一化数据;σ为激活函数;
随后节点特征向量经过第二层图注意力网络,重复公式(1)-公式(4),得到节点特征向量/>但用W2替代W1以及用/>替代/>W2为第二层的可学习的权重矩阵,/>为第二层的可学习的权重向量;
(3.7)对语句级别的代码特征表示集合中每一个语句级别的代码特征表示重复步骤(3.6),得到节点特征向量集合/>接着将节点特征向量集合/>传递到完全连接层,得到节点特征表示集合/> 其中,D3=480;
(3.8)将节点特征表示集合与位置特征向量表示集合bboouta拼接起来作为初始化节点特征表示集合V:/>通过图卷积神经网络根据函数源代码图片/>中的节点关系构建图结构G=(V,Q),其中,Q为相似度矩阵集合;
(3.9)利用包含残差连接的GCN对图结构G进行推理,将任意一个和相似度矩阵qi,j输入第一层图卷积层,得到经过第一层图卷积层后的节点特征/>计算公式如下:
其中,为第l层的残差权重矩阵;/>为第l层的可学习的GCN网络的权重矩阵;φ(·)和γ(·)分别为2个全连接层,可在训练时通过反向传播进行学习;
随后将节点特征输入下一层图卷积层,重复上述步骤,直到得到节点特征/>
(3.10)对图结构G中每一个和相似度矩阵qi,j重复步骤(3.9),得到最终节点特征集合/> 然后对最终节点特征集合/>使用平均池化层,得到平均节点特征/>计算公式如下:
(3.11)然后将全局图片特征表示平均节点特征/>和函数级别的代码特征表示Ta连接在一起,得到训练数据/>对应的多模态代码特征表示/>然后将输入到分类模块,通过全连接层得到输出结果Ja,并对输出结果Ja进行归一化处理得到训练数据/>对应的预测标签概率分布/>并设置概率阈值为0.5得到训练数据/>对应的预测标签/>
(3.12)对训练集XA中每一个训练数据重复步骤(3.2)-步骤(3.11),得到训练集XA对应的预测标签概率分布集合PA:以及预测标签集合YA′:
5.根据权利要求4所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(4)具体为:
通过训练集XA对应的真实标签集合YA和预测标签概率分布集合PA,得到损失函数Loss,计算公式如下:
6.根据权利要求5所述的一种基于多模态的函数级漏洞检测的方法,其特征在于,所述步骤(6)具体包括以下子步骤:
(6.1)对新的函数源代码xfunc重复步骤(2.1)-步骤(2.2),得到新的函数源代码xfunc对应的函数源代码图片ifunc;
(6.2)将新的函数源代码xfunc和函数源代码图片ifunc输入到步骤(5)得到的训练好的多模态漏洞检测模型,重复步骤(3.1)-步骤(3.10),得到新的函数源代码xfunc对应的预测标签(yfunc)′,实现对新的函数源代码xfunc的漏洞检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310599590.3A CN116611071A (zh) | 2023-05-25 | 2023-05-25 | 一种基于多模态的函数级漏洞检测的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310599590.3A CN116611071A (zh) | 2023-05-25 | 2023-05-25 | 一种基于多模态的函数级漏洞检测的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116611071A true CN116611071A (zh) | 2023-08-18 |
Family
ID=87677843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310599590.3A Pending CN116611071A (zh) | 2023-05-25 | 2023-05-25 | 一种基于多模态的函数级漏洞检测的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116611071A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117592061A (zh) * | 2024-01-19 | 2024-02-23 | 北京中科卓信软件测评技术中心 | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 |
CN117949045A (zh) * | 2024-03-13 | 2024-04-30 | 山东星科智能科技股份有限公司 | 一种新能源电机生产线的数字化监测方法及系统 |
CN117949045B (zh) * | 2024-03-13 | 2024-06-11 | 山东星科智能科技股份有限公司 | 一种新能源电机生产线的数字化监测方法及系统 |
-
2023
- 2023-05-25 CN CN202310599590.3A patent/CN116611071A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117592061A (zh) * | 2024-01-19 | 2024-02-23 | 北京中科卓信软件测评技术中心 | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 |
CN117592061B (zh) * | 2024-01-19 | 2024-04-12 | 北京中科卓信软件测评技术中心 | 融合代码漏洞特征及属性图的源代码安全检测方法与装置 |
CN117949045A (zh) * | 2024-03-13 | 2024-04-30 | 山东星科智能科技股份有限公司 | 一种新能源电机生产线的数字化监测方法及系统 |
CN117949045B (zh) * | 2024-03-13 | 2024-06-11 | 山东星科智能科技股份有限公司 | 一种新能源电机生产线的数字化监测方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021103492A1 (zh) | 一种企业经营风险预测方法和系统 | |
CN112711953A (zh) | 一种基于注意力机制和gcn的文本多标签分类方法和系统 | |
CN110633366A (zh) | 一种短文本分类方法、装置和存储介质 | |
CN113138920B (zh) | 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置 | |
CN113128237B (zh) | 一种服务资源的语义表征模型构建方法 | |
US20220414463A1 (en) | Automated troubleshooter | |
CN114647713A (zh) | 基于虚拟对抗的知识图谱问答方法、设备及存储介质 | |
CN116611071A (zh) | 一种基于多模态的函数级漏洞检测的方法 | |
CN112214595A (zh) | 类别确定方法、装置、设备及介质 | |
CN114372532A (zh) | 标签标注质量的确定方法、装置、设备、介质及产品 | |
Gong et al. | What is the intended usage context of this model? An exploratory study of pre-trained models on various model repositories | |
CN111783425B (zh) | 基于句法分析模型的意图识别方法及相关装置 | |
CN112749277A (zh) | 医学数据的处理方法、装置及存储介质 | |
CN112685374B (zh) | 日志分类方法、装置及电子设备 | |
CN117236676A (zh) | 一种基于多模态事件抽取的rpa流程挖掘方法和装置 | |
CN111859862A (zh) | 文本的数据标注方法和装置、存储介质及电子装置 | |
CN116976321A (zh) | 文本处理方法、装置、计算机设备、存储介质和程序产品 | |
Pogorilyy et al. | Assessment of Text Coherence by Constructing the Graph of Semantic, Lexical, and Grammatical Consistancy of Phrases of Sentences | |
CN113591480B (zh) | 电力计量的命名实体识别方法、装置和计算机设备 | |
Li | Disaster tweet text and image analysis using deep learning approaches | |
CN117874261B (zh) | 基于课程学习的问答式事件抽取方法以及相关设备 | |
CN116910175B (zh) | 自动化移动设备故障层级树构建方法、装置及储存介质 | |
WO2023173541A1 (zh) | 基于文本的情绪识别方法、装置、设备及存储介质 | |
US20240028828A1 (en) | Machine learning model architecture and user interface to indicate impact of text ngrams | |
Nourali et al. | Scene text visual question answering by using YOLO and STN |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |