近年、パソコン以外の製品のソフトウエアに「脆弱性」と呼ばれるセキュリティー上の問題が見つかる事例が増えている。この脆弱性が悪用されると最悪の場合、のようなデータの破壊や情報漏えい、遠隔操作といった被害につながる可能性がある(図1)。製品の利用者が被害に遭ってしまわないように、出荷の前段階で製品に残る脆弱性の数を低減させてセキュリティー上の品質を高める必要がある。また、製品出荷後に脆弱性が見つかった場合には、製品出荷前に対策するよりもコストがかかり対策が困難になる場合もある。このため、できる限り製品出荷前に脆弱性を検出し、対策を施す必要がある。この脆弱性の検出に焦点をあてたテストをセキュリティー・テストという。その手法の一つに「ファジング」がある。

図1 脆弱性の悪用

あり得ない入力値を代入して脆弱性を探す

  ファジングとは、簡単に言えば対象機器が持つソフトウエア・インタフェースの「入力値」に注目するセキュリティー・テストである(図2)。このため、入力を受け付ける機能を持つものであれば、汎用OS上で動作するアプリケーション・ソフトウエア(アプリ)からOSとアプリが混然一体となった組み込み機器に至るまで、様々なものに幅広く適用できるセキュリティー・テストである。

図2 ファジングの概要
[画像のクリックで拡大表示]

 ファジングは仕様書通りに動作しているかを確認するようなテストでは検出が困難な「脆弱性」を検出できる。例えば、英語のアルファベットの入力だけを想定しているソフトウエアに対して、次々にあらゆる文字コードが混じったデータを入力すれば、英語のアルファベットの入力では確認しえなかった脆弱性(例:書式文字列の問題、http://jvndb.jvn.jp/ja/cwe/CWE-134.htmlなど)を検出できる可能性があるといった具合だ。

 ではファジングはどのように実施するのか。ファジングは大量のデータを送り込むテストのため、手動で実施するには限界がある。このためファジングは「ファジング・ツール」と呼ばれる専用のツールを用いて実施するのが一般的である。ファジング・ツールを使ったテストは、ツールによって自動化されているものが多い。

 また、ファジング・ツールは商用製品をはじめ、オープンソース・ソフトウエアやフリー・ソフトウエアのツールが数多く存在している。