[論文レビュー] NEUZZ: Efficient Fuzzing with Neural Program Smoothing
NEUZZは、ニューラルネットワークベースのプログラムスムージングを用いて、プログラムの分岐動作の微分可能近似を生成する新規ファズャーを提案する。これにより、勾配に基づく入力生成が可能となり、より効率的なファジングが実現される。実世界のプログラムにおいて24時間の実行で、10の最先端のグレイボックスファズァーを上回り、未発見のバグを31件(うち2件はCVE)発見し、エッジカバレッジを3倍に向上させた。
Fuzzing has become the de facto standard technique for finding software vulnerabilities. However, even state-of-the-art fuzzers are not very efficient at finding hard-to-trigger software bugs. Most popular fuzzers use evolutionary guidance to generate inputs that can trigger different bugs. Such evolutionary algorithms, while fast and simple to implement, often get stuck in fruitless sequences of random mutations. Gradient-guided optimization presents a promising alternative to evolutionary guidance. Gradient-guided techniques have been shown to significantly outperform evolutionary algorithms at solving high-dimensional structured optimization problems in domains like machine learning by efficiently utilizing gradients or higher-order derivatives of the underlying function. However, gradient-guided approaches are not directly applicable to fuzzing as real-world program behaviors contain many discontinuities, plateaus, and ridges where the gradient-based methods often get stuck. We observe that this problem can be addressed by creating a smooth surrogate function approximating the discrete branching behavior of target program. In this paper, we propose a novel program smoothing technique using surrogate neural network models that can incrementally learn smooth approximations of a complex, real-world program's branching behaviors. We further demonstrate that such neural network models can be used together with gradient-guided input generation schemes to significantly improve the fuzzing efficiency. Our extensive evaluations demonstrate that NEUZZ significantly outperforms 10 state-of-the-art graybox fuzzers on 10 real-world programs both at finding new bugs and achieving higher edge coverage. NEUZZ found 31 unknown bugs that other fuzzers failed to find in 10 real world programs and achieved 3X more edge coverage than all of the tested graybox fuzzers for 24 hours running.
研究の動機と目的
- 深く、発火しにくい脆弱性を発見するための進化的ファジングの非効率性に対処すること。
- 現実世界のプログラムにおける不連続的かつ微分不能な動作の制限を克服すること。
- ニューラルネットワークを用いたスケーラブルで低オーバーヘッドのプログラム分岐動作の近似手法を設計すること。
- ニューラルスムージングと勾配に基づく入力生成を統合し、ファジングの効率とカバレッジを向上させること。
- 脆弱性発見およびコードカバレッジの両面で、既存のファズァーを上回る優れたパフォーマンスを実証すること。
提案手法
- 入力に基づいて、プログラムの制御フロー分岐動作の滑らかで微分可能な近似を学習するフィードフォワードニューラルネットワークを訓練する。
- 訓練済みのニューラルモデルを用いて、新たなコードパスを引き起こす可能性の高い入力を導く勾配を計算する。
- 誤って予測された動作を用いて、段階的にニューラルモデルを再訓練し、時間経過とともに精度を向上させる。
- 滑らかな代替モデル上で勾配に基づく最適化(例:勾配降下法)を適用し、コードカバレッジを最大化する新しいテスト入力を生成する。
- ニューラルスムージングと勾配に基づく入力生成を統合し、エンドツーエンドのファジングを実現するファズァーパイプライン「Neuzz」を構築する。
- ニューラルスムージングと従来のファジングコア管理およびカバレッジフィードバックを組み合わせたハイブリッドアプローチを採用する。
実験結果
リサーチクエスチョン
- RQ1ニューラルネットワークベースのスムージングは、現実世界のプログラムの不連続的分岐動作を効果的に近似できるか?
- RQ2滑らかな代替モデル上で勾配に基づく入力生成は、進化的な変異と比較してファジングの効率を顕著に向上させられるか?
- RQ3提案手法は、複雑なファイルフォーマットや高いコード複雑性を有する大規模な現実世界のプログラムにスケーラブルか?
- RQ4既存のファズァーが見逃した未発見の脆弱性を同手法は発見できるか?
- RQ5エッジカバレッジおよび脆弱性検出の観点から、Neuzzのパフォーマンスは最先端のファズァーと比較してどうか?
主な発見
- Neuzzは10の現実世界プログラムにおいて、未発見のバグを31件発見した。そのうち2件はCVE(CVE-2018-19931およびCVE-2018-19932)であり、他のファズァーでは検出されなかった。
- 24時間の実行において、同じ現実世界プログラムセットに対して、すべてのテスト済みグレイボックスファズァーと比較して、Neuzzは3倍の高いエッジカバレッジを達成した。
- LAVA-MおよびDARPA CGCバグデータセットの両方において、Neuzzは脆弱性発見およびカバレッジの両面で、10の最先端グレイボックスファズァーを上回った。
- ニューラルスムージング技術により、不連続な動作を示すプログラムに対しても、効果的な勾配ベース最適化が可能となり、従来の勾配ベースアプローチの主な制限を克服した。
- ニューラルモデルの段階的再訓練により、予測精度が時間経過とともに向上し、初期の学習誤差に対してもロバストな手法となった。
- taintベースおよび記号実行ベースのファズァーに比べ、Neuzzは高いスケーラビリティとパフォーマンスを示した。後者には高コストやパス爆発の問題がある。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。