CN114491548A - 基于中间语言与迁移表征学习的漏洞挖掘系统及方法 - Google Patents
基于中间语言与迁移表征学习的漏洞挖掘系统及方法 Download PDFInfo
- Publication number
- CN114491548A CN114491548A CN202111612183.9A CN202111612183A CN114491548A CN 114491548 A CN114491548 A CN 114491548A CN 202111612183 A CN202111612183 A CN 202111612183A CN 114491548 A CN114491548 A CN 114491548A
- Authority
- CN
- China
- Prior art keywords
- code
- vulnerability
- software
- network
- data
- 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
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/2413—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
- G06F18/24133—Distances to prototypes
- G06F18/24137—Distances to cluster centroïds
- G06F18/2414—Smoothing the distance, e.g. radial basis function networks [RBFN]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
-
- 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/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)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computer Security & Cryptography (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种基于中间语言与迁移表征学习的漏洞挖掘系统及,包括:迁移表征模型训练模块、卷积网络训练模块和软件漏洞挖掘模块,迁移表征模型训练模块使用编译成中间语言并预处理后的数据与标签对双向长短期记忆网络进行迁移学习训练,并将BiLSTM网络中的中间隐藏层计算结果输出,作为数据集的高级表征形式;卷积网络训练模块使用数据的高级表征形式与对应标签,训练一个卷积神经网络分类器用于对高级表征进行判别;软件漏洞挖掘模块使用另外两个模块训练生成的模型,首先对未知的软件进行编译和预处理,并将处理后的代码段输入BiLSTM网络中,从BiLSTM网络的隐藏层中得到数据高级表征,再输入卷积神经网络分类器中,最终得到该代码段是否具有漏洞判别结果。
Description
技术领域
本发明涉及的是一种信息安全领域的技术,具体是一种基于中间语言与迁移表征学习的漏洞挖掘系统及方法,本发明中所述的漏洞通常指计算机程序中的缺陷,容易被恶意攻击者利用从而造成程序崩溃,数据泄露,丢失控制权等后果。
背景技术
软件漏洞又称为软件脆弱性,通常指计算机程序中的缺陷,容易被恶意攻击者利用从而造成程序崩溃,数据泄露,丢失控制权等后果。软件漏洞挖掘对于保护计算机系统和软件的安全性具有重要意义,但传统的漏洞挖掘方法大多需要繁琐低效的人工分析,并且准确率和召回率仍然不够理想。目前业界已经出现一些基于深度学习的方法,利用深度神经网络进行特征提取,避免繁琐的人工特征提取工程,但仍在通用性,泛化性等方面有所欠缺。
发明内容
本发明针对现有技术的上述不足和缺陷,提出一种基于中间语言与迁移表征学习的漏洞挖掘系统及,通过将不同的高级语言统一转换成中间语言再进行预处理和特征提取工作,从而提高漏洞挖掘方法针对不同编程语言的通用性,再利用双向长短期记忆网络对做过预处理的数据集进行迁移学习,提取双向长短期极易网络的隐藏层输出作为数据的高级表征形式,再将高级表征输入深度卷积网络中进行分类训练,得到可以进行高级表征分类的卷积神经网络。对未知软件进行漏洞挖掘时,对未知软件进行预处理并将处理后的代码段输入双向长短期记忆网络中,得到高级表征再将其输入卷积分类网络中,进而计算输出代码段是否具有漏洞的判别结果。这种迁移表征学习的方法可以有效避免过拟合,改善模型的泛化性。
本发明是通过以下技术方案实现的:
本发明涉及一种基于中间语言与迁移表征学习的漏洞挖掘系统,包括:迁移表征模型训练模块、卷积网络训练模块和软件漏洞挖掘模块,其中:迁移表征模型训练模块使用编译成中间语言并预处理后的数据与标签对双向长短期记忆(BiLSTM)网络进行迁移学习训练,并将BiLSTM网络中的中间隐藏层计算结果输出,作为数据集的高级表征形式;卷积网络训练模块使用数据的高级表征形式与对应标签,训练一个卷积神经网络分类器用于对高级表征进行判别;软件漏洞挖掘模块使用另外两个模块训练生成的模型,首先对未知的软件进行编译和预处理,并将处理后的代码段输入BiLSTM网络中,从BiLSTM网络的隐藏层中得到数据高级表征,再输入卷积神经网络分类器中,最终得到该代码段是否具有漏洞判别结果。
所述的预处理,包括中间语言编译、高危点定位、代码切片和函数名标准化处理。
本发明涉及一种基于上述系统的漏洞挖掘方法,通过使用收集的漏洞代码数据集在离线阶段训练BiLSTM网络用于表征提取,再以提取得到的高级表征训练CNN分类网络;在在线阶段对待测软件代码进行编译与预处理后,经高危点定位与程序切片后,将切片依次输入训练后的BiLSTM网络和CNN分类网络并获得每个切片的漏洞判别结果。
所述的漏洞代码数据集是指:预先收集的漏洞代码,其中每一条数据应为一段较完整的软件源代码,并有标签与之对应,标签的值为0或1,其中0表示该代码段没有漏洞,1表示该代码段有漏洞。本发明采用NIST(美国国家标准与技术研究院)发布的美国国家公开漏洞库SARD(Software Assurance Reference Dataset)数据库作为漏洞代码数据集,为使模型学习到更明确的特征,仅选取其中的基于栈的缓冲区溢出类型漏洞(CWE121)进行训练,生成的模型可以针对缓冲区溢出类型漏洞给出高准确率的判别结果。
所述的编译是指:将训练数据集的高级语言源代码编译成中间语言。本发明中使用clang编译器将源代码编译成中间语言。
所述的中间语言是指:一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码。其可理解性及易于生成目标代码的程度介于源语言和目标语言之间。本发明中采用LLVM语言作为选定的中间语言,其具有高度模块化的设计,代码更为清晰并且具有更丰富的语义特征。作为一种语言无关的中间代码,LLVM中间语言可以将不同的高级语言相互连结起来,提高本发明针对不同编程语言的通用性。
所述的高级表征是指,深度学习网络中,中间隐藏层的计算输出结果。在深度学习网络中,原始数据在经过输入层后,每经过一层隐藏层,实际上都进行特征提取与组合,而经历的层数越多,提取到的特征就越高级。高级特征可以看作是低级特征的组合。本发明中高级表征是从第二层BiLSTM的输出层中提取的,高级表征中含有BiLSTM网络学习到的高级特征,可以进一步输入CNN网络中进行分类。
所述的高危函数是指:根据已有的漏洞研究结论,常见的容易导致漏洞产生的库函数。
以c语言为例,一些内存写入的函数,在写入之前并不会进行缓冲区边界检查,例如memcpy,strcpy,strncpy等函数,当写入缓冲区的载荷长度大于缓冲区长度,就会导致写入的载荷溢出缓冲区边界,从而导致攻击者可以对缓冲区外的不可控区域进行任意写入,可能导致攻击者更改程序控制流,从而获取系统控制权。上述漏洞即缓冲区溢出漏洞。另外,printf,sprintf,fprintf等函数,由于这些函数没有对字符串中格式化变量的数量进行检查,可能导致缓冲区溢出漏洞。本发明通过对互联网信息和已有漏洞相关研究论文的检索,收集并整理一个高危函数库。
所述的程序切片是指:在待测的软件源码中搜索高危函数,以某一高危函数为切片点,搜索所有与该切片点存在控制依赖关系与数据依赖关系的相关代码行,提取这些代码行作为基于该切片点的程序切片。
所述的漏洞判别结果是指:所有从待测软件中提取的程序切片都对应一个漏洞预测结果,是一个0到1之间的数,其值越接近1,表明该程序切片有漏洞的可能性越大,反之则越小。程序切片的每一行都记录该行对应于源代码的文件位置及行号,当任一程序切片的判定结果为有漏洞,即得到这些代码在源文件的位置,对漏洞进行进一步分析验证。
技术效果
与现有技术相比,本发明通过迁移表征模型,根据来源划分代码数据集,并分别用于预训练和迁移训练,配合将软件代码先编译成中间语言再利用BiLSTM网络提取其语义特征,可以提高方法的通用性,并且降低代码的复杂性,传统方法往往直接使用规则匹配源代码或使用深度学习方法直接对源代码进行特征提取。
附图说明
图1为基于中间语言与迁移表征学习的漏洞挖掘技术的整体流程示意图。
图2为编译与数据预处理流程示意图。
图3为BiLSTM表征模型与CNN分类模型的结构示意图。
图4为迁移表征学习训练流程示意图。
图5为使用模型进行软件漏洞挖掘的流程示意图。
具体实施方式
本实施例涉及的一种基于中间语言与迁移表征学习的漏洞挖掘系统,包括:迁移表征模型训练模块、卷积网络训练模块和软件漏洞挖掘模块,其中:迁移表征模型训练模块使用编译成中间语言并预处理后的数据与标签对BiLSTM网络(双向长短期记忆网络)进行迁移学习训练,并将BiLSTM网络中的中间隐藏层计算结果输出,作为数据集的高级表征形式;卷积网络训练模块使用数据的高级表征形式与对应标签,训练一个卷积神经网络分类器用于对高级表征进行判别;软件漏洞挖掘模块使用另外两个模块训练生成的模型,首先对未知的软件进行编译和预处理,并将处理后的代码段输入BiLSTM网络中,从BiLSTM网络的隐藏层中得到数据高级表征,再输入卷积神经网络分类器中,最终得到该代码段是否具有漏洞的判定结果。
如图3所示,所述的卷积网络训练模块包括:卷积网络搭建单元和卷积网络训练单元,其中:卷积网络搭建单元搭建一个卷积神经网络(CNN)结构并对卷积核的数量和参数进行初始化;卷积网络训练单元使用迁移表征模型训练模块输出的高级表征与标签,对CNN进行训练。
如图4所示,所述的迁移表征模型训练模块包括:训练数据预处理单元、BiLSTM搭建单元、迁移学习训练单元和表征提取单元,其中:训练数据预处理单元对已收集的漏洞代码数据进行预处理,根据数据集是由现实软件中收集还是人工合成,将数据分成两个部分;BiLSTM搭建单元建立BiLSTM网络结构;迁移学习训练单元使用人工合成的数据进行初步训练,再使用从真实存在的可获取源代码的开源软件项目中收集的数据进行迁移学习训练,得到训练后的BiLSTM模型;表征提取单元用于提取并输出BiLSTM模型中隐藏层的输出,作为原始数据的高级表征。
如图5所示,所述的软件漏洞挖掘模块包括:中间语言编译单元、软件高危点定位单元、软件代码切片单元、软件代码预处理单元、高级表征计算单元和结果预测单元,其中:中间语言编译单元将软件源代码可编译的部分编译成中间语言;软件高危点定位单元在软件中搜索可能导致漏洞的高危函数并定位;软件代码切片单元针对每一个高危点,搜索所有与其产生控制流依赖和数据流依赖的代码行,并将其整合成代码切片;软件代码预处理单元将代码切片中的编译信息删除并对函数名进行标准化处理;高级表征计算单元将处理后的代码切片输入BiLSTM网络中,并计算其隐藏层输出,得到数据高级表征;结果预测单元将高级表征输入CNN网络中,计算得到该代码切片的漏洞预测结果。
如图1所示,为本实施例涉及的一种基于中间语言与迁移表征学习的漏洞挖掘方法,具体包括:
步骤一、将已有的漏洞代码数据集输入迁移表征模型训练模块中,通过训练数据预处理单元对数据集进行编译和预处理,搭建BiLSTM网络并进行初步训练和迁移学习训练,再通过表征提取单元得到数据的高级表征。
所述的编译是指:将训练数据集的高级语言源代码编译成中间语言。
本实施例中使用clang编译器将源代码编译成中间语言。
所述的中间语言是指:一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码。其可理解性及易于生成目标代码的程度介于源语言和目标语言之间。
本实施例中采用LLVM语言作为选定的中间语言,其具有高度模块化的设计,代码更为清晰并且具有更丰富的语义特征。作为一种语言无关的中间代码,LLVM中间语言可以将不同的高级语言相互连结起来,提高本实施例针对不同编程语言的通用性。
所述的预处理是指:对编译生成的LLVM中间语言文件进行处理,删去冗余信息并对中间语言代码进行分词与向量化操作,将LLVM中间语言文本代码转换成BiLSTM网络可以处理的输入形式,具体包括:高危点定位、代码切片、函数名标准化、去除编译信息、分词处理、词编号替换和词向量转换。
所述的高危点定位是指:在编译后的LLVM代码文件中搜索高危函数库中存在的函数,将所有搜索到的高危函数作为高危点,记录其所在文件和行号。
所述的程序切片是指:在待测的软件源码中搜索高危函数,以某一高危函数为切片点,搜索所有与该切片点存在控制依赖关系与数据依赖关系的相关代码行,提取这些代码行作为基于该切片点的程序切片。
本实施例采用开源工具llvm-slicer进行程序切片。llvm-slicer工具的输入是待切片llvm代码文件和切片点的函数名,输出以该函数为切片点的切片结果。
所述的函数名标准化是指,将所有的函数名更改成标准形式。由于LLVM编译过程中不会修改函数的名称,而有的函数名称中可能含有漏洞相关信息,例如
_ZN37CWE401_Memory_Leak__new_array_char_543badEv()中的bad表明该函数有漏洞,会影响到模型学习到的特征。因此,为避免这种影响,我们搜索所有的函数名称,并将其修改成fun1,fun2,……funN的形式。
所述的分词处理是指:将LLVM代码转换成由词组成的序列形式。
本实施例将所有代码中的特殊符号也看作一个独立的词,将所有的变量名,函数名,关键字,特殊符号划分成独立的词。
所述的词编号替换是指:将所有的词替换成一个数字。
本实施例分析所有完成分词处理的代码,统计所有出现过的词,将其整理到一个字典当中,字典中存储所有出现过的词和它的编号。之后将代码中所有的词替换成字典中对应的编号,将字符串形式的词转换成整数,便于进行下一步向量化。
所述的词向量转换是指:将每一个词转换成一个n维的向量。n维向量的形式为:
(x1,x2,x3,…,xn)。
本实施例使用word2vec算法,将所有进行过词编号替换的代码作为语料库,进行词向量训练。完成训练后,所有的词都对应一个n维的向量,这个向量中包含有词的一定语义特征。
本实施例经过实验,采取n=50作为词向量的维数。
所述的初步训练是指:使用数据集中的人工合成部分数据与标签,对BiLSTM网络进行训练。
本实施例将人工合成部分的数据按4:1的比例划分为训练集和测试集,在初步训练中使用训练集部分进行训练,测试集部分用于测试时使用。
所述的迁移学习训练是指:使用数据集中现实软件收集部分数据与标签,对初步训练完成的BiLSTM网络进行微调训练(finetune),使之能更好的适应迁移学习数据集上的分类任务。
本实施例将现实软件收集部分数据按4:1的比例划分为训练集和测试集,在迁移学习训练中使用训练集部分进行训练,测试集部分用于测试时使用。
所述的高级表征是指,深度学习网络中,中间隐藏层的计算输出结果。在深度学习网络中,原始数据在经过输入层后,每经过一层隐藏层,实际上都进行特征提取与组合,而经历的层数越多,提取到的特征就越高级。高级特征可以看作是低级特征的组合。
本实施例中高级表征是从第二层BiLSTM的输出层中提取的,高级表征中含有BiLSTM网络学习到的高级特征,可以进一步输入CNN网络中进行分类。
本实施例采用的高级表征的提取方法是,将所有的预处理后的数据集输入BiLSTM网络中,将BiLSTM模型中的最大池化层(位于模型中间的隐藏层)的输出保存下来,作为原始数据的高级表征。
步骤二、将数据的高级表征输入卷积网络训练模块中,首先搭建CNN网络并对卷积核参数进行初始化,然后利用高级表征和对应标签,对CNN分类网络进行训练。
所述的CNN网络是指:多层卷积神经网络,其具体结构见图3的右半部分。该卷积网络可以对高级表征进行进一步特征提取,并最终输出该高级表征对应的切片是否含有漏洞的判别结果,是一个0-1之间的数值。
步骤三、完成前两步的训练后,得到的BiLSTM网络和CNN网络即可用于实际软件项目的漏洞挖掘。将待测的软件输入中间语言编译单元中进行编译后,输入软件高危点定位单元中,搜索所有高危函数,并以这些高危函数为切片点,依据控制依赖与数据依赖关系对切片点进行切片并做预处理,完成后将预处理后的代码切片输入BiLSTM网络中得到高级表征,最后将高级表征输入CNN分类网络中,得到每个切片的漏洞预测结果。
所述的漏洞预测结果是指:所有的程序切片与其对应的信息,包括:高危函数名,高危点所在文件名与行号,表示为文件名:行号的形式,以及该切片最终的漏洞预测结果,是一个0-1的浮点数,该值越接近于1,则表明该切片包含漏洞的可能性越大,该值越接近于0,则表明该切片包含漏洞的可能性越小。该漏洞预测结果可能存在误报,因此需要使用动态测试的方法进行进一步验证。
本实施例利用深度学习方法,解决传统漏洞挖掘方法中的人工特征提取工作量大且效率低下的问题,并且利用LLVM中间语言作为统一的数据形式,提高本方法针对不同高级语言的通用性。
本实施例采取迁移学习方法,将漏洞数据库的数据按照来源不同分为两部分,并针对性训练,能更好的提取这两种数据的共有特征。采用表征提取并单独输入另一个CNN分类模型中进行分类的方法,改善基于深度学习的代码分类问题中常见的过拟合问题,具有较好的泛化性。
使用本方法在测试数据集上进行测试,并使用vuldeepecker,与基于LSTM的直接分类方法在相同的测试集上进行测试,计算得到准确率,召回率,误报率作为测试指标。
所述的测试指标包括:准确率,召回率与误报率。
本实施例依据二元混淆矩阵,给出实验的评价指标。根据预测值和真实值的不同,对样本共有四种划分:
i)TP(True Positive):实际为漏洞代码,预测也为漏洞代码。
ii)FN(False Negative):实际为漏洞代码,但预测为无漏洞代码。
iii)FP(False Positive):实际为无漏洞代码,但预测为漏洞代码。
iv)TN(True Negative):实际为无漏洞代码,预测也为无漏洞代码。
所述的准确率是指:预测正确的样本数量占所有样本的百分比,用于从整体上评价模型的性能。其公式为:Accuracy=(TP+TN)/(TP+FN+FP+TN)。
所述的召回率是指:所有被预测正确的漏洞代码占所有含漏洞代码样本的百分比。表明漏洞代码被检出的概率,衡量的是模型精准找出漏洞代码的能力。因此检出率是需要极力去提高的。其公式为:TPR=TP/(TP+FN)。
所述的误报率是指:真实值为无漏洞的样本被误报为有漏洞的情况数量占所有预测为有漏洞的样本数量的百分比。表明正常代码被检测成漏洞的概率,当误报率较高,那么会造成后续人力成本的浪费。因此误报率是需要极力去降低的。其公式为:FPR=FP/(FP+TN)。
所述的测试集是指:在初步训练和迁移训练过程中,将原始数据集按4:1比例划分为训练集与测试集,这里使用这部分测试集进行测试。
使用本方法与上述两个对照方法在测试集上进行实验。在ubuntu18.04操作系统的linux服务器上,通过miniconda3-4.6.14版本配置虚拟环境,其中包含python3.6.2,gensim3.8.3,tensorflow2.0.0和keras2.3.1,在上述虚拟环境下运行本方法、vuldeepecker,与LSTM直接分类的程序,能够得到的实验数据如下表所示:
方法 | 准确率 | 召回率 | 误报率 |
本方法 | 92.3% | 95.6% | 15.4% |
Vuldeepecker | 89.8% | 94.4% | 16.8% |
LSTM直接分类 | 85.7% | 89.1% | 18.2% |
由结果可知,本实施例相比于LSTM直接分类取得更好的结果,这表明提取高级表征再输入另一个CNN模型中进行分类的做法有效的缓解过拟合问题,从而在测试集上具有更好的表现;本实施例相比于vuldeepecker取得更好的结果,这表明使用迁移学习更好的提取训练数据中的特征,将现实软件来源的数据与人工合成数据分开训练,使模型学到漏洞相关的关键特征,可以适用于各种高级语言编写的软件代码,只要该软件代码能使用clang或其他编译器,编译转换成LLVM中间语言即可。
与现有技术相比,本实施例收集大量漏洞代码数据集,编译并预处理后使用该数据集训练一个高级表征提取模型,将提取出的高级表征用于训练一个CNN分类器,从而实现对代码段是否包含漏洞的判别功能。实际检测阶段,本实施例将待测软件进行一系列处理后,得到若干程序切片,并将这些切片输入上述模型中,即可得到每个切片代码段对应的漏洞判别结果,可用于进一步分析验证,大大提高程序漏洞挖掘的效率。
本实施例采用LLVM中间语言,将高级语言源代码转换成中间语言后,提高方法对不同语言的通用性,并保留高级语言代码中的语义特征。另一方面,由于高级语言的复杂性,实现同一功能的代码可以有很多不同的写法,而编译成中间语言后,这些不同的写法经过编译器优化后,会得到相同或绝大部分相同的中间语言代码,进而使模型能学习到更明确的特征。
本实施例采用迁移表征学习的方法。将数据源根据来源不同,划分成现实软件收集部分和人工生成部分。这两个部分的代码在代码长度上存在较大差异,现实软件中的代码长度一般较长,而人工合成的代码往往用于漏洞的概念性验证,一般较短。另一方面,针对同类漏洞,这两种来源的代码具有相同的漏洞特征,但来源不同也会导致其在代码风格上存在一些差异,因此使用人工合成数据做初步训练后再使用现实软件代码进行迁移学习,其准确率和召回率比直接使用所有数据进行训练更好。
本实施例使用表征学习,将常规深度学习模型的特征提取和分类判断两个部分分开,可以在一定程度上防止过拟合,比起传统的深度学习代码分类方法,本实施例具有更好的泛化性。
上述具体实施可由本领域技术人员在不背离本发明原理和宗旨的前提下以不同的方式对其进行局部调整,本发明的保护范围以权利要求书为准且不由上述具体实施所限,在其范围内的各个实现方案均受本发明之约束。
Claims (8)
1.一种基于中间语言与迁移表征学习的漏洞挖掘系统,其特征在于,包括:迁移表征模型训练模块、卷积网络训练模块和软件漏洞挖掘模块,其中:迁移表征模型训练模块使用编译成中间语言并预处理后的数据与标签对双向长短期记忆网络进行迁移学习训练,并将BiLSTM网络中的中间隐藏层计算结果输出,作为数据集的高级表征形式;卷积网络训练模块使用数据的高级表征形式与对应标签,训练一个卷积神经网络分类器用于对高级表征进行判别;软件漏洞挖掘模块使用另外两个模块训练生成的模型,首先对未知的软件进行编译和预处理,并将处理后的代码段输入BiLSTM网络中,从BiLSTM网络的隐藏层中得到数据高级表征,再输入卷积神经网络分类器中,最终得到该代码段是否具有漏洞判别结果;
所述的预处理,包括中间语言编译、高危点定位、代码切片和函数名标准化处理。
2.根据权利要求1所述的基于中间语言与迁移表征学习的漏洞挖掘系统,其特征是,所述的卷积网络训练模块包括:卷积网络搭建单元和卷积网络训练单元,其中:卷积网络搭建单元搭建一个卷积神经网络结构并对卷积核的数量和参数进行初始化;卷积网络训练单元使用迁移表征模型训练模块输出的高级表征与标签,对CNN进行训练。
3.根据权利要求1所述的基于中间语言与迁移表征学习的漏洞挖掘系统,其特征是,所述的迁移表征模型训练模块包括:训练数据预处理单元、BiLSTM搭建单元、迁移学习训练单元和表征提取单元,其中:训练数据预处理单元对已收集的漏洞代码数据进行预处理,根据数据集是由现实软件中收集还是人工合成,将数据分成两个部分;BiLSTM搭建单元建立BiLSTM网络结构;迁移学习训练单元使用人工合成的数据进行初步训练,再使用从真实存在的可获取源代码的开源软件项目中收集的数据进行迁移学习训练,得到训练后的BiLSTM模型;表征提取单元用于提取并输出BiLSTM模型中隐藏层的输出,作为原始数据的高级表征。
4.根据权利要求1所述的基于中间语言与迁移表征学习的漏洞挖掘系统,其特征是,所述的软件漏洞挖掘模块包括:中间语言编译单元、软件高危点定位单元、软件代码切片单元、软件代码预处理单元、高级表征计算单元和结果预测单元,其中:中间语言编译单元将软件源代码可编译的部分编译成中间语言;软件高危点定位单元在软件中搜索可能导致漏洞的高危函数并定位;软件代码切片单元针对每一个高危点,搜索所有与其产生控制流依赖和数据流依赖的代码行,并将其整合成代码切片;软件代码预处理单元将代码切片中的编译信息删除并对函数名进行标准化处理;高级表征计算单元将处理后的代码切片输入BiLSTM网络中,并计算其隐藏层输出,得到数据高级表征;结果预测单元将高级表征输入CNN网络中,计算得到该代码切片的漏洞预测结果。
5.一种根据权利要求1~4中任一所述系统的基于中间语言与迁移表征学习的漏洞挖掘方法,其特征在于,通过使用收集的漏洞代码数据集在离线阶段训练BiLSTM网络用于表征提取,再以提取得到的高级表征训练CNN分类网络;在在线阶段对待测软件代码进行编译与预处理后,经高危点定位与程序切片后,将切片依次输入训练后的BiLSTM网络和CNN分类网络并获得每个切片的漏洞判别结果。
6.根据权利要求5所述的漏洞挖掘方法,其特征是,所述的漏洞代码数据集是指:预先收集的漏洞代码,其中每一条数据应为一段较完整的软件源代码,并有标签与之对应,标签的值为0或1,其中0表示该代码段没有漏洞,1表示该代码段有漏洞。
7.根据权利要求5所述的漏洞挖掘方法,其特征是,所述的程序切片是指:在待测的软件源码中搜索高危函数,以某一高危函数为切片点,搜索所有与该切片点存在控制依赖关系与数据依赖关系的相关代码行,提取这些代码行作为基于该切片点的程序切片。
8.根据权利要求5所述的漏洞挖掘方法,其特征是,所述的漏洞判别结果是指:所有从待测软件中提取的程序切片都对应一个漏洞预测结果,是一个0到1之间的数,其值越接近1,表明该程序切片有漏洞的可能性越大,反之则越小;程序切片的每一行都记录该行对应于源代码的文件位置及行号,当任一程序切片的判定结果为有漏洞,即得到这些代码在源文件的位置,对漏洞进行进一步分析验证。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111612183.9A CN114491548A (zh) | 2021-12-27 | 2021-12-27 | 基于中间语言与迁移表征学习的漏洞挖掘系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111612183.9A CN114491548A (zh) | 2021-12-27 | 2021-12-27 | 基于中间语言与迁移表征学习的漏洞挖掘系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114491548A true CN114491548A (zh) | 2022-05-13 |
Family
ID=81495160
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111612183.9A Pending CN114491548A (zh) | 2021-12-27 | 2021-12-27 | 基于中间语言与迁移表征学习的漏洞挖掘系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114491548A (zh) |
-
2021
- 2021-12-27 CN CN202111612183.9A patent/CN114491548A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109697162B (zh) | 一种基于开源代码库的软件缺陷自动检测方法 | |
CN109344250B (zh) | 基于医保数据的单病种诊断信息快速结构化方法 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN110021439A (zh) | 基于机器学习的医疗数据分类方法、装置和计算机设备 | |
CN111427775B (zh) | 一种基于Bert模型的方法层次缺陷定位方法 | |
Meng et al. | Improving fault localization and program repair with deep semantic features and transferred knowledge | |
CN113672931B (zh) | 一种基于预训练的软件漏洞自动检测方法及装置 | |
CN116049831A (zh) | 一种基于静态分析和动态分析的软件漏洞检测方法 | |
CN111309607B (zh) | 一种代码方法级别的软件缺陷定位方法 | |
CN109492106B (zh) | 一种文本代码相结合的缺陷原因自动分类方法 | |
CN111949535A (zh) | 基于开源社区知识的软件缺陷预测装置及方法 | |
Alrabaee et al. | Bineye: Towards efficient binary authorship characterization using deep learning | |
CN113434418A (zh) | 知识驱动的软件缺陷检测与分析方法及系统 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN116150757A (zh) | 一种基于cnn-lstm多分类模型的智能合约未知漏洞检测方法 | |
CN114398069B (zh) | 一种基于交叉指纹分析的公共组件库精确版本识别方法及系统 | |
Rao et al. | Search4Code: Code search intent classification using weak supervision | |
Yuan et al. | Java code clone detection by exploiting semantic and syntax information from intermediate code-based graph | |
Wen et al. | A cross-project defect prediction model based on deep learning with self-attention | |
US20230385037A1 (en) | Method and system for automated discovery of artificial intelligence (ai)/ machine learning (ml) assets in an enterprise | |
Wang et al. | A Token‐based Compilation Error Categorization and Its Applications | |
CN114491548A (zh) | 基于中间语言与迁移表征学习的漏洞挖掘系统及方法 | |
Salman | Test case generation from specifications using natural language processing | |
CN114722400A (zh) | 一种侧信道漏洞检测的方法、系统、介质、设备及终端 | |
CN114218580A (zh) | 一种基于多任务学习的智能合约漏洞检测方法 |
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 |