一种基于深层语义和数据增强的软件漏洞检测方法

未命名 07-27 阅读:225 评论:0


1.本发明涉及计算机技术领域,尤其涉及一种基于深层语义和数据增强的软件漏洞检测方法。


背景技术:

2.软件漏洞有可能被黑客利用,使软件系统更容易成为网络攻击的目标,导致信息丢失、财产损失或隐私泄露等严重后果。例如decentralized autonomous organization合约的重入漏洞和wannacry利用国家安全局的永恒蓝色漏洞等事件的频繁发生,软件系统中的漏洞给网络空间带来了严重的安全威胁。根据georgios的分析,近几年美国国家标准技术研究院(nist)收集的漏洞数据是十多年前的两倍以上,常见的漏洞已经达到160,000多个。
3.漏洞检测是通过分析软件代码或分析软件执行过程来发现软件漏洞。由于当代软件的规模和复杂性不断增加,手动检测软件漏洞所需要的成本是难以想象的,自动化检测技术能有效的保障软件质量。目前的软件漏洞检测技术可以分为静态检测方法和深度学习方法两大类。静态检测方法主要依靠一些专家预先定义的漏洞规则或特征来搜索漏洞。这些方法高度依赖专家知识,很难及时更新不同的漏洞。然而现实世界软件项目中复杂的编程逻辑难以主观的描述,极大地阻碍了低假阳性率和低假阴性率。
4.最近,受益于深度学习(dl)具有处理大量软件代码的强大能力,已经有许多方法将dl模型引入漏洞检测。这些dl方法不需要专家定义漏洞规则,可以捕获程序语义以识别潜在的软件漏洞。然而,这些方法通常不能捕获代码的结构信息和深层语义。因此,需要探索一种可靠、有效的方法来解决软件漏洞检测问题。
5.如何解决上述技术问题成为本发明面临的课题。


技术实现要素:

6.本发明的目的在于提供一种基于深层语义和数据增强的软件漏洞检测方法,该方法可以根据代码的深层语义信息对软件进行漏洞检测。
7.本发明的思想为:本发明提出基于深层语义和数据增强的软件漏洞检测方法,即通过代码的结构和深层语义信息,构建dr-gd对抗训练模型生成对抗样本。然后,通过生成的对抗样本和原有的训练集一起训练,对软件代码进行漏洞检测。本发明的方法在相同的漏洞数据集中取得了比基准方法更好的性能。
8.本发明是通过如下措施实现的:一种基于深层语义和数据增强的软件漏洞检测方法,其中,包括以下步骤:
9.(1)搜集来自nist的java漏洞代码数据集,对该数据集进行预处理操作,得到数据集d,设定数据集d的格式为《代码,标签》,该数据集包含了56430个《代码,标签》对。具体预处理操作包括如下步骤:
10.(1-1)首先考虑代码的整洁性,删除掉注释及头文件信息;
11.(1-2)删除数据集中的重复对;
12.(2)使用java-lang将代码片段解析为抽象语法树,具体包括如下步骤:
13.(2-1)首先根据ast解析器规则,对代码段中无法解析的代码进行删除;
14.(2-2)使用java-lang对代码进行解析,生成和代码相关的token序列;
15.(2-3)加入ifstatement,whilestatement等控制流的边之后得到加强的ast的边;
16.(3)使用codebert对token编码,并构建bert-whitening对向量降维;
17.(4)将dropout正则化引入pgd中构建dr-gd对抗训练模型,针对训练集生成对抗实例,具体包括如下步骤:
18.(4-1)将dropout正则化纳入pgd对抗训练过程,在输入层之后和神经网络的每个隐藏层之前添加dropout层;
19.(4-2)通过步长k和dropout率来控制生成的过程;
20.(4-3)针对训练集使用dr-gd对抗训练模型生成对抗实例;
21.(5)构建残差网络改进的图神经网络模型,学习代码的深层义以表示,具体包括如下步骤:
22.(5-1)构建graphsmote对数据进行类不平衡处理;
23.(5-2)在两个graphsage层之间添加resnet层;
24.(5-3)通过改进后的模型训练代码以得到深层语义特征;
25.(6)根据代码的深层语义特征,和对应的标签一起输入到logistic分类器中进行漏洞检测。
26.作为本发明提供的一种基于深层语义和数据增强的软件漏洞检测方法进一步优化方案,所述步骤(2)中使用resnet提取深层语义特征,并通过生成的对抗实例训练模型,提高了软件漏洞检测模型的可靠性。
27.该基于深层语义和数据增强的软件漏洞检测方法的参数设置如下:
28.bert-whitening操作的维数k:128;
29.dr-gd中步长k:3;
30.dr-gd中dropout rate:0.2。
31.与现有技术相比,本发明的有益效果为:本发明提出的一种基于深层语义和数据增强的软件漏洞检测考虑了代码的深层语义和模型的鲁棒性两个方面,通过codebert将代码token序列转化为向量表示,通过graphsmote解决了类不平衡问题,并逐层对邻居节点采样,使用max-pooling聚合,通过resnet学习代码的深层表示,可以获得更好的分类效果。并且,由于dr-gd生成的对抗实例,本发明所提的基于深层语义和数据增强的软件漏洞检测方法相较于基于深度学习的漏洞检测方法而言更可靠、有效。
附图说明
32.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
33.图1为本发明提供的一种基于深层语义和数据增强的软件漏洞检测方法的系统框架图。
具体实施方式
34.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
35.实施实例
36.参见图1,本实施例是通过如下措施实现的:一种基于深层语义和数据增强的软件漏洞检测方法,其中,包括以下步骤:
37.(1)搜集来自nist的java漏洞代码数据集,对该数据集进行预处理操作,得到数据集d,设定数据集d的格式为《代码,标签》,该数据集包含了56430个《代码,标签》对。具体预处理操作包括如下步骤:
38.(1-1)首先考虑代码的整洁性,删除掉注释及头文件信息;
39.(1-2)删除数据集中的重复对;
40.(2)使用java-lang将代码片段解析为抽象语法树,具体包括如下步骤:
41.(2-1)首先根据ast解析器规则,对代码段中无法解析的代码进行删除;
42.(2-2)使用java-lang对代码进行解析,生成和代码相关的token序列;
43.(2-3)加入ifstatement,whilestatement等控制流的边之后得到加强的ast的边;
44.(3)使用codebert对token编码,并构建bert-whitening对向量降维;
45.(4)将dropout正则化引入pgd中构建dr-gd对抗训练模型,针对训练集生成对抗实例,具体包括如下步骤:
46.(4-1)将dropout正则化纳入pgd对抗训练过程,在输入层之后和神经网络的每个隐藏层之前添加dropout层;
47.(4-2)通过步长k和dropout率来控制生成的过程;
48.(4-3)针对训练集使用dr-gd对抗训练模型生成对抗实例;
49.(5)构建残差网络改进的图神经网络模型,学习代码的深层义以表示,具体包括如下步骤:
50.(5-1)构建graphsmote对数据进行类不平衡处理;
51.(5-2)在两个graphsage层之间添加resnet层;
52.(5-3)通过改进后的模型训练代码以得到深层语义特征;
53.(6)根据代码的深层语义特征,和对应的标签一起输入到logistic分类器中进行漏洞检测。
54.作为本实施例提供的一种基于深层语义和数据增强的软件漏洞检测方法进一步优化方案,所述步骤(2)中使用resnet提取深层语义特征,并通过生成的对抗实例训练模型,提高了软件漏洞检测模型的可靠性。
55.该基于深层语义和数据增强的软件漏洞检测方法的参数设置如下:
56.bert-whitening操作的维数k:128;
57.dr-gd中步长k:3;
58.dr-gd中dropout rate:0.2。
59.参见图1所示,本实施例提供了一种基于深层语义和数据增强的软件漏洞检测方法,具体包括以下内容:
60.(1)搜集来自nist的java漏洞代码数据集,该数据集包含56430个用java编程语言编写的漏洞函数。
61.(2)对语料库进行预处理操作,包括删除注释和头文件,删除重复对等。表1显示了数据集的详细统计信息。
62.表1
[0063][0064]
(3)为了确保与基准方法的的公平比较,根据以往研究的数据划分方式,从数据集中提取了70%的数据作为测训练集,其余的数据作为验证集。
[0065]
(4)使用java-lang将代码片段解析为抽象语法树,提取代码的结构信息。
[0066]
(4-1)首先根据ast解析器规则,对代码段中无法解析的代码进行删除;
[0067]
(4-2)使用java-lang对代码进行解析,生成和代码相关的token序列;
[0068]
(4-3)加入ifstatement,whilestatement等控制流的边之后得到加强的ast的边;
[0069]
(5)使用codebert对token编码,并构建bert-whitening对向量降维。
[0070]
(5-1)首先使用预训练模型codebert对ast中的token编码;
[0071]
(5-2)构建bert-whitening对编码进行关键特征提取和数据降维;
[0072]
(6)将dropout正则化引入pgd中构建dr-gd对抗训练模型,针对训练集生成对抗实例。
[0073]
(6-1)将dropout正则化纳入pgd对抗训练过程,在输入层之后和神经网络的每个隐藏层之前添加dropout层;
[0074]
(6-2)通过步长k和dropout率来控制生成的过程;
[0075]
(6-3)针对训练集使用dr-gd对抗训练模型生成对抗实例;
[0076]
(7)构建残差网络改进的图神经网络模型,学习代码的深层义以表示,通过logistic分类器对代码分类,进行软件漏洞检测。
[0077]
(8)该方法最优参数设置如下:
[0078]
bert-whitening操作的维数k:128;
[0079]
dr-gd中步长k:3;
[0080]
dr-gd中dropout rate:0.2。
[0081]
(9)在相同的数据集上对本实施例方法和已有软件漏洞检测方法进行评估,使用来自机器学习研究领域的四个性能指标(即auc、recall、precision和f1-measure)来自动评估漏洞检测的准确率:
[0082]
表2本实施例方法和其余方法的结果对照表
[0083]
方法aucrecallprecisionf1-measuretokencnn0.5820.5820.5720.577sysevr0.5910.6320.5250.574vulpecker0.5490.4020.5890.478vulocator0.5750.5430.5720.557
本实施例的方法0.6350.6640.6700.667
[0084]
经实验表明,本实施例提出的基于深层语义和数据增强的软件漏洞检测方法相较于基于深度学习的4个先进基准方法,能更好的预测易受攻击的代码。具体来说,本实施例方法考虑了代码的深层语义和模型的鲁棒性两个方面,可以超越这些最先进的基准方法。其中,对于auc而言,本实施例方法至少能分别提高7.4%的性能;对于f1-measure而言,本实施例方法至少提高了15.1%的性能。这些结果表明了本实施例所提方法的竞争力。
[0085]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.一种基于深层语义和数据增强的软件漏洞检测方法,其特征在于,包括以下步骤:(1)搜集来自nist的java漏洞代码数据集,对该数据集进行预处理操作,得到数据集d,设定数据集d的格式为<代码,标签>,标签代表有无漏洞,该数据集包含了约56430个<代码,标签>对;(2)将代码片段解析为抽象语法树,利用先序遍历对ast中的token进行提取,并且提取token之间的关系矩阵;(3)使用codebert提取代码语义特征,并通过bert-whitening进行关键特征提取和降维;(4)构建dr-gd对抗训练模型生成对抗样本,拓展原有的训练数据;(5)构建残差网络改进的图神经网络模型,学习代码的深层义以表示,通过logistic分类器对代码分类,进行软件漏洞检测。2.根据权利要求1所述的基于深层语义和数据增强的软件漏洞检测方法,其特征在于,所述步骤(2)中将代码片段解析为抽象语法树提取结构化信息,具体包括如下步骤:(2-1)首先根据ast解析器规则,对代码段中无法解析的代码进行删除;(2-2)使用java-lang对代码进行解析,生成和代码相关的token序列;(2-3)加入ifstatement,whilestatement控制流的边之后得到加强的ast的边;(2-4)对token序列进行先序遍历,根据代码对token之间的关系构造邻接矩阵。3.根据权利要求1所述的基于深层语义和数据增强的软件漏洞检测方法,其特征在于,所述步骤(3)中使用codebert提取代码语义特征,并通过bert-whitening进行关键特征提取和降维,具体包括如下步骤:(3-1)首先使用预训练模型codebert对ast中的token编码;(3-2)构建bert-whitening对编码进行关键特征提取和数据降维。4.根据权利要求1所述的基于深层语义和数据增强的软件漏洞检测方法,其特征在于,所述步骤(4)中构建dr-gd对抗训练模型生成对抗样本,具体包括如下步骤:(4-1)将dropout正则化纳入pgd对抗训练过程,在输入层之后和神经网络的每个隐藏层之前添加dropout层;(4-2)通过步长k和dropout rate来控制生成的过程;(4-3)针对训练集使用dr-gd对抗训练模型生成对抗实例。5.根据权利要求1所述的基于深层语义和数据增强的软件漏洞检测方法,其特征在于,所述步骤(5)中,构建残差网络改进的图神经网络模型,学习代码的深层义以表示,通过logistic分类器对代码分类,进行软件漏洞检测;该基于深层语义和数据增强的软件漏洞检测方法的最优参数设置如下:bert-whitening操作的维数k:128;dr-gd中步长k:3;dr-gd中dropout rate:0.2。

技术总结
本发明提供了一种基于深层语义和数据增强的软件漏洞检测方法,属于计算机技术领域。解决了软件质量得不到保障的技术问题。其技术方案为:包括以下步骤:(1)搜集来自NIST的Java漏洞代码函数,对该漏洞代码集合进行预处理操作;(2)通过构建AST提取代码的结构化特征;(3)使用CodeBERT提取代码语义特征,并通过BERT-Whitening进行关键特征提取和降维;(4)构建DR-GD模型生成对抗样本,拓展原有的训练数据;(5)构建残差网络改进的图神经网络模型,学习代码的深层义以表示,用于软件漏洞检测。本发明的有益效果为:可以生成多样的对抗实例,提高软件漏洞检测的准确性和可靠性。高软件漏洞检测的准确性和可靠性。高软件漏洞检测的准确性和可靠性。


技术研发人员:鞠小林 沈昊 陆桂龙 陈翔 王皓晨 曹金鑫
受保护的技术使用者:南通大学
技术研发日:2023.04.13
技术公布日:2023/7/25
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐