メインコンテンツへスキップ

ファジングとは

この記事は約 2 分で読めます

ファジング (Fuzzing) とは、ソフトウェアに大量のランダムまたは半ランダムなデータを自動入力し、クラッシュや異常動作を引き起こす入力パターンを発見するセキュリティテスト手法です。 Google の OSS-Fuzz プロジェクトでは、オープンソースソフトウェアに対する継続的ファジングで 10,000 件以上の脆弱性が発見されており、 2025 年時点で 1,000 以上のプロジェクトが参加しています。

リリース前にファジングが果たす役割

ファジングが力を発揮するのは、ライブラリやアプリケーションを世に出す前の検証段階です。人が書くテストは想定される入力を中心に組み立てられるため、開発者が思いつかないような異常な入力パターンは検証から漏れがちです。ファジングは大量のランダム・半ランダムな入力を機械的に生成して流し込むことでこの漏れを補い、パーサーのバッファオーバーフローのようにクラッシュや異常動作を引き起こす入力を、具体的な再現手順つきで浮かび上がらせます。こうした欠陥をリリース前に発見できれば、攻撃者に本番環境で悪用される前に、開発側の都合で落ち着いて修正できます。発見された入力パターンはそのまま回帰テストに追加でき、同じ欠陥の再発防止にもつながります。

ファジングプロセスフロー

シード入力の準備 (正常なテストデータ)
ファザーが入力をランダムに変異 (ビット反転・挿入・削除)
対象プログラムに変異入力を投入
カバレッジ情報をフィードバック (新しいコードパスを発見)
クラッシュ・ハング・異常動作を記録・分類

ファジングの種類

ファジングは大きく 3 種類に分類されます。ブラックボックスファジングはプログラムの内部構造を知らずにランダムな入力を生成する最も単純な手法です。ホワイトボックスファジングはソースコードを解析してコードカバレッジを最大化する入力を生成します。グレーボックスファジングは実行時のカバレッジ情報をフィードバックして入力を進化させる手法で、 AFL (American Fuzzy Lop) や libFuzzer が代表的です。ペネトレーションテストと組み合わせることで、より網羅的な脆弱性発見が可能になります。

実務での活用

ファジングは特にパーサー (JSON 、 XML 、画像フォーマット)、ネットワークプロトコル処理、ファイル入出力など、外部からの入力を処理するコードに効果的です。 CI/CD パイプラインに組み込んで継続的にファジングを実行する方式は「 Continuous Fuzzing 」と呼ばれ、セキュアコーディングと組み合わせることで、脆弱性を作り込まないための工程と、作り込まれた脆弱性を洗い出す工程の両方を同じ開発サイクルに置けます。強力なランダムパスワードでファジング環境や CI/CD システムへのアクセスを保護し、テスト結果の改ざんを防ぎましょう。

関連用語

この記事は役に立ちましたか?