[论文解读] FuzzerGym: A Competitive Framework for Fuzzing and Learning
FuzzerGym 引入了一种基于强化学习(RL)的框架,通过将 OpenAI Gym 与 libFuzzer 集成,实现对灰盒模糊测试中变异操作符选择的优化,支持异步、低延迟的强化学习推理。该框架在五个基准测试中实现了更优的代码覆盖率,优于 libFuzzer 的随机变异操作符选择,即使在运行次数显著更多的情况下,也通过深度神经网络学习程序状态特征,实现了高效的变异策略。
Fuzzing is a commonly used technique designed to test software by automatically crafting program inputs. Currently, the most successful fuzzing algorithms emphasize simple, low-overhead strategies with the ability to efficiently monitor program state during execution. Through compile-time instrumentation, these approaches have access to numerous aspects of program state including coverage, data flow, and heterogeneous fault detection and classification. However, existing approaches utilize blind random mutation strategies when generating test inputs. We present a different approach that uses this state information to optimize mutation operators using reinforcement learning (RL). By integrating OpenAI Gym with libFuzzer we are able to simultaneously leverage advancements in reinforcement learning as well as fuzzing to achieve deeper coverage across several varied benchmarks. Our technique connects the rich, efficient program monitors provided by LLVM Santizers with a deep neural net to learn mutation selection strategies directly from the input data. The cross-language, asynchronous architecture we developed enables us to apply any OpenAI Gym compatible deep reinforcement learning algorithm to any fuzzing problem with minimal slowdown.
研究动机与目标
- 为解决基于覆盖率的灰盒模糊测试(CGF)中随机选择变异操作符的低效问题,应用强化学习。
- 通过异步架构,有效弥合快速模糊测试(μs)与缓慢的强化学习推理(ms)之间的延迟差异。
- 使深度强化学习能够直接从输入数据和程序状态中学习最优变异策略,无需人工特征工程。
- 构建一个灵活、可扩展的框架,统一大规模模糊测试与先进的强化学习算法,以提升软件测试效果。
提出的方法
- 将 libFuzzer 与 OpenAI Gym 集成,将模糊测试循环建模为强化学习环境,其中状态为程序覆盖率指标,动作为变异操作,奖励为代码覆盖率的提升。
- 使用编译时插桩(LLVM Sanitizers)暴露丰富的、低开销的程序状态信息(如覆盖率、数据流、故障检测)给强化学习智能体。
- 采用深度神经网络学习输入数据的表示,并将其映射到最优的变异操作符选择,实现自动化、数据驱动的特征工程。
- 应用来自 Atari 强化学习的异步帧跳过技术,将强化学习推理速度与模糊测试执行速度解耦,最大限度减少性能开销。
- 使用基于 gRPC 的异步缓冲区协调模糊测试器与强化学习智能体之间的通信,即使在速度差异较大的情况下,也能实现实时决策。
- 支持任何兼容 OpenAI Gym 的强化学习算法,实现与最先进深度强化学习方法的即插即用式集成。
实验结果
研究问题
- RQ1强化学习能否在灰盒模糊测试中提升变异操作符选择效果,实现比随机选择更深的代码覆盖率?
- RQ2在实时系统中,如何有效弥合快速模糊测试(μs)与缓慢的强化学习推理(ms)之间的性能差距?
- RQ3基于输入数据表示,学习到的强化学习策略是否能在无需微调的情况下泛化到多种不同程序?
- RQ4在总执行次数更少的情况下,强化学习驱动的变异操作符选择能在多大程度上超越基线的随机策略?
- RQ5能否以极低的性能开销,将强化学习与现有模糊测试基础设施(如 libFuzzer)成功集成?
主要发现
- 基于强化学习的模糊测试器在五个基准测试中的四个上,实现了比 libFuzzer 随机变异操作符选择更高的平均行覆盖率。
- 即使在运行次数远超基线的情况下,RL 模糊测试器仍实现了更深的代码覆盖率,证明了智能变异操作符选择的有效性。
- 该框架通过其异步架构和帧跳过机制,实现了性能提升而未降低模糊测试速度。
- 训练好的强化学习策略在无需微调的情况下,成功泛化到不同程序(包括 re2 和 sqlite),表明其能从输入数据中学习到稳健的特征表示。
- 该方法成功将深度强化学习与生产级模糊测试工具(libFuzzer)集成,并通过 OpenAI Gym 接口支持使用先进强化学习算法。
- 奖励函数可扩展为优先发现故障,通过奖励由 sanitizer 检测到的错误来实现,但该功能仅限于可自动检测的故障。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。