本发明涉及计算机,具体涉及一种基于预训练大模型的漏洞代码修复方法及系统。
背景技术:
1、传统的代码修复技术主要依赖于人工来识别和修复漏洞,这在处理复杂的代码环境时常常导致理解不足、修复不精确或引入新的错误。此外,这些技术通常仅支持有限的编程语言和框架,导致代码修复效率低、自动化程度不高,并且延长了漏洞修复周期。
2、在信息化时代,软件是万物的基石。开源软件和第三方组件的广泛使用不仅加快了代码开发速度,而且增加了安全漏洞的风险。目前,漏洞检测技术,包括静态、动态和人工检测,主要用于识别漏洞,但它们不提供修复功能。因此,存在迫切需求开发自动化漏洞修复技术,以克服人工修复效率低下和周期长的问题。
3、模糊测试(fuzz testing或fuzzing)是一种自动化的软件测试技术,其核心思想是向系统输入非预期或随机生成的数据,以观察系统是否会异常崩溃,从而帮助发现潜在的安全漏洞或软件缺陷。模糊测试的有效性在于它能够揭露那些在常规测试过程中可能会被忽视的错误,尤其是那些可能被恶意利用来破坏系统安全的漏洞。
4、aigc是人工智能生成内容(artificial intelligence generated content)的简称,它依赖于从已有数据中寻找规律,并通过一系列先进的ai技术,如预训练大模型,来自动生成各种类型的内容。aigc的关键在于它能够通过自然语言处理(nlp)技术解析和理解编程任务的自然语言描述,并将这些描述转换成具体的编程意图。这一过程涉及语言模型、句法分析和语义理解等多种技术,使得ai能够有效地在编程语言和自然语言之间进行交互和转换。
5、将人工智能内容生成(aigc)与模糊测试技术相融合,为代码漏洞的自动化检测与修复提供了一种前所未有的方法。通过aigc技术,能够自动化地生成大量丰富且多样的测试数据,包括正常数据和能够触发异常的边界条件数据。深度学习模型进一步增强了这一过程,通过预测哪些测试数据最可能揭露某类漏洞,使模糊测试变得更加针对性和有效。同时,aigc技术的进步,特别是在自然语言处理领域,使ai能够深入理解代码逻辑及其潜在缺陷,从而不仅能够识别出语法错误,还能发现复杂的逻辑漏洞和安全威胁。基于这种理解,ai可以自动生成修复建议或代码段,开发人员可以直接采纳这些自动生成的解决方案或对其进行审查和调整,确保修复措施的准确性和有效性。将这一流程集成到持续集成/持续部署(ci/cd)中,可以实现漏洞的持续监测和自动化修复,保障软件质量的同时减少安全风险。此外,通过实时监控修复效果和收集反馈,ai模型能够从每次漏洞修复过程中学习并优化,持续提升检测和修复漏洞的准确性与效率。这种结合了aigc和模糊测试的方法,不仅提高了软件开发的安全性和质量,也开启了自动化代码漏洞检测与修复的新篇章。
6、现有方案是中国专利号cn 116991467 a、发明名称为“一种基于大型语言模型的代码修复系统及修复方法”的专利。此专利公开了一种代码修复方法,包括6个步骤。
7、s1,选择大型语言模型,并进行与编程语言相关的预训练和微调;
8、s2,基于已有的静态代码分析工具收集代码缺陷信息;
9、s3,缺陷解释与修复代码生成任务的prompt编写;
10、s4,完成微调的大型语言模型接入静态代码分析工具,生成缺陷解释结果和修复代码结果;
11、s5,利用静态代码分析工具对大型语言模型所生成的修复代码进行复查和优化;
12、s6,再训练,在静态代码分析工具中提供接口收集用户对于大型语言模型给出的缺陷解释和修复代码的反馈信息,再基于收集到的反馈信息数据,持续对大型语言模型再训练和微调。
13、存在的问题是在结合静态应用程序安全测试(sast)和人工智能内容生成(aigc)进行代码漏洞修复的过程中,面临的两个主要问题是误报和漏报。误报发生时,sast工具可能标记出实际上不存在的漏洞,而当aigc尝试去修复这些被错误标记的漏洞时,可能会引入新的错误或进行不必要的代码更改。另一方面,漏报问题指的是sast工具可能无法识别出所有类型的漏洞,特别是那些只能在运行时上下文中识别的漏洞。这将导致aigc遗漏一些关键的、需要修复的漏洞。因此,虽然这种技术结合提供了自动化修复漏洞的潜力,但它也带来了关于准确性和完整性的挑战。
技术实现思路
1、本发明的目的在于提供一种基于预训练大模型的漏洞代码修复方法及系统,借助模糊测试在漏洞检测的高准确率特性,用模糊测试的反馈信息持续对大型语言模型再训练和微调,使得漏洞检测更加全面和准确。
2、为解决上述技术问题,本发明提供一种基于预训练大模型的漏洞代码修复方法,包括以下步骤:
3、对待测软件进行模糊测试,得到异常代码;
4、将异常代码输入到预训练完成的大语言模型中,得到修复建议;
5、根据修复建议对异常代码进行修复。
6、优选地,对待测软件进行模糊测试,得到异常代码,具体包括以下步骤:
7、通过模糊测试工具自动化生成各种测试数据,将测试数据输入待测软件中,得到测试结果日志;
8、对测试结果日志进行信息定位,得到异常代码。
9、优选地,进行模糊测试时,创建docker容器隔离测试环境,并配置模糊测试工具。
10、优选地,所述模糊测试工具为afl或libfuzzer;
11、所述信息定位为通过gdb进行堆栈跟踪。
12、优选地,所述大语言模型的预训练方法为:
13、从代码库中获取训练数据;
14、将训练数据输入到大语言模型中进行训练,得到训练后大语言模型;
15、根据测试结果日志,得到漏洞类型;
16、根据漏洞类型,确定关注代码部分;
17、基于关注代码部分,对训练后大语言模型进行模型微调,得到预训练完成的大语言模型。
18、优选地,基于关注代码部分,对训练后大语言模型进行模型微调,得到预训练完成的大语言模型,具体包括以下步骤:
19、在大语言模型的自注意力层中引入低秩矩阵;
20、基于lora,根据关注代码部分对低秩矩阵进行微调,更新低秩矩阵的权重,得到预训练完成的大语言模型。
21、优选地,根据修复建议对异常代码进行修复,具体包括以下步骤:
22、根据修复建议,使用代码编辑工具对待测软件进行修复,得到修复内容。
23、优选地,根据修复建议对异常代码进行修复,具体包括以下步骤:
24、通过代码编辑工具或脚本自动化应用修复建议至异常代码,得到修复内容。
25、优选地,还包括以下步骤:
26、将异常代码和修复内容发送到代码库中储存;
27、根据异常代码和修复内容对大语言模型进行重新训练。
28、本发明还提供一种基于预训练大模型的漏洞代码修复系统,包括:
29、模糊测试模块,用于对待测软件进行模糊测试,得到异常代码;
30、aigc模块,用于将异常代码输入到预训练完成的大语言模型中,得到修复建议;
31、修复模块,用于根据修复建议对异常代码进行修复。
32、与现有技术相比,本发明的有益效果为:
33、本发明提出了一种利用aigc(人工智能生成内容)技术的模糊测试驱动的代码漏洞修复方法。通过使用预训练的大模型自动识别并修复代码中的漏洞,该方法显著提高了代码修复的自动化程度和效率。此方法不仅提升了修复过程的准确性,通过深入理解代码的语义和上下文生成准确的修复代码,还扩展了支持的编程语言和框架范围,增强了工具的通用性。此外,该技术能够缩短发现到修复漏洞的周期,降低潜在的安全风险,同时,通过生成更精确的数据和采用智能化的测试策略,提高模糊测试的有效性,以发现更深层次的漏洞。
1.一种基于预训练大模型的漏洞代码修复方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于预训练大模型的漏洞代码修复方法,其特征在于,对待测软件进行模糊测试,得到异常代码,具体包括以下步骤:
3.根据权利要求2所述的基于预训练大模型的漏洞代码修复方法,其特征在于:
4.根据权利要求3所述的基于预训练大模型的漏洞代码修复方法,其特征在于:
5.根据权利要求4所述的基于预训练大模型的漏洞代码修复方法,其特征在于,所述大语言模型的预训练方法为:
6.根据权利要求5所述的基于预训练大模型的漏洞代码修复方法,其特征在于,基于关注代码部分,对训练后大语言模型进行模型微调,得到预训练完成的大语言模型,具体包括以下步骤:
7.根据权利要求6所述的基于预训练大模型的漏洞代码修复方法,其特征在于,根据修复建议对异常代码进行修复,具体包括以下步骤:
8.根据权利要求7所述的基于预训练大模型的漏洞代码修复方法,其特征在于,根据修复建议对异常代码进行修复,具体包括以下步骤:
9.根据权利要求8所述的基于预训练大模型的漏洞代码修复方法,其特征在于,还包括以下步骤:
10.一种基于预训练大模型的漏洞代码修复系统,用于实现如权利要求1-9任一所述的基于预训练大模型的漏洞代码修复方法,其特征在于,包括:
