FunFuzz: An LLM-Powered Evolutionary Fuzzing Framework

基本信息

关键图示

FunFuzz: An LLM-Powered Evolutionary Fuzzing Framework Figure 1
Figure 1
FunFuzz: An LLM-Powered Evolutionary Fuzzing Framework Figure 2
Figure 2
FunFuzz: An LLM-Powered Evolutionary Fuzzing Framework Figure 3
Figure 3

摘要

English

Modern fuzzers increasingly use Large Language Models (LLMs) to generate structured inputs, but LLM-driven fuzzing is sensitive to prompt initialization and sampling variance, which can reduce exploration efficiency and lead to redundant inputs. We present FunFuzz, a multi-island evolutionary fuzzing framework that runs several isolated searches in parallel and periodically migrates high-value candidates to maintain diversity. FunFuzz derives initial generation prompts from documentation and initializes islands with topic-specific instructions, then continuously adapts prompts using feedback-guided selection. During fuzzing, candidates are prioritized by incremental compiler coverage, while compiler-internal failure signals are used to identify crash-inducing inputs. We evaluate FunFuzz on compiler fuzzing, where inputs are source programs and success is measured by compiler coverage and unique compiler-internal failures. Across repeated 24-hour campaigns on GCC and Clang, FunFuzz achieves higher compiler coverage than previous LLM-driven baselines and discovers more unique failure-triggering inputs.

中文

现代模糊测试器越来越多地使用大语言模型生成结构化输入,但 LLM 驱动的模糊测试对提示初始化和采样方差敏感,可能降低探索效率并产生冗余输入。我们提出 FunFuzz,一个多岛演化模糊测试框架,并行运行多个隔离搜索并周期性迁移高价值候选以维持多样性。FunFuzz 从文档中提取初始生成提示,用主题特定指令初始化各岛,然后通过反馈引导选择持续调整提示。模糊测试过程中,候选程序按增量编译器覆盖率排序,编译器内部故障信号用于识别崩溃触发输入。我们在编译器模糊测试上评估 FunFuzz(输入为源程序,成功指标为编译器覆盖率和唯一内部故障),在 GCC 和 Clang 上重复 24 小时测试,FunFuzz 实现了比以往 LLM 驱动基线更高的编译器覆盖率,并发现更多唯一的故障触发输入。

核心贡献

  1. 多岛演化模糊测试框架:将 FunSearch 的多岛机制适配到模糊测试领域,通过并行隔离搜索和周期性迁移,在 LLM 驱动的模糊测试中有效缓解过早收敛问题。
  2. 文档驱动的提示蒸馏与双温度初始化:从目标文档中蒸馏出高质量提示,并通过低/高温双批次采样的种子指令初始化,既保证编译通过率又鼓励语义多样性。
  3. 基于编译器覆盖率的适应度评分:以增量编译器覆盖率作为主要适应度信号,结合编译器内部故障检测的轻量级预言机,实现了编译器模糊测试的全流程自动化。
  4. 跨 GCC/Clang 验证:在两大主流编译器上 24 小时重复实验,证明方法在不同编译器目标上的泛化性。

方法概述

FunFuzz 分为两个阶段:

第一阶段:提示蒸馏与初始化。 给定目标文档(手册、语言规范等),蒸馏 LLM 生成候选提示,生成模型从每个候选中采样程序,FunFuzz 以编译通过率选择基础提示。然后通过低温和高温两次批量采样生成种子指令(如”分配模式”、”控制流”等主题),将评分更高的批次分配给各岛作为初始提示。

第二阶段:演化模糊测试循环。 每个岛独立运行演化搜索:生成 LLM 从当前提示采样一批候选程序 → 规范化处理(移除畸形 #include、拆分多程序输出)→ 编译并计算边际覆盖率 → 轻量级故障预言机检测编译器崩溃/内部错误 → 基于 softmax 适应度选择候选 → 更新提示(融合基础提示 + 选中程序 + 变换指令:new/mutate/rephrase)。每 3 小时触发跨岛迁移:按覆盖率排名,强岛(前 51%)共享 10% 种群给弱岛,弱岛移除最低 30% 种群但保留搜索上下文(软恢复,区别于 FunSearch 的硬重置)。

适应度函数基于增量编译器覆盖率,温度调度从探索逐渐过渡到利用。

实验结果

局限性与注意点

相关概念(详细)

相关概念


导入时间: 2026-05-05 06:01 来源: arXiv Daily Wiki Update 2026-05-05