[論文レビュー] FuzzerGym: A Competitive Framework for Fuzzing and Learning
FuzzerGymは、libFuzzerとOpenAI Gymを統合することで、強化学習(RL)駆動のフレームワークを導入し、グレイボックスファズィングにおける変異オペレータ選択を最適化する。非同期的かつ低遅延なRL推論を可能にし、5つのベンチマークで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)とRL推論の遅さ(ms)の間の遅延ギャップを、非同期アーキテクチャにより効果的に解消すること。
- 手動による特徴工学を伴わず、入力データおよびプログラム状態から直接最適な変異戦略を学習可能な深層強化学習を実現すること。
- 大規模ファズィングと高度なRLアルゴリズムを統合し、ソフトウェアテストの向上を図る、柔軟で拡張可能なフレームワークの構築すること。
提案手法
- ファズィングループを強化学習環境としてモデル化するため、libFuzzerをOpenAI Gymと統合する。状態はプログラムのカバレッジメトリクス、行動は変異操作、報酬はコードカバレッジの増加である。
- コンパイル時インストルメンテーション(LLVM Sanitizers)を用いて、カバレッジ、データフロー、障害検出など、豊富で低コストのプログラム状態をRLエージェントに公開する。
- 深層ニューラルネットワークを用いて入力データの表現を学習し、最適な変異オペレータ選択にマッピングすることで、自動的でデータ駆動型の特徴工学を実現する。
- アタリRLで用いられる非同期フレームスキップ技術を応用し、RL推論速度とファズャーの実行速度を分離することで、パフォーマンスのオーバーヘッドを最小限に抑える。
- gRPCベースの非同期バッファを用いてファズャーとRLエージェントの間の同期を図り、速度差にもかかわらずリアルタイムの意思決定を可能にする。
- 任意のOpenAI Gym互換RLアルゴリズムをサポートし、最新の深層RL手法と即座に統合可能である。
実験結果
リサーチクエスチョン
- RQ1強化学習は、ランダムな選択よりも深いコードカバレッジを達成するための変異オペレータ選択を改善できるか?
- RQ2高速なファズィング(μs)と遅いRL推論(ms)の間の性能ギャップを、リアルタイムシステムで効果的に埋め合わせられるか?
- RQ3再トレーニングなしに、入力データ表現のみに基づいて学習されたRLポリシーが、多様なプログラムに一般化できるか?
- RQ4より少ない合計実行回数で、RL駆動の変異オペレータ選択が、ベースラインのランダム戦略をどの程度上回れるか?
- RQ5既存のファズィングインfra(例:libFuzzer)とRLを、最小限のパフォーマンスオーバーヘッドで統合できるか?
主な発見
- RLベースのファズャーは、5つのベンチマークのうち4つで、libFuzzerのランダムな変異オペレータ選択を上回る平均ラインカバレッジを達成した。
- ベースラインよりもはるかに多くの実行回数が与えられた場合でも、RLファズャーはより深いカバレッジを達成しており、知的な変異オペレータ選択の有効性を示している。
- 非同期アーキテクチャとフレームスキップ機構のおかげで、ファズャーの速度が遅くならず、性能向上を達成した。
- 訓練されたRLポリシーは、再トレーニングなしにre2やsqliteなど異なるプログラムに一般化できており、入力データからの堅牢な特徴学習が可能であることが示された。
- 深層RLをプロダクショングレードのファズィングツール(libFuzzer)と効果的に統合し、OpenAI Gymインタフェースを通じて高度なRLアルゴリズムの利用を可能にした。
- 報酬関数は、サニタイザーで検出可能な障害を優先するように拡張可能(障害検出を報酬とする)が、これは自動的に検出可能な障害に限定される。
より良い研究を、今すぐ始めましょう
論文設計から論文執筆まで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。