(根据文档内容判断属于类型a:单篇原创研究论文的学术报告)
PromptFuzz:基于提示模糊测试的模糊驱动程序生成技术研究
一、作者与发表信息
本研究由Yunlong Lyu(腾讯安全大数据实验室)、Yuxuan Xie(腾讯安全大数据实验室)、Peng Chen(腾讯安全大数据实验室)和Hao Chen(加州大学戴维斯分校)合作完成,发表于2024年ACM SIGSAC计算机与通信安全会议(CCS ‘24),论文标题为《Prompt Fuzzing for Fuzz Driver Generation》。
二、学术背景
1. 研究领域:本研究属于软件安全工程(Software Security Engineering)领域,聚焦于自动化模糊测试(Fuzzing)技术的创新。
2. 研究动机:传统模糊测试依赖高质量的模糊驱动程序(Fuzz Driver),但其手动编写耗时且需深入理解目标库的API。现有自动化生成技术(如基于消费者代码或解释性模糊测试)存在覆盖率低或搜索空间过大等问题。
3. 目标:提出PromptFuzz,一种基于大语言模型(LLM)的覆盖引导模糊测试框架,通过迭代生成模糊驱动程序探索未覆盖的库代码路径,并提升漏洞检测效率。
三、研究流程与方法
1. 核心流程
- 步骤1:指令化程序生成
- 方法:从库头文件提取函数签名和类型定义,构建包含API组合的提示模板(Prompt Template),输入LLM(如GPT-3.5/4)生成候选程序。
- 创新点:通过零样本提示(Zero-shot Prompting)引导LLM生成符合库规范的代码,模板包含任务描述、库上下文(API签名、自定义类型)和库规范约束。
- 步骤2:错误程序验证
- 三级验证机制:
1. 语法验证:通过C/C++编译器过滤语法错误程序。
2. 运行时验证:结合AddressSanitizer(ASan)、UndefinedBehaviorSanitizer(UBSan)和自研FileSanitizer检测内存错误、未定义行为和文件操作泄漏。
3. 覆盖验证:基于关键路径分析(Critical Path Analysis)剔除未执行核心API调用的程序。
- 数据支持:在14个库的测试中,41,080个生成程序中63.9%因语法错误被淘汰,27.5%因运行时异常被剔除。
- 步骤3:覆盖引导的提示变异
- 能量调度(Power Scheduling):借鉴AFLFast的单调调度策略,根据API函数的分支覆盖率动态调整其被选入提示的概率(公式:energy(i) = 1 - cov(i) / [(1+seed(i))^E * (1+prompt(i))^E])。
- 变异策略:插入(Insertion)、替换(Replacement)和交叉(Crossover)API组合,优先选择高密度(Density)和独特分支(Unique Branches)的种子程序。
- 步骤4:约束式模糊调度
- 参数约束推断:通过静态分析推断API参数的六类约束(如数组长度、文件名、分配大小),并将常量参数转换为可接收模糊输入的变量。
- 调度优化:合并通过验证的种子程序为单一模糊驱动程序,基于覆盖反馈调度测试顺序。
四、主要结果
1. 覆盖率提升
- PromptFuzz在14个库中平均分支覆盖率达40.07%,较OSS-Fuzz(24.88%)和Hopper(24.46%)分别提升1.61倍和1.63倍。
- 典型案例:在SQLite3中覆盖73.61%分支,远超OSS-Fuzz的25.64%。
漏洞检测能力
vp8_peek_si_internal的段错误(CVE-2023-XXXX)。tiffreadencodedstrip的内存泄漏。关键技术贡献
五、结论与价值
1. 科学价值:
- 首次将LLM与覆盖引导模糊测试结合,解决API依赖和复杂状态探索难题。
- 提出“提示模糊测试”(Prompt Fuzzing)新范式,为生成式测试提供可扩展框架。
2. 应用价值:
- 单库平均成本4.15美元,适用于大规模开源库安全审计。
- 工具已开源(17,595行Rust代码),支持集成现有模糊器如libFuzzer。
六、研究亮点
1. 方法创新:
- 覆盖引导的提示变异策略,突破LLM生成代码的随机性限制。
- 多级错误验证机制(语法、运行时、覆盖)将误报率降至13.64%。
2. 性能突破:在资源密集型库(如libaom)中仍保持20%以上覆盖率提升。
七、其他发现
- 局限性:对闭源库适用性依赖LLM微调,未来可通过领域适应(Domain Adaptation)优化。
- 扩展性:框架设计支持迁移至Web应用和嵌入式系统测试。
(报告字数:约2000字)