技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种基于数据质量增强及代码属性图简化的软件漏洞检测方法  >  正文

一种基于数据质量增强及代码属性图简化的软件漏洞检测方法

  • 国知局
  • 2024-09-14 14:59:54

本发明属于软件安全工程,具体涉及一种基于数据质量增强及代码属性图简化的软件漏洞检测方法。

背景技术:

1、软件漏洞是指在软件中存在的安全缺陷或错误,例如缓冲区溢出、api误用和信息泄露等相关问题,这些漏洞有可能会被黑客利用以获取未授权的访问权限或执行恶意操作,因此,及时准确地检测和修复软件漏洞安全至关重要。

2、软件漏洞的检测大致可以分为三大类:静态分析、动态分析、静态与动态相结合的分析。静态分析是一种常见的软件漏洞检测技术,其通过对源代码或二进制代码进行静态扫描来查找潜在的漏洞。在静态分析中常使用token序列和图数据的代码表征来进行检测。但基于token进行的检测很难能提取到代码中的结构化信息,代码抽象性较低。而基于图的特征虽能够很好的提取代码的语义、语法信息以及结构信息,但图的生成与处理较为复杂,需要消耗掉许多的资源。动态分析是一种通过运行程序并监视其行为来检测漏洞的方法。但动态分析的过程较为复杂,难以实现全覆盖,且动态分析需要更多的时间以及计算资源。静态与动态相结合的分析方法,大多数都采取的静态分析为主,动态分析进行辅助的方式,能够进一步的提高漏洞的检测正确率。

3、除了分析技术上的一些问题外,在进行漏洞检测时更容易忽视的是对数据集中数据质量的处理。所公开的数据集中大多数数据是有相互交叉的部分,所以现有的许多检测方法的测试结果可能会虚高一些。以及当训练数据中的不同类别样本数量差异较大时,数据的预测便会偏向数据较多的一方,从而导致模型对少数类别的预测效果较差。所以数据集的平衡处理十分重要。

4、对于上面所提到的问题,许多学者也给出了一些解决方案。首先对于数据集的处理,大多数学者仅会对数据集进行平衡处理,而很少关注具体数据间的关系以及具体代码内的杂糅,故在此处仍需要有所提升。其次在运用图特征进行检测的时候,大多数方法更在乎的是图中所包含信息的丰富度,而忽视了图的大小对于模型检测的困难性。ample方法对图进行了从类型和变量上的简化,使用ggnn进行检测,减少了模型的检测压力,但对于图的简化及模型的选取,仍存在着可以提升的地方。

技术实现思路

1、本发明所要解决的技术问题是针对上述现有技术的不足,提供一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,对数据集中数据的质量进行增强,以及对代码属性图的代码表征进行简化,从而提高数据质量和减少模型输入无关信息,提升模型训练样本的准确率以及减少模型训练的时间,提高了漏洞检测的效率以及准确率。

2、为实现上述技术目的,本发明采取的技术方案为:

3、一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,包括:

4、步骤1:对源代码数据集进行数据增强处理和平衡处理,得到预处理后的数据集;

5、步骤2:对预处理后的数据集进行代码属性图生成和简化、向量映射,得到简化后代码属性图的节点、边的信息特征向量以及邻接向量;

6、步骤3:将所述节点、边的信息特征向量以及邻接向量输入到gat模型中进行训练,对训练的结果进行漏洞代码和安全代码二分类,得到软件漏洞检测结果。

7、为优化上述技术方案,采取的具体措施还包括:

8、上述的步骤1进行如下数据增强处理:

9、删除数据集中重复的杂糅代码,并删除数据集中代码的注释及头文件信息,其中重复的杂糅代码包括:具有相同的代码块但布局和注释不同的代码;具有相同的代码块但变量名、函数名不同的代码;语法与语义相同的代码片;实现功能相同但语法不同的代码。

10、上述的步骤1进行如下平衡处理:

11、对于数据集中的多数类样本进行随机删除;

12、对于数据集中的少数类样本,计算每个样本与其k个最近邻样本之间的距离;

13、根据公式new_sample=a+(b-a)*random(0,1),生成一个新的合成样本,其中a为所选取的少样样本,样本b为样本a的邻居样本,(b-a)表示为样本a与样本b之间的距离,random(0,1)是0到1之间的随机数;

14、将新的合成样本加入到数据集中,并将其标记为多数类或少数类;

15、重复以上步骤,直到数据集中数据达到预设数量或者多数类和少数类之间比例平衡。

16、上述的步骤2对预处理后的数据集,采用joern工具生成代码属性图,包括抽象语法树、程序依赖图和控制流图。

17、上述的步骤2对代码属性图进行如下简化:

18、简化图中的路径分支:对代码属性图的路径进行遍历,关注图中的循环和判断分支语句的路径,判断图中的支路是否可达,对不可达的分支路径进行删除;

19、根据图的节点类型以及变量名称进行简化:对代码属性图中代码类型相同的节点进行合并,对表达式语句、标识符语句,保留父节点,删除子节点;对代码属性图中具有相同含义与变量名节点进行合并。

20、上述的步骤2使用veccpg将简化后代码属性图中的实体和关系映射到向量空间中,得到节点、边的信息特征向量以及邻接向量,以作为gat模型输入。

21、上述的步骤3所述gat模型根据输入的节点、边的信息特征向量以及邻接向量,计算图中的每个节点的表示,同时根据邻居节点特征的不同来为其分配不同的权值,加重关键节点的信息。

22、上述的步骤3使用mlp全连接层以及softmax对模型输出的结果进行分类,同时采用损失函数最大程度的差异化最后的分类结果。

23、上述的损失函数为:

24、l=max(d(a,p)-d(a,n)+margin,0)

25、其中a为锚样本,即目标样本,p为正样本,n为负样本,d(a,p)为样本a与样本p的距离,margin为常量。

26、本发明具有以下有益效果:

27、本发明通过在对大多数所忽略的数据集进行增强操作,如通过对数据的独特性进行检查,避免重复出现的代码,删除多余的无关代码,保持代码纯净性,以及为减少模型训练的复杂度,对输入的图形进行相应的简化操作,不仅从类型与变量上检测,也在路径上对节点进行简化,进一步缩减最终检测图的大小。同时本发明使用gat模型,对获得的代码属性图的关键节点进行加权的操作,弥补gnn模型难以处理多类型边和复杂图形的缺点,进一步的提高了模型的准确率以及训练效率。

28、本发明平衡处理时,利用少量样本与其最相似的k个少量样本的距离合成新样本,可以确保所生成的新样本在特征空间中合理分布,避免过拟合,从而更好的学习少量样本的特征。

29、本发明网络采用的损失函数通过直接优化样本间的距离,使得同类样本更接近、不同类样本更远,进而学习到更有效和区分度更高的特征表示。

技术特征:

1.一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,包括:

2.根据权利要求1所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,所述步骤1进行如下数据增强处理:

3.根据权利要求1所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,所述步骤1进行如下平衡处理:

4.根据权利要求1所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,所述步骤2对预处理后的数据集,采用joern工具生成代码属性图,包括抽象语法树、程序依赖图和控制流图。

5.根据权利要求1所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,所述步骤2对代码属性图进行如下简化:

6.根据权利要求1所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,所述步骤2使用veccpg将简化后代码属性图中的实体和关系映射到向量空间中,得到节点、边的信息特征向量以及邻接向量,以作为gat模型输入。

7.根据权利要求1所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,步骤3所述gat模型根据输入的节点、边的信息特征向量以及邻接向量,计算图中的每个节点的表示,同时根据邻居节点特征的不同来为其分配不同的权值,加重关键节点的信息。

8.根据权利要求1所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,所述步骤3使用mlp全连接层以及softmax对模型输出的结果进行分类,同时采用损失函数最大程度的差异化最后的分类结果。

9.根据权利要求8所述的一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,其特征在于,所述损失函数为:

技术总结本发明公开了一种基于数据质量增强及代码属性图简化的软件漏洞检测方法,包括:步骤1:对源代码数据集进行数据增强处理和平衡处理,得到预处理后的数据集;步骤2:对预处理后的数据集进行代码属性图生成和简化、向量映射,得到简化后代码属性图的节点、边的信息特征向量以及邻接向量;步骤3:将所述节点、边的信息特征向量以及邻接向量输入到GAT模型中进行训练,对训练的结果进行漏洞代码和安全代码二分类,得到软件漏洞检测结果。本发明对数据集中数据的质量进行增强,对代码属性图的代码表征进行简化,可提高数据质量和减少模型输入无关信息,减少检测时间以及提高准确率。技术研发人员:张静宣,朱炫燕,罗撼,李嘉怡,唐艺璇受保护的技术使用者:南京航空航天大学技术研发日:技术公布日:2024/9/12

本文地址:https://www.jishuxx.com/zhuanli/20240914/296627.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。