“  在操作系统内核模糊测试中,系统调用(syscall)是触发内核执行路径的关键入口。然而,现有fuzzing框架在实践中面临一个长期难题:大量高风险但低频的syscalls几乎从未被触发。这些低频Syscalls往往依赖复杂的前置状态(如文件描述符、进程上下文、对象生命周期),随机或语法级生成策略难以满足其隐含约束,导致模糊测试长期停留在“热点syscall”,而忽略潜在高危攻击面。

针对这一问题,研究者提出Dependency-Based RAG方法,系统性挖掘syscall之间的依赖关系,并将其引入内核模糊测试流程,显著提升低频syscall的触达能力。 ”

  • 📄 论文标题:Unlocking Low-Frequency Syscalls in Kernel Fuzzing with Dependency-Based RAG

  • 📅 发表时间: Proceedings of the ACM on Software Engineering, ISSTA, 2025

  • 🏫 作者单位:中国科学院信息工程研究所、中国科学院大学

  • 💡开源代码:     https://github.com/QGrain/SyzGPT

01—方法介绍

先前研究曾尝试通过结合动态执行与静态分析自动提取系统调用依赖关系。然而,逐步从执行中学习所有依赖关系耗时过长。如图1左侧所示,这些限制使传统模糊测试器无法触达与LFSC相关的漏洞入口。

图片

图 1. 一个现实案例,说明LFSC的局限性,并阐明提出该方法的动机。  

本文的核心思想是:低频 syscall 之所以难以触达,并非因为“随机性不足”,而是因为缺乏对 syscall 依赖语义的系统建模。

为此,作者提出一种 Dependency-Based RAG 框架,将 syscall 执行依赖显式建模,并指导 fuzzing 输入生成。整体流程分为三步:

① 依赖关系抽取

从内核源码中静态分析 syscall 间的资源与状态依赖;

② 依赖图构建(RAG)

构建 syscall 级别的依赖增强图;

③ 依赖感知生成

引导 fuzzing 生成满足前置条件的 syscall 序列。

图片

图 2. SyzGPT整体框架

小结:该方法不改变底层 fuzzer 的执行逻辑,而是从“输入生成源头”解决 syscall 触达问题。

02—关键机制

  1. 首次系统刻画低频syscall难触达的根本原因,依赖缺失而非随机不足。
  2. 依赖关系显式建模,将syscall 隐含执行条件转化为可操作的生成约束。
  3. 与现有 fuzzer 解耦,可直接增强现有内核 fuzzing 框架。
  4. 面向真实攻击面,聚焦长期被忽略的 syscall 盲区。

模块

实现方式

主要作用

Syscall 依赖分析

静态分析内核源码中的资源创建/消费关系

识别 syscall 间的隐式执行前置条件

依赖增强图(RAG)

以 syscall 为节点,依赖关系为边

显式表达 syscall 调用顺序约束

依赖感知生成

基于 RAG 引导 syscall 序列构造

提高低频 syscall 的可达性

Fuzzer 集成

与现有内核 fuzzer 无侵入集成

保持工程可落地性

小结:Dependency-Based RAG 本质上是一种“语义约束增强的输入生成策略”,而非新的 fuzzing 引擎。

03—实验结果

在种子生成实验中,采用默认Syzkaller生成的24小时语料库作为现有语料库,因为目前尚无适用于SyzGPT的运行时模糊测试语料库。在fuzzing实验中分别针对三个目标LTS内核(6.6.12、5.15.140、4.19.300)编译了Syzbot配置。主要的实验结果如下。

表1显示了评估SyzGPT在语法有效性、语境有效性和生成成本方面的种子生成性能。

表1. 不同大型语言模型上程序生成方法的性能表现

图片

表2显示了覆盖率(Cov)、唯一覆盖率/唯一覆盖率(Covu/Ru)、LFSC的唯一覆盖率(Covu)、有价值输入数量(Nvi)、覆盖的特殊调用数量/比率(Ns/Rs)、覆盖的LFSC数量(Nl)以及SyzGPT相较于其他方法的改进幅度(IMP)。

表2.  24小时内模糊测试的平均结果。

图片

小结:SyzGPT的提示方法显著提升了种子生成的语法有效性;在有效性和多样性方面,SyzGPT实现了最高的OER(在GPT-3.5上达42.66%);在默认配置(GPT-3.5)下,该方法可在数秒内生成高质量程序,且消耗少于2千字符(0.007美元),效率显著且成本可控。

📌 总结

本文从一个被长期忽视的视角切入内核模糊测试问题:不是所有syscall都“生而平等”。通过依赖驱动的RAG建模,作者证明:低频syscall并非不可达,关键在于是否理解并满足其执行语义,结构化依赖信息可以显著提升fuzzing深度。该工作为下一代语义感知内核fuzzing提供了重要启示。

📣 欢迎留言讨论

  • 你认为 syscall 依赖建模是否也适用于用户态API fuzzing?

  • 未来fuzzing是否会全面走向“语义驱动”而非随机驱动?

📌 点赞 + 收藏 + 分享,你的支持,是我们持续解析高水平软件安全论文的最大动力!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐