アプリケーションセキュリティ
ミューテーションファジング
別称: 変異ファジング, サンプルベースファジング
定義
正常な既存サンプルを、ビット反転・バイト挿入・ファイルの結合などでランダムに変異させて新たな入力を作るファジング戦略。
ミューテーションファジングは、画像、ネットワークパケット、文書などの正常な入力コーパスを起点に、ビット反転、バイト置換、ブロック削除、スプライスといった小さなランダム変更を施して新たな入力を生成します。生成型ファザーと違って入力フォーマットの文法定義は不要なため、任意のパーサやプロトコルに素早く適用できます。AFL++ や libFuzzer はカバレッジフィードバックと組み合わせることで、深いコードパスに到達し、メモリ安全性に関わるバグを引き起こす入力を高速に進化させます。SSDLC の中で、コーデック、ファイルパーサ、カーネルドライバ、暗号ライブラリの堅牢化に広く使われています。
例
- AFL++ で正規 PNG ファイルを変異させ、libpng のヒープオーバーフローを発見する。
- libFuzzer で正規 HTTP リクエストを変異させ、自作 HTTP パーサをクラッシュさせる。
関連用語
ファジング(Fuzz Testing)
プログラムに大量の不正・ランダム・想定外な入力を与え、クラッシュ・メモリ破壊・セキュリティ脆弱性を自動的に発見するテスト手法。
カバレッジガイド付きファジング
ターゲットを計装してコードカバレッジを測定し、未踏のパスに到達する入力を進化させることで、バグ発見効率を大幅に高めるファジング手法。
シンボリック実行
具体的な値ではなく記号値を入力としてプログラムを実行し、各パスの制約を SMT ソルバで解いて欠陥を発見するプログラム解析手法。
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
解放後使用(Use-After-Free)
free 済みのメモリをプログラムが使い続けるメモリ安全性のバグ。攻撃者にオブジェクト状態の操作と制御フロー奪取を許すことが多い。
Secure Coding
Secure Coding — definition coming soon.