本研究的核心作者包括*University of California, Riverside*的 Zheng Zhang*、 Haonan Li、 Xingyu Li 和 Zhiyun Qian*,以及†Indiana University Bloomington 的 Hang Zhang†。这项研究成果以论文《llmbisect: breaking barriers in bug bisection with a comparative analysis pipeline》的形式,发表于 NDSS Symposium 2026(网络与分布式系统安全研讨会 2026)。会议将于2026年2月23日至27日在美国加利福尼亚州圣迭戈举行。
科学领域与背景: 本研究属于软件工程与软件安全领域,具体聚焦于软件缺陷追溯(Bug Bisection) 这一核心任务。软件缺陷追溯的目标是确定一个漏洞所影响的软件版本范围,其关键在于定位引入该漏洞的代码提交,即缺陷引入提交(Bug-Inducing Commit, BIC)。准确识别BIC对于下游系统(如不同的Linux发行版)及时打上安全补丁、缓解“N天漏洞”(N-day Vulnerability)威胁至关重要。
现有方法的局限: 尽管已有多种自动化的缺陷追溯方法,但它们都存在显著瓶颈,导致准确率不高。论文将现有方法归纳为三类:1) 基于概念验证(Proof-of-Concept, POC)的方法:依赖漏洞触发脚本,但POC通常难以获取,且受版本差异影响大;2) 基于漏洞报告的方法:需要详细的错误报告,且基于简单启发式(如“BIC应该修改失败发生的代码”),假设常不成立;3) 基于补丁(Patch-based)的方法:这是最广泛应用的方法,但现有技术严重依赖预设的、硬编码的启发式规则,存在三大根本性障碍: 1. 代码交集假设:假设BIC和补丁提交修改相同的函数。但现实情况中,它们可能修改完全不同的函数或文件。 2. 信息利用不全:仅分析代码差异(diff),而忽略了通常包含丰富漏洞信息的提交信息(Commit Message)。 3. 缺乏逻辑推理:使用简单启发式(如“将初始化了补丁中删除行的提交视为BIC”),而非基于对漏洞根本原因的逻辑分析。
研究目标: 针对上述局限,本研究提出了三个核心目标:i) 支持所有类型的补丁和漏洞;ii) 充分利用补丁的全部信息,包括代码变更和提交信息;iii) 超越简单的硬编码启发式,基于对漏洞逻辑的分析做出准确判断。为此,作者提出利用大语言模型(Large Language Model, LLM) 来打破现有方法的壁垒。LLM能够同时理解代码和自然语言,并且最新的模型在代码推理方面展现出强大能力。
本研究提出并实现了一个名为 LLMBisect 的多阶段、LLM驱动的缺陷追溯管道。其整体工作流程分为三个核心阶段,旨在系统性地解决直接应用LLM面临的挑战(高假阳性、自一致性问题和处理大规模代码库的高成本)。
研究主体: 从Linux内核中随机选取200个CVE漏洞(2023年和2024年各100个)作为评估对象。这些CVE的修复提交均带有“Fixes”标签,指向内核开发者认定的BIC,以此作为真实基准(Ground Truth)并进行人工验证。
研究流程详述:
阶段一:候选提交生成(Candidate Commit Generation) 目标是从提交历史中生成所有可能的BIC候选列表。为了避免单一方法的局限性,LLMBisect采用了三种互补的生成器,并行产生三组候选列表。 1. 基于函数的生成器(Function-based Generator):这是现有方法的扩展。收集所有修改了补丁所涉及函数的历史提交。这是一个候选集超集,但也可能因BIC未修改相同函数而产生漏报。 2. 基于关键行的生成器(Critical-line-based Generator):为了更精确,该方法首先利用LLM从补丁提交中识别出与漏洞逻辑真正相关的关键代码行(Critical Lines)。然后,只将修改了这些关键行的历史提交纳入候选。这大大减少了候选数量(平均减少81%),并能识别超出补丁函数范围的修改(如全局变量定义)。针对不同类型的补丁(仅有新增行、仅有删除行、行重排序),论文设计了专门的LLM提示策略来指导关键行识别。 3. 基于提交信息的生成器(Commit-message-based Generator):为应对BIC与补丁修改无代码交集的情况,该方法从补丁的提交信息中提取有价值线索。通过正则表达式匹配提取函数/结构体/变量名、甚至直接引用的提交哈希。目标是找到那些虽然代码修改不同,但在逻辑上与漏洞描述相关(如调用了补丁函数)的提交。为避免冗余,它排除了已被前两个生成器覆盖的修改。
阶段二:BIC过滤(BIC Filtering) 此阶段的目标是从第一阶段生成的每个候选列表中,筛选出一个最可能是BIC的提交,最终产生最多三个最终候选。该过程分为两个子阶段,旨在克服LLM的高假阳性问题。 1. 预过滤(Pre-filtering):针对候选列表中的每一个提交,LLM被询问(结合原始补丁提交)该提交是否可能是一个BIC。这会产生一组被LLM标记为“潜在BIC”的提交。 2. 后过滤(Post-filtering):LLM被要求对所有在预过滤阶段选出的“潜在BIC”进行比较性评估,从而从每个列表中选出一个“最可能的BIC”。这种设计利用了LLM在比较性推理(Comparative Reasoning) 方面的优势,相比简单的“反向遍历,首个识别即停止”的基线方法,显著提升了准确性。
阶段三:结果确定(Result Finalization) 经过阶段二,最多有三个来自不同生成器的BIC候选。此阶段需要做出最终决定。 1. 最终比较选择:将这三个最终候选再次提交给LLM进行一轮比较性评估,选出唯一的最终BIC作为LLMBisect的输出。 2. 多数投票机制(Majority Voting):为了缓解LLM的自一致性问题,在上述最终比较选择步骤中,会进行多次(默认为7次)LLM查询,并采用“多数投票”机制选择出现频率最高的答案作为最终决策。
关键技术细节: * 实现:原型系统使用Python实现,约5331行代码。 * LLM选择:主要使用OpenAI o1模型,因其在代码推理方面的卓越能力。同时评估了GPT-4o和Llama 3模型以进行对比。 * 复杂处理:实现了处理函数/文件重命名、补丁类型自动分类等功能的脚本,确保了候选生成的鲁棒性。
整体准确率(RQ1): 在200个Linux内核CVE漏洞的测试集上,LLMBisect达到了91%的BIC识别准确率,显著优于现有最优方法。测试显示,对于2023年和2024年的CVE,准确率分别为92%和90%,证明了该方法不依赖于LLM对特定CVE的预训练知识,具有良好的泛化性。
与现有最优工具的比较(RQ2): * 与基于补丁的工具比较:LLMBisect(91%)远优于SZZ算法家族的最新工具VSZZ(51%)和基于脆弱代码克隆检测的最新工具V0Finder(33%)。 * 与基于POC的工具比较:在与SymBisect(一种基于符号执行的先进方法)自己的数据集(32个Syzbot漏洞)对比中,LLMBisect取得了90.6%的准确率,同样高于SymBisect的75%。 * 漏洞版本检测准确率:除了识别BIC本身,研究还评估了由识别出的BIC推导出的受影响版本范围的准确性。LLMBisect的F1分数达到96.5%,远超VSZZ(82.6%)和V0Finder(53.2%),表明其错误更少且对下游开发的实际影响更小。
消融研究与设计点分析(RQ3): 研究通过逐步添加设计点,验证了每个组件的有效性: 1. 基线方法:仅使用基于函数的生成器和反向遍历的简单LLM应用,准确率仅为30.5%。 2. 引入BIC过滤(比较评估):准确率跃升至77.5%,证明了比较性推理的关键作用。 3. 使用关键行生成器替代函数生成器:准确率提升至81.5%,证明了细粒度候选选择的有效性。 4. 结合多种生成器与结果确定器:通过结合函数生成器(C1)和关键行生成器(C2),并让最终确定器从中选择,准确率达到84%。 5. 加入提交信息生成器(C3):准确率进一步提升至87%。Sankey图分析显示,有15个真实的BIC仅被C3生成器捕获,这直接带来了7.5%的准确率提升,验证了利用提交信息弥补代码交集鸿沟的必要性。 6. 加入多数投票:最终准确率达到91%,缓解了LLM的非确定性。 7. 提交信息的作用:实验表明,若移除所有提交信息,LLMBisect的准确率将从91%骤降至71%,凸显了整合自然语言和代码信息的重要性。
成本分析(RQ4): 使用OpenAI o1模型,每个案例的中位数令牌消耗约为219,523个(约3.3美元),平均值约为330,426个(约4.9美元)。虽然有一定成本,但考虑到人工分析的开销以及N天漏洞的潜在风险,该成本是可以接受的。基于函数的生成器是令牌消耗的主要部分。
案例研究: 论文通过两个动机示例的详细追踪,展示了LLMBisect的工作过程。特别是在第一个竞态条件漏洞示例中,真正的BIC与补丁修改了完全不同的函数,但BIC引入的函数名出现在补丁的提交信息中。基于函数的生成器(C1)和基于关键行的生成器(C2)均无法捕获该BIC,而基于提交信息的生成器(C3)成功将其纳入候选。随后,LLM在比较评估阶段从众多候选(包括一些因大规模重构而被误报的提交)中,正确识别出了该BIC,并给出了符合漏洞根本原因的解释。
不同LLM模型表现: 实验显示,OpenAI o1(91%)在准确率上显著优于GPT-4o(65.5%)和Llama 3(71%),尤其是在需要进行多代码片段和复杂推理的后过滤及结果确定阶段,凸显了高级推理模型在此任务中的优势。
本研究成功提出并验证了LLMBisect,这是一个通过创新的多阶段管道设计,有效利用大语言模型进行软件缺陷追溯的新框架。研究结论表明: 1. LLM具备突破传统缺陷追溯方法瓶颈的潜力:通过理解代码和提交信息,LLM能够处理BIC与补丁无代码交集、补丁无删除行等传统启发式方法失效的复杂情况。 2. 合理的管道设计至关重要:直接、简单地应用LLM(基线方法30.5%准确率)效果不佳。LLMBisect通过“候选生成 → 过滤 → 确定”的三阶段流程,结合三种互补的生成器、比较性评估和多数投票,系统地将LLM的优势最大化,同时规避其缺点,最终实现了91%的高准确率。 3. 提交信息是宝贵资源:本工作首次系统性地将提交信息作为漏洞上下文的核心部分引入缺陷追溯流程,并被证明是提升准确率的关键因素。
科学价值与应用价值: * 科学价值:为软件维护和安全领域提供了一种全新的、基于深度学习(LLM)和混合信息(代码+文本)的缺陷追溯方法论。它挑战了传统基于硬编码启发式的思路,展示了语义理解和逻辑推理在程序分析中的强大能力。 * 应用价值:能够显著提高Linux等大型开源项目中漏洞影响范围分析的自动化水平和准确度,帮助下游维护者更快、更准地确定需要打补丁的版本,从而缩短N天漏洞的暴露窗口,增强整个软件供应链的安全性。作者已开源其实现以促进后续研究。
论文还坦诚地讨论了LLMBisect的局限性及未来方向: 1. 候选生成不完整:当BIC所在文件完全未被补丁或其提交信息提及时,当前方法无法捕获(占10个失败案例中的8个)。未来可探索结合程序切片、检索增强生成(RAG)等技术扩展代码上下文。 2. 对提交信息质量的依赖:在提交信息不规范的项目中,性能可能下降。可通过更优的提示工程或结合邮件列表等外部信息源(RAG)来缓解。 3. 非确定性与成本:虽然通过多数投票缓解,但LLM固有的非确定性仍存在。可探索利用模型的置信度分数或进行微调来进一步改进。