ソフトウェアにさまざまなデータを入力し、異常な挙動がないか検証することで脆弱性や不具合を検出するテスト方法
ファジング(英:fuzzing)とは、ソフトウェア製品の脆弱性や不具合を検出するテスト手法のひとつ。あらゆる種類のデータの入力を繰り返し試し、それに対し製品がどのような挙動を起こすか調査する。こうした入力データが「ファズ(英:fuzz)」と呼ばれることから、「ファズテスト(英:fuzz test)」ともいう。
ファジングでは、極端に長い文字列や本来は使わないコードなど、問題が生じそうなデータを敢えて用いる。それにより、ソフトが異常終了する、再起動が必要となるなど、想定外の入力に対しどのような応答をするかを確認。その過程で不具合や脆弱性を発見する。
ファジングの方法には、問題が発生しそうなデータを手動で入力する方法もあるが、データを機械的に変化させ、利用する手法も活用されている。大量のデータを入力して検証しなければならないため、データの生成から入力、応答の監視まで一連の流れを自動で行う「ファジングツール」が使われることも多い。ファジングツールには、商用からオープンソースソフトウェアまで、さまざまなツールがある。
一方、ファジングで入力可能なデータは無限に存在しており、検証をすべて実行することは不可能ともいえる。どの段階をもって十分な検証ができたとするかの判断が難しく、時間をかけて大量のデータで検証すれば精度は高まるが、コストがかさんでしまう。一方、検証するデータが少ないと、検証漏れが懸念される。
用途
脆弱性を検出
開発者が想定していないデータ入力についてテストを行うことで、予期せぬエラーなどを発見し、悪用される恐れがある脆弱性がないか検証する。
不具合を発見
利用者が誤った操作を行った場合に発生する不具合やエラーをあらかじめ把握し、エラー処理や警告表示などで注意喚起を促すことができる。誤った操作によるトラブルを防止する効果が期待できる。