セキュリティテスト

ファジング ふぁじんぐ

ファジャー脆弱性診断バッファオーバーフロー入力値テストセキュリティテストバグ発見
ファジングについて教えて

簡単に言うとこんな感じ!

ソフトウェアに「めちゃくちゃなデータ」を大量に送りつけて、バグや脆弱性を見つけ出すテスト手法だよ!人間が思いつかないような変な入力を自動で何万回も試して、システムが壊れる弱点を探すんだ。プロのハッカーより先に穴を見つけるための”ストレステスト”ってこと!


ファジングとは

ファジング(Fuzzing)とは、ソフトウェアやシステムに対してランダムまたは半ランダムな異常データ(ファズ)を大量に自動入力し、クラッシュ・エラー・想定外の動作を引き起こすことで脆弱性を発見するセキュリティテスト手法です。「ファズテスティング(Fuzz Testing)」とも呼ばれます。

通常の動作テストは「正しい入力に対して正しい出力が返るか」を確認しますが、ファジングは逆に「おかしな入力を与えたときにシステムが安全に処理できるか」を検証します。バッファオーバーフロー(メモリの許容量を超えたデータを書き込むことで誤動作させる攻撃)やクラッシュメモリリークなど、実際の攻撃者が悪用しうる脆弱性を効率的に発見できます。

ファジングの最大のメリットは自動化です。人間が手動でテストケースを書くのとは比べものにならないほどの量の入力パターンを高速に試せるため、開発者が見落としがちな境界値や異常ケースをカバーできます。MicrosoftやGoogle、Appleなどの大手ソフトウェア企業が製品リリース前の品質保証に積極的に活用しています。


ファジングの種類と仕組み

ファジングは「どんな入力データを生成するか」によって大きく3種類に分類されます。

種類別名概要特徴
ブラックボックスファジング変異ベース正常なデータを元にランダムに変形して送る準備が簡単。内部構造の知識不要
グレーボックスファジングカバレッジガイド型プログラムの実行状況を監視しながら効率よく探索精度と速度のバランスが良い
ホワイトボックスファジング生成ベース / コンコリックソースコードや仕様を解析して入力を生成高精度だが準備コストが高い

仕組みの流れ

┌─────────────────────────────────────────────────────┐
│                  ファジングの基本フロー                │
│                                                     │
│  [入力生成]  →  [テスト対象に送信]  →  [結果監視]    │
│  ランダム/       アプリ・API・         クラッシュ?   │
│  変異/生成       ファイル・ネットワーク  エラー?      │
│                                                     │
│       ↑                                   │         │
│       └──────── フィードバック ───────────┘         │
│              (カバレッジ情報など)                     │
└─────────────────────────────────────────────────────┘

代表的なファジングツール

ツール名種別特徴
AFL++ (American Fuzzy Lop)グレーボックスオープンソース。業界標準的存在
libFuzzerグレーボックスLLVMに統合。Googleが開発
OSS-FuzzクラウドファジングGoogleのOSS向け継続ファジング基盤
Boofuzzネットワーク向けプロトコルファジングに特化
Peach Fuzzerホワイトボックス商用ツール。ファイル形式・プロトコル対応

「ファジング」の語源と覚え方

「Fuzz(ファズ)」は英語で「曖昧なもの・ぼんやりしたもの」という意味。つまり「ぼんやりした(=でたらめな)データを使ったテスト」がそのままネーミングになっています。「ぐちゃぐちゃなデータでぐちゃぐちゃにする」とイメージすると覚えやすいですよ。


歴史と背景

  • 1988年 — ウィスコンシン大学のバートン・ミラー教授が学生実験として UNIX ツールにランダムな文字列を入力するテストを実施。これがファジングの起源とされる
  • 1990年 — ミラー教授らが学術論文でファジングの概念を正式に発表。UNIX ユーティリティの約25〜33%がランダム入力でクラッシュすることを実証し業界に衝撃を与えた
  • 2000年代前半 — Microsoft社内でセキュリティ開発ライフサイクル(SDL)にファジングを組み込み始める。ファイル形式・プロトコルのファジングが普及
  • 2013年 — American Fuzzy Lop(AFL)がリリース。カバレッジガイド型ファジングが革命的な発見率を示し、研究・産業の両面で急速に普及
  • 2016年 — DARPAが開催したサイバーグランドチャレンジで、AIによる自動脆弱性発見(=ファジングの応用)が注目を集める
  • 2018年 — GoogleがOSS-Fuzzを公開。オープンソースソフトウェアの継続的ファジングを無償提供し始め、数千件以上の脆弱性を発見
  • 2020年代 — LLM(大規模言語モデル)を活用した次世代ファジングの研究が活発化

ファジングと他のセキュリティテスト手法の比較

ファジングは「脆弱性診断」「ペネトレーションテスト」などと混同されやすいですが、それぞれ目的と手法が異なります。

セキュリティテスト手法の比較 ファジング 自動化 🎯 目的:バグ・脆弱性の発見 🔧 手法:異常入力の大量投入 👤 実施者:自動ツール ⏱ タイミング:開発中〜リリース前 💰 コスト:低〜中 ✅ 強み: 未知の入力パターンを 大量かつ自動で検証 脆弱性診断 半自動化 🎯 目的:既知脆弱性の洗い出し 🔧 手法:スキャンツール+手動 👤 実施者:セキュリティ専門家 ⏱ タイミング:定期的に実施 💰 コスト:中 ✅ 強み: 既知のCVEや設定ミスを 網羅的にチェック ペネトレーションテスト 手動中心 🎯 目的:侵入可否の実証 🔧 手法:実際の攻撃を模倣 👤 実施者:倫理的ハッカー ⏱ タイミング:リリース前・年次 💰 コスト:高 ✅ 強み: 複合的な攻撃経路を 人間の視点で検証 ※ 3つを組み合わせて使うのが理想的なセキュリティ対策

ファジングが特に有効なシーン

  • ファイルパーサー(PDFリーダー、画像処理ライブラリ等):外部から受け取るファイル形式を処理するソフトは特に攻撃対象になりやすい
  • ネットワークプロトコル実装:不正パケットへの耐性確認
  • API エンドポイント:不正なリクエストに対するサーバーの堅牢性確認
  • 組み込みシステム:IoT機器やルーターのファームウェア検査

関連する規格・RFC

規格・RFC番号内容
NIST SP 800-115技術的情報セキュリティテストのガイドライン(ファジングを含む各種テスト手法を定義)
RFC 4949インターネットセキュリティ用語集(脆弱性・テスト関連の定義を含む)

関連用語