ファジングはソフトウェアテスト手法の一つで、通常の使い方では想定されないデータを対象の製品・システムに与えて、意図的に例外事象を発生させます。
これにより、潜在的なバグ・脆弱性を検出させることを目的としています。
この手法には、バグ・不正をより効果的に検出できるメリットがありますが、課題もあります。そこで、メリットと課題、実践方法を実例を交えて解説します。
ファジングとは
ファジングとは、ソフトウェアテストの手法の一つです。
ファズというのは、英語で「毛羽立った」という意味の言葉で、ソフトウェア用語では、「不正なデータ」をファズといいます。
ファズ(fuzz)は不正データのほか、通常の使用では生じない「予期せぬデータ」「ランダムなデータ」を対象の製品・システムに与え、意図的に例外を発生させます。
例外を発生させて、不具合がないか確かめることにより、潜在的なバグ・脆弱性を検出しやすくします。
もう少し簡単に言うと、aaAaaaAaaaaAaaaaaA などというデータは、通常入力データとしてはないものですが、これを10万回続けて入力をした場合の反応を見るのがファジングというテストです。
ファジングは、ツール(ファザーと呼ばれます)を用いて、自動でファズを発生させ、大量に製品・ソフトウェアに不正なデータを送ります。
バグ・脆弱性の発生状況を検出し、製品の改善・脆弱性の診断等に用いることができるわけです。
サイバー攻撃において攻撃者は不正なデータによる攻撃を行いますが、ファジングを実施することで、どれくらい製品・ソフトウェアが不正データに耐えられるかを試すことができます。
ファジングのメリット
ファジングは、製品・ソフトウェアの品質を検証する手法です。
特にサーバ・ブラウザなど、通信に依存する機器およびソフトウェア、あるいは画像の送信をつかう技術の検証の場面を主な対象としています。
ファジングを利用することには、次のようなメリットがあるとされています。
1.隠れた脆弱性を簡単に見つけることができる
脆弱性があればファジングにより検出されるため、隠れたセキュリティリスクを簡単に検証することが可能です。
また、テストに耐えられれば、対象の製品・ソフトウェアが堅牢であることの証明にもなります。
サイバー攻撃においては、攻撃者は不正なデータによる攻撃を行いますが、どれくらい製品・ソフトウェアが不正データに耐えられるかファジングにより試すことができます。
特にゼロデイ攻撃といって、脆弱性対応プログラムのリリース前に行われる攻撃を先回りして知ることができる点は強みです。
サイバー攻撃を効果的に交わせる手段になると考えられていることから、ファジングはテストの中でも注目されています。
ペネトレーションテストが、既知の攻撃をシミュレーションしたり、設計上の不備をあらかじめ把握して、システム内への侵入を試みるのと違い、未知の攻撃にも対応しやすい手段と考えられているのです。
2. バグを検出できる
ツールにより自動でバグを探すことができます。
ファザーを実行すると、自動でバグを探し、完全に検出し終わるまでバグの検索を続けることができます。
他のテスト方法や人の手では検出できなかったバグを発見することができるのです。
3.簡単に作業が可能
ファジングはツールを使ってバグや脆弱性を発見する作業ですが、それほど難しい技術を要求される作業ではないので、ファザーの使い方さえ覚えれば誰でも取り組むことができる作業です。
しかも、大半は自動でファザーが作業をしてくれるので、高度な技術力を持つ人員の手を借りなくても作業を進めることが可能です。
脆弱性スキャンテストよりも時間はかかりますが、自動である点は同じなので、時間とコストをあまり必要としない点に大きなメリットがあります。
ファジングの課題
メリットがある一方で、以下のようなデメリットも存在します。
1.パターンに当てはまらないバグは見つけることができない
ペネトレーションテストよりも未知の攻撃には強いとされているファジングですが、それでもパターンには依存しています。
ファザーにできるテストがあらかじめ決められており、それぞれのテストパターンが見つけられるバグや脆弱性のみが検出できるという限界があるのです。
このことから、例えば、バグがないことの証明まではファジングではできないとされています。
なお、バグを修正するには、別途コーディングが必要です。
2.どのファザーをどのソフトウェア・製品に使うかは問題
「1.パターンに当てはまらないバグは見つけることができない」と関連しますが、ファジングで見つけられるバグや脆弱性はファザー次第です。
どのファザーを使うのがもっとも適切かは、わからないことも多いので、専門家の知恵を借りて最適なファザーを使う必要が生じます。
3.詳細な原因分析には向かない
システムがファザーの実行によりクラッシュを起こした場合、どういう原因でクラッシュが起きたかを詳細に知ることができれば、修正することも簡単です。
しかし、実際にはそうではありません。
別途、製品・ソフトウェアあるいはファザーのログを分析するなどして、技術的な専門知識のある人による詳細な分析を行うことが必要です。
この結果、ファジングの一部の本質的な作業は人の手に依存してしまいます。
ファジングの例
ファジングは、次のような手順で進めます。
- ファズの生成を行う
- ファズを対象機器に送信する
- 対象機器の挙動や死活監視を行う
例えば、サイバー攻撃のターゲットとされやすいWebサーバでは、上記の手順に従ってファズをツールにより送信し、Webサーバの挙動をその応答により監視するのです。
挙動に異常が生じた場合、あるいは全く応答がなくなってしまった(クラッシュが起きた)場合、その原因を詳細に分析します。
また、同じくサイバー攻撃のターゲットとされやすいブラウザもファジングが必須です。
実際に、現在使われている主なブラウザでは、ソフトウェアベンダーにより億を超えるテスト回数により徹底的にファジングを行ってからリリースされています。
ファジングの実践方法
ファジングについて、自社でも実践してみようと思う場合、手引き書となるのがJPAによる「ファジング活用の手引き」および「ファジング実践資料」です。
これらの手引書では、ファジングの概説を行い、さらにツールの使い方を実際の利用にそって説明をしています。
特にファジング実践資料は、入門編として利用しやすいオープンソースファジングツールであるTaof 、Peach、AFLの実際の使い方を解説していますので、ツールを入手後すぐに実践するための参考資料として利用できます。
ファジングに使えるツール
ファジングに使えるツールには、無料でも使えるオープンソースのものと、有料の商用ソフトウェアとがあります。
オープンソースソフトウェアのファザーには多数の種類がありますが、代表的なツールはJPAのガイダンスでも取り上げられているAFLや、Peach、Taonなどがあり、入手しやすく、また取り扱いもしやすいものです。
オープンソースのファザーは、企業の製品・商用ソフトウェアにも広く使われているので、活用はしやすいものと考えられます。
これに対して、例えば特定のIoT機器の監視をしたいなどの理由で、商用のツールを購入し、設定変更あるいはカスタマイズして利用するような例もあります。
まとめ
異常な入力などのデータ送信を多数回繰り返して行うファジングは、製品・ソフトウェアの脆弱性を見つけるため、またバグを見つけるために重要なテストと考えられています。
人の手をあまり使わず、大半の作業を自動でできることから、費用値効果にも優れているテスト手法ともいえます。
自社のシステム・インフラ等に合わせてテストを計画し、そのうえでファジングツールを選んで実践してみましょう。
ただし、性質上、ファジングでは見つけられないバグがあり、自動でテスト結果の検証や原因分析をすることができない点に限界があることは知っておき、カバーする手段についても整理・検討しておきましょう。