CN113672931B - 一种基于预训练的软件漏洞自动检测方法及装置 - Google Patents
一种基于预训练的软件漏洞自动检测方法及装置 Download PDFInfo
- Publication number
- CN113672931B CN113672931B CN202110788694.XA CN202110788694A CN113672931B CN 113672931 B CN113672931 B CN 113672931B CN 202110788694 A CN202110788694 A CN 202110788694A CN 113672931 B CN113672931 B CN 113672931B
- Authority
- CN
- China
- Prior art keywords
- training
- lstm
- code segment
- attention
- code
- 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.)
- Expired - Fee Related
Links
- 238000012549 training Methods 0.000 title claims abstract description 82
- 238000001514 detection method Methods 0.000 title claims abstract description 52
- 238000000034 method Methods 0.000 claims abstract description 50
- 238000005516 engineering process Methods 0.000 claims abstract description 13
- 230000007246 mechanism Effects 0.000 claims description 24
- 230000006870 function Effects 0.000 claims description 17
- 239000011159 matrix material Substances 0.000 claims description 14
- 238000007781 pre-processing Methods 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 239000000463 material Substances 0.000 claims 1
- 239000013598 vector Substances 0.000 abstract description 16
- 238000004458 analytical method Methods 0.000 description 31
- 230000003068 static effect Effects 0.000 description 18
- 230000000694 effects Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 6
- 230000007547 defect Effects 0.000 description 5
- 230000007787 long-term memory Effects 0.000 description 5
- 230000015654 memory Effects 0.000 description 5
- 238000013528 artificial neural network Methods 0.000 description 4
- 230000006399 behavior Effects 0.000 description 4
- 230000006403 short-term memory Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 238000000605 extraction Methods 0.000 description 3
- 238000003058 natural language processing Methods 0.000 description 3
- 238000003556 assay Methods 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 2
- 238000013136 deep learning model Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000008034 disappearance Effects 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000000306 recurrent effect Effects 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
- 238000012038 vulnerability analysis Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 210000004556 brain Anatomy 0.000 description 1
- 238000012512 characterization method Methods 0.000 description 1
- 238000013145 classification model Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000008451 emotion Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000010606 normalization Methods 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000000159 protein binding assay Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000013526 transfer learning Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
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
- 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
-
- 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/048—Activation functions
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Probability & Statistics with Applications (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于预训练的软件漏洞自动检测方法及装置,能够自动学习源代码的完整表征并有效地进行软件脆弱性检测。包括如下步骤:取代码文件,采用程序切片技术进行切片获得待检测代码片段,将待检测代码片段进行符号化表示。构建BERT基础模块,BERT基础模块以代码片段的符号形式作为输入,输出为代码片段的向量化表示。预先设置已符号化表示的训练代码切片,对BERT基础模块采用BERT预训练方法进行训练,得到数据向量化模型。将符号化表示的代码片段作为数据向量化模型的输入数据,首先对输入数据进行标记,并插入用于分隔句子的[CLS]和[SEP],输出代码片段的向量数据。构建LSTM‑Attention网络并进行训练,利用训练好的LSTM‑Attention网络对代码片段的向量数据进行漏洞检测。
Description
技术领域
本发明涉及网络与信息安全技术领域,具体涉及一种基于预训练的软件漏洞自动检测方法及装置。
背景技术
BERT模型(Bidirectional Encoder Representations from Transformers):BERT模型是一种预训练语言表示的方法,模型通过预训练和微调的方式得到语义更丰富的词向量表示,能够克服传统词向量的聚义现象,通过微调的方法将模型应用到特定的下游任务,提升泛化能力。在预训练方面,通过堆叠Transformer模型的编码器部分构建基础模型。通过掩蔽语言模型(Masked Language Model,MLM)和预测下一句(Next Sentence Pre-diction,NSP)两个任务联合训练达到捕获词级和句子级上下文语义向量表示的目的,其中掩蔽语言模型真正实现了双向语言模型的效果。在迁移到下游任务方面,BERT借鉴了OpenAI的GPT(Generative Pre-training)预训练模型的做法,设计了比GPT更通用的输入层和输出层。
BERT的本质上是通过在海量的语料的基础上运行自监督学习方法为单词学习一个好的特征表示,在特定的自然语言处理任务中,运用BERT的特征表示作为数据集词嵌入特征。与Word2Vec之类的模型相比,Bert模型进一步增加词向量模型泛化能力,充分描述字符级、词级、句级和句间关系特征。
长短期记忆网络模型(Long-Short Term Memory,LSTM):长短期记忆网络LSTM是一种时间递归神经网络,是为解决长期记忆依赖和反向传播中的梯度消失等问题而提出来的循环神经网络RNN(RecurrentNeural Network)的一种变体,该神经网路可以有效保留历史信息,实现对文本的长期依赖信息进行学习。
LSTM网络采用门控机制对RNN进行升级,达到捕捉长距离依赖和缓解梯度消失问题的目的。与RNN相比,LSTM具有两个隐层状态:长期记忆(ct)和短时记忆(ht)。LSTM的每个单元的输入是当前单词的词向量(xt)和上一个单词的长期记忆(ct-1)和短时记忆(ht-1)。LSTM比RNN多三个门:遗忘门(f)、输入门(i)和输出门(o):
z=tanh(Wxxt+Whht-1),
zi=σ(Wx ixt+Wh iht-1),
zo=σ(Wx oxt+Wh oht-1).
σ是sigmoid函数。LSTM每个单元的输出为当前单词的长期记忆(ct)和短时记忆(ht):
ct=zf⊙ct-1+zi⊙z,
ht=zo⊙tanh(ct).
符号⊙为矩阵(向量)按位置相乘。
LSTM的输入是一个单词序列。当单词序列的方向不同时,学习得到的单词隐层向量也不同。因此,将一个句子以正常语序传入LSTM中,可以获得每个单词在LSTM的隐层向量,此时LSTM称为正向LSTM。当句子按照句尾到句首的顺序排列时,也可以输入LSTM得到单词的隐层表示,此时的LSTM被称为反向LSTM。
注意力机制(Attention):注意力机制最早是在视觉图像领域提出来的,能够使深度学习模型在处理视觉图像领域问题时更好地提取重要特征,从而提升模型效果。近些年来,注意力机制逐渐被应用到自然语言处理领域,并且能够有效提高自然语言处理任务的效果,比如机器翻译、情感分析等任务。注意力机制是一种类似人脑的注意力分配机制,通过计算不同时刻词向量的概率权重,能够使一些词得到更多的关注,从而提高隐藏层特征提取的质量。
在LSTM模型中,由于输入的词向量是文本分词预处理后的结果,所以词向量之间会具有一些联系,基于注意力机制的深度学习模型能够通过训练词向量识别文本中词语的重要程度来提取文本中的重要特征。在LSTM-Attention模型中,通过注意力机制所起的作用,可以找出文本中的关键词,这些词语往往是分类的重要信息。
软件脆弱性检测是检查、发现软件系统内在安全缺陷的主要手段之一。现有的技术分析方法主要有以下几种:
●静态分析检测
程序静态分析是一种在不执行程序的情况下对程序行为进行分析的理论、技术,简称为静态分析。程序静态分析是与程序动态分析相对应的代码分析技术,它通过对代码的自动扫描发现隐含的程序问题,常用的分析技术有词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性。
但在实际应用中,恶意代码通常不会直接提供程序的源码(除非是基于脚本的蠕虫),缺乏源码,所以要准确了解恶意软件的运行机制,此时可以通过静态分析的方法从反汇编出来的程序清单上分析程序流程,通过查看对恶意软件进行反汇编之后得到的代码清清单,理解程序的行为。
●动态分析检测
动态分析检测是与静态分析检测相反,是在真实或虚拟处理器上运行被检测程序,来检测程序的动态行为和运行结果的正确性。在实际运行过程中,可以通过输入相应的测试数据,检测实际输出结果和预期结果是否相符,来检测系统运行是否正确。
动态检测技术的发展,让软件设计安全漏洞的查找方法更加的全面,动态分析检测可面向所有应用程序,而不受实际代码是否可知的限制,并对静态分析检测的结果进行验证和补充,同时可对程序在执行时环境中存在的漏洞进行识别,实现软件系统运行环境的扫描和防护,对程序的运行环境进行检测分析,包括栈、堆、内存等。在动态检测过程中,要考虑到是否影响到软件系统的性能、其覆盖面是否广泛、检测效果是否良好等因素,并通过分析对比,选择适合本软件的动态检测技术。
●动静态结合分析检测
动态检测和静态检测是目前检测软件漏洞的两大方法。动态检测通过实际运行相关应用,并实时监控应用是否有涉及的相关高危操作,以此来判别程序中是否存在安全漏洞,其中Fuzzing和污点跟踪等分析方法是动态分析方法的代表。相对应的,静态检测不依赖于实际运行响应应用,而是通过分析技术扫描程序代码的方式来识别应用中的安全问题。动态分析真实性高,静态分析覆盖率高。两者相结合的安全分析技术是目前主流的研究方向之一。
动静态结合分析利用动态技术分析程序实时运行时的真实执行状态,从而识别出具有风险的应用程序及其行为执行路径。使用静态技术对所达范围内取得的程序信息进行分析,最终定位漏洞。运用动静态分析相结合的协作方法能够缩短分析时间,同时提高漏洞分析的精确度,减少误判率。进一步弥补了单一分析方法在检测效率和检测能力上的不足。
现有的软件脆弱性检测技术存在以下缺点:
(1)静态分析过分依赖检测规则导致误报率高,代码静态分析是通过对程序扫描找到匹配某种规则模式的代码从而发现代码中存在的问题,这样有时会造成将一些正确代码定位为缺陷的问题,因此静态分析有时存在误报率较高的缺陷;同时静态加测依赖人工经验,人力和时间成本开销大,无法对程序在执行时环境中存在的漏洞进行识别。
(2)动态分析方法无法保证路径覆盖率的完成性,并且过于依赖专家定义的检测规则,使得脆弱性分析的漏报率过高,对于大规模软件系统的分析存在空开销过大等问题;
(3)动静结合的方法虽然令两种方法互补协作,在特定类型的软件脆弱性问题上,一定程度的保证了分析效率和准确度,但提升能力具有较大局限性。
因此目前缺少一种能够自动学习胆码的完整表征并有效进行软件漏洞检测的方法。
发明内容
有鉴于此,本发明提供了一种基于预训练的软件漏洞自动检测方法及装置,能够自动学习源代码的完整表征并有效地进行软件脆弱性检测;同时可以保证低误报率和漏报率。
为达到上述目的,本发明的技术方案为:一种基于预训练的软件漏洞自动检测方法,包括如下步骤:
S1、取代码文件,采用程序切片技术进行切片获得待检测代码片段,将待检测代码片段进行符号化表示,包括将用户自定义的变量名和函数名统一映射为符号形式。
S2、构建BERT基础模块,BERT基础模块以代码片段的符号形式作为输入,输出为代码片段的向量化表示。
预先设置已符号化表示的训练代码切片,对BERT基础模块采用BERT预训练方法进行训练,得到数据向量化模型。
S3、将符号化表示的代码片段作为数据向量化模型的输入数据,首先对输入数据进行标记,并插入两个用于分隔句子的特殊符号[CLS]和[SEP],经数据向量化模型输出代码片段的向量化数据。
S4、构建LSTM-Attention网络并进行训练,利用训练好的LSTM-Attention网络对代码片段的向量化数据进行漏洞检测。
进一步地,将待检测代码片段进行符号化表示,具体采用如下步骤:首先针对代码片段中的用户自定义的变量名进行符号化转换;其次对代码片段中的用户自定义的函数名进行转化;多个函数映射到统一的符号名;所有转换后的代码片段以词组的形式组成语料库。
进一步地,构建LSTM-Attention网络并进行训练,具体为:
构建LSTM-Attention网络,LSTM-Attention网络以代码片段的向量化数据作为输入,以漏洞检测的二分类结果作为输出。
在对LSTM-Attention网络进行训练时,首先构建训练样本,选取已知具备或者不具备软件漏洞的代码文件,采用步骤S1~S3的方式获取该代码文件所包含的代码片段的向量化数据作为训练样本;训练样本输入至LSTM-Attention网络进行训练。
进一步地,利用训练好的LSTM-Attention网络对代码片段的向量化数据进行漏洞检测,具体为:
以待检测代码片段的向量化数据作为输入,LSTM-Attention网络包含LSTM网络、Attention层以及Softmax分类器,待检测代码片段的向量化数据首先通过LSTM网络,在不同的时刻的LSTM网络输出对应节点的隐层输出,将LSTM网络的隐层输出作为Attention层的输入,Attention层利用LSTM网络的隐层输出生成注意力机制矩阵,Softmax分类器针对注意力机制矩阵进行二分类,得到软件漏洞检测结果。
进一步地,将LSTM网络的隐层输出作为Attention层的输入,Attention层利用LSTM网络的隐层输出生成注意力机制矩阵,具体为:
在1~T时刻LSTM网络输出的对应节点的隐层输出分别为h1~hT,作为Attention层的输入;
Attention层最终输出的注意力机制矩阵,该注意力机制矩阵中,在第i时刻,第j个词对应的Attention值为yj:
其中αij为第i时刻第j个词对应的权重值。
有益效果:
本发明提出一种基于预训练上下文编码器和自注意力机制的自动检测软件漏洞方法。本发明的方法将预训练的方法引入到软件脆弱性自动化检测中,可以有效提高了程序漏洞特征分析的效率和准确度,通过长短期记忆网络模型(LSTM)与注意力机制(Attention)的有效结合,在BERT模型预训练的基础上利用LSTM-attention学习代码中的漏洞信息。本发明的方法实现了自动学习源代码的完整表征并有效地进行软件脆弱性检测;同时可以保证低误报率和漏报率。
附图说明
图1为本发明实施例提供的代码切片的符号化转变示意图;
图2为本发明实施例提供的向量化模型示意图;
图3为本发明实施例提供的LSTM-Attention网络结构图;
图4为本发明实施例提供的一种基于预训练的软件漏洞自动检测方法流程图。
具体实施方式
下面结合附图并举实施例,对本发明进行详细描述。
本发明提供了一种基于预训练的软件漏洞自动检测方法,其流程如图4所示,是一种基于预训练上下文编码器和自注意力机制的自动检测软件漏洞方法,主要技术途径包括研究程序的层次分析、粒度划分,特征提取样本空间选择,源代码特征向量化提取,具体方法流程包含四个阶段:数据预处理、模型微调、向量化嵌入和分类模型训练,具体步骤如下:
S1、取代码文件,采用程序切片技术进行切片获得待检测代码片段,将待检测代码片段进行符号化表示,包括将变量名和函数名统一映射为符号形式。
符号化表示的具体步骤如图1所示,具体为:
首先针对代码片段中的用户自定义的变量名进行符号化转换;其次对代码片段中的用户自定义的函数名进行转化。例如第1~第n个用户自定义的变量名转换为V1~Vn,第1~第n个用户自定义的函数名转换为F1~Fn。
所有转换后的代码片段以词组的形式组成语料库。
本步骤为数据的预处理过程,预处理不仅可以保留代码的语义信息,而且可以改进提高了模型训练效率,减少了不必要时间和空间成本开销,具体如图1所示。
由于API函数的调用会导致不同类型的漏洞产生,多个函数映射到统一的符号名可以提高分类器的泛化能力。
S2、构建BERT基础模块,BERT基础模块以代码片段的符号形式作为输入,输出为代码片段的向量化表示。
预先设置已符号化表示的训练代码切片,对BERT基础模块采用BERT预训练方法进行训练,得到数据向量化模型。
数据向量化模型,如图2所示,预训练模型和向量化模型具有相同的网络架构。首先选用相同的预训练参数初始化模型,然后使用随机抽取的已符号化的代码切片数据对BERT进行微调。由于神经网络的不同层次可以捕获不同的语法和语义信息,需要选择合适的输出作为微调的参考。在微调过程中,所有参数都在端到端向量化模型中进行微调。
S3、将符号化表示的代码片段作为数据向量化模型的输入数据,首先对输入数据进行标记,并插入两个用于分隔句子的特殊符号[CLS]和[SEP],经数据向量化模型输出代码片段的向量化数据。在嵌入阶段,每个字被转换成一个固定维向量表示。
S4、构建LSTM-Attention网络并进行训练,利用训练好的LSTM-Attention网络对代码片段的向量化数据进行漏洞检测。
该步骤具体为:
构建LSTM-Attention网络,LSTM-Attention网络以代码片段的向量化数据作为输入,以漏洞检测的二分类结果作为输出;本方法的LSTM-Attention的网络结构如图3所示。
在对LSTM-Attention网络进行训练时,首先构建训练样本,选取已知具备或者不具备软件漏洞的代码文件,采用步骤S1~S3的方式获取该代码文件所包含的代码片段的向量化数据作为训练样本;
训练样本输入至LSTM-Attention网络进行训练。
以待检测代码片段的向量化数据作为输入,LSTM-Attention网络包含LSTM网络、Attention层以及Softmax分类器,待检测代码片段的向量化数据首先通过LSTM网络,在不同的时刻的LSTM网络输出对应节点的隐层输出,将LSTM网络的隐层输出作为Attention层的输入,Attention层利用LSTM网络的隐层输出生成注意力机制矩阵,Softmax分类器针对注意力机制矩阵进行二分类,得到软件漏洞检测结果。
Attention层最终输出的注意力机制矩阵,该注意力机制矩阵中,在第i时刻,第j个词对应的Attention值为yi:
其中αij为第i时刻第j个词对应的权重值;T为一个代码片段中词的总数;
第i时刻第j个词对应的权重值αij具体为:
其中eij为第i时刻第j个词对应的相似度或影响得分attention score;
eij=a(si,hi);其中si为第i步的隐藏状态,利用si和每个hi进行点积得到attention score,即相似度或影响得分,为每个编码过程的隐藏状态对当前的输出Si的一个贡献度。系数a可以通过网络模型在训练过程中学习得到,初始值为0-1间的随机值。
本发明还提供了一种基于预训练的软件漏洞自动检测装置,包括代码文件预处理模块、模型训练模块、向量化嵌入模块以及分类模块。
代码文件预处理模块,用于针对代码文件,采用程序切片技术进行切片获得待检测代码片段,将待检测代码片段进行符号化表示,包括将用户自定义的变量名和函数名统一映射为符号形式。
模型训练模块,用于构建BERT基础模块,BERT基础模块以代码片段的符号形式作为输入,输出为代码片段的向量化表示;预先设置已符号化表示的训练代码切片,对BERT基础模块采用BERT预训练方法进行训练,得到数据向量化模型。
向量化嵌入模块,用于将符号化表示的代码片段作为数据向量化模型的输入数据,首先对输入数据进行标记,并插入两个用于分隔句子的特殊符号[CLS]和[SEP],经数据向量化模型输出代码片段的向量化数据。
分类模块,用于构建LSTM-Attention网络并进行训练,利用训练好的LSTM-Attention网络对代码片段的向量化数据进行漏洞检测。
将待检测代码片段进行符号化表示,具体采用如下步骤:
首先针对代码片段中的用户自定义的变量名进行符号化转换;其次对代码片段中的用户自定义的函数名进行转化。
所有用户自定义的变量名和函数名作为词组成语料库;
构建LSTM-Attention网络并进行训练,具体为:
构建LSTM-Attention网络,LSTM-Attention网络以代码片段的向量化数据作为输入,以漏洞检测的二分类结果作为输出。
在对LSTM-Attention网络进行训练时,首先构建训练样本,选取已知具备或者不具备软件漏洞的代码文件,采用步骤S1~S3的方式获取该代码文件所包含的代码片段的向量化数据作为训练样本。
训练样本输入至LSTM-Attention网络进行训练。
本发明基于深度学习的软件脆弱性检测,有效解决了已有的技术方案中存在的技术瓶颈,使程序脆弱性检测的正确率大大提高,并且在真实的数据集CGD上面进行了验证。其中CGD数据集于2018年首次公布,目前被广泛用于智能软件脆弱性检测研究中。CGD数据集由脆弱性特征的源代码段构成基本单位,包括缓冲区错误脆弱性(CWE-119)数据样本集合和资源管理脆弱性(CWE-399)数据样本集合,具体的评价指标数据如下表所示:
表1
表2
表1为本发明与word2vec和doc2vec两种向量化方法在代码脆弱性检测效果上的比较,其中评价指标假阳性(FPR)和假阴性(FNR)得分越接近于0说明效果越好;精确率(P)和F1值越接近于1说明方法越有效。从表一可以看出本发明的效果明显由于其他两种嵌入方法。
表2为本发明与其他主流软件安全检测工具作比较,由实验结果可以得知,本发明提出的方法,在软件脆弱性检测相较于已有的技术方发有较大提升。
本发明首先设计和实现了漏洞源码基于上下文编码器预训练的特征表示,利用迁移学习的方法,将符号形式编码转化为真实的向量值,从而获得高质量的上下文相关的语义表示,同时提出长短期记忆模型与注意力机制相结合的方法提高漏洞特征分类效果。通过一系列的子实验,本发明所设计和提出的方法已实现期望目标。
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种基于预训练的软件漏洞自动检测方法,其特征在于,包括如下步骤:
S1、取代码文件,采用程序切片技术进行切片获得待检测代码片段,将待检测代码片段进行符号化表示,包括将用户自定义的变量名和函数名统一映射为符号形式;
S2、构建BERT基础模块,所述BERT基础模块以代码片段的符号形式作为输入,输出为代码片段的向量化表示;
预先设置已符号化表示的训练代码切片,对所述BERT基础模块采用BERT预训练方法进行训练,得到数据向量化模型;
S3、将符号化表示的代码片段作为所述数据向量化模型的输入数据,首先对输入数据进行标记,并插入两个用于分隔句子的特殊符号[CLS]和[SEP],经所述数据向量化模型输出代码片段的向量化数据;
S4、构建LSTM-Attention网络并进行训练,利用训练好的LSTM-Attention网络对代码片段的向量化数据进行漏洞检测。
2.如权利要求1所述的软件漏洞自动检测方法,其特征在于,所述将待检测代码片段进行符号化表示,具体采用如下步骤:
首先针对代码片段中的用户自定义的变量名进行符号化转换;其次对代码片段中的用户自定义的函数名进行转化;
所有转换后的代码片段以词组的形式组成语料库。
3.如权利要求1或2所述的软件漏洞自动检测方法,其特征在于,构建LSTM-Attention网络并进行训练,具体为:
构建LSTM-Attention网络,所述LSTM-Attention网络以代码片段的向量化数据作为输入,以漏洞检测的二分类结果作为输出;
在对LSTM-Attention网络进行训练时,首先构建训练样本,选取已知具备或者不具备软件漏洞的代码文件,采用步骤S1~S3的方式获取该代码文件所包含的代码片段的向量化数据作为训练样本;
训练样本输入至所述LSTM-Attention网络进行训练。
4.如权利要求3所述的软件漏洞自动检测方法,其特征在于,所述利用训练好的LSTM-Attention网络对代码片段的向量化数据进行漏洞检测,具体为:
以待检测代码片段的向量化数据作为输入,所述LSTM-Attention网络包含LSTM网络、Attention层以及Softmax分类器,待检测代码片段的向量化数据首先通过LSTM网络,在不同的时刻的LSTM网络输出对应节点的隐层输出,将LSTM网络的隐层输出作为所述Attention层的输入,所述Attention层利用LSTM网络的隐层输出生成注意力机制矩阵,所述Softmax分类器针对注意力机制矩阵进行二分类,得到软件漏洞检测结果。
6.一种基于预训练的软件漏洞自动检测装置,其特征在于,包括代码文件预处理模块、模型训练模块、向量化嵌入模块以及分类模块;
所述代码文件预处理模块,用于针对代码文件,采用程序切片技术进行切片获得待检测代码片段,将待检测代码片段进行符号化表示,包括将用户自定义的变量名和函数名统一映射为符号形式;
所述模型训练模块,用于构建BERT基础模块,所述BERT基础模块以代码片段的符号形式作为输入,输出为代码片段的向量化表示;预先设置已符号化表示的训练代码切片,对所述BERT基础模块采用BERT预训练方法进行训练,得到数据向量化模型;
所述向量化嵌入模块,用于将符号化表示的代码片段作为所述数据向量化模型的输入数据,首先对输入数据进行标记,并插入两个用于分隔句子的特殊符号[CLS]和[SEP],经所述数据向量化模型输出代码片段的向量化数据;
所述分类模块,用于构建LSTM-Attention网络并进行训练,利用训练好的LSTM-Attention网络对代码片段的向量化数据进行漏洞检测;
所述将待检测代码片段进行符号化表示,具体采用如下步骤:
首先针对代码片段中的用户自定义的变量名进行符号化转换;其次对代码片段中的用户自定义的函数名进行转化;
所有用户自定义的变量名和函数名作为词组成语料库;
所述构建LSTM-Attention网络并进行训练,具体为:
构建LSTM-Attention网络,所述LSTM-Attention网络以代码片段的向量化数据作为输入,以漏洞检测的二分类结果作为输出;
在对LSTM-Attention网络进行训练时,首先构建训练样本,选取已知具备或者不具备软件漏洞的代码文件,采用步骤S1~S3的方式获取该代码文件所包含的代码片段的向量化数据作为训练样本;
训练样本输入至所述LSTM-Attention网络进行训练。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110788694.XA CN113672931B (zh) | 2021-07-13 | 2021-07-13 | 一种基于预训练的软件漏洞自动检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110788694.XA CN113672931B (zh) | 2021-07-13 | 2021-07-13 | 一种基于预训练的软件漏洞自动检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113672931A CN113672931A (zh) | 2021-11-19 |
CN113672931B true CN113672931B (zh) | 2022-11-15 |
Family
ID=78538944
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110788694.XA Expired - Fee Related CN113672931B (zh) | 2021-07-13 | 2021-07-13 | 一种基于预训练的软件漏洞自动检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113672931B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114443476A (zh) * | 2022-01-11 | 2022-05-06 | 阿里云计算有限公司 | 一种代码评审方法及装置 |
CN114792006B (zh) * | 2022-03-29 | 2024-06-14 | 西安电子科技大学 | 基于lstm的安卓跨应用程序共谋安全分析方法及系统 |
CN115495755B (zh) * | 2022-11-15 | 2023-04-07 | 四川大学 | 一种基于CodeBERT和R-GCN的源代码漏洞多分类检测的方法 |
CN116738443B (zh) * | 2023-08-10 | 2023-12-26 | 哈尔滨工业大学(深圳)(哈尔滨工业大学深圳科技创新研究院) | 一种基于多示例感知的软件漏洞检测方法及相关设备 |
CN117235727B (zh) * | 2023-11-09 | 2024-02-23 | 中孚安全技术有限公司 | 基于大型语言模型的WebShell识别方法和系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108763931A (zh) * | 2018-05-28 | 2018-11-06 | 上海交通大学 | 基于Bi-LSTM和文本相似性的漏洞检测方法 |
CN110222512A (zh) * | 2019-05-21 | 2019-09-10 | 华中科技大学 | 一种基于中间语言的软件漏洞智能检测与定位方法与系统 |
-
2021
- 2021-07-13 CN CN202110788694.XA patent/CN113672931B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108763931A (zh) * | 2018-05-28 | 2018-11-06 | 上海交通大学 | 基于Bi-LSTM和文本相似性的漏洞检测方法 |
CN110222512A (zh) * | 2019-05-21 | 2019-09-10 | 华中科技大学 | 一种基于中间语言的软件漏洞智能检测与定位方法与系统 |
Non-Patent Citations (1)
Title |
---|
开源软件漏洞检测的混合深度学习方法;李元诚等;《计算机工程与应用》;20181217(第11期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113672931A (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113672931B (zh) | 一种基于预训练的软件漏洞自动检测方法及装置 | |
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN113011533B (zh) | 文本分类方法、装置、计算机设备和存储介质 | |
CN109766277A (zh) | 一种基于迁移学习与dnn的软件故障诊断方法 | |
CN112215013B (zh) | 一种基于深度学习的克隆代码语义检测方法 | |
CN116049831A (zh) | 一种基于静态分析和动态分析的软件漏洞检测方法 | |
CN113076734B (zh) | 一种项目文本的相似度检测方法及装置 | |
CN111046679A (zh) | 翻译模型的质量信息获取方法、装置及计算机设备 | |
CN111866004B (zh) | 安全评估方法、装置、计算机系统和介质 | |
CN110717324A (zh) | 裁判文书答案信息提取方法、装置、提取器、介质和设备 | |
CN112036705A (zh) | 一种质检结果数据获取方法、装置及设备 | |
CN113742733A (zh) | 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置 | |
CN112100377A (zh) | 文本分类方法、装置、计算机设备和存储介质 | |
Falessi et al. | The impact of dormant defects on defect prediction: A study of 19 apache projects | |
CN112035345A (zh) | 一种基于代码片段分析的混合深度缺陷预测方法 | |
CN113138920A (zh) | 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置 | |
CN115526234A (zh) | 基于迁移学习的跨域模型训练与日志异常检测方法及设备 | |
Khaliq et al. | A deep learning-based automated framework for functional User Interface testing | |
CN117272142A (zh) | 一种日志异常检测方法、系统及电子设备 | |
CN116150757A (zh) | 一种基于cnn-lstm多分类模型的智能合约未知漏洞检测方法 | |
Jeyakarthic et al. | Optimal bidirectional long short term memory based sentiment analysis with sarcasm detection and classification on twitter data | |
CN110852071A (zh) | 知识点检测方法、装置、设备及可读存储介质 | |
Mahyari | A hierarchical deep neural network for detecting lines of codes with vulnerabilities | |
CN114707507B (zh) | 一种基于人工智能算法的清单信息检测方法及装置 | |
CN113360649A (zh) | Rpa系统中基于自然语言处理的流程差错控制方法和系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20221115 |