ナレッジ
【連載】なにそれ?あなたの知らないテストの言葉(第1回):ファズテスト (Fuzz testing)

マンガ連載: ファズテスト (Fuzz testing)とは

解説:ファズテスト (Fuzz testing)とは
このマンガ連載では普段目にすることが少ない「なにそれ」という用語をピックアップして解説します。
第一回は「ファズテスト (Fuzz testing)」です。
ファズテストはファジング(Fuzzing)とも呼ばれています。主にセキュリティ方面で聞く用語です。
ISTQB(International Software Testing Qualifications Board)の用語集では、以下のように説明しています。
“ソフトウェアテスト技法の一つ。セキュリティの脆弱性を見つけるために、ファズと呼ばれる大量のランダムデータをコンポーネントまたはシステムに入力する。”
IPA(独立行政法人情報処理推進機構)のファジング活用の手引きでは、以下のように説明しています。
“「ファジング」とは、検査対象のソフトウェア製品に「ファズ(英名:fuzz)」と呼ばれる問題を引き起こしそうなデータを大量に送り込み、その応答や挙動を監視することで脆弱性を検出する検査手法です。”
この二つの説明を含め、マンガでは以下のように説明しました。
“ファズテスト(ファジング)は、ランダムなデータや問題を起こしそうなデータを大量に送って、エラーやクラッシュ、脆弱性を発見するテスト”
極端に長い文字列など開発者が予期していないデータを入力し、システムが異常動作やクラッシュ(異常終了)したとします。その場合、そのシステムの処理には何らかの問題がある可能性が高いです。このように想定していないデータを入力し、その挙動から脆弱性を見つけるテスト技法がファズテストです。
大量のパターンを試行するため、ファジングツール(ファザーと呼ばれる)を用いて実行することが一般的です。例えば、Webサーバーに対するファジングツールでは、さまざまなHTTPリクエストを送ってレスポンスやシステムの挙動を確認します。リクエストURIに極端に長い文字列を設定した際にスタックオーバーフローやヒープオーバーフローの発見につながるなどです。
ファズテスト事例
ファズテストの事例としてMicrosoftの以下の事例があります。
“A Security Comparison: Microsoft Office vs. Oracle Openoffice”
19個のdocファイルをそれぞれ10,000通りの方法で変化させて190,000個のファイルを使い、ターゲットアプリケーションごとにクラッシュを監視した事例です。(つまり変化させたdocファイルをファズとして行ったファズテスト)
結果、Office XPでは293件のクラッシュが発見されました。Offce 2010では17件が発見されました。

引用 : https://insights.sei.cmu.edu/blog/a-security-comparison-microsoft-office-vs-oracle-openoffice/
コードが対象でもファズテストができる
関数やクラスもテスト対象として、大量のランダムなデータを使ったファズテストを行うこともできます(Advanced Security Tester - 2016 )。
これにより、メモリオーバーフローや、悪意ある内部の人間によって挿入されたコード、バックドアへのアクセス(開発者のみが知る意図的に実装されたアクセス経路)の発見につながることがあります。
ファジングツールとAIベースのテスト生成ツールの比較
ファズテストは「数うちゃ当たる」というブルートフォース(総当たり)の側面があります。よって効率はあまりよくありません。
非AIのファジングツールとAIベースのテスト生成ツールを比較した次のような研究もあります。
Mao et al, Sapienz: multi-objective automated testing for Android applications,Proceedings of the 25th International Symposium on Software Testing and Analysis, July 2016, http://www0.cs.ucl.ac.uk/staff/K.Mao/archive/p_issta16_sapienz.pdf
Google Playの上位1,000アプリに適用した結果、非AIのファジングツールでは6個のクラッシュを発見したのに対して、研究対象であるAIテスト生成ツールでは558個のクラッシュを発見しました(うち14個は開発者が本物のバグと確認)。
欠陥を引き起こすために必要な平均的な一連のステップは、非AIのファジングツール(2つ)それぞれ15,305/161だったのに対して、AIテスト生成ツールでは149でした。
この研究だけを見てAIテスト生成ツールが優秀というわけではありませんが、今後はファズテストもAIを用いたテストが進むであろうことが考えられます。
マンガでわかるソフトウェアテスト入門
よろしければこちらもご覧ください。
この記事は面白かったですか?
今後の改善の参考にさせていただきます!