一种基于检索增强的漏洞补丁生成方法、系统及存储介质

专利2025-04-25  24


本发明主要涉及到漏洞补丁生成,特指一种基于检索增强的漏洞补丁生成方法、系统及存储介质。


背景技术:

1、漏洞自动修复技术(avr)包括三个主要阶段:漏洞定位、补丁生成和补丁验证。其中,修复程序生成的补丁质量直接决定了修复结果,并且对整个修复过程至关重要。因此,许多现有的漏洞自动修复技术致力于生成更准确的补丁。

2、根据补丁生成阶段采用的技术和技术路线,现有的漏洞自动修复技术方法可分为以下四种:

3、(1)基于搜索的方法,也称为启发式解决方案,通过在预定义的补丁空间内搜索正确的补丁;

4、(2)基于约束的方法,通过制定一组约束规范来指导修复过程。这些方法针对具有明确规范的漏洞,例如缓冲区溢出和越界读取;

5、(3)基于模板的方法,利用预定义的程序修复模板来生成修复补丁;

6、(4)基于学习的方法,也被称为数据驱动的修复解决方案。

7、由于基于搜索的方法效率低下,以及基于约束的方法的应用场景受限,从业者更多的研究方向主要集中在基于模板和基于学习的 avr 技术上。

8、其中,基于模板的自动修复技术的基本思想是:将一系列代码变更抽象为一个模板,该模板可以应用于带有缺陷的代码。因此,基于模板的自动修复过程包括利用缺陷代码节点的上下文信息,以匹配给定修复模板中定义的上下文约束。

9、随着深度学习技术的蓬勃发展,另有一些从业者利用语言模型的力量修复漏洞。具体来说,基于学习的 avr 技术将漏洞修复任务视为一个代码到代码的翻译任务,从历史数据中学习修复动作。

10、由上可知,上述这些技术严重依赖于历史漏洞修复数据的数量和质量,而现有的漏洞数据集很难满足这一需求。当前主流的公开漏洞数据集 big-vul和 cvefixes分别包含 3,754 对和 5,465 对漏洞,涵盖了 91 和 180 种 cwe 类型。然而,在这些数据集中存在冗余,这使得难以实现学习型漏洞修复所需的数据多样性,从而给研究具有受限数据集的可行学习型漏洞修复解决方案带来挑战。

11、因此,在学习型自动漏洞修复技术中,优化利用现有漏洞数据集的问题成为一个至关重要的技术问题。通过充分利用现有的漏洞数据集,检索相关的代码片段并建立类似数据之间的联系,有助于生成所需的代码,从而可以减少搜索空间并在代码生成过程中提供必要的代码。这与人类思维是一致的,也就是说,面对需要修复的漏洞时,经验丰富的开发人员通常会首先在其他大规模代码库(如 github)中搜索相关的代码片段作为参考。开发人员在开发和维护阶段积累了丰富的知识和经验,通常会产生各种文档来对团队协作中遇到的问题进行分类。这使他们能够轻松访问类似的代码片段或信息,以帮助他们的修复任务。然而,对于漏洞自动修复工具来说,建立漏洞与其对应的代码片段之间的映射用于补丁生成阶段是一个挑战。

12、为此,上述传统技术仍然存在一些不足之处:

13、1、已有的基于模板的漏洞自动修复方法均针对于特定类型漏洞;

14、2、已有的基于模板的自动修复方法并未实现真正的自动化,虽然模板挖掘技术大大减少了人工总结修复模板的工作量,但是挖掘到的模板无法直接用于补丁生成过程,仍然需要开发人员实现将模板应用于补丁生成。


技术实现思路

1、本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种原理简单、适用范围广、可自动化地将修复模板用于修复的基于检索增强的漏洞补丁生成方法、系统及存储介质。

2、为解决上述技术问题,本发明采用以下技术方案:

3、一种基于检索增强的漏洞补丁生成方法,其包括:

4、步骤s1:修复模板检索器构建:在漏洞训练集上提取修复模板,存储修复模板与历史修复提交的映射,构建模板数据库;将缺陷代码片段与模板进行匹配,通过匹配成功的模板检索到一组相关的历史修复行为;

5、步骤s2:补丁生成器训练阶段:对从步骤s1中检索到的相似历史修复片段进行训练,获取补丁生成模型;

6、步骤s3:利用步骤s2的补丁生成模型生成漏洞补丁。

7、作为本发明方法的进一步改进:所述步骤s1包括:

8、步骤s11:将代码变更转换为富编辑脚本;

9、步骤s12:聚类提取修复模板;

10、步骤s13:修复模板数据库构建;

11、步骤s14:将缺陷代码与修复模板匹配;

12、步骤s15:将缺陷代码与模板检索到的修复对结合形成训练数据。

13、作为本发明方法的进一步改进:所述步骤s11中,将所有代码修改转换为富编辑脚本res,富编辑脚本res 利用ast中的四种操作和节点类型将代码修改表示为编辑脚本;富编辑脚本res 保留了代码更改的上下文细节,从而为模板匹配提供了更丰富的信息;所述步骤s12中,对具有相同结构基于收集到的富编辑脚本res,识别具有相同结构的树的集合;当集合中包含至少两棵树时,提取其中一组相同的修改操作的子树结构,构成一个模板;每个模板是同一集群中几个代码更改的抽象,并封装了应用于相同类型节点的相同修复修改。

14、作为本发明方法的进一步改进:所述步骤s13中,修复模板是一组相似修复行为的抽象,通过建立了一个字典,用于存储模板与相关漏洞修复对组之间的映射关系,其中模板作为键,漏洞修复对组作为值。

15、作为本发明方法的进一步改进:所述步骤s14中,对于待修复的缺陷函数vb,首先在抽象语法树的级别将其与挖掘到的模板库中的模板进行逐级匹配;匹配成功后,通过在模板挖掘过程中构建的字典来访问一组相关的历史代码更改;从缺陷代码和修复后的代码中提取修改的语句以及周围的代码行,以形成检索到的历史修复对,用于后续补丁生成阶段。

16、作为本发明方法的进一步改进:所述步骤s2包括:

17、步骤s21:模型初始化;

18、步骤s22:将缺陷函数及检索到的漏洞修复对作为模型输入;

19、步骤s23:对输入进行代码分词化;训练输入对<vt , ft>,将通过字节对编码对代码进行子词级别的标记化,然后嵌入层为每个子词生成一个嵌入向量,捕捉代码标记的语义特征;词嵌入的结果作为编码器模块的输入,推导出编码器的隐藏状态,进而通知解码器模块生成并输出预测的补丁;

20、步骤s24:计算交叉熵损失函数;在训练阶段采用交叉熵损失函数;

21、步骤s25:反向传播,更新参数。

22、作为本发明方法的进一步改进:所述步骤s21中,采用codet5为补丁生成模块的模型,codet5采用编码器-解码器架构,包括编码器和解码器各自的12个transformer层;每个层都利用了12个注意力头进行多头注意力计算。

23、作为本发明方法的进一步改进:所述步骤s22中,给定来自训练数据集的漏洞对<vt,ft>,即缺陷函数vt 及其正确修复ft,模板索引检索器在成功匹配模板的情况下输出若干相关的漏洞修复代码变化<vi,fi>,<vj,fj>…;在补丁生成器的训练阶段,将所有检索到的漏洞修复对,以vt,都作为输入提供给补丁生成器以生成预测的补丁。

24、本发明进一步提供一种基于检索增强的漏洞补丁生成方法、系统,包括存储器、处理器及存储在存储器上的计算机程序,所述处理器执行所述计算机程序以实现上述任意一项所述方法的步骤。

25、本发明进一步提供一种存储介质,所述存储介质能够被计算机或处理器读取,所述存储介质中存储有用来执行上述任意一项所述方法的计算机程序。

26、与现有技术相比,本发明的优点就在于:

27、1、由于已有的基于模板的漏洞自动修复方法均针对于特定类型漏洞,本发明的基于检索增强的漏洞补丁生成方法、系统及存储介质,为一种通用类型的漏洞补丁生成方法,用来实现为多种cwe类型漏洞生成正确的补丁。在本发明中,模板起到用于检索与缺陷代码片段相关的历史修复行为,而直接用于补丁生成,因而适用于所有类型的漏洞,是一种通用类型漏洞的补丁生成方法。

28、2、本发明的基于检索增强的漏洞补丁生成方法、系统及存储介质,实现一种自动化的漏洞补丁生成方法,实现了将修复模板自动化地用于补丁生成阶段,无需人工编码,减轻人工负担。而已有的基于模板的自动修复方法并未实现真正的自动化,虽然模板挖掘技术大大减少了人工总结修复模板的工作量,但是挖掘到的模板无法直接用于补丁生成过程,仍然需要开发人员实现将模板应用于补丁生成。

29、3、本发明的基于检索增强的漏洞补丁生成方法、系统及存储介质,是通过基于修复模板构建检索器,缓解了当前基于学习的自动修复方法过度依赖于历史漏洞修复数据的数量和质量的局限性,充分利用已有数据集中的历史修复数据,通过检索相关的代码片段并建立类似数据之间的联系,从而可以减少搜索空间并在代码生成过程中提供必要的代码,生成更高质量的漏洞补丁。


技术特征:

1.一种基于检索增强的漏洞补丁生成方法,其特征在于,包括:

2.根据权利要求1所述的基于检索增强的漏洞补丁生成方法,其特征在于,所述步骤s1包括:

3.根据权利要求2所述的基于检索增强的漏洞补丁生成方法,其特征在于,所述步骤s11中,将所有代码修改转换为富编辑脚本res,富编辑脚本res 利用ast中的四种操作和节点类型将代码修改表示为编辑脚本;富编辑脚本res 保留了代码更改的上下文细节,从而为模板匹配提供了更丰富的信息;所述步骤s12中,对具有相同结构基于收集到的富编辑脚本res,识别具有相同结构的树的集合;当集合中包含至少两棵树时,提取其中一组相同的修改操作的子树结构,构成一个模板;每个模板是同一集群中几个代码更改的抽象,并封装了应用于相同类型节点的相同修复修改。

4.根据权利要求2所述的基于检索增强的漏洞补丁生成方法,其特征在于,所述步骤s13中,修复模板是一组相似修复行为的抽象,通过建立了一个字典,用于存储模板与相关漏洞修复对组之间的映射关系,其中模板作为键,漏洞修复对组作为值。

5.根据权利要求2所述的基于检索增强的漏洞补丁生成方法,其特征在于,所述步骤s14中,对于待修复的缺陷函数vb,首先在抽象语法树的级别将其与挖掘到的模板库中的模板进行逐级匹配;匹配成功后,通过在模板挖掘过程中构建的字典来访问一组相关的历史代码更改;从缺陷代码和修复后的代码中提取修改的语句以及周围的代码行,以形成检索到的历史修复对,用于后续补丁生成阶段。

6.根据权利要求1-5中任意一项所述的基于检索增强的漏洞补丁生成方法,其特征在于,所述步骤s2包括:

7.根据权利要求6所述的基于检索增强的漏洞补丁生成方法,其特征在于,所述步骤s21中,采用codet5为补丁生成模块的模型,codet5采用编码器-解码器架构,包括编码器和解码器各自的12个transformer层;每个层都利用了12个注意力头进行多头注意力计算。

8.根据权利要求6所述的基于检索增强的漏洞补丁生成方法,其特征在于,所述步骤s22中,给定来自训练数据集的漏洞对<vt,ft>,即缺陷函数vt 及其正确修复ft,模板索引检索器在成功匹配模板的情况下输出若干相关的漏洞修复代码变化<vi,fi>,<vj,fj>…;在补丁生成器的训练阶段,将所有检索到的漏洞修复对,以vt,都作为输入提供给补丁生成器以生成预测的补丁。

9.一种基于检索增强的漏洞补丁生成系统,包括存储器、处理器及存储在存储器上的计算机程序,其特征在于,所述处理器执行所述计算机程序以实现权利要求上述权利要求1-8中任意一项所述方法的步骤。

10.一种存储介质,所述存储介质能够被计算机或处理器读取,其特征在于,所述存储介质中存储有用来执行上述权利要求1-8中任意一项所述方法的计算机程序。


技术总结
本发明公开了一种基于检索增强的漏洞补丁生成方法、系统及存储介质,该方法包括:步骤S1:修复模板检索器构建:在漏洞训练集上提取修复模板,存储修复模板与历史修复提交的映射,构建模板数据库;将缺陷代码片段与模板进行匹配,通过匹配成功的模板检索到一组相关的历史修复行为;步骤S2:补丁生成器训练阶段:对从步骤S1中检索到的相似历史修复片段进行训练,获取补丁生成模型;步骤S3:利用步骤S2的补丁生成模型生成漏洞补丁。该系统和存储介质均是用来执行上述方法。本发明具有原理简单、适用范围广、可自动化地将修复模板用于修复等优点。

技术研发人员:陈立前,刘培,秦意浩,林博,翁程,易昕,毛晓光,李姗姗,王尚文
受保护的技术使用者:中国人民解放军国防科技大学
技术研发日:
技术公布日:2024/12/17
转载请注明原文地址:https://xbbs.6miu.com/read-23808.html