ファジング

掲載:2024年06月27日

用語集

「ファジング(Fuzzing)」は、ソフトウェアの開発段階でランダムなデータや無効なデータを意図的に投入し、潜在的なバグや脆弱性を見つけるテスト手法です。ソフトウェアの仕様や内部構造に基づくケースでは発見できない問題の検出が期待できます。一般的に自動化ツールが利用され、効率的なデータ生成やテスト実行が可能です。

         

ファジングとは

ファジングとは、ソフトウェアのバグや脆弱性を発見するためのテスト手法の一つです。無効なデータや予期せぬデータ、ランダムなデータなどを入力して、ソフトウェアの動作を観察することで異常を検知します。

ファジングは、ソフトウェアの内部構造を知る必要がなく、外部からの入出力だけに基づいてテストするブラックボックステストの一種です。ただし、内部構造を理解したうえでテストケースを作成するホワイトボックス的なアプローチが取り入れられる場合もあります。

ファジングとペネトレーションテストの違い

ファジングと同じく脆弱性を発見するためのテスト手法にペネトレーションテストがあります。

ファジングは、ソフトウェアの開発段階で潜在的なバグや脆弱性を発見するためのテストです。一方、ペネトレーションテストは、稼働中のシステム全体に対して攻撃者の視点から攻撃をシミュレートして侵入経路を特定します。

テスト範囲や実施タイミングが異なるファジングとペネトレーションテストを併用することで、より効果的にセキュリティを高めることが可能です。

ファジングの流れ

ファジングの主な流れは、以下のとおりです。

  1. ファズデータの生成
  2. ファズデータの入力
  3. プログラムの挙動の監視
  4. 結果の分析
  5. バグや脆弱性の修正

ファズデータとは、ソフトウェアのバグや脆弱性を引き起こすために作成された無効な範囲のデータや、ランダムに生成されたデータ、異常なデータなどのことです。ファズデータの質がファジングの成果を左右します。作成した大量のファズデータは、ファジングツールを使って自動入力し、結果を収集する方法が一般的です。

上記のサイクルを繰り返すことで、効率的にソフトウェアの品質やセキュリティを向上できます。

ファジングのメリットとデメリット

ファジングは、潜在的なバグや脆弱性の発見に有効なテスト手法ですが、万能なわけではありません。ファジングのメリットとデメリットを見ていきましょう。

《ファジングのメリット》
ファジングの大きなメリットは、大量の予期しないデータやランダムなデータの生成と入力により、人の手で作成したケースでは見逃される潜在的なバグや脆弱性を発見できる点です。
また、ファジングツールを利用することで大量のファズデータの生成と入力を自動化でき、テストにかかる工数を削減できます。ファジングツールは無料、有料問わず様々な種類が提供されていますが、テスト対象に応じて適切なツールを選択することが肝心です。ツール選択にあたっても専門家の助言を仰ぐことが有効です。
ブラックボックステストとして実施されることが一般的なファジングは、ソフトウェアの内部構造を詳しく知らなくてもテストが可能な点もメリットでしょう。
《ファジングのデメリット》
一方で、ファジングはすべての入力値を網羅的にテストできるわけではありません。そのため、カバレッジには限界があり、レアなケースのバグを見逃してしまう可能性があります。
また、ファジングでは、実際には問題にならないケースを含む多くのバグや脆弱性が検知される場合があります。結果を分析し、問題となるケースを判別して、原因を突き止め修正するためには専門知識を持った要員が必要です。

ソフトウェアのテストにファジングを取り入れる際は、メリットとデメリットを理解したうえで、ほかのテスト手法と組み合わせるなどして適切に活用しましょう。