KernelGPT: Enhanced Kernel Fuzzing via Large Language Models
作者: Chenyuan Yang, Zijie Zhao, Lingming Zhang
分类: cs.CR, cs.AI, cs.SE
发布日期: 2023-12-31 (更新: 2025-03-13)
备注: ASPLOS 2025
💡 一句话要点
KernelGPT:利用大语言模型增强内核模糊测试,自动合成系统调用规范。
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 内核模糊测试 系统调用规范 大语言模型 漏洞挖掘 自动化测试 Linux内核 软件安全
📋 核心要点
- 现有内核模糊测试依赖手动编写系统调用规范,覆盖率不足,成为发现内核漏洞的瓶颈。
- KernelGPT利用LLM预训练的知识,自动推断、调试和修复系统调用规范,无需人工干预。
- 实验表明,KernelGPT生成更多有效规范,实现更高覆盖率,并在Linux内核中发现24个新漏洞。
📝 摘要(中文)
操作系统内核中的错误会影响数十亿设备和用户。因此,大量研究集中于内核模糊测试,即自动生成系统调用(syscall)序列以检测潜在的内核错误或漏洞。内核模糊测试旨在生成有效的系统调用序列,并由定义系统调用语法和语义的系统调用规范指导。虽然已经有工作尝试自动化系统调用规范的生成,但这仍然很大程度上是手动工作,并且大量重要的系统调用仍未被覆盖。本文提出了 KernelGPT,这是第一个通过大型语言模型(LLM)自动合成系统调用规范以增强内核模糊测试的方法。我们的关键见解是,LLM在预训练期间已经学习了大量的内核代码、文档和用例,因此可以自动提取生成有效系统调用所需的信息。更具体地说,KernelGPT利用迭代方法自动推断规范,并根据验证反馈进一步调试和修复它们。结果表明,KernelGPT可以生成比最先进技术更多的新规范和有效规范,并实现更高的覆盖率。到目前为止,通过使用新生成的规范,KernelGPT已经在Linux内核中检测到24个新的独特错误,其中12个已修复,11个已分配CVE编号。此外,KernelGPT生成的许多规范已被合并到内核模糊器Syzkaller中,这是应其开发团队的要求。
🔬 方法详解
问题定义:论文旨在解决内核模糊测试中系统调用规范人工编写效率低、覆盖率不足的问题。现有的内核模糊测试工具依赖于人工编写的系统调用规范来指导系统调用序列的生成,这既耗时又容易出错,导致许多重要的系统调用未被覆盖,从而限制了模糊测试的有效性。
核心思路:论文的核心思路是利用大型语言模型(LLM)在大量内核代码、文档和用例上预训练的优势,让LLM自动学习和推断系统调用的语法和语义,从而自动生成系统调用规范。这种方法避免了人工编写的繁琐和不确定性,提高了规范生成的效率和覆盖率。
技术框架:KernelGPT采用迭代的方法来自动推断、调试和修复系统调用规范。整体流程包括以下几个阶段:1) LLM根据给定的系统调用名称生成初始规范;2) 使用生成的规范进行内核模糊测试,并收集验证反馈;3) 根据验证反馈,LLM对规范进行调试和修复;4) 重复步骤2和3,直到规范达到预定的质量标准。
关键创新:KernelGPT最重要的技术创新点在于利用LLM自动生成系统调用规范。与现有方法相比,KernelGPT无需人工干预,可以自动学习和推断系统调用的语法和语义,从而显著提高了规范生成的效率和覆盖率。此外,KernelGPT还采用了迭代的调试和修复机制,可以根据验证反馈不断优化规范的质量。
关键设计:KernelGPT的关键设计包括:1) 使用合适的prompt来引导LLM生成规范;2) 设计有效的验证反馈机制,以便LLM能够准确地判断规范的正确性;3) 采用合适的调试和修复策略,以便LLM能够有效地改进规范。具体的LLM选择和prompt设计等细节在论文中可能有所描述,但摘要中未明确提及。
📊 实验亮点
KernelGPT在Linux内核中发现了24个新的独特错误,其中12个已修复,11个已分配CVE编号。此外,KernelGPT生成的许多规范已被合并到内核模糊器Syzkaller中,这表明KernelGPT生成的规范具有很高的质量和实用价值。实验结果表明,KernelGPT能够显著提高内核模糊测试的效率和覆盖率。
🎯 应用场景
KernelGPT可应用于操作系统内核安全测试、漏洞挖掘和安全加固等领域。通过自动生成高质量的系统调用规范,可以显著提高内核模糊测试的效率和覆盖率,从而发现更多的内核漏洞,提升操作系统的安全性。该研究成果对于提升整个软件行业的安全性具有重要意义。
📄 摘要(原文)
Bugs in operating system kernels can affect billions of devices and users all over the world. As a result, a large body of research has been focused on kernel fuzzing, i.e., automatically generating syscall (system call) sequences to detect potential kernel bugs or vulnerabilities. Kernel fuzzing aims to generate valid syscall sequences guided by syscall specifications that define both the syntax and semantics of syscalls. While there has been existing work trying to automate syscall specification generation, this remains largely manual work, and a large number of important syscalls are still uncovered. In this paper, we propose KernelGPT, the first approach to automatically synthesizing syscall specifications via Large Language Models (LLMs) for enhanced kernel fuzzing. Our key insight is that LLMs have seen massive kernel code, documentation, and use cases during pre-training, and thus can automatically distill the necessary information for making valid syscalls. More specifically, KernelGPT leverages an iterative approach to automatically infer the specifications, and further debug and repair them based on the validation feedback. Our results demonstrate that KernelGPT can generate more new and valid specifications and achieve higher coverage than state-of-the-art techniques. So far, by using newly generated specifications, KernelGPT has already detected 24 new unique bugs in Linux kernel, with 12 fixed and 11 assigned with CVE numbers. Moreover, a number of specifications generated by KernelGPT have already been merged into the kernel fuzzer Syzkaller, following the request from its development team.