随着软件的多样性和复杂性的不断增加,软件漏洞的数量也呈现出爆炸式的增长,同时,软件漏洞的修复也变得越来越困难。漏洞自动修复方法近来得到了研究者的广泛关注,而大型语言模型(Large Language Model,LLM)的出现为漏洞自动修复开...
详细信息
随着软件的多样性和复杂性的不断增加,软件漏洞的数量也呈现出爆炸式的增长,同时,软件漏洞的修复也变得越来越困难。漏洞自动修复方法近来得到了研究者的广泛关注,而大型语言模型(Large Language Model,LLM)的出现为漏洞自动修复开辟了新的道路。目前的代码漏洞修复LLM的研究仅仅将漏洞修复归类为通用的文本生成任务,得到修复程序,并定义漏洞自动修复工具生成的修复程序当且仅当其和标准答案完全一致的情况下为有效修复程序。然而,同一个漏洞程序可能对应着多个不同的修复程序,当前判定方法过于苛刻,且代码生成任务不同于一般的文本生成任务,在生成代码时不仅要考虑代码的功能正确性,还需要考虑代码的安全性因素。由于LLM在预训练过程中使用的代码语料没有安全标签,在生成修复程序时是使用Top-K排序算法基于概率来进行生成,也没有考虑代码的安全性因素,所以,即使生成的修复程序修复了当前漏洞,也有可能会引入新的漏洞。针对这些问题,本文提出了一种基于大模型的软件漏洞自动修复方法,包括提示工程、模型微调技术和关注生成代码安全性的重排序算法SecRerank算法,从模型的输入、模型本身以及模型的输出等三个阶段来提升模型的漏洞修复性能。实验结果表明,本文提出的方法的漏洞修复效果优于基线方法。
暂无评论