KernelGPT:基于大语言模型增强内核模糊测试的学术报告
作者及机构
本研究的核心作者为美国伊利诺伊大学厄巴纳-香槟分校(University of Illinois at Urbana-Champaign)的Chenyuan Yang、Zijie Zhao和Lingming Zhang。研究成果发表于2025年ACM国际编程语言与操作系统架构支持会议(ASPLOS ‘25),论文标题为《KernelGPT: Enhanced Kernel Fuzzing via Large Language Models》。
学术背景
研究领域与动机
操作系统内核(OS kernel)是计算机系统的核心组件,其漏洞可能影响全球数十亿设备与用户。内核模糊测试(kernel fuzzing)是一种自动化生成系统调用(syscall)序列以检测内核漏洞的技术。然而,现有的模糊测试工具(如Syzkaller)依赖手动编写的系统调用规范(syscall specifications),其覆盖范围有限且维护成本高昂。
核心挑战
1. 规范生成依赖人工:现有工具需专家手动编写规范,难以覆盖复杂或冷门系统调用(如设备驱动和套接字)。
2. 静态分析局限性:基于规则的方法(如SyzDescribe)无法处理代码多样性,且生成的规范可读性差。
3. 动态方法覆盖不足:动态分析工具(如KSG)仅能测试已加载的内核模块,无法覆盖未激活的驱动。
研究目标
提出KernelGPT,首次利用大语言模型(LLM)自动化生成系统调用规范,提升内核模糊测试的覆盖率和有效性。
研究方法与流程
1. 规范生成(Specification Generation)
- 输入:内核代码库中的操作处理器(operation handlers,如ioctl和setsockopt的注册函数)。
- 三阶段迭代分析:
- 标识符推断(Identifier Deduction):通过LLM分析代码,推断设备名、命令值等关键标识符。若逻辑依赖其他函数(如lookup_ioctl),则递归提取并分析缺失代码。
- 类型恢复(Type Recovery):解析参数类型结构(如struct dm_ioctl),LLM能识别字段间的语义关系(如count字段表示devices数组长度),优于静态分析工具。
- 依赖分析(Dependency Analysis):确定系统调用间的依赖关系(如文件描述符传递)。
- 技术亮点:
- 迭代式多阶段提示(Iterative Multi-stage Prompting):通过多次LLM查询逐步补全缺失信息,避免单次长上下文限制。
- 代码提取器(Code Extractor):基于LLVM工具链自动提取内核中的函数与类型定义。
2. 规范验证与修复(Validation & Repair)
- 工具验证:使用Syzkaller内置的syz-extract和syz-generate检测语法错误(如未定义类型)。
- LLM辅助修复:将错误信息与相关代码反馈给LLM,生成修正后的规范。
实验设计
- 目标内核:Linux 6.7(配置为allyesconfig和syzbot)。
- 测试对象:666个驱动处理器和85个套接字处理器,覆盖未描述的模块(如cec和rds)。
- 基线对比:与Syzkaller(人工规范)和SyzDescribe(静态分析)比较覆盖率与漏洞检测能力。
主要结果
1. 规范生成能力
- 新增规范:KernelGPT为70个驱动和57个套接字生成532个新系统调用描述(占Syzkaller现有规范的13.6%),而SyzDescribe仅生成146个。
- 可读性:LLM生成的规范命名直观(如ioctl$dm_list_devices),被Syzkaller开发团队直接合并至官方仓库[51]。
2. 覆盖率提升
- 基本块覆盖:KernelGPT新增20,472个唯一基本块(unique basic blocks),较Syzkaller提升4,750块,较SyzDescribe提升8,039块。
- 驱动测试:在28个驱动中,KernelGPT在20个驱动上覆盖率领先(如kvm驱动覆盖提升42.5%)。
3. 漏洞检测
- 新漏洞发现:通过新规范检测到24个未知内核漏洞,其中12个已修复,11个获CVE编号(如CVE-2024-23848和CVE-2024-23851)。
- 典型案例:
- 设备映射器驱动:静态分析工具因忽略nodename字段而生成错误规范,KernelGPT正确推断设备名并发现内存分配漏洞。
- CEC驱动:检测到slab-use-after-free漏洞,因规范覆盖了未描述的cec_queue_msg_fh调用路径。
结论与价值
科学价值
1. 方法论创新:首次将LLM应用于内核模糊测试的规范生成,突破静态分析的规则局限性。
2. 自动化突破:通过迭代式LLM分析减少人工干预,适应内核代码的快速演进。
应用价值
1. 工业影响:Syzkaller团队已合并部分生成规范,证实其可直接用于生产环境。
2. 安全增强:新规范显著扩大测试范围,覆盖传统工具无法触达的代码路径。
亮点
- LLM的代码理解能力:利用预训练知识处理冷门代码模式(如命令值转换_ioc_nr(command))。
- 端到端自动化:从代码分析到规范修复全流程无需人工参与,成本仅34美元(约400万token查询费用)。
其他贡献
- 开源工具:实现代码已公开于GitHub(https://github.com/ise-uiuc/kernelgpt)。
- 跨领域潜力:方法可扩展至其他系统软件(如文件系统或网络协议栈)的测试场景。
总结
KernelGPT通过LLM的语义理解能力,解决了内核模糊测试中规范生成的自动化难题,其生成的规范不仅覆盖率高、可读性强,还能揭示深层漏洞。这一研究为LLM在系统安全领域的应用开辟了新方向。