情報畑でつかまえてロゴ
本サイトは NTTテクノクロスが旬の IT をキーワードに
IT 部門が今知っておきたい最新テクノロジーに関する情報をお届けするサイトです

ファジングテスト入門 第1回 ~ファジングテストの概要と必要性~

今回はソフトウェアテスト全体におけるファジングテストの概要についてご紹介いたします。

はじめに

こんにちは, NTTテクノクロス株式会社の村木と申します。
 
本連載ではソフトウェアテストの手法の1つであるファジングテストに関する内容をご紹介したいと思います。
今回はソフトウェアテスト全体におけるファジングテストの概要についてご紹介いたします。

 

○目次

ソフトウェアテストの種類

本連載ではファジングテストにフォーカスを当てて記載していく予定ですが, まずはソフトウェアテストにおけるツールの種類の全体像を整理したいと思います。
 
IPAの『ソフトウェアテスト見積りガイドブック』内「テストのライフサイクルモデル」より抽出したテスト作業と関連するツールの種類を以下にまとめました。
ファジングツールはセキュリティテストツールに該当します。
 
テストライフサイクル 関連作業 関連ツール ツール概要
テスト計画 情報取得と検討 要件管理ツール 要件の管理や可視化が行える, 要件のトレーサビリティ確保ができるようなツール

リスク予測

テスト戦略の設定

テスト工数見積

組織設定

テストの準備 テストベースの取得 テストデータ生成ツール ランダム, または指定条件に基づきテストデータを生成するツール

技法の決定

要員の教育

テストの仕様化 テストケースの設定 テスト管理ツール テストケースの設定, バグ/インシデント管理, 進捗管理, スケジュール管理, レポート機能, ソースコードリポジトリとの連携といった機能を提供するツール
テストケース作成支援ツール 状態遷移や組合せ等のテストケースを自動生成する機能を提供するツール
インフラストラクチャの実現 環境構築ツール 仮想環境の自動構築, 再配布, 管理といった機能を提供するツール
シミュレータツール ソフトウェア, またはハードウェアの実物を使う代わりに模擬環境を提供するツール
テストの実行 テスト(再テストも含む) 単体テストツール スタブ/ドライバといったダミープログラム, 自動テスト等の機能を提供するツール
静的解析ツール コードを実行せずに構造や規約違反(バグ・脆弱性)を検出するツール
動的解析ツール プログラムを実行し実際の動作/カバレッジ/メモリリーク等を監視するツール
GUIテスト自動化ツール モバイル/デスクトップアプリ/ブラウザ等のGUIを自動操作できるツール
性能テスト・負荷テストツール WebアプリやAPI等を対象に大量のアクセスを擬似的に発生させ, 応答時間やボトルネックを測定するツール
セキュリティテストツール システム脆弱性を確認しセキュリティ対策が実装されているか確認するため, セキュリティ診断/脆弱性検査/ペネトレーションテスト/ファジングテスト等の機能を提供するツール
アウトプットチェック ※各種テストツールの機能として内包されている場合がある
結果の判断 ※各種テストツールの機能として内包されている場合がある
※レポート機能等が該当する
テストの完了 テストの目標達成評価 ※テスト管理ツールで管理する
テストの完了確認 ※テスト管理ツールで管理する

テスト環境の保守

プロセス評価

 
○参考

ファジングテストとは

ファジングテストは, テスト対象に対してファズ(fuzz)と呼ばれる無効/不正/ランダムといった問題を引き起こしそうなデータを大量に入力します。
その結果, テスト対象がクラッシュ(予期せぬ異常終了)や異常な振る舞いなどを起こすかどうかを確認する自動化されたテスト手法です。

 

 

○ファジングテストの目的
ファジングテストはツールによってテストデータの生成から実行までが自動化されているため, 通常の設計や仕様に基づくテストでは検出が難しい未知のバグや脆弱性などを効率的に発見する可能性があります。
主なファジングテストの実行目的は以下の通りです。
  • ・バグや脆弱性の発見:ツールによって繰り返し実行可能なため, 未知のバグや脆弱性を開発段階で機械的に発見できる可能性があります。
  • ・高カバレッジなテスト:手作業のテスト実施では実現が困難なランダムかつ大量の入力データを自動生成し, 短時間で網羅的かつロバスト性の検証することができます。
  • ・コスト(労力)削減:専用ツールを用いてテスト工程を自動化することで, 人的コストを抑えながらテストの効率化が実施でき, また他のテスト対象への流用も容易です。

 

○ファズ(fuzz)の例
ファズはテスト対象によって以下のように様々な種類があります。
  • ・CLIプログラム:コマンドライン引数, 環境変数, 設定ファイル
  • ・ネットワーク通信ソフト/APIなど:ネットワークプロトコル(TCP/UDP等), HTTPリクエスト/レスポンス

 

またファズの例は以下の通りです。
  • ・極端に長い文字列:入力フィールドに100万文字のデータを入力し, バッファオーバーフローを引き起こすなど
  • ・数値の境界値・不正値:負の数/ゼロ/または非常に大きな整数を入力する, など
  • ・フォーマットの不整合:画像ファイル形式(JPEG/PNG)やプロトコル(IP/TCP)のヘッダ情報に不正な値(Fragment Offset等)を設定する, など

 

○ファジングツール
ファジングテストを実施するための専用ツールとして以下のような機能を提供していることが多いです。
  • ・ファズの生成/加工:ファズを自動的に大量に生成します。
  • ・ファズの送信/入力:対象の入力インターフェース(標準入力/ファイル/ソケット通信など)に合わせて自動的にファズデータを入力します。
  • ・テスト対象の挙動の監視/分析:クラッシュ等の異常が発生するかを監視し, 検出した異常の通知や分析を実施します。

 

中でもソケット通信を入力インターフェースとして提供しているソフトウェアへのファジングテストを提供するツールをネットワークファジングツールとよび, NTTテクノクロスでは本ツールの検証作業等に携わっております。

 

○ペネトレーションテストとファジングテストの比較
似たテスト手法としてよく比較されるテストにペネトレーションテストが存在します。
以下簡単な概要の比較表を記載しておりますが, ファジングテストは品質評価, ペネトレーションテストはセキュリティ強度評価のために行うといった違いがあります。

 

比較項目 ファジング (Fuzzing) ペネトレーションテスト (Pen-test)
目的 未知のバグ・脆弱性の発見といった品質・安全性の評価 攻撃成立可否や防御力といった実践的防衛力の評価
主な対象 ソフトウェア/プロトコル/コンポーネント ネットワーク/システム全体
手法 ファズを大量に入力し, システムのクラッシュや異常動作からバグや脆弱性を検知する セキュリティ専門家が「攻撃者」の視点で, 実際の攻撃手法を使い, システムへの侵入を試みる
タイミング 開発・試験段階 運用・リリース前

 

○参考

ソフトウェアテストツールの利用状況

ファジングテストに関する市場動向として, ソフトウェアテストツールの利用状況とコスト感をご紹介します。

○テストツール利用状況
ソフトウェアテストのテストツール利用率を確認したところ, 2022年調査の段階で40.3%ほどの利用率があることがわかりました。

 

また, 組込みソフトウェアに絞った調査結果を確認したところ, 2019年調査段階で71%ほどの利用率があることがわかりました。

出典:組込みソフトウェア開発データ白書2019

○ソフトウェアテストに掛けるコスト
一方でソフトウェアテストに掛ける金銭的コストについては, 開発費用全体の20~30%という回答が最多となっておりテスト工数比率と比べると低い傾向にあると考えられます。

 

 

上記より, ソフトウェアテスト市場は拡大傾向にあり, テストツールの利用も増加しているが, テスト工程についてはコスト比重が高いわけではない, ということがわかると思います。

 

○参考

ファジングテストの実施タイミング

続いてファジングテストに関する市場動向として, ファジングテストの実施タイミング例をご紹介します。
主に実装/テスト⼯程において実施されている事がわかります。

 

○Microsoft
Implementation フェーズ12(開発ライフサイクルでは「実装」⼯程に相当)や, 出荷前のVerificationフェーズ13(開発ライフサイクルでは「テスト」⼯程に相当)でファジングが実施されています。

 

出典:Microsoft:「SDL PROCESS: VERIFICATION14」

 

○Cisco Systems
Validateフェーズ(開発ライフサイクルでは「テスト」⼯程に相当)でファジングが活⽤されています。

 

出典:Cisco Systems:「Cisco Secure Development Lifecycle21」

 

○富⼠通株式会社
テスト⼯程においてファジングツールを使ったセキュリティ検証を⾏っており, 開発中の複数製品で脆弱性を検出し製品出荷前の対策を実現しています。

 

出典:富士通:「富士通グループ 情報セキュリティ報告書 201622」

 

○参考

ファジングテストの事例調査

同様にファジングテストに関する市場動向として, ファジングテストの事例をご紹介します。
Microsoft‧Google‧Mozilla‧Adobeといった企業において製品公開前にファジングテストを実施していることがわかります。

 

○Microsoft SDLにおけるファジングの活⽤
・ファジングが本格的に導⼊されたのはWindows Server 2003の開発においてセキュリティプッシュ(全開発者を動員したセキュリティ検査)が実施された頃。
・ファジングによって問題が発⾒できた場合にも, 単に場当たり的にその問題に対処すればいいというわけではなく, なぜその段階まで問題が発⾒できなかったのかを検証しなければなりません。
・ファジングに関連するアップデートとしては, 導⼊当初からSDL 2.2(2005年)まではファイルパーサーやRPC(Remote Procedure Call)インタフェースがおもなファジングの対象でしたが, SDL 3.0(2006年)からはActiveXコントロールまで対象が拡張されています。

 

出典:Microsoft

 

○Adobe Flash Playerに対するファジングの実施
・Flash PlayerへのSWFファイルを利⽤した攻撃に対する脆弱性をテストするために, ⼤規模なファジングを実施したことが紹介されました。
・Flash Playerに対するファジングは、Googleの協⼒の元で以下のように⾏われました。
・"corpus distillation"⽅式を採⽤
・"corpus distillation"は、⼤量のソースコード(この場合はSWFファイル)から, それらのコードの特性を網羅的に含んだ最⼩セットを⾃動⽣成し, それをファズとして利⽤する⼿法。
・Web上の20テラバイトのSWFファイルを元に、約20000ファイルの"最⼩セット"を⽣成。
・最⼩セットの⽣成には2000CPUを使って1週間を要しました。
・最⼩セットおよびそこから(ビットフリップなどによって)少しずつ変化させたファイルを使い, 3週間にわたってファジングを実施。

出典:⁠Adobe Secure Product Lifecycle

 

○ファジングの成功事例
・MicrosoftのSAGEファジングツールは, 2008年から1000台を超えるマシンで稼動し, Windows 7の開発時に検出されたバグの総数の3分の1を検出しています。
・Microsoftは, 同社のOneFuzzプロジェクトをgithub上でMITオープンソースライセンスの下で公開しました。
・OneFuzzはAzureベースのセルフホスト型ファジング‧アズ‧ア‧サービスソリューションで, 継続的インテグレーション(CI)のパイプラインに埋め込むことを意図したものです。
・Googleはバグの80%をファジングで検出しているデータがあります。
・Chromeエンジンを, 1万5000コアを超えるクラスタを⽤いて24時間体制でファジングしているようです。
・Mozillaは, ファジングによって2004年以来, Firefox内に数千のバグを検出しています。

 

○参考

ファジングテストの必要性

上記より, ファジングテストには以下のような利点があると考えられます。

・世の中的にテスト工程比率やツール利用率は増加傾向にあるが, テスト工程自体のコスト比重は高いわけではない状況です。
・コストを上げずにツールを用いてテスト工程を効率化する必要性があると考えられ, ファジングテストには大きくコストを掛けずに品質を担保できる可能性があります。
・人手で実施が困難なパターンの試験を自動的かつ効率的に実施でき, 脆弱性やバグを検出できる可能性があります。
・大手企業での実績も公開されており, 実際にバグを検出した実績があります。
・専門的な知識が十分な状態でなくても, セキュリティの担保をツールの導入によって比較的に容易に実現できます。
・ツールの動作は自動化されており, 利用に高度な知識を要求しない場合が多いです。
・対象とするインターフェースが実装されていれば開発工程の中に組込むことができ, 運用前にバグや脆弱性の検出ができます。
・自動化されたツールはCI/CDへの組み込みを想定されている場合もあり, 開発プロセスへの組み込みも検討できます。

おわりに

今回はソフトウェアテスト全体におけるファジングテストの概要についてご紹介いたしました。
次回はネットワークファジングツールについて動作イメージの一例をご紹介したいと思います。

本件に関するお問い合わせ

NTTテクノクロス
フューチャーネットワーク事業部

村木 遼亮

お問い合わせ

連載シリーズ
テクノロジーコラム
著者プロフィール
村木 遼亮
村木 遼亮

[著者プロフィール]
フューチャーネットワーク事業部 第一ビジネスユニット
村木 遼亮(MURAKI RYOUSUKE)