対象試験と出題頻度
ファジング(Fuzzing)は、基本情報技術者・応用情報技術者試験で出題される重要なセキュリティ用語です。
近年の試験で出題頻度が上がっており、「ランダムなデータを入力して脆弱性を発見する」という特徴的な手法なので、しっかり押さえておきましょう。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★★☆
ランクA(重要)必ず覚えておくべき
用語の定義
ファジング(Fuzzing)とは、一言で言うと「ソフトウェアに対して、予測不能な大量のデータ(ファズ)を自動的に入力し、異常な動作やクラッシュを引き起こすことで、未知の脆弱性やバグを発見するテスト手法」のことです。「Fuzz」は「あいまいな」「ぼやけた」という意味です。
イメージとしては、「自動販売機に、ありとあらゆる硬貨を片っ端から入れてみる」ようなものです。正規の100円玉だけでなく、外国のコイン、ボタン、おもちゃのコインなど、あらゆるものを入れてみる。すると、「このコインを入れると機械が止まる」「この形状だと詰まる」といった想定外の不具合が見つかるかもしれません。ファジングも同様に、想定外のデータを大量に入力して、ソフトウェアの弱点を見つけ出します。
情報処理試験を勉強していると、「脆弱性診断やペネトレーションテストとどう違うの?」と疑問に思う方もいるかもしれません。ファジングの特徴は「ランダム・大量・自動」です。人間が考えもしないような入力パターンを機械的に試すことで、既知のパターンに頼らない脆弱性発見が可能です。
📊 ファジングの基本概念
| 項目 | 説明 |
|---|---|
| 入力データ | ランダムまたは半ランダムなデータ(ファズ) |
| 目的 | 異常動作やクラッシュを引き起こし、脆弱性を発見 |
| 特徴 | 自動化・大量実行が可能 |
| 発見できるもの | バッファオーバーフロー、メモリリーク、クラッシュなど |
解説
ファジングは、1988年にウィスコンシン大学のバートン・ミラー教授によって考案されたテスト手法です。当時、UNIXのユーティリティプログラムにランダムなデータを入力したところ、多くのプログラムがクラッシュしたことから、この手法の有効性が認識されました。
ファジングの仕組み
ファジングの基本的な流れは以下のとおりです。
①テスト対象の選定では、ファジングを行うソフトウェアや入力箇所(ファイル入力、ネットワーク入力、API呼び出しなど)を決定します。
②ファズ(テストデータ)の生成では、ランダムなデータや、正常なデータを少し変異させたデータを大量に生成します。
③データの入力と監視では、生成したファズをテスト対象に入力し、ソフトウェアの挙動を監視します。クラッシュ、ハングアップ、異常な応答などを検出します。
④結果の分析では、異常が発生した入力データを特定し、どのような脆弱性が存在するかを分析します。
💡 ファジングで発見される代表的な脆弱性
① バッファオーバーフロー:想定以上の長いデータを入力することで、メモリ領域を上書きしてしまう脆弱性
② 整数オーバーフロー:非常に大きな数値や負の数値を入力することで、計算結果が異常になる脆弱性
③ フォーマット文字列攻撃:書式指定文字(%s、%xなど)を含む入力でメモリ内容を読み取れる脆弱性
④ NULLポインタ参照:予期しない入力でプログラムがクラッシュする脆弱性
⑤ 無限ループ・リソース枯渇:特定の入力で処理が終了しない、またはメモリを大量消費する問題
ファジングの種類
ファジングは、ファズ(テストデータ)の生成方法によって大きく3種類に分けられます。
ダムファジング(Dumb Fuzzing)は、完全にランダムなデータを生成する最もシンプルな方式です。入力形式を考慮しないため、有効なテストケースが少なく、効率は低いですが、実装が簡単です。
スマートファジング(Smart Fuzzing)は、入力データの形式(ファイル構造、プロトコルなど)を理解した上で、部分的に変異させたデータを生成します。より効率的に脆弱性を発見できますが、事前に入力形式の知識が必要です。
カバレッジガイデッドファジングは、プログラムのコードカバレッジ(どの部分が実行されたか)を監視しながら、未実行のコードを通過するようなファズを優先的に生成します。AFL、libFuzzerなどのツールがこの方式を採用しており、現在最も効果的とされています。
📊 ファジングの種類と特徴
| 種類 | データ生成方法 | 特徴 |
|---|---|---|
| ダムファジング | 完全にランダム | シンプルだが効率は低い |
| スマートファジング | 形式を理解して変異 | 効率的だが事前知識が必要 |
| カバレッジガイデッド | コード実行状況を監視 | 最も効果的、現在の主流 |
ファジングの活用場面
ファジングは、以下のような場面で活用されています。
ソフトウェア開発では、リリース前のセキュリティテストとして、開発中のソフトウェアにファジングを実施し、バグや脆弱性を早期に発見します。MicrosoftやGoogleなどの大手企業も積極的に採用しています。
脆弱性研究では、セキュリティ研究者が未知の脆弱性を発見するために使用します。多くのCVE(共通脆弱性識別子)がファジングによって発見されています。
IoT・組み込み機器のテストでは、ネットワーク機器、IoTデバイス、産業制御システムなど、セキュリティが重要な機器のテストに活用されます。
⚠️ ファジングの限界と注意点
① ロジックの脆弱性は発見困難:認証バイパスや権限昇格など、ロジックの問題はファジングでは見つけにくい
② 時間がかかる:大量のテストを実行するため、十分な時間とリソースが必要
③ 再現性の確保:ランダムなデータを使うため、発見した脆弱性の再現には工夫が必要
④ 本番環境では実施不可:クラッシュを引き起こす可能性があるため、テスト環境で実施する必要がある
試験ではこう出る!
ファジングは、基本情報技術者・応用情報技術者試験で出題される重要キーワードです。「ランダムなデータを入力して脆弱性を発見する」という基本概念を押さえておきましょう。
【試験で狙われるポイント】
- ファジング = ランダム・大量のデータを入力して脆弱性を発見
- 予測不能なデータ(ファズ)を自動的に生成・入力
- 異常動作やクラッシュを引き起こすことで脆弱性を発見
- バッファオーバーフローなど、想定外の入力に対する脆弱性に有効
- 既知のパターンに依存しないため、未知の脆弱性も発見可能
試験問題で「ソフトウェアに対して、問題を引き起こしそうな多様なデータを入力し、その挙動を監視して脆弱性を発見する」という記述があれば、それは「ファジング」に関する記述です。
試験ではここまで押さえておけばOKです。ダムファジングやカバレッジガイデッドファジングといった細かい分類や、具体的なツール名までは基本情報レベルでは問われません。「ランダムなデータを大量に入力する」という特徴を確実に理解しておきましょう。
📊 セキュリティテスト手法の比較(試験対策)
| 手法 | 特徴 |
|---|---|
| 脆弱性診断 | 既知の脆弱性を網羅的にスキャン |
| ペネトレーションテスト | 実際に侵入を試みて検証 |
| ファジング | ランダムなデータを大量入力して異常を検出 |
| 静的解析 | ソースコードを実行せずに解析 |
📝 IPA試験での出題ポイント
ファジングは「Fuzz(あいまいな、ぼやけた)」という名前のとおり、「予測不能・ランダムなデータ」がキーワードです。
脆弱性診断が「既知のパターン」でスキャンするのに対し、ファジングは「想定外のデータ」で未知の脆弱性を発見する点が異なります。「自動販売機にいろんなコインを入れてみる」というイメージで覚えましょう。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. ファジング(Fuzzing)に関する説明として、最も適切なものはどれでしょうか?
- A. 既知の脆弱性パターンをデータベース化し、システムをスキャンして一致するものを検出する手法
- B. 実際に攻撃者の視点でシステムへの侵入を試み、脆弱性が悪用可能かを検証する手法
- C. ソフトウェアに対して予測不能な大量のデータを入力し、異常動作やクラッシュを引き起こすことで脆弱性を発見する手法
正解と解説を見る
正解:C
解説:
ファジング(Fuzzing)は、ソフトウェアに対して予測不能な大量のデータ(ファズ)を自動的に入力し、異常な動作やクラッシュを引き起こすことで、未知の脆弱性やバグを発見するテスト手法です。「Fuzz」は「あいまいな」「ぼやけた」という意味で、想定外の入力に対するソフトウェアの耐性をテストします。バッファオーバーフロー、整数オーバーフローなどの脆弱性発見に有効です。
選択肢Aは「シグネチャベースの脆弱性診断」の説明です。選択肢Bは「ペネトレーションテスト」の説明であり、いずれもファジングとは異なります。ファジングの特徴は「ランダム・大量・自動」という点です。