CN115630368A - 基于自然语言处理与深度森林的Java漏洞分类方法 - Google Patents
基于自然语言处理与深度森林的Java漏洞分类方法 Download PDFInfo
- Publication number
- CN115630368A CN115630368A CN202211288161.6A CN202211288161A CN115630368A CN 115630368 A CN115630368 A CN 115630368A CN 202211288161 A CN202211288161 A CN 202211288161A CN 115630368 A CN115630368 A CN 115630368A
- Authority
- CN
- China
- Prior art keywords
- node
- vulnerability
- forest
- java
- abstract syntax
- 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
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000003058 natural language processing Methods 0.000 title claims abstract description 17
- 239000013598 vector Substances 0.000 claims abstract description 52
- 238000012549 training Methods 0.000 claims description 25
- 238000012360 testing method Methods 0.000 claims description 23
- 230000008569 process Effects 0.000 claims description 21
- 239000011159 matrix material Substances 0.000 claims description 17
- 238000007781 pre-processing Methods 0.000 claims description 10
- 238000011176 pooling Methods 0.000 claims description 8
- 230000017105 transposition Effects 0.000 claims description 7
- 230000006870 function Effects 0.000 claims description 6
- 238000013138 pruning Methods 0.000 claims description 6
- 238000013145 classification model Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 claims description 5
- 230000004913 activation Effects 0.000 claims description 4
- 238000009966 trimming Methods 0.000 claims description 3
- 238000012935 Averaging Methods 0.000 claims description 2
- 238000012163 sequencing technique Methods 0.000 claims description 2
- 238000004458 analytical method Methods 0.000 abstract description 19
- 238000002474 experimental method Methods 0.000 abstract description 13
- 238000005065 mining Methods 0.000 abstract description 12
- 230000003068 static effect Effects 0.000 abstract description 12
- 238000000605 extraction Methods 0.000 abstract description 5
- 238000007637 random forest analysis Methods 0.000 description 13
- 238000004422 calculation algorithm Methods 0.000 description 7
- 238000003066 decision tree Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 5
- 230000000694 effects Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013136 deep learning model Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- RPMARRQIRRJWEZ-UHFFFAOYSA-N 1,3,8-trichloro-6-methyldibenzofuran Chemical compound O1C2=CC(Cl)=CC(Cl)=C2C2=C1C(C)=CC(Cl)=C2 RPMARRQIRRJWEZ-UHFFFAOYSA-N 0.000 description 1
- 244000141353 Prunus domestica Species 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000004880 explosion Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000000717 retained effect Effects 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
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/253—Grammatical analysis; Style critique
-
- 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/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
- G06N20/20—Ensemble learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Virology (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于自然语言处理与深度森林的Java漏洞分类方法,属于源代码漏洞挖掘和分类技术领域;本发明的主要内容有漏洞源代码特征提取与表示、漏洞源代码分类方法两方面;针对当前Java源代码静态分析方法效率低、误报率高的问题,将源代码解析为抽象语法树并通过基于NLP的ASTNN编码层将抽象语法树切割成表达式子树,两次遍历表达式子树得到语句序列并通过多粒度扫描得到源代码最终向量表示,然后将向量表示通过级联森林进行分类。实验选择OWASP漏洞数据集作为样本,验证了本文所提Java源代码漏洞分类方法的有效性。
Description
技术领域
本发明公开了一种Java源代码漏洞分类方法,尤其涉及一种基于自然语言处理与深度森林的Java源代码漏洞分类方法,属于源代码漏洞挖掘和分类技术领域。
背景技术
近年来随着软件规模的扩大和代码复杂度的不断提高,软件漏洞的数量也不断增长,根据漏洞知识库网站CVE details发布的数据,2021年业界向通用漏洞披露知识库(Common Vulnerabilities&Exposures,简称CVE)提交了20169个漏洞,较2020年的18325个增长了1844个且呈逐年增长态势。除了数量的增长,软件漏洞的形态也呈现出复杂性和多样性,给计算机系统的正常安全运行带来的威胁日益增大。
传统的漏洞挖掘方法主要有静态分析与动态分析两种,动态分析如符号执行等方法存在路径爆炸、约束求解难、内存建模与并行处理复杂等问题,因此动态分析方法不适用于代码规模巨大的项目以及批量漏洞挖掘;而静态分析技术对源代码的匹配规则取决于专家知识构造的漏洞模式,且因为硬编码到分析工具中导致其不具有泛化性,所以静态检测方法通常误报率较高。
基于机器学习的漏洞挖掘方法与传统静态分析不同,其通过学习隐藏在历史漏洞数据中的信息,挖掘漏洞数据中的特征并用于漏洞挖掘问题,因此漏洞样本代码表示的数量和有效性决定了模型最终的性能。由于代码度量、token序列等特征表示方法包含的源代码语法结构和语义信息较少,在其基础上训练得到的模型准确率较低。为此有研究尝试以包含代码语法、语义及上下文信息的代码中间表示作为特征来训练漏洞挖掘模型。有实验表明:基于抽象语法树的机器学习模型能较好地均衡模型效率及性能。现有的基于抽象语法树的代码表示方法根据特征抽取方式的不同,可以分为路径信息表示和节点信息表示两类。这两种表示法在性能表现上相似,但由于抽象语法树的路径数量大,所以基于路径信息表示的模型训练时间相对较长。
发明内容
(一)要解决的技术问题
本发明要解决的技术问题是解决现有的代码漏洞挖掘静态分析中存在的误报率高、泛化性差的问题。
(二)技术方案
为了解决上述技术问题,本发明提供了一种基于自然语言处理与深度森林的Java漏洞分类方法,包括以下步骤:
S1、获取或选择漏洞数据集,将数据集划分为训练数据集与测试数据集;
S2、对所述数据集进行数据预处理;
S3、将训练数据集源代码解析为抽象语法树,为测试数据集创建对应的测试标签集;
S4、采用ASTNN模型对抽象语法树进行处理,一棵抽象语法树首先被分割为包含若干棵表达式子树的列表;
S5、对表达式子树列表中的每一棵表达式子树进行一次先序遍历以及后序遍历,获得两组节点标签集合作为语料库训练Word2Vec模型;
S6、对表达式子树列表中的各表达式子树进行第二次先序遍历和后序遍历,同时修剪去除其中无关节点的信息得到节点集合,通过S5训练得到的Word2Vec模型将各节点转为d维向量vn;对每一棵表达式子树的d维向量使用式2进行递归更新得到一颗抽象语法树的向量表示;
S7、使用深度森林进行训练,同时使用测试标签集对生成的深度森林进行测试,获得Java代码漏洞分类模型。
其中,S6中修剪方式为在遍历过程中首先判断表达式子树的根节点是否为注释声明、包声明等无关节点,若是此类节点则丢弃,仅保留必要的语义信息进行编码。
进一步,S7中深度森林由多粒度扫描和级联森林两部分组成,在多粒度扫描中引入矩阵转置和最大池化的预处理阶段以处理变长输入,得到表达式子树的最终向量表示。
具体地,使用得到的表达式子树最终向量表示表示一棵抽象语法树,将多粒度扫描的滑动窗口以及步长控制为1,即以表达式子树为单位扫描抽象语法树的局部特征并送入级联森林生成类向量。
更具体地,所述级联森林的第1层将多粒度扫描的输出作为输入,并在此后的每一层决策中都将上一层级联森林的输出拼接为下一层的输入。在训练过程中,级联森林每增加一层就使用测试标签集中的样本对已经生成的深度森林进行测试,如果准确率小于上一层的准确率,级联森林层数不再增加;否则继续增加级联层,直到测试集的准确率小于前一层的准确率为止,在深度森林停止生长后,最后一层的级联森林对所有输出的概率向量取均值,输出具有最大概率的标签类别作为最终漏洞分类的决策结果。
(三)有益效果
本发明的上述技术方案具有如下优点:
本发明改进ASTNN编码层的源代码表示法:对ASTNN编码层处理类级Java文件时包含的的无关信息进行修剪,并对抽象语法树进行先序和后序两种遍历以减少信息损失;针对抽象语法树的特点改进多粒度扫描,增加矩阵转置和最大池化的预处理阶段以处理变长序列输入,将定长的滑动窗口改为按表达式子树序列进行扫描,在保证特征提取效果的前提下减少训练时长;设计对照试验,利用漏洞代码数据集对本发明提供的方法进行实验,验证模型优异的精确性和有效性。
本发明使用改进的ASTNN编码层算法对抽象语法树进行编码,并以ASTNN编码层的输出代表抽象语法树使用改进多粒度扫描将其转换为向量,最后使用级联森林进行训练,以获得Java代码漏洞分类模型。本发明改进ASTNN的编码层的源代码表示法并将其与深度森林结合,应用于Java源代码漏洞分类问题,通过实验表明基于NLP和深度森林的深度学习模型用于Java漏洞挖掘的可行性,是对源代码漏洞挖掘领域一种有意义的补充。本发明的分类模型具有比较优异的精确性和有效性。
本发明在提高模型效率的同时更好地保留了抽象语法树所包含的语义信息,最终实验结果表明,基于改进后ASTNN网络的漏洞挖掘方法相对于传统的漏洞挖掘方法具有更高的准确率及召回率。
除了上述所描述的本发明解决的技术问题、构成的技术方案的技术特征以及有这些技术方案的技术特征所带来的优点之外,本发明的其他技术特征及这些技术特征带来的优点,将结合附图作出进一步说明。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明步骤框图示意图。
图2为本发明分类过程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种基于自然语言处理与深度森林的Java漏洞分类方法,主要分为解析抽象语法树、ASTNN编码层特征提取和深度森林分类三个阶段。如图1所示:其包括以下步骤:
S1、构造漏洞数据集;
S2、对所述数据集进行数据预处理;
S3、将源代码解析为抽象语法树;
S4、采用ASTNN模型对抽象语法树进行处理,一棵抽象语法树首先被分割为包含若干棵表达式子树的列表;
S5、对表达式子树列表中的每一棵表达式子树进行一次先序遍历以及后序遍历,获得两组节点标签集合作为语料库训练Word2Vec模型;
S6、对表达式子树列表中的各表达式子树进行第二次先序遍历和后序遍历,同时修剪去除其中无关节点的信息得到节点集合,通过S5训练得到的Word2Vec模型将各节点转为d维向量vn;对每一棵表达式子树的d维向量使用式2进行递归更新得到一颗抽象语法树的向量表示;
S7、使用深度森林进行训练,在多粒度扫描阶段增加数据预处理:首先对输入矩阵进行转置,然后逐行进行最大池化,将最大池化结果作为多粒度扫描的输入,同时以抽象语法树节点为单位,控制滑动窗口与步长为1;使用测试标签集对生成的深度森林进行测试,获得Java代码漏洞分类模型。
实施例1
1模型构建
本实施例主要包括以下三点工作:
(1)改进ASTNN编码层的源代码表示法:对ASTNN编码层处理类级Java文件时包含的的无关信息进行修剪,并对抽象语法树进行先序和后序两种遍历以减少信息损失;
(2)针对抽象语法树的特点改进多粒度扫描,增加矩阵转置和最大池化的预处理阶段以处理变长序列输入,将定长的滑动窗口改为按表达式子树序列进行扫描,在保证特征提取效果的前提下减少训练时长;
(3)设计对照试验,利用漏洞代码数据集对本文方法进行实验,验证模型的精确性和有效性。
基于自然语言处理与深度森林的漏洞分类方法主要分为将源代码解析为抽象语法树、改进ASTNN编码算法处理抽象语法树得到语句序列、深度森林分类三个阶段。
1.1源代码解析为抽象语法树
由于深度森林模型无法理解文本形式的源代码,因此需要合适的方法将源代码先转换成包含代码语法和语义结构的向量数据,再输入深度森林模型进行学习。抽象语法树(AST)是代码编译过程中的一种中间表示形式,抽象语法树节点上存储的是代码的语法结构信息,能够很好的反映源代码的结构和语义信息。在本实施例中,使用名为javalang的开源Python库来完成源代码解析为抽象语法树的任务。该Python库可以直接使用pip安装,能够将整个Java源代码文件或者代码片段解析成对应的抽象语法树。
1.2抽象语法树转换为向量
由源代码解析得到的抽象语法树无法直接作为深度森林模型的输入,因此需要将抽象语法树编码为文本序列并转换为向量形式。
1.2.1 ASTNN编码层
对于如何将抽象语法树转换为向量这一问题,采用ASTNN模型:该模型以抽象语法树作为处理对象,将抽象语法树切割为表达式子树,并捕获表达式子树各个节点上的信息编码为语句序列作为Word2Vec模型的输入。表达式子树是抽象语法树中以表达式声明节点为根节点的子树,该子树包含了一个表达式的所有节点,粒度为语句级,是包含语义的最小单位。
1.2.2 ASTNN编码层的改进
上述ASTNN编码过程能够很好地保留抽象语法树的语义结构信息,但也存在一些不足:比如在遍历时保留了树中的无关信息、单一遍历方式仍会损失一些语义信息等问题。为解决这两个问题,对ASTNN的编码方式作出进一步改进。
(1)语法树修剪
上述的ASTNN编码层适用粒度为函数级的代码片段,而在处理粒度为编译单元级的Java源代码时对切割得到的所有表达式子树节点都进行编码,导致类注释声明及其内容等一些无关节点也被编码作为特征,对这些内容进行编码作为特征会对训练造成干扰导致过拟合并增加模型训练时间。为了去除冗余和干扰信息,本实施例对表达式子树进行修剪,在遍历过程中首先判断表达式子树的根节点是否为注释声明、包声明等无关节点,若是此类节点则丢弃,仅保留必要的语义信息进行编码。
(2)特征保持
在二叉树的遍历中,一种遍历方式得到的节点序列不能唯一确定一棵二叉树,而表达式子树的遍历也存在这个问题。实际工作中发现不同的抽象语法树存在转化为相同的表达式子树序列的可能,因此这种转化方法会损失一部分抽象语法树的语义和结构信息,为了解决特征损失的问题,本实施例在对表达式子树进行后序遍历的同时对表达式子树再进行一次先序遍历,将两种遍历结果拼接作为表达式子树序列来代表一棵抽象语法树作为编码层输入。下面的伪代码展示了进一步改进后的ASTNN编码层算法
伪代码1改进ASTNN编码算法
算法输入:先序遍历节点集合prenodes、后序遍历节点集合lstnodes及节点索引列表indexs
算法输出:节点集合对应的向量集合h
上述编码过程在对抽象语法树进行编码时,一棵抽象语法树首先被分割为包含若干棵表达式子树的列表[T1,T2,...,TN],接着对列表中的每一棵表达式子树TN进行一次先序遍历以及后序遍历,以获得两组节点标签集合作为语料库训练Word2Vec模型得到节点索引列表indexs。随后对列表中的各表达式子树进行第二次先序遍历和后序遍历,同时修剪去除其中无关节点的信息得到节点集合prenodes、lstnodes,并通过第一次遍历时训练得到的Word2Vec模型将表达式子树TN中的各节点转为d维向量vn。具体地,给定一颗表达式子树T,n表示T的一个非叶子节点,首先使用式1对节点n进行词嵌入,得到节点n的向量表示vn,其中xn是节点n的独热编码,T为矩阵转置操作,We T∈P|V|×d为权重矩阵,V为词汇量大小,d为词嵌入的向量维数。
We Txn 式1
然后对向量vn使用式2进行递归更新,从而使其包含子节点及层次结构信息从而得到一颗表达式子树的向量表示h,对每一颗表达式子树进行上述操作得到一颗抽象语法树的向量表示[h1,h2,...,hn]。式2中为权重矩阵,C为节点n对应的子节点数量,k为编码维数,bn为偏差,σ为激活函数(这里采用tanh函数),hi为节点n的子节点i更新后的向量。
1.3漏洞代码分类
经过ASTNN编码层已经对Java源代码提取到代码特征,接下来通过多粒度扫描和级联森林进行分类。
1.3.1改进多粒度扫描
在提取到包含抽象语法树特征的向量列表后,需要对向量列表作进一步的特征提取并转换为固定维数的向量作为深度森林的输入。
原始的深度森林由多粒度扫描和级联森林两部分组成,只能处理定长输入,而ASTNN编码层得到的向量列表[h1,h2,...,hn]根据源代码不同解析得到的表达式子树数量不同,因此每一个列表的向量数量不固定,无法直接作为多粒度扫描的输入。为解决这个问题,在多粒度扫描中引入矩阵转置和最大池化的预处理阶段以处理变长输入。
为获得节点中包含的最重要的特征,在多粒度扫描的预处理阶段,如式3所示,首先对一棵抽象语法树的向量列表进行一次转置,将n×d的向量列表转置为d×n的矩阵,其中d为向量的维数,n为表达式子树的数量。然后对矩阵每一行的向量hi使用式4进行最大池化得到一棵表达式子树的最终向量表示ei。
接着使用表达式子树对应的向量列表[e1,...,ei,...ed],i∈[1,d]表示一棵抽象语法树,将多粒度扫描的滑动窗口以及步长控制为1,即以表达式子树为单位扫描抽象语法树的局部特征并送入随机森林和完全随机森林生成类向量。
ei=[max(hi,1),...,max(hi,n)],i∈[1,d] 式4
1.3.2级联森林生成
级联森林是现有技术中提出的一种集成森林结构,由相等数量的随机森林和完全随机森林组成。
随机森林是由一组决策树{T(X,θk),k=1,K}构成的集成分类器,K表示随机森林中决策树的数量,{θk}是服从独立同分布的随机向量。生成随机森林的步骤如下:
(1)使用bootstrap方法从训练集中随机抽取K个样本集,然后使用随机抽取的样本构建K棵决策树。
(2)设有n个特征,则在每棵树的每个节点处随机抽取m(m≤n)个特征,并对每个特征应用式4计算基尼系数Gini(D,a),选择拥有最小基尼系数的特征进行树节点的分裂。式4中|y|和pk为数据集D的类别数以及每个类别所占数据集的比例;a为需要划分的特征;|D|为样本总数;|DV|为类别V的样本总数。
(3)当每棵树中的节点中只有一个类别或节点中的样本数小于最小分裂级数时,停止生长。
(4)将生成的K棵决策树组成随机森林,并使用该随机森林进行分类,随机森林中将所有决策树的投票结果作为分类结果。
与随机森林类似,完全随机森林在上述过程的第2步中从每棵树随机选取一个特征作为树的分裂节点,其他步骤和随机森林生成过程一致。
1.3.3分类过程
如图2所示:级联森林的第1层将多粒度扫描的输出作为输入,并在此后的每一层决策中都将上一层级联森林的输出拼接为下一层的输入。在训练过程中,级联森林每增加一层就使用测试集中的样本对已经生成的深度森林进行测试,如果准确率小于上一层的准确率,级联森林层数不再增加;否则继续增加级联层,直到测试集的准确率小于前一层的准确率为止。
在深度森林停止生长后,最后一层的级联森林对所有输出的概率向量取均值,输出具有最大概率的标签类别作为最终漏洞分类的决策结果。
2实验及结果分析
2.1实验环境和实验数据集
基于NLP和深度森林的源代码漏洞分类系统,运行的CPU为intel(R)Core(TM)i9-11980HK八核处理器,配置64GB内存,操作系统使用64位Windows10。源代码解析为抽象语法树、ASTNN编码以及深度森林分类使用Python3.6。
本文使用的源代码漏洞数据来自OWASP Benchmark的漏洞数据集v1.1版本,包含命令注入、弱加密算法、SQL注入、目录穿越等11种漏洞类型在内共计21041个可运行的用例,每个类别都包含有漏洞的正样本和无漏洞的负样本,正负样本总数的比例约为1.28:1,基本信息见表1。
在使用数据进行训练时,随机选择其中80%作为训练集,剩余20%作为测试集。
表1漏洞数据集
2.2评价标准
本文采用准确率(accuracy)、召回率(recall)、F1值作为评价指标,计算公式如下:
其中TP为正确划分漏洞类别的样本数量,FP为误报为有漏洞的样本数量,FN为漏报的样本数量,TN为正确划分为无漏洞的样本数量。
2.3实验结果分析
在实验中随机抽取OWASP数据集的80%作为训练集,20%作为测试集。为了有效评估模型在Java漏洞分类问题上的可行性和效率,设计3组对比试验。
第一组实验在编码层分别使用Token序列、MCDF方法[20],分类器均使用级联森林来对比基于改进ASTNN编码层模型的准确率。实验结果如表2所示,验证了改进ASTNN编码层方法在漏洞分类问题上的有效性。
表2源代码表示法比较
第二组实验对比了模型的泛化能力。在本组实验中,使用第一组实验中通过OWASP数据集训练得到的模型对SARD漏洞数据集进行检验。实验结果如表3所示,结果表明模型在不同数据集上的表现良好,具有较好的泛化能力。
表3模型泛化能力实验
第三组实验比较了本文所提模型与业界常用的Java静态代码分析工具FindSecBugs的表现,由于传统静态代码分析工具不存在训练阶段,因此使用整个OWASP数据集来评估静态代码分析工具的准确率。实验结果如表4所示,本组对比实验说明基于NLP和深度森林的模型在准确率和误报率、漏报率等方面明显优于传统静态的代码分析工具。
表4与常见静态代码分析工具的比较
本实施例改进ASTNN的编码层的源代码表示法并将其与深度森林结合,应用于Java源代码漏洞分类问题,通过实验表明基于NLP和深度森林的深度学习模型用于Java漏洞挖掘的可行性,是对源代码漏洞挖掘领域一种有意义的补充。
上面对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
Claims (5)
1.基于自然语言处理与深度森林的Java漏洞分类方法,其特征在于:包括以下步骤:
S1、获取或选择漏洞数据集;
S2、对所述数据集进行数据预处理;
S3、将源代码解析为抽象语法树;
S4、采用ASTNN模型对抽象语法树进行处理,一棵抽象语法树首先被分割为包含若干棵表达式子树的列表;
S5、对表达式子树列表中的每一棵表达式子树进行一次先序遍历以及后序遍历,获得两组节点标签集合作为语料库训练Word2Vec模型;
S6、对表达式子树列表中的各表达式子树进行第二次先序遍历和后序遍历,同时修剪去除其中无关节点的信息得到节点集合,通过S5训练得到的Word2Vec模型将各节点转为d维向量vn;对每一棵表达式子树的d维向量使用式2进行递归更新得到一颗抽象语法树的向量表示;
S7、使用深度森林进行训练,同时使用测试标签集对生成的深度森林进行测试,获得Java代码漏洞分类模型。
2.根据权利要求1所述的基于自然语言处理与深度森林的Java漏洞分类方法,其特征在于:S6中修剪方式为在遍历过程中首先判断表达式子树的根节点是否为注释声明、包声明等无关节点,若是此类节点则丢弃,仅保留必要的语义信息进行编码。
3.根据权利要求1或2所述的基于自然语言处理与深度森林的Java漏洞分类方法,其特征在于:S7中深度森林由多粒度扫描和级联森林两部分组成,在多粒度扫描中引入矩阵转置和最大池化的预处理阶段以处理变长输入,得到表达式子树的最终向量表示。
4.根据权利要求3所述的基于自然语言处理与深度森林的Java漏洞分类方法,其特征在于:使用得到的表达式子树最终向量表示表示一棵抽象语法树,将多粒度扫描的滑动窗口以及步长控制为1,即以表达式子树为单位扫描抽象语法树的局部特征并送入级联森林生成类向量。
5.根据权利要求4所述的基于自然语言处理与深度森林的Java漏洞分类方法,其特征在于:所述级联森林的第1层将多粒度扫描的输出作为输入,并在此后的每一层决策中都将上一层级联森林的输出拼接为下一层的输入。在训练过程中,级联森林每增加一层就使用测试标签集中的样本对已经生成的深度森林进行测试,如果准确率小于上一层的准确率,级联森林层数不再增加;否则继续增加级联层,直到测试集的准确率小于前一层的准确率为止,在深度森林停止生长后,最后一层的级联森林对所有输出的概率向量取均值,输出具有最大概率的标签类别作为最终漏洞分类的决策结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211288161.6A CN115630368A (zh) | 2022-10-20 | 2022-10-20 | 基于自然语言处理与深度森林的Java漏洞分类方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211288161.6A CN115630368A (zh) | 2022-10-20 | 2022-10-20 | 基于自然语言处理与深度森林的Java漏洞分类方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115630368A true CN115630368A (zh) | 2023-01-20 |
Family
ID=84907550
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211288161.6A Pending CN115630368A (zh) | 2022-10-20 | 2022-10-20 | 基于自然语言处理与深度森林的Java漏洞分类方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115630368A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116432125A (zh) * | 2023-06-01 | 2023-07-14 | 中南大学 | 基于哈希算法的代码分类方法 |
CN117573085A (zh) * | 2023-10-17 | 2024-02-20 | 广东工业大学 | 一种基于层次结构特征和序列特征的代码补全方法 |
-
2022
- 2022-10-20 CN CN202211288161.6A patent/CN115630368A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116432125A (zh) * | 2023-06-01 | 2023-07-14 | 中南大学 | 基于哈希算法的代码分类方法 |
CN116432125B (zh) * | 2023-06-01 | 2023-09-05 | 中南大学 | 基于哈希算法的代码分类方法 |
CN117573085A (zh) * | 2023-10-17 | 2024-02-20 | 广东工业大学 | 一种基于层次结构特征和序列特征的代码补全方法 |
CN117573085B (zh) * | 2023-10-17 | 2024-04-09 | 广东工业大学 | 一种基于层次结构特征和序列特征的代码补全方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108446540B (zh) | 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统 | |
CN109445834B (zh) | 基于抽象语法树的程序代码相似性快速比较方法 | |
US7035789B2 (en) | Supervised automatic text generation based on word classes for language modeling | |
CN115630368A (zh) | 基于自然语言处理与深度森林的Java漏洞分类方法 | |
CN107203468B (zh) | 一种基于ast的软件版本演化对比分析方法 | |
CN112215013B (zh) | 一种基于深度学习的克隆代码语义检测方法 | |
US11113470B2 (en) | Preserving and processing ambiguity in natural language | |
CN113591093B (zh) | 基于自注意力机制的工业软件漏洞检测方法 | |
CN114547619B (zh) | 一种基于树的漏洞修复系统及修复方法 | |
CN116149669B (zh) | 一种基于二进制文件的软件成分分析方法、装置以及介质 | |
CN115309451A (zh) | 代码克隆检测方法、装置、设备、存储介质及程序产品 | |
CN115237760A (zh) | 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 | |
Meng et al. | [Retracted] A Deep Learning Approach for a Source Code Detection Model Using Self‐Attention | |
CN115146279A (zh) | 程序漏洞检测方法、终端设备及存储介质 | |
CN109977370B (zh) | 一种基于文档结构树的问答对自动构建方法 | |
CN115017268A (zh) | 一种基于树结构的启发式日志抽取方法及系统 | |
CN114757181B (zh) | 基于先验知识端到端的事件抽取模型的训练、事件抽取方法及装置 | |
CN116340507A (zh) | 一种基于混合权重和双通道图卷积的方面级情感分析方法 | |
CN115719057A (zh) | 一种日志解析方法 | |
Maraist | String shuffling over a gap between parsing and plan recognition | |
Eppa et al. | Machine learning techniques for multisource plagiarism detection | |
KR101225333B1 (ko) | 구문론적으로 분석된 텍스트 코퍼스로부터 정보를 추출하는 트리 패턴 표현식을 이용한 시스템 및 방법 | |
CN117171029B (zh) | 一种基于上下文边关系的改进源码切片方法 | |
KR20050065015A (ko) | 프로그램의 복제 여부를 검사하는 방법 및 시스템 | |
CN112650680B (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 |