ファジング ふぁじんぐ
簡単に言うとこんな感じ!
ソフトウェアに「めちゃくちゃなデータ」を大量に送りつけて、バグや脆弱性を見つけ出すテスト手法だよ!人間が思いつかないような変な入力を自動で何万回も試して、システムが壊れる弱点を探すんだ。プロのハッカーより先に穴を見つけるための”ストレステスト”ってこと!
ファジングとは
ファジング(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(大規模言語モデル)を活用した次世代ファジングの研究が活発化
ファジングと他のセキュリティテスト手法の比較
ファジングは「脆弱性診断」「ペネトレーションテスト」などと混同されやすいですが、それぞれ目的と手法が異なります。
ファジングが特に有効なシーン
- ファイルパーサー(PDFリーダー、画像処理ライブラリ等):外部から受け取るファイル形式を処理するソフトは特に攻撃対象になりやすい
- ネットワークプロトコル実装:不正パケットへの耐性確認
- API エンドポイント:不正なリクエストに対するサーバーの堅牢性確認
- 組み込みシステム:IoT機器やルーターのファームウェア検査
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| NIST SP 800-115 | 技術的情報セキュリティテストのガイドライン(ファジングを含む各種テスト手法を定義) |
| RFC 4949 | インターネットセキュリティ用語集(脆弱性・テスト関連の定義を含む) |
関連用語
- 脆弱性(バルネラビリティ) — セキュリティ上の弱点・欠陥のこと。ファジングで発見される対象
- バッファオーバーフロー — ファジングが最も多く発見する脆弱性の代表例
- ペネトレーションテスト — 実際の攻撃を模倣してシステムへの侵入を試みるセキュリティ評価手法
- 脆弱性診断 — 既知の脆弱性を網羅的にスキャン・評価するテスト手法
- CVE — 公開されている脆弱性情報のデータベース。ファジングで発見された脆弱性が登録されることも多い
- SAST / DAST — 静的・動的アプリケーションセキュリティテスト。ファジングはDASTの一種に分類されることがある
- セキュリティ開発ライフサイクル(SDL) — 開発プロセスにセキュリティテストを組み込む手法。ファジングはSDLの重要な要素
- ゼロデイ脆弱性 — まだ誰にも知られていない脆弱性。ファジングによって発見されることがある