Facebook x

ジャンル

ファジング(fuzzing)とは?脆弱性を検出するテストの実施方法とメリット・注意点
テスト技法・工程
テスト技法・工程 更新日 2024.11.26
x hatenabookmark
1

ファジング(fuzzing)とは?脆弱性を検出するテストの実施方法とメリット・注意点

監修: 布施 昌弘

バルテス・ホールディングス株式会社 R&C部 副部長

「ファジング」とは、ソフトウェアに異常データ(ファズ)を与えて、バグや脆弱性を検出するテストです。

ファジングを行うことで、開発者が想定していない脆弱性を見つけ、サイバー攻撃などに備えることができます。

本記事では、ファジングの概要や混同されやすい「ペネトレーションテスト」との違い、実施するメリット・注意点について解説していきます。

さらに、ファジングを実施する流れについてもご紹介しますので、ぜひ最後までご覧ください。

もくじ
  1. ファジングとは
    1. 異常データを与えてバグ・脆弱性を検出するテスト
    2. ペネトレーションテストとの違い
  2. ファジングを実施する際のメリット
    1. 潜在的なバグや脆弱性を検出できる
    2. 実施のハードルが比較的低い
  3. ファジングを実施する際の注意点
    1. ソフトウェアの種類によってファズは変わる
    2. あらゆるバグ・脆弱性を検出できるとは限らない
  4. ファジングを実施する流れ3ステップ
  5. 効率よく脆弱性を検出するなら脆弱性診断がおすすめ
  6. まとめ

1.ファジングとは

ファジングは、正常パターンから外れた異常ケースを検証する「異常系テスト」の一種です。

この章では、ファジングの概要について解説していきます。

1-1 異常データを与えてバグ・脆弱性を検出するテスト

ファジング(fuzzing)とは、さまざまなパターンの異常データ(ファズ)をソフトウェアに与え、その挙動を検証するテスト手法です。

通常の利用時にはあり得ないようなデータも含めて大量に与え、未知の問題が発生しないかを検証します。

ソフトウェアテストにおいては多くの場合、正常ケースをひと通りパスした後に実施されます。また、ソフトウェアの脆弱性(セキュリティ上の弱み)を診断する「脆弱性診断」のプロセスに取り入れられるケースもあります。

実施の方法としては、ツールを用いて総当たり的に実施することが一般的です。

1-2 ペネトレーションテストとの違い

テキストテキストテキストテ 特徴
ペネトレーションテスト

・ソフトウェアに疑似的な攻撃・侵入を試みて振る舞いを検証し、セキュリティ対策の強度を評価する。

・具体的なシナリオをもとに実施する。

・手動での実施項目もあるため、セキュリティやプログラミングの専門知識も求められる

ファジング

・通常時には考えられないデータを大量に与えてその挙動を検証する。

・一般的にツールで総当たり的に行うので、専門知識がなくても効率的に実施することができる。

ファジングと似ているテスト手法に「ペネトレーションテスト」があります。

ペネトレーションテストとは、ソフトウェアに疑似的な攻撃・侵入を試行し、その際の挙動を検証するテスト手法です。

一般的にペネトレーションテストは、具体的なシナリオに沿って実施します。そのため、潜在し得る脆弱性の当たりは付いている前提です。また、詳細な手順を完全に自動化することは難しいため、ある程度は手動で実施することが多いでしょう。

一方でファジングは、ファジングツールを用いて機械的に実施することが一般的です。

また、総当たり的に実施するため、ピンポイントに脆弱性を想定しないケースも少なくありません。

なお、ペネトレーションテストについて詳しくは、次の記事をご覧ください。

2.ファジングを実施する際のメリット

ファジングを実施するメリットは、主に次の2つです。それぞれ詳しく見ていきましょう。

2-1 潜在的なバグや脆弱性を検出できる

ファジングを実施することで、潜在的なバグや脆弱性を検出できます。

ファジングでは前述のとおり、通常の利用時にはあり得ないような異常データも含めて実施します。そのため、開発者が予期しづらい状況におけるソフトウェアの挙動も検証できるのです。

サイバー攻撃を図る悪質なユーザーは、むしろ異常データを選んでソフトウェアに与えることが多いでしょう。

潜在的なバグや脆弱性を検出できるファジングは、そのような攻撃者への対策として有効です。

2-2 実施のハードルが比較的低い

ファジングは、比較的実施のハードルが低いといえます。

なぜなら、ファジングのテスト実施自体はファジングツールがカバーしてくれるためです。

ファジングツールは異常なデータを機械的に生成・送信し、ソフトウェアの挙動を監視してくれます。手動で大量のテストケースを実施する必要はありません。

また、ファジングはソフトウェアの入力・出力に着目して実施する「ブラックボックステスト」の一種です。

ソフトウェアの内部構造を加味せずに実施ができるため、プログラミングの知識が少ない方でも実施しやすいです。

3.ファジングを実施する際の注意点

ファジングを実施する際の注意点は、主に次の2つです。ファジングの実施を考えている方は、注意点をしっかり把握しておきましょう。

3-1 ソフトウェアの種類によってファズは変わる

ソフトウェアの種類によってファズ(異常データ)は変わります。

たとえば、Webアプリケーションに与えるファズは、HTTPリクエスト(Web通信における要求データ)が一般的です。

一方で画像処理ソフトウェアの場合は、画像ファイルがファズとなります。

ファジングツールによっては、送りたいファズに対応していないケースも考えられます。そのため、ファジングツールを選ぶ際には対応しているファズの形式を確認しましょう。

3-2 あらゆるバグ・脆弱性を検出できるとは限らない

ファジングであらゆるバグ・脆弱性を検出できるとは限りません。ソフトウェアに送信され得るデータのパターンは無数に存在します。

ファジングツールで効率化しても、全てのパターンを実施するためには膨大な時間がかかるため、現実的には不可能です。

そのため、ファジングツールの設定で送るデータの方向性をある程度は絞り込むことになります。ファジングで実施しきれないパターンがある以上、「ファジング結果がOKだからバグ・脆弱性はゼロ」とは言い切れないのです。

4.ファジングを実施する流れ3ステップ

ファジングを実施する際の大まかな流れは、次の3ステップです。1つずつ順番に見ていきましょう。

ステップ1 準備

まずは、ファジングの実施準備を済ませます。ファジングの実施対象や実施目的、送りたいファズの形式などを明確にし、それに沿ったファジングツールを選定しましょう。

代表的なファジングツールは次の2つです。

ツール名 特徴 有料/無料
Defensics 多様なファズ形式に対応可能。商用のためサポートが充実している。 有料
American fuzzy lop オープンソースでカスタマイズが可能。ただし、ある程度プログラミングの知識が必要。 無料

また、担当者や実施スケジュールも決めておきましょう。

ステップ2 実施

次に、実施スケジュールに沿ってファジングを実施します。ファズの送信方法や、データの選定方法などをファジングツールに設定し、実行しましょう。

ファジングツールがテスト対象のソフトウェアへファズを送り、その挙動を監視してくれます。

ステップ3 結果分析

ファジングの実施がひと通り完了した後は、ファジングの結果を分析します。ファジング結果のNG項目をチェックし、その原因や考えられるリスクなどを分析しましょう。

また、実施したいパターンがテストされているかチェックすることも大切です。

バグや脆弱性が判明した場合は、その内容に応じてソフトウェア改修やセキュリティ対策を行いましょう。

5.効率よく脆弱性を検出するなら脆弱性診断がおすすめ

3章で解説したように、ファジングだけであらゆるバグ・脆弱性を検出することは困難です。

また、仕様上は正常なデータであっても脆弱性がないとは言い切れません。ソフトウェアの脆弱性を漏れなく検出するためには、ファジングだけでは不十分といえます。

効率よくソフトウェアの脆弱性を検出したい場合は、脆弱性診断サービスの活用がおすすめです。

セキュリティのプロが網羅的にソフトウェアを精査するため、ツールでは発見が難しい脆弱性も検出できます。また、自社の人的リソースを浪費する心配もありません。

なお、当サイトを運営するバルテスでも、Web・モバイル・IoTデバイスなどの幅広いIT資産の脆弱性診断サービスを提供しています。ツールによる効率性の高い診断に、プロによる確実性の高い手動診断を組み合わせたサービスです。

「ファジングだけでは不安がある」「労力をかけずに高品質な診断結果を得たい」といった場合は、ぜひご利用ください。

まとめ

ファジングとは、さまざまなパターンの異常データ(ファズ)をソフトウェアに与え、その挙動を検証するテスト手法です。

ファジングは実施のハードルが比較的低く、潜在的なバグや脆弱性を検出できるメリットがあります。

ただし、ファジングだけでバグや脆弱性を100%検出できるとは限りません。

ファジングの注意点や実施方法を把握し、適切に実施することが大切です。ファジングを実施する際には、今回の内容をぜひ参考にしてください。

テスト技法・工程
x hatenabookmark
1

監修: 布施 昌弘

バルテス・ホールディングス株式会社 R&C部 副部長

様々なテスト対象(組込み系、Web 系、金融系)の現場でテスト設計、テスト管理などを行う。現在は、品質教育サービス「バルカレ」講師とコンテンツ制作、コンサルティングを担当する。JSTQB 認定 Advanced Level テストマネージャ。 著書は、『【この1冊でよくわかる】 ソフトウェアテストの教科書 [増補改訂 第2版]』、『いちばんやさしいソフトウェアテストの本』。