「ファジング」は、ソフトウェアのリスクを検出するうえで有効なテスト手法の1つです。ファジングという名前を聞いたことはあっても、その意味や実施方法を知らない方も多いのではないでしょうか。
今回はファジングとは何か、基本からわかりやすく解説します。ファジングの注意点や実施の流れも紹介するため、ぜひ参考にしてください。
- もくじ
1.ファジングとは
ファジング(fuzzing)とは、さまざまなパターンの異常データ(ファズ)をソフトウェアに与え、その挙動を検証するテスト手法です。
通常の利用時にはあり得ないようなデータも含めて大量に与え、未知の問題が発生しないかを検証します。
ファジングは、正常パターンから外れた異常ケースを検証する「異常系テスト」の一種です。ソフトウェアテストにおいては多くの場合、正常ケースをひと通りパスした後に実施されます。また、ソフトウェアの脆弱性(セキュリティ上の弱み)を診断する「脆弱性診断」のプロセスに取り入れられるケースもあります。
1-1 ファジングの特徴
ファジングの特徴は、主に次の2つです。それぞれ詳しく見ていきましょう。
ブラックボックステストの一種
ファジングは「ブラックボックステスト」の一種です。ブラックボックステストとは、ソフトウェアの入力・出力に着目して実施するテストを指します。ソフトウェアへ入力(送信)したデータに対して、出力されるデータや挙動が妥当であるかを検証します。
ソフトウェアの内部構造を加味しないため、ソースコードが必要ありません。そのためファジングは、プログラミングの知識が少ない方でも実施しやすいといえます。なお、ブラックボックステストについて詳しくは、次の記事をご覧ください。
ツールで総当たり的に実施する
ファジングでは大量のファズをソフトウェアに与えるため、手動では膨大な時間がかかってしまいます。そのためファジングは、専用のファジングツールを用いて総当たり的に実施することが一般的です。
ファジングツールは異常なデータを機械的に生成・送信し、ソフトウェアの挙動を監視してくれます。手動で大量のテストケースを実施する必要はありません。
1-2 ペネトレーションテストとの違い
ファジングと似ているテスト手法に「ペネトレーションテスト」があります。両者の違いを押さえておきましょう。ペネトレーションテストとは、ソフトウェアに疑似的な攻撃・侵入を試行し、その際の挙動を検証するテスト手法です。
一般的にペネトレーションテストは、具体的なシナリオに沿って実施します。そのため、潜在し得る脆弱性の当たりは付いている前提です。また、詳細な手順を完全に自動化することは難しいため、ある程度は手動で実施することが多いでしょう。
一方でファジングは、ファジングツールを用いて機械的に実施することが一般的です。また、総当たり的に実施するため、ピンポイントに脆弱性を想定しないケースも少なくありません。なお、ペネトレーションテストについて詳しくは、次の記事をご覧ください。
2.ファジングのメリット
ファジングを実施するメリットは、主に次の2つです。それぞれ詳しく見ていきましょう。
2-1 潜在的なバグや脆弱性を検出できる
ファジングを実施することで、潜在的なバグや脆弱性を検出できます。ファジングでは前述のとおり、通常の利用時にはあり得ないような異常データも含めて実施します。
そのため、開発者が予期しづらい状況におけるソフトウェアの挙動も検証できるのです。
サイバー攻撃を図る悪質なユーザーは、むしろ異常データを選んでソフトウェアに与えることが多いでしょう。潜在的なバグや脆弱性を検出できるファジングは、そのような攻撃者への対策として有効です。
2-2 実施のハードルが比較的低い
ファジングは、比較的実施のハードルが低いといえます。ファジングのテスト実施自体はファジングツールがカバーしてくれるためです。
前述のペネトレーションテストだと手動での実施項目が多く、セキュリティやプログラミングの専門知識も求められることが多いです。一方でファジングは、ファジングツールの設定さえ行えれば、プログラミングの知識が少なくても実施できます。
3.ファジングを実施する際の注意点
ファジングを実施する際の注意点は、主に次の2つです。ファジングの実施を考えている方は、注意点をしっかり把握しておきましょう。
3-1 ソフトウェアの種類によってファズは変わる
ソフトウェアの種類によってファズ(異常データ)は変わります。
たとえば、Webアプリケーションに与えるファズは、HTTPリクエスト(Web通信における要求データ)が一般的です。
一方で画像処理ソフトウェアの場合は、画像ファイルがファズとなります。
ファジングツールによっては、送りたいファズに対応していないケースも考えられます。そのため、ファジングツールを選ぶ際には対応しているファズの形式を確認しましょう。
3-2 あらゆるバグ・脆弱性を検出できるとは限らない
ファジングであらゆるバグ・脆弱性を検出できるとは限りません。ソフトウェアに送信され得るデータのパターンは無数に存在します。
ファジングツールで効率化しても、全てのパターンを実施するためには膨大な時間がかかるため、現実的には不可能です。
そのため、ファジングツールの設定で送るデータの方向性をある程度は絞り込むことになります。ファジングで実施しきれないパターンがある以上、「ファジング結果がOKだからバグ・脆弱性はゼロ」とは言い切れないのです。
4.ファジングを実施する際の大まかな流れ
ファジングを実施する際の大まかな流れは、次の3ステップです。1つずつ順番に見ていきましょう。
ステップ1 ファジングの実施準備
まずは、ファジングの実施準備を済ませます。ファジングの実施対象や実施目的、送りたいファズの形式などを明確にし、それに沿ったファジングツールを選定しましょう。
代表的なファジングツールは次の2つです。
ツール名 | 特徴 | 有料/無料 |
---|---|---|
Defensics | 多様なファズ形式に対応可能。商用のためサポートが充実している。 | 有料 |
American fuzzy lop | オープンソースでカスタマイズが可能。ただし、ある程度プログラミングの知識が必要。 | 無料 |
また、担当者や実施スケジュールも決めておきましょう。
ステップ2 ファジングの実施
次に、実施スケジュールに沿ってファジングを実施します。ファズの送信方法や、データの選定方法などをファジングツールに設定し、実行しましょう。
ファジングツールがテスト対象のソフトウェアへファズを送り、その挙動を監視してくれます。
ステップ3 ファジングの結果分析
ファジングの実施がひと通り完了した後は、ファジングの結果を分析します。ファジング結果のNG項目をチェックし、その原因や考えられるリスクなどを分析しましょう。
また、実施したいパターンがテストされているかチェックすることも大切です。
バグや脆弱性が判明した場合は、その内容に応じてソフトウェア改修やセキュリティ対策を行いましょう。
5.効率よくソフトウェアの脆弱性を検出するためには
前述のように、ファジングだけであらゆるバグ・脆弱性を検出することは困難です。また、仕様上は正常なデータであっても脆弱性がないとは言い切れません。ソフトウェアの脆弱性を漏れなく検出するためには、ファジングだけでは不十分といえます。
効率よくソフトウェアの脆弱性を検出したい場合は、脆弱性診断サービスの活用がおすすめです。セキュリティのプロが網羅的にソフトウェアを精査するため、ツールでは発見が難しい脆弱性も検出できます。また、自社の人的リソースを浪費する心配もありません。
なお、当サイトを運営するバルテスでも、Web・モバイル・IoTデバイスなどの幅広いIT資産の脆弱性診断サービスを提供しています。ツールによる効率性の高い診断に、プロによる確実性の高い手動診断を組み合わせたサービスです。
「ファジングだけでは不安がある」「労力をかけずに高品質な診断結果を得たい」といった場合は、ぜひご利用ください。
まとめ
ファジングとは、さまざまなパターンの異常データ(ファズ)をソフトウェアに与え、その挙動を検証するテスト手法です。
ファジングは実施のハードルが比較的低く、潜在的なバグや脆弱性を検出できるメリットがあります。
ただし、ファジングだけでバグや脆弱性を100%検出できるとは限りません。
ファジングの注意点や実施方法を把握し、適切に実施することが大切です。ファジングを実施する際には、今回の内容をぜひ参考にしてください。