CN117454387A - 基于多维度的特征提取的漏洞代码检测方法 - Google Patents
基于多维度的特征提取的漏洞代码检测方法 Download PDFInfo
- Publication number
- CN117454387A CN117454387A CN202311468206.2A CN202311468206A CN117454387A CN 117454387 A CN117454387 A CN 117454387A CN 202311468206 A CN202311468206 A CN 202311468206A CN 117454387 A CN117454387 A CN 117454387A
- Authority
- CN
- China
- Prior art keywords
- code
- vulnerability
- graph
- text
- head
- 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 26
- 238000000605 extraction Methods 0.000 title claims abstract description 20
- 239000013598 vector Substances 0.000 claims abstract description 32
- 238000000034 method Methods 0.000 claims description 31
- 238000012549 training Methods 0.000 claims description 16
- 238000003062 neural network model Methods 0.000 claims description 9
- 230000004927 fusion Effects 0.000 claims description 8
- 230000008569 process Effects 0.000 claims description 8
- 238000007781 pre-processing Methods 0.000 claims description 7
- 238000004364 calculation method Methods 0.000 claims description 6
- 239000011159 matrix material Substances 0.000 claims description 4
- 230000004913 activation Effects 0.000 claims description 3
- 238000012545 processing Methods 0.000 claims description 2
- 238000012360 testing method Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 abstract description 3
- 238000007500 overflow downdraw method Methods 0.000 abstract 1
- 230000006870 function Effects 0.000 description 11
- 238000013528 artificial neural network Methods 0.000 description 6
- 238000013135 deep learning Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 238000010801 machine learning Methods 0.000 description 3
- 230000007547 defect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 101100503482 Arabidopsis thaliana FTSH5 gene Proteins 0.000 description 1
- 206010033799 Paralysis Diseases 0.000 description 1
- 101150082136 VAR1 gene Proteins 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000002203 pretreatment Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000006403 short-term memory Effects 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
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2415—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on parametric or probabilistic models, e.g. based on likelihood ratio or false acceptance rate versus a false rejection rate
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/25—Fusion techniques
-
- 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/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
-
- 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/044—Recurrent networks, e.g. Hopfield networks
- G06N3/0442—Recurrent networks, e.g. Hopfield networks characterised by memory or gating, e.g. long short-term memory [LSTM] or gated recurrent units [GRU]
-
- 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/086—Learning methods using evolutionary algorithms, e.g. genetic algorithms or genetic programming
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Computer Hardware Design (AREA)
- Evolutionary Computation (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Bioinformatics & Computational Biology (AREA)
- Evolutionary Biology (AREA)
- Computing Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Virology (AREA)
- Probability & Statistics with Applications (AREA)
- Physiology (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开一种基于多维度的特征提取的漏洞代码检测方法,利用Joern平台对代码数据进行提取出数据流图、控制流图以及抽象语法树,从这些图形中抽象出图形信息;将图中节点代码转化成可使用Codebert模型进行特征提取的嵌入向量,作为图注意力网络输入,得到整个代码图形的图形编码,这样就得到图形维度的特征。另外,对原代码文本信息进行处理,采用Codebert进行编码任务,得到文本维度的特征信息。将这两种维度的特征相结合作为漏洞检测的分类任务输入,进而从多层次对漏洞代码进行分析检测。本发明通过一种新型特征提取融合方法,以及一种新型漏洞检测模型,极大提高了漏洞代码检测的准确率与速度。
Description
技术领域
本发明涉及计算机信息安全技术,具体涉及一种基于多维度的特征提取的漏洞代码检测方法。
背景技术
在今天的数字化时代,软件已经成为我们生活中不可或缺的一部分。然而,随着软件的广泛应用,与之相关的安全威胁也不断增加。漏洞作为可能被攻击者利用的潜在安全漏洞,对软件安全性构成了持续威胁。一个成功的漏洞攻击可能会导致敏感数据泄露、系统瘫痪,甚至金融损失。机器学习也常用来作为识别漏洞的重要工具,它的工作原理是首先从训练样本中学习,指示易受攻击程序的潜在模式。然后将学习好的模型应用到新的代码中,然后就可以识别出相同的攻击模式。但是与此同时,机器学习也只能识别原有训练样本的漏洞模式,随着技术的演变,程序的漏洞类型也在不断发生者变化,也就导致了原有的方式可能会失效或者准确度降低。
最近的研究旨在利用深度学习(DL)来解决这一问题,通过对程序的结构进行推理,来识别源代码中建在的漏洞模式。与传统的机器学习相比,DL的优势在于不需要专家参与手动定义程序的表示结构,可以在训练中捕获程序的最佳表示。
现有的基于深度学习的程序构建模型通常都将源代码当作文本序列来处理,使用循环神经网络(RNN)来对程序进行建模,例如长短期记忆(LSTM)或其变体。这些方法将源代码及其相对应的数据结构视为文本序列来工作。然而,这些方法是为序列而设计的,而我们的代码片段之间的关系不完全是顺序序列,RNN类的方法不适合对程序的结构良好的控制和数据流进行建模。因此基于RNN方法只能捕获源代码的浅层结构,程序更深层次的数据控制依赖关系就会丧失。所以一些基于RNN的方法的准确性就差强人意。
因此,为了能更好的对复杂代码结果进行建模,需要一种能更好表示程序的数据控制依赖关系的结构,首先想到的就是图的结构,图能完全保留程序的各种信息,所以选择从图形表示中学习。这样就确保模型能够推理出许多漏洞的基本模式。然而现有的基于图结构的检测方法还是存在一些技术问题。
例如,专利CN113420296B公开一种基于Bert模型与BiLSTM的C源代码漏洞检测方法,该技术方案使用BiLSTM模型来对代码进行处理,也就是将代码当做序列问题来处理,但是代码不完全是顺序结构的,含有很多分支,例如if-else,这就导致了有一些数据是不可达的,会出现误判等问题;例如:在if-else都有指针释放的操作,基于序列模型来实现的话,可能出判定为重复释放的错误。
例如,专利CN113779590A公开一种基于多维度表征的源代码漏洞检测方法,该技术方案选取AST通进行编译或解释,其注重的点在于语法元素、语法嵌套和类型信息;在抽取AST之后,将其转化成一维特征,这就会丢失原本AST中的各种关系特征,也会导致效果丢失。
又例如,专利CN113868650B公开一种基于代码异质中间图表示的漏洞检测方法与装置,该技术方案选取CPG图形表示,虽然能完全保留代码的各种信息,但是也会存在冗余信息,会导致图形很大,会导致训练速度慢,更多的冗余信息,也会使得神经网络不能找到漏洞检测任务的重点。并且,该现有技术方案是采用word2vec进行编码,不能很好的表示代码表示。
发明内容
发明目的:本发明的目的在于解决现有技术中存在的不足,提供一种基于多维度特征提取的漏洞代码检测方法。
技术方案:本发明的一种基于多维度特征提取的漏洞代码检测方法,包括以下步骤,
步骤S1、获取漏洞代码的样本数据集,样本数据集中的漏洞类型包括漏洞代码与合法代码,作为检测模型的训练样本和测试样本,对漏洞代码训练样本进行数据预处理;
步骤S2、对经步骤S1预处理后的文本代码数据进行数据流和控制流的提取,即采用Joern平台提取代码中的控制流图CFG和数据流图DFG,得到文本形式的图结构信息(节点信息是部分代码片段);接着使用Codebert对节点的代码片段进行向量化,将向量化的数据结构作为多头图注意力网络Multi-Head GAT的输入,输出得到整个图形的编码向量;
在使用多头图注意力网络Multi-Head GAT作为图形维度特征提取器进行提取特征的过程中,图形的边分为控制流和数据流,为每一个类型的边分配一个head,来分开训练参数,参数包括节点特征、边的信息和边的类型;
步骤S3、对经步骤S1预处理后的文本代码数据进行编码,使用BERT神经网络模型进行向量化,提取文本特征以保留文本信息;Bert模型进行向量化的过程中,输入是整个预处理后的整段代码文本,经过编码器后,输出得到这段文本的向量表示参数为文本形式的代码;
步骤S4、将图形层次的向量和文本层次的向量进行特征融合,特征融合的计算方法如下:
C=A*W1+B*W2
A表示图特征,B表示文本特征,W1,W2分别为对应权重;
此处融合后的特征既保留图形结构的特征,又保留文本结构的特征
然后,对融合图形级代码特征以及文本代码特征进行综合分析(通过两种特征的加权融合,然后进行分类训练,得出其中的参数,并通过softmax进行类别的分类),实现对漏洞代码进行分类处理,从而提高漏洞代码的检测准确率。
进一步地,所述步骤S1获取漏洞代码的样本数据集的方法为:
步骤S1.1、包含CVE中报告的提交日志和补丁以及国家漏洞数据库(NVD),从中提取漏洞代码和安全代码;
步骤S1.2、从Github上的开源项目中的提交日志和补丁,github上的提交不只是漏洞,也可能是优化,需要对提交日志进行分析,找出真正的漏洞代码;
(通过对CWE(Common Weakness Enumeration)数据库中的漏洞代码进行检索,对SARD发布的2023常见软件缺陷中重要的软件漏洞进行获取,以及根据Github提交的解决漏洞的代码进行获取,例如可以将修复前的版本作为漏洞样本,修复后的作为无漏洞样本);
为减少无关信息的干扰,对漏洞代码训练样本进行数据预处理的方法包括移除与漏洞无关的非ASCII字符和注释,以及将用户自定义的变量名和函数名进行替换。
进一步地,所述步骤S2的详细计算方法如下:
自注意力:输入经过向量化后的节点代码片段X,查询向量Q,键向量K,值向量V;
Q=X*WQ
K=X*WK
V=X*WV
其中,WQ,WK,WV是权重矩阵
dk是键向量的维度;
计算注意力权重:
Attention Weights=softmax(Attention Scores)
使用注意力权重来加权值向量:
Output=Attention Weights V
多头注意力:
MultiHeadAttention=[Head1Head2…HeadH][Wo][Head1Head2…HeadH]表示每个注意力头的输出,Wo是指输出的权重。
进一步地,所述步骤S3中对文本信息的向量化的具体方法为:
先对文本代码构造词汇库,使用BERT神经网络模型对预处理后的文本信息进行编码,得到文本信息的向量;
将BERT神经网络模型的池化层输出,对应代码切片标识符[cls]的最后一层输出,最后一层输出包括代码切片的整体特征,并用作代码的文本维度特征。
进一步地,所述步骤S4特征融合后,将融合图形维度以及文本维度的特征作为训练集特征,将待检测的漏洞代码放入神经网络模型(本模型包括三层线性层和一个softmax分类层)中进行检测,将输出结果返回给用户。
本发明使用多层感知器(MLP)模型作为分类器,并利用深度神经网络来更好地训练该分类器。此处将图形和代码对预测结果的贡献视为相等,进而利用函数级CodeBERT嵌入和从GAT层获得的图形嵌入,构建一组共享的线性层和丢弃层。ReLU函数用作激活函数;还保留GAT层的分类输出和最终结果做乘法,得到的最终结果为本模型的输出结果。
有益效果:与现有技术相比,本发明具有以下优点:
1、本发明对于图形特征的提取,提出了一种基于控制流和数据流的特征提取,保留了关于漏洞检测的完整信息,并通过Multi-Head GAT对不同类型的节点关系进行分别处理,得到得到最合适的图形向量表示。
2、本发明通过对图形维度特征和文本维度的特征进行融合,在使用图维度的特征基础上,保留了文本信息的特征。
3、本发明在漏洞检测模型中引用自然语言处理的BERT模型,并通过改进模型在各种漏洞检测模型中提出一种新型的漏洞检测模型,提高了漏洞检测模型的准确率。
附图说明
图1为本发明的整体流程图;
图2为本实施例中数据预处理的过程;
图3为实施例中提取图的控制数据流图;
图4为本发明中图形信息的特征提取过程。
具体实施方式
下面对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。
为解决现有技术缺陷,本发明利用基于图形表示的漏洞检测模型来实现多维度特征深度提取的漏洞代码检测,通过利用图注意力网络来实现对源代码的表示和学习;通过直接对图表示进行操作,图神经网络在社交网络和知识图甚至编译的二进制文件中显示出惊人的成功。
如图1所示,本实施例的基于多维度特征深度提取的漏洞代码检测方法,包括以下步骤:
步骤(1)、获取漏洞代码样本数据集,通过对Common Weakness Enumeration(CWE)数据库中的漏洞代码进行检索以及Github上的漏洞提交。
一部分数据源于MITRE发布的2022常见软件缺陷(CWE)中重要的的软件漏洞,主要包含缓冲区错误(CWE-119),SQL注入(CWE-89),读越界(CWE-125),代码注入(CWE-94),身份验证不当(CWE-287),不可信数据的反序列化(CWE-502)等,这些漏洞及其容易被利用,并可能导致攻击者完全接管系统、窃取数据或组织应用程序运行,主要针对这些重要漏洞进行CWE数据库检索。
另一部分数据来自于Github,从Github的提交日志和补丁进行分析,找到解决漏洞的提交,提交前后的代码分别作为漏洞数据和安全数据。
本发明由于大量代码来自Github,会导致这些代码会有一些不利于漏洞识别的一些因素:例如,这些注释在对代码级别的编码过程中是完全不需要,甚至会影响模型工作,因此,需要对于样本进行预处理。
预处理的方法为:第一,去除掉注释部分;第二,由于程序员在编码过程中的个人习惯不,就导致变量名和函数名等自定义比较杂乱,因此需要将这些变量名和函数名进行名称替换,如每一个函数从声明顺序分别命名为FUNC1...,以此类推,变量名就分别命名为VAR1....,这样就消除了自定义名称对于模型的影响。
步骤(2)、对漏洞代码进行图形结构的特征进行提取,具体流程为:
本发明基于图注意力网络(GAT)模型来构建从图中学习拓扑依赖信息的模型;
对于预处理后的图形数据,每个节点均是独立的语句或变量,但是现在这些节点为文本模式,因此需对这些节点进行编码,使之能够适合GAT的输入模式,本实施例采用Codebert节点进行编码得到编码后的图,图中每个节点均适合作为GAT输入的信息。接着,GAT层将首先获取来自编码的输出语句嵌入以及每个节点之间的边。这些节点的边的类型很多,本实施例为每一个类型的边分配一个注意力头,使得模型分开学习不同的类型的边,它允许模型同时学习多个不同的权重分布以捕获不同类型的边的信息。对于每个注意力头,定义一个不同的权重矩阵(w),在每个头中,计算节点之间的注意力权重,然后使用这些权重对邻居节点的特征进行加权求和,以获得每个节点的聚合表示。将多个注意力头的输出连接在一起,形成一个更丰富的节点表示。添加自循环以将给定节点包括在其邻域图的集合中,以更好地捕捉节点的自身特征以及节点与自身的关系。最后输出整个图的向量表示。
计算方式如下:
自注意力:输入X以获得查询向量Q、键向量K和值向量V;
Q=X*WQ
K=X*WK
V=X*WV
其中,WQ,WK,WV是权重矩阵;
dk是键向量的维度;
计算注意力权重:
Attention Weights=softmax(Attention Scores)
使用注意力权重来加权值向量:
Output=Attention Weights V
多头注意力:
MultiHeadAttention=[Head1Head2…HeadH][Wo];
[Head1Head2…HeadH]表示每个注意力头的输出,Wo是指输出的权重;
步骤(3)、使用BERT神经网络对处理后的文本代码进行函数级代码特征以及提取,具体流程为:
将CodeBert的第一个标记([cls]标记)的输出作为整个文本代码的向量表示,这个输出包含整个文本的信息,对于后面的分类任务,有很重要的作用。
源代码的标记化方法可能会有很大差异。对于基于词嵌入的方法,代码标记可以与标点符号一起由空格分隔,例如括号和分号。或者,标点符号可以完全删除。此外,代码标识符有时根据常见的命名约定进一步标记化,例如下划线或驼峰情况。这是为了帮助减少词汇表外标记的数量,否则由于开发人员姓名标识符的性质,这明显高于常规自然语言。手动定义的标记化规则的另一种方法是无监督子词标记化。在CodeBERT中,字节对编码(BPE)用于标记源代码标记。特别是,基于BPE算法将长变量名称拆分为子词。例如,“add_one”可以被标记为“add”、“_”和“one”。这可以说是减少源代码标识符中词汇外问题的一种更一致的方法,因为这种方法不依赖于预定义的规则。
步骤(4)、对提取出的文本代码特征进行优化处理以及对图神经网络模型的图形表示进行融合,具体流程为:
特征融合的计算方法如下:
C=A*W1+B*W2
A为图形特征,B为代码文本特征,W1和W2分别为权重。
本实施例将多层感知器(MLP)模型作为分类器同时利用深度神经网络来更好地训练分类器。本实施例视图形级和代码级对预测结果的贡献相等,利用函数级CodeBERT嵌入和从GAT层获得的图形嵌入,构建一组共享的线性层和丢弃层。ReLU函数用作激活函数。此外,还保留GAT层的分类输出和最终结果做乘法,得到的最终结果为本模型的输出结果。
本实施例的代码数据预处理如图2所示,接着将图2中预处理后的代码提取对应特征,其控制数据流如图3所示,整个图形信息的特征提取过程如图4所示。
通过上述实施例可以看出,本发明使用图结构来表示代码,会保存更多的控制和数据信息,提高准确性;在代码图形特征提取过程中,重点区分了数据流和控制流,使用cdfg能更好地适合漏洞检测任务。并且本发明采用codebert进行编码,便于模型训练,还能够在理解代码时考虑上下文。
Claims (5)
1.一种基于多维度特征提取的漏洞代码检测方法,其特征在于,包括以下步骤,
步骤S1、获取漏洞代码的样本数据集,样本数据集中的漏洞类型包括漏洞代码与合法代码,作为检测模型的训练样本和测试样本,对漏洞代码训练样本进行数据预处理;
步骤S2、对步骤S1预处理后的文本代码数据提取控制流和数据流,即采用Joern平台提取代码中的控制流图CFG和数据流图DFG,得到文本形式的图结构信息;接着使用Codebert对节点的代码片段进行向量化,将向量化的数据作为多头图注意力网络Multi-Head GAT的输入,输出得到整个图形的编码向量;
在将多头图注意力网络Multi-Head GAT作为图形维度特征提取器进行提取特征的过程中,图形的边分为控制流和数据流,为每一个类型的边分配一个head,来分开训练参数,参数包括节点特征、边的信息和边的类型;
步骤S3、对步骤S1预处理后的文本代码数据进行编码,使用BERT神经网络模型进行向量化,提取文本特征以保留文本信息;步骤S4、将图形层次的向量和文本层次的向量进行特征融合,特征融合的计算方法如下:
C=A*W1+B*W2
A表示图形级代码特征,B表示文本代码特征,W1和W2分别为对应权重;
然后,对融合图形级代码特征以及文本代码特征进行综合分析,实现对漏洞代码进行分类处理。
2.根据权利要求1所述的基于多维度特征提取的漏洞代码检测方法,其特征在于,所述步骤S1获取漏洞代码的样本数据集的方法为:
步骤S1.1、基于CVE中报告的提交日志和补丁以及国家漏洞数据库NVD,提取漏洞代码和安全代码;
步骤S1.2、基于Github开源项目中的提交日志和补丁进行分析,找出真正的漏洞代码;
对漏洞代码训练样本进行数据预处理的方法包括移除与漏洞无关的非ASCII字符和注释,以及将用户自定义的变量名和函数名进行替换。
3.根据权利要求1所述的基于多维度特征提取的漏洞代码检测方法,其特征在于,所述步骤S2中多头注意力特征的计算方式如下:
对于自注意力,输入经过向量化后的节点代码片段X,获得查询向量Q、键向量K和值向量V;
Q=X*WQ
K=X*WK
V=X*WV
其中,WQ,WK,WV是权重矩阵;
dk是键向量的维度;
计算注意力权重:
Attention Weights=softmaxAttention Scores)
使用注意力权重来加权值向量:
Output=Attention Weights V
多头注意力:
Multi Headl Attention=[Head1 Head2 ... HeadH][Wo]
[Head1 Head2 … HeadH]表示每个注意力头的输出,Wo是指输出的权重。
4.根据权利要求1所述的基于多维度特征提取的漏洞代码检测方法其特征在于:所述步骤S3中对文本信息的向量化的具体方法为:
先对文本代码构造词汇库,使用BERT神经网络模型对预处理后的文本信息进行编码,得到文本信息的向量;
将BERT神经网络模型的池化层输出,对应代码切片标识符[cls]的最后一层输出,最后一层输出包括代码切片的整体特征,并用作代码的文本维度特征。
5.根据权利要求1所述的基于多维度特征提取的漏洞代码检测方法其特征在于:所述步骤S4特征融合后,将融合图形维度以及文本维度的特征作为训练集特征,将待检测的漏洞代码放入神经网络模型中进行检测,将输出结果返回给用户;
最后,利用函数级CodeBERT嵌入和从GAT层获得的图形嵌入,构建一组共享的线性层和丢弃层;ReLU函数用作激活函数;保留GAT层的分类输出和最终结果做乘法,得到的最终结果为本模型的输出结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311468206.2A CN117454387A (zh) | 2023-11-07 | 2023-11-07 | 基于多维度的特征提取的漏洞代码检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311468206.2A CN117454387A (zh) | 2023-11-07 | 2023-11-07 | 基于多维度的特征提取的漏洞代码检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117454387A true CN117454387A (zh) | 2024-01-26 |
Family
ID=89594543
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311468206.2A Pending CN117454387A (zh) | 2023-11-07 | 2023-11-07 | 基于多维度的特征提取的漏洞代码检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117454387A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118246033A (zh) * | 2024-05-28 | 2024-06-25 | 山东大学 | 跨平台代码异常漏洞检测方法、系统、设备、介质及产品 |
-
2023
- 2023-11-07 CN CN202311468206.2A patent/CN117454387A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118246033A (zh) * | 2024-05-28 | 2024-06-25 | 山东大学 | 跨平台代码异常漏洞检测方法、系统、设备、介质及产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
CN109885479B (zh) | 基于路径记录截断的软件模糊测试方法及装置 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN112733156B (zh) | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 | |
CN113127339B (zh) | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 | |
CN114297654A (zh) | 一种源代码层级的智能合约漏洞检测方法及系统 | |
CN113868650B (zh) | 基于代码异质中间图表示的漏洞检测方法与装置 | |
CN113297580B (zh) | 基于代码语义分析的电力信息系统安全防护方法及装置 | |
CN114861194A (zh) | 一种基于bgru与cnn融合模型的多类型漏洞检测方法 | |
CN113609488B (zh) | 基于自监督学习及多通道超图神经网络的漏洞检测方法与系统 | |
CN117454387A (zh) | 基于多维度的特征提取的漏洞代码检测方法 | |
CN116149669B (zh) | 一种基于二进制文件的软件成分分析方法、装置以及介质 | |
CN115033895B (zh) | 一种二进制程序供应链安全检测方法及装置 | |
Cao et al. | FTCLNet: Convolutional LSTM with Fourier transform for vulnerability detection | |
CN113158194A (zh) | 一种基于多关系图网络的漏洞模型的构建方法及检测方法 | |
Meng et al. | [Retracted] A Deep Learning Approach for a Source Code Detection Model Using Self‐Attention | |
CN116305158A (zh) | 一种基于切片代码依赖图语义学习的漏洞识别方法 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN116702160B (zh) | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 | |
CN117540389A (zh) | 一种基于签名的模型源代码漏洞检测方法 | |
CN117633811A (zh) | 一种多视角特征融合的代码漏洞检测方法 | |
CN117725592A (zh) | 一种基于有向图注意力网络的智能合约漏洞检测方法 | |
CN117591913A (zh) | 基于改进的R-Transformer的语句级软件缺陷预测方法 | |
CN116032654B (zh) | 一种固件漏洞检测及数据安全治理方法和系统 | |
CN114996705B (zh) | 基于脆弱性类型和Bi-LSTM的跨软件脆弱性检测方法及系统 |
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 |