分享自:

Appatch:基于大语言模型的自适应提示自动化现实世界软件漏洞修复

期刊:USENIX Security Symposium

本文档属于类型a:报告一项独立原创研究。以下是为中文读者撰写的关于Appatch研究的学术报告。


基于大语言模型的自动化自适应提示漏洞修补技术研究:Appatch系统介绍

一、 研究作者、机构及发表信息

本研究由来自多所美国大学的科研团队共同完成。主要作者包括:Yu NongHaoran YangLong ChengHongxin Hu 以及Haipeng Cai。其中,Yu Nong、Hongxin Hu 和 Haipeng Cai 来自布法罗大学,Haoran Yang 来自华盛顿州立大学,Long Cheng 来自克莱姆森大学。Haipeng Cai 作为通讯作者。

该研究成果以题为 “Appatch: Automated Adaptive Prompting Large Language Models for Real-World Software Vulnerability Patching” 的论文形式发表,并被收录于计算机安全领域的顶级会议之一——第34届 USENIX Security Symposium 的会议论文集。该会议于2025年8月13日至15日在美国西雅图举行。

二、 研究背景与目标

1. 学术领域与研究动机 本研究隶属于软件安全与软件工程交叉领域,核心是探讨如何利用人工智能,特别是大型语言模型(Large Language Models, LLMs),自动化地生成针对真实世界软件漏洞的有效修补方案。

软件漏洞是网络空间持续且重大的安全威胁。随着网络攻击规模和复杂度的快速增长,及时、有效的漏洞修补变得至关重要。然而,人工修补成本高昂且难以跟上新漏洞的涌现速度,因此亟需自动化的解决方案。现有自动化修补方法主要分为两类:基于代码分析的方法和基于深度学习的方法。前者通常依赖于漏洞利用信息或可编译的代码,通用性受限;后者需要大量高质量的标注数据进行模型训练,且泛化能力不足,在面对未见过的真实世界漏洞时效果不佳。

最近,大型语言模型在代码相关任务中展现出巨大潜力,并开始被用于漏洞修补。然而,现有基于LLM的方法存在显著缺陷:例如,标准的零样本直接提示法,由于缺乏对代码语义的必要指导,生成的补丁往往无效;基于零样本代码补全的方法,则将复杂的漏洞修复问题简单化为代码填空,忽略了代码语义推理的关键性。如何自动化地引导LLM理解漏洞的深层逻辑并生成正确有效的补丁,面临着几大挑战:如何自动化构建提示词、如何为任意程序自动选取最佳示例、如何处理长代码上下文带来的模型容量限制,以及如何应对LLM幻觉生成和结果不稳定性的问题。

2. 研究目标 基于上述挑战,本研究旨在设计并实现一个名为 Appatch 的新型自动化漏洞修补框架。其核心目标是:在不进行模型训练或微调、不依赖测试输入或漏洞利用证据的前提下,通过一种创新的自动化自适应提示方法,引导LLM为真实世界漏洞(包括零日漏洞)生成有效且正确的补丁。 研究希望通过Appatch,系统性地探索并展示如何帮助LLM完成这项极具挑战性的任务,并分析当前方法仍然存在的局限性。

三、 研究流程与方法详述

Appatch 的设计与评估工作流程可分为两个主要阶段,并包含若干关键创新模块。

阶段一:范例挖掘 本阶段的目标是构建一个高质量的漏洞修复范例数据库,用于在阶段二引导LLM。其输入是已知的漏洞样本集,包括源码、漏洞位置和对应的真实补丁。

  • 步骤1.1:语义感知的代码范围界定 研究人员首先定义了“漏洞语义”这一核心概念:即程序中导致漏洞的所有相关代码方面,包括漏洞触发点以及通过数据流和控制流影响这些点的外部输入相关语句。其形式化定义为:从漏洞位置到外部输入的所有静态向后切片的并集。 为了实现这一点,Appatch 实现了一个名为“语义感知的代码范围界定”的模块。对于每个输入的漏洞样本,该模块首先使用静态分析工具 Joern 构建程序的系统依赖图(System Dependence Graph, SDG),该图综合了程序内和跨函数的数据依赖与控制依赖。然后,模块通过遍历SDG,计算从每个漏洞位置到每个已识别的外部输入(如程序入口点、malloc等函数调用)的跨过程向后切片,并取这些切片的并集。最终,这个并集切片——即“漏洞语义”的代码表示——被提取出来,极大地缩小了后续分析的代码范围,使LLM能够专注于漏洞的核心逻辑。

  • 步骤1.2:范例生成 在获得了精简的漏洞语义切片后,Appatch 利用LLM自动为该样本生成一个完整的范例。该范例不仅包含原始的漏洞语义切片和漏洞信息,更重要的是,它通过精心设计的提示词模板,引导LLM生成三个推理步骤:

    1. 漏洞语义推理(根本原因分析): 基于漏洞语义切片,从外部输入开始,逐步推理漏洞行为,直至确定漏洞根源。
    2. 修复策略识别: 分析并总结修复该漏洞的策略。
    3. 补丁生成: 给出最终的地面真实补丁。 这个提示过程的关键在于,由于LLM已经看到了该样本的“正确答案”(真实补丁),它更有可能生成准确的推理步骤。实验证实,通过GPT-4生成的范例中,92.98%的推理是正确的。最终,所有这些自动化生成的范例构成了一个供后续使用的范例池。

阶段二:LLM引导的因果修补 本阶段是针对待修补的未知漏洞程序进行实际修补的过程。输入包括:待修补的源码、已知的漏洞位置和漏洞类型。

  • 步骤2.1:语义感知的代码范围界定 与阶段一的步骤1.1完全相同,Appatch 对待修补程序执行相同的分析,计算其“漏洞语义”切片,作为后续所有分析和提示的基础代码上下文。

  • 步骤2.2:动态自适应提示 这是Appatch的核心创新环节,旨在为当前待修补漏洞自动选择最匹配的范例,并引导LLM生成候选补丁。

    • 根本原因生成: Appatch 首先引导LLM分析待修补程序的漏洞语义切片,生成自然语言描述的根本原因分析。这里采用了“渐进式提示”策略:开始时只提供包含漏洞的函数的切片,如果LLM因缺乏相关函数定义而感到不确定,它会以特定格式请求更多上下文函数。系统则动态地将这些函数的漏洞语义切片加入提示中,逐步扩大分析范围。这种方法有效解决了跨过程分析和LLM上下文长度限制的矛盾。
    • 范例选择: 生成了待修补样本的根本原因分析后,Appatch 需要从阶段一建立的范例池中选择最相似的范例。它设计了一个自动化选择过程:将待修补样本的根因分析与范例池中每个范例的根因分析逐一配对,使用LLM来判断这两份根因分析是否相似(只需回答“是”或“否”)。所有被判断为相似的范例都会被选中,最多选取8个。这种基于语义相似性的动态选择,确保了后续提示中使用的示例与当前问题高度相关,从而提供了最有效的指导。
    • 补丁生成: 将选中的范例(包含其根因分析、修复策略和真实补丁)与待修补样本的漏洞语义切片一起,以特定的顺序组装成最终提示,发送给LLM。该提示要求LLM遵循范例中展示的“思维链”推理过程,为待修补样本生成最多五个候选补丁。
  • 步骤2.3:多维度补丁验证 由于LLM存在幻觉问题,生成的候选补丁可能不正确。Appatch 引入了多模型集成验证机制来过滤错误补丁。具体而言,它使用一个由多个顶级LLM(如GPT-4、Gemini、Claude、Llama)组成的“委员会”,对每个候选补丁进行验证。验证提示要求LLM判断该补丁是否能在修复漏洞的同时保持程序原有功能。只要该“委员会”中至少有一个LLM认为补丁有效,该补丁就会被保留。这种“或”逻辑的设计优先考虑召回率,目的是为开发者提供尽可能多的有效补丁选项,而不是追求极致的精确率而遗漏可能的正确答案。

四、 主要实验结果与发现

研究者设计并回答了一系列研究问题,进行了全面的评估。评估使用了四种最新的LLM作为基模型,并构建了两个测试数据集:一个包含97个2024年4月后报告的零日漏洞数据集(覆盖18个开源项目,其中21个为跨过程漏洞),另一个是包含20个现有漏洞的ExtractFix数据集。

1. 有效性(RQ1) Appatch 在所有基模型和两个数据集上都取得了显著优于现有提示方法的效果。在零日数据集上,最好的模型(Claude-3.5)取得了36.46% 的F1分数(衡量整体效果的指标)和49.48% 的召回率(至少生成一个有效补丁的样本比例)。在ExtractFix数据集上,最好的模型(Claude-3.5)取得了73.86% 的F1分数和85% 的召回率。结果证明了Appatch在修补真实世界漏洞,特别是零日漏洞方面的实际潜力。

2. 各组件贡献分析(RQ2) 研究者通过消融实验验证了Appatch每个关键设计的必要性: * 多维度补丁验证: 移除后,所有模型的精确度均下降,导致F1分数降低,证实了其过滤无效补丁的作用。 * 语义感知的范围界定: 如果不进行代码切片,而直接将整个源码输入LLM,所有模型的表现均大幅下降。这表明无关代码会分散LLM的注意力,而聚焦于“漏洞语义”对有效分析至关重要。数据也显示,在有切片的情况下,LLM进行根本原因分析的准确率更高。 * 动态自适应提示: 将基于根因分析的范例选择改为随机选择(但保持CWE类型相同)后,性能显著下降。这证明了提供与当前漏洞语义最匹配的范例对于引导LLM采用正确修复策略的重要性。 * 自动化生成的范例 vs. 人工编写的范例: 使用自动化LLM生成的范例进行提示,其效果优于研究者手动编写的范例,显示了自动化范例挖掘方法的优越性。 * 漏洞语义推理 vs. 直接推理: 使用引导LLM从外部输入开始逐步推理的“漏洞语义推理”提示,其效果远好于简单地要求LLM“分析根本原因”的直接推理提示。 * 与基线提示方法对比: Appatch 大幅优于标准的直接提示法和零样本代码补全法,后两者即使在最强LLM上表现也很差,凸显了结构化、引导式推理的必要性。 * 对跨过程漏洞的有效性: 在专门针对21个跨过程漏洞的子集测试中,Appatch 的性能虽有轻微下降但仍保持较好水平,而基线方法(标准提示和零样本补全)则出现了急剧的性能恶化。这充分证明了Appatch通过“渐进式提示”实现的跨过程分析能力具有重要价值。

3. 与现有技术的比较(RQ3) 研究者将Appatch与四种最先进的非LLM漏洞修复工具进行了对比(在ExtractFix数据集上比较召回率)。Appatch取得了90% 的最佳召回率,优于基于测试用例的ExtractFix(85%),并大幅领先基于深度学习的VulRepair(35%)、基于模式的GetAFix(25%)和基于归纳推理的VulnFix(45%)。对于零日数据集,由于许多工具需要可编译代码,仅与部分工具比较,Appatch(49.48%)同样远超VulRepair(17.53%)和GetAFix(6.19%)。这证明了Appatch在不依赖额外漏洞利用信息或模型重训练的情况下,具有卓越的有效性和通用性。

4. 效率(RQ4) Appatch 表现出合理的效率。平均生成一个补丁的时间在37.148至50.209秒之间,每个补丁消耗的令牌数在5,684至6,802个之间。考虑到所解决的复杂性和生成补丁的价值,这个开销是可行的。

五、 结论与研究价值

本研究成功提出并实现了 Appatch,一个通过自动化自适应提示来利用LLM进行漏洞修补的创新框架。其核心贡献在于将漏洞语义推理自适应提示相结合,系统性地解决了引导LLM进行高质量漏洞修复所面临的关键挑战。

1. 科学价值: 本研究为基于LLM的代码理解和程序修复领域提供了重要的方法论贡献。它首次系统性地定义并利用了“漏洞语义”来聚焦LLM的注意力,并通过动态范例选择和渐进式上下文扩展,解决了长代码和跨过程分析的难题。研究还展示了如何通过自动化生成范例和集成多模型验证,构建一个完整、可工作的自动化系统,为后续相关研究提供了宝贵的蓝图和基准。

2. 应用价值: Appatch 展示了在实际网络安全防御中应用大型语言模型进行自动化漏洞修补的可行性和显著优势。它不需要昂贵的模型训练或微调,不依赖于难以获取的漏洞利用细节,即可对包括零日漏洞在内的真实世界漏洞生成有效补丁。这为软件开发者和安全团队提供了一种强有力的自动化辅助工具,有望显著缩短漏洞曝光到修复的窗口期,提升软件安全性。

六、 研究亮点

  1. 核心概念创新: 提出了“漏洞语义”的形式化定义,并基于此开发了“语义感知的代码范围界定”技术,这是引导LLM进行高效、准确漏洞分析的理论和实践基础。
  2. 方法流程创新: 设计了“动态自适应提示”工作流,集成了渐进式根本原因生成、基于语义的范例自动选择和多模型集成验证,形成了一个完整、自动化且高效的漏洞修补管道。
  3. 显著的性能提升: 在包含零日漏洞的真实数据集上,Appatch 实现了相比现有最佳LLM提示方法高达28.33%的F1分数提升和182.26%的召回率提升,并大幅超越了传统的非LLM修复技术。
  4. 对跨过程漏洞的有效处理: 通过创新的渐进式提示机制,成功将LLM应用于需要跨函数分析的复杂漏洞场景,突破了现有方法的局限。
  5. 实用性导向: 研究始终面向真实世界应用场景,采用无需训练/微调、无需额外漏洞证据的设定,并对失败案例进行了分析讨论,指出了未来改进方向,具有很高的工程参考价值。

七、 其他有价值内容

研究在讨论部分也坦诚地分析了Appatch的局限性。例如,LLM仍然可能在根因分析或补丁生成上犯错,特别是对于极其复杂或需要深刻领域知识的漏洞。静态分析工具(如Joern)的精度限制也可能影响“漏洞语义”切片的准确性。此外,补丁验证环节虽然有效,但依赖于其他LLM的判断,存在一定的循环依赖风险。这些分析为后续研究指明了潜在的改进方向。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com