アプリケーションセキュリティ
カバレッジガイド付きファジング
別称: グレーボックスファジング, フィードバック駆動ファジング
定義
ターゲットを計装してコードカバレッジを測定し、未踏のパスに到達する入力を進化させることで、バグ発見効率を大幅に高めるファジング手法。
カバレッジガイド付きファザーは、コンパイル時の計装や動的バイナリ変換でターゲットを計装し、候補入力を実行しながらエッジまたは基本ブロック単位のカバレッジを収集します。新たなカバレッジを生み出した入力はコーパスに残し、進化的アルゴリズムでさらに変異させ、到達困難なコードへとコーパスを誘導します。AFL が広めて AFL++、libFuzzer、Honggfuzz が改良したこのフィードバックループは、ブラインドなランダムファジングより桁違いに有効です。Google OSS-Fuzz はこれを常時運用し、OSS で数万件のバグを発見してきました。
例
- C 言語のパーサを AFL++ の計装付きでコンパイルし、afl-fuzz でカバレッジ駆動のコーパスを成長させる。
- libFuzzer が SanitizerCoverage を使って Rust クレートの入力を進化させる。
関連用語
ファジング(Fuzz Testing)
プログラムに大量の不正・ランダム・想定外な入力を与え、クラッシュ・メモリ破壊・セキュリティ脆弱性を自動的に発見するテスト手法。
ミューテーションファジング
正常な既存サンプルを、ビット反転・バイト挿入・ファイルの結合などでランダムに変異させて新たな入力を作るファジング戦略。
シンボリック実行
具体的な値ではなく記号値を入力としてプログラムを実行し、各パスの制約を SMT ソルバで解いて欠陥を発見するプログラム解析手法。
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
メモリ破壊
プログラムが意図したメモリ境界の外に書き込み、型安全性・制御フロー・データ整合性を損なうタイプの脆弱性を総称する用語。
Secure Coding
Secure Coding — definition coming soon.