KNighter: Transforming Static Analysis with LLM-Synthesized Checkers

📄 arXiv: 2503.09002v3 📥 PDF

作者: Chenyuan Yang, Zijie Zhao, Zichen Xie, Haoyu Li, Lingming Zhang

分类: cs.SE, cs.AI, cs.CR, cs.OS

发布日期: 2025-03-12 (更新: 2025-09-03)

备注: SOSP 2025

DOI: 10.1145/3731569.3764827


💡 一句话要点

KNighter:利用LLM合成静态分析器,革新静态分析技术

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 静态分析 大型语言模型 漏洞检测 程序合成 Linux内核

📋 核心要点

  1. 现有静态分析器设计复杂且耗时,难以覆盖所有潜在错误模式,直接应用LLM进行静态分析面临计算和上下文限制。
  2. KNighter利用LLM从历史漏洞信息中自动合成专用静态分析器,避免直接分析大型系统,提升效率和准确性。
  3. 实验表明,KNighter能生成高精度检查器,发现大量现有分析器忽略的Linux内核漏洞,并已修复多个高危漏洞。

📝 摘要(中文)

静态分析是操作系统内核等关键系统中检测漏洞的强大技术。然而,设计和实现静态分析器具有挑战性、耗时,并且通常仅限于预定义的错误模式。虽然大型语言模型(LLM)在静态分析方面显示出潜力,但由于计算约束和上下文限制,直接应用它们扫描大型系统仍然不切实际。我们提出了KNighter,这是第一个通过从历史错误模式中自动合成静态分析器来解锁可扩展的基于LLM的静态分析的方法。我们的关键见解是利用LLM生成由历史补丁知识指导的专用静态分析器,而不是使用LLM直接分析大型系统。KNighter通过一个多阶段合成流程来实现这一愿景,该流程针对原始补丁验证检查器的正确性,并采用自动细化流程来迭代地减少误报。我们在Linux内核上的评估表明,KNighter生成的高精度检查器能够检测到现有的人工编写的分析器忽略的各种错误模式。到目前为止,KNighter合成的检查器已经在Linux内核中发现了92个新的、关键的、长期潜伏的错误(平均4.3年);77个已确认,57个已修复,30个已被分配CVE编号。这项工作通过检查器合成,为实际系统中可扩展、可靠和可追溯的基于LLM的静态分析建立了一个全新的范例。

🔬 方法详解

问题定义:论文旨在解决静态分析器设计困难、耗时且覆盖范围有限的问题。现有静态分析器通常由人工编写,难以应对不断涌现的新型漏洞模式。直接使用LLM分析大型系统,例如操作系统内核,面临着巨大的计算开销和上下文理解的挑战,导致效率低下和准确率不足。

核心思路:KNighter的核心思路是利用LLM从历史漏洞修复信息中学习,自动合成专门用于检测特定类型漏洞的静态分析器。这种方法避免了直接使用LLM分析整个系统,而是将LLM的能力集中在生成高效、精确的检查器上。通过学习历史补丁,LLM可以理解漏洞的特征和修复方法,从而生成能够有效检测类似漏洞的分析器。

技术框架:KNighter采用多阶段合成流程:1) 数据准备:收集历史漏洞信息,包括漏洞描述、补丁代码等。2) 检查器生成:使用LLM根据历史漏洞信息生成静态分析器代码。3) 正确性验证:针对原始补丁验证生成的检查器的正确性,确保其能够检测到已知的漏洞。4) 误报减少:采用自动细化流程,迭代地减少检查器产生的误报,提高分析精度。

关键创新:KNighter最重要的创新在于提出了利用LLM自动合成静态分析器的概念,将LLM从直接分析代码的角色转变为生成分析工具的角色。这种方法显著降低了计算成本,提高了分析效率和准确性。与传统的人工编写分析器相比,KNighter能够快速适应新的漏洞模式,并生成专门用于检测这些漏洞的分析器。

关键设计:KNighter的关键设计包括:1) LLM选择:选择合适的LLM,并进行针对性的微调,以提高其生成静态分析器代码的能力。2) 提示工程:设计有效的提示,引导LLM生成高质量的检查器代码。3) 验证策略:设计有效的验证策略,确保生成的检查器能够正确检测到已知的漏洞,并减少误报。4) 细化算法:设计自动细化算法,迭代地优化检查器代码,提高分析精度。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

KNighter在Linux内核中发现了92个新的、关键的、长期潜伏的漏洞(平均潜伏时间4.3年),其中77个已确认,57个已修复,30个已被分配CVE编号。这些结果表明,KNighter生成的检查器能够有效地检测到现有的人工编写的分析器忽略的漏洞,显著提升了Linux内核的安全性。

🎯 应用场景

KNighter可应用于各种软件系统的漏洞检测,尤其适用于操作系统内核、嵌入式系统等对安全性要求极高的领域。该技术能够显著降低静态分析的成本,提高漏洞检测的效率和准确性,有助于提升软件系统的整体安全性。未来,KNighter有望成为软件开发流程中的重要组成部分,实现自动化、智能化的漏洞检测。

📄 摘要(原文)

Static analysis is a powerful technique for bug detection in critical systems like operating system kernels. However, designing and implementing static analyzers is challenging, time-consuming, and typically limited to predefined bug patterns. While large language models (LLMs) have shown promise for static analysis, directly applying them to scan large systems remains impractical due to computational constraints and contextual limitations. We present KNighter, the first approach that unlocks scalable LLM-based static analysis by automatically synthesizing static analyzers from historical bug patterns. Rather than using LLMs to directly analyze massive systems, our key insight is leveraging LLMs to generate specialized static analyzers guided by historical patch knowledge. KNighter implements this vision through a multi-stage synthesis pipeline that validates checker correctness against original patches and employs an automated refinement process to iteratively reduce false positives. Our evaluation on the Linux kernel demonstrates that KNighter generates high-precision checkers capable of detecting diverse bug patterns overlooked by existing human-written analyzers. To date, KNighter-synthesized checkers have discovered 92 new, critical, long-latent bugs (average 4.3 years) in the Linux kernel; 77 are confirmed, 57 fixed, and 30 have been assigned CVE numbers. This work establishes an entirely new paradigm for scalable, reliable, and traceable LLM-based static analysis for real-world systems via checker synthesis.