ナレッジ

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

【連載】なにそれ?あなたの知らないテストの言葉(第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を用いたテストが進むであろうことが考えられます。

マンガでわかるソフトウェアテスト入門

よろしければこちらもご覧ください。

SNSシェア

この記事は面白かったですか?

今後の改善の参考にさせていただきます!

Search Articles By The Cast出演者/執筆者から記事を探す

Search Articless By The Categoryカテゴリから記事を探す

Ranking

ランキング

もっと見る