(57)【特許請求の範囲】
【請求項１】
コンピュータに、セキュリティテストを実行させるテストプログラム実行プログラムであって、
セキュリティ攻撃種別と、セキュリティ攻撃種別に対応するテスト手順を定義した情報であるテスト手順情報と、試験対象が定義された該テスト手順情報に対応するテストプログラムのプログラムコードの雛形と、該テスト手順に対応するテスト成功条件を定義した情報である成功条件情報とを対応付けて格納するデータベースにアクセス可能なコンピュータを、
セキュリティ攻撃種別と攻撃対象との指定を受け付ける指定手段、
前記データベースを参照し、前記受け付けたセキュリティ攻撃種別に対応するテスト手順情報を特定する特定手段、
前記データベースを参照し、前記特定したテスト手順情報に対応するテストプログラムのプログラムコードの雛形を抽出し、前記受け付けた攻撃対象を抽出した雛形に定義された試験対象に設定する設定手段、
前記特定したテスト手順情報と、前記特定したテスト手順情報に定義されたテスト手順に対応する成功条件情報と、前記受け付けた攻撃対象を前記試験対象に設定した雛形と、に基づいて、テストプログラムを生成する生成手段、
前記生成したテストプログラムを実行することにより前記受け付けた攻撃対象に対してテストを実行し、テストの成否を判定する実行手段
として機能させることを特徴とするテストプログラム実行プログラム。
【請求項２】
前記コンピュータを、
認証情報を受け付けて取得する取得手段
としてさらに機能させ、
前記実行手段は、前記特定したテスト手順情報における認証に係る手順において前記受け付けた認証情報を用いる
ことを特徴とする請求項１記載のテストプログラム実行プログラム。
【請求項３】
コンピュータに、セキュリティテストを実行させるテストプログラム実行方法であって、セキュリティ攻撃種別と、セキュリティ攻撃種別に対応するテスト手順を定義した情報であるテスト手順情報と、試験対象が定義された該テスト手順情報に対応するテストプログラムのプログラムコードの雛形と、該テスト手順に対応するテスト成功条件を定義した情報である成功条件情報とを対応付けて格納するデータベースにアクセス可能なコンピュータが、
セキュリティ攻撃種別と攻撃対象との指定を受け付ける指定工程、
前記データベースを参照し、前記受け付けたセキュリティ攻撃種別に対応するテスト手順情報を特定する特定工程、
前記データベースを参照し、前記特定したテスト手順情報に対応するテストプログラムのプログラムコードの雛形を抽出し、前記受け付けた攻撃対象を抽出した雛形に定義された試験対象に設定する設定工程、
前記特定したテスト手順情報と、前記特定したテスト手順情報に定義されたテスト手順に対応する成功条件情報と、前記受け付けた攻撃対象を前記試験対象に設定した雛形と、に基づいて、テストプログラムを生成する生成工程、
前記生成したテストプログラムを実行することにより前記受け付けた攻撃対象に対してテストを実行し、テストの成否を判定する実行工程
を実行することを特徴とするテストプログラム実行方法。
【請求項４】
セキュリティテストを実行するテストプログラム実行装置であって、
セキュリティ攻撃種別と、セキュリティ攻撃種別に対応するテスト手順を定義した情報であるテスト手順情報と、試験対象が定義された該テスト手順情報に対応するテストプログラムのプログラムコードの雛形と、該テスト手順に対応するテスト成功条件を定義した情報である成功条件情報とを対応付けて格納するデータベースにアクセス可能であり、
セキュリティ攻撃種別と攻撃対象との指定を受け付ける指定手段、
前記データベースを参照し、前記受け付けたセキュリティ攻撃種別に対応するテスト手順情報を特定する特定手段、
前記データベースを参照し、前記特定したテスト手順情報に対応するテストプログラムのプログラムコードの雛形を抽出し、前記受け付けた攻撃対象を抽出した雛形に定義された試験対象に設定する設定手段、
前記特定したテスト手順情報と、前記特定したテスト手順情報に定義されたテスト手順に対応する成功条件情報と、前記受け付けた攻撃対象を前記試験対象に設定した雛形と、に基づいて、テストプログラムを生成する生成手段、
前記生成したテストプログラムを実行することにより前記受け付けた攻撃対象に対してテストを実行し、テストの成否を判定する実行手段
を備えることを特徴とするテストプログラム実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストを実行するテストプログラム、テスト方法、およびテスト装置に関する。
【背景技術】
【０００２】
近年、システム開発やアプリケーション開発において、システム・アプリケーションが複雑化・多機能化するにつれ、開発に対するテスト工程も複雑化している。複雑化するテスト工程を効率よく消化するために、システム等を構成している機能を実行するテストプログラムを生成し、対象システムを実行する装置がテストプログラムを実行することでテスト工程を行う、というテスト工程の自動化が行われている。装置がテスト工程を実行することにより、テスト工程を短縮できる。特に、システムの修正に伴う、他の機能が動作することを確認するために行う回帰テストでは、過去のテストを繰り返し行うため、テスト工程の自動化の恩恵を受ける。
【０００３】
テストプログラムの生成方法に関しては、対象システムを構成する機能の組み合わせによって、テスト手順を生成し、予想される結果かどうかで正常系か異常系であるかを分類するという技術が開示されている（たとえば、下記特許文献１を参照。）。
【０００４】
また、テスト工程のうち、セキュリティに関するテストは、外部からのセキュリティ攻撃を受けやすいＷｅｂアプリケーションやネットワークシステムの開発において、重要な位置を占める。近年、情報処理装置の役割が増大しており、装置が保持する情報の漏えいを防ぐために、セキュリティテストを強化し、事前にぜい弱性を発見し修正する必要がある。セキュリティテストに関しては、ネットワークシステムのセキュリティ評価を行うために、能動的にテストを行うという技術が開示されている（たとえば、下記特許文献２を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−１２２８５号公報
【特許文献２】特表２００５−５０３０５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、セキュリティに関するテストプログラムを行った場合に、ぜい弱性は要件や設計仕様に依存するため、要件や設計仕様上除外できるぜい弱性という誤検出を発生させてしまう。また、誤検出が多く発生した場合、誤検出の排除が困難であるという問題があった。
【０００７】
たとえば、セキュリティ攻撃のひとつとして、強制ブラウジングがあるが、ユーザが直接ＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）を入力することがない設計仕様を持つシステムの場合には、強制ブラウジングの対処を行う必要がない。しかし、従来技術におけるテストプログラムでは、ぜい弱性として誤検出してしまうという問題があった。また、必要のない検査を行うため、検査内容が冗長であるという問題があった。これらの問題は、テストの実行に際し、テスト対象であるアプリケーションの要件および設計仕様が考慮されないことに起因していた。
【０００８】
本発明は、上述した従来技術による問題点を解消するため、テストの誤検出を低下させることができるテストプログラム、テスト方法、およびテスト装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、開示のテスト装置は、セキュリティ攻撃種別と、セキュリティ攻撃種別に対応するテストの手順を定義した情報であるテスト手順情報と、該テスト手順に対応するテスト成功条件を定義した情報である成功条件情報とを対応付けて格納するデータベースから、セキュリティ攻撃種別と攻撃対象との指定を受け付け、前記データベースを参照し、前記受け付けたセキュリティ攻撃種別に対応するテスト手順情報を特定し、前記特定したテスト手順情報に基づいて、前記受け付けた攻撃対象に対してテストを実行し、前記受け付けたセキュリティ攻撃種別に対応する成功条件情報に基づきテストの成否を判定することを要件とする。
【発明の効果】
【００１０】
上記構成によれば、入力されたセキュリティ攻撃と攻撃対象とに基づき、テストを行うことができる。セキュリティ攻撃と攻撃対象は、テスト対象であるアプリケーションの要件および設計仕様に基づいて、人手による脅威分析によって得られる。したがって、上記構成によれば、アプリケーションの要件および設計仕様に基づいたテストが可能となる。これにより、本テストプログラム、テスト方法、およびテスト装置によれば、テストの誤検出の低下を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】本実施の形態にかかる本システムの利用方法を示す説明図である。
【図２】テストプログラム生成装置１０４のハードウェア構成を示すブロック図である。
【図３】脅威一覧テーブル１０５の記憶内容の一例を示す説明図である。
【図４】脅威パターンライブラリテーブル１０６−１の記憶内容の一例を示す説明図である。
【図５】脅威パターン成功条件テーブル１０６−２の記憶内容の一例を示す説明図である。
【図６】プログラムコード雛形一覧テーブル１０７の記憶内容の一例を示す説明図である。
【図７】テストプログラム生成装置１０４の機能的構成を示すブロック図である。
【図８】機能単位テンプレート一覧テーブル８０１の記憶内容の一例を示す説明図である。
【図９】機能単位のプログラムコードの一覧９０１の記憶内容の一例を示す説明図である。
【図１０】アカウント情報テーブル１０８の出力後と各項目の入力後を示す説明図である。
【図１１】テストプログラム生成の様子を示す説明図（その１）である。
【図１２】テストプログラム生成の様子を示す説明図（その２）である。
【図１３】テストプログラム生成の様子を示す説明図（その３）である。
【図１４】テストプログラム生成処理のフローチャートである。
【図１５】機能単位テンプレート一覧テーブルへの追加処理のフローチャートである。
【図１６】機能単位のプログラムコード生成処理（事前準備、テスト手順）のフローチャートである。
【図１７】機能単位のプログラムコード生成処理（成功条件）のフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、本発明にかかるテストプログラム、テスト方法、およびテスト装置の好適な実施の形態を詳細に説明するため、本発明にかかるテストプログラムを生成するためのテストプログラム生成プログラムについて詳細に説明する。本発明にかかるテストプログラム、テスト方法、およびテスト装置については、以下のテストプログラム生成プログラムにおいてテストプログラムの生成を行うことなく、テストを実行することによって実現可能である。
【００１３】
図１は、本実施の形態にかかる本システムの利用方法を示す説明図である。本システムは、システム開発やアプリケーション開発を行う際に構築する。本システムは、分析端末１０１、設計・実装端末１０２、テスト端末１０３、およびテストプログラム生成装置１０４の端末で構成される。また、本システムは、脅威一覧テーブル１０５、脅威パターンライブラリテーブル１０６−１、脅威パターン成功条件テーブル１０６−２、プログラムコード雛形一覧テーブル１０７、およびアカウント情報テーブル１０８の各テーブルにアクセスする。
【００１４】
各端末１０１〜１０３とテストプログラム生成装置１０４と各テーブルを使用して、本システムは、対象システム１０９、およびテストプログラム１１０を生成する。各端末は、各テーブル、対象システム１０９、およびテストプログラム１１０に対して、脅威分析１１１、設計・実装１１２、テスト１１３、アカウント情報入力１１４を行う。
【００１５】
初めに、各端末１０１〜１０３とテストプログラム生成装置１０４の説明を行う。分析端末１０１は、分析端末１０１を操作する分析担当者によって、対象システム１０９に対する脅威分析１１１を行う。具体的には、たとえば、分析担当者は、ユースケース図を用いて、対象システム１０９を構成する各機能をユースケースとして表現する。分析担当者は、特定のユースケースｕ０に対して、特定のアクタａ０が攻撃者となり強制ブラウジングを行うセキュリティ攻撃が存在することを解析し、脅威情報として脅威一覧テーブル１０５に登録する。脅威情報は、セキュリティ攻撃の種別を示すセキュリティ攻撃種別と、攻撃対象、攻撃者で構成する。また、ユースケースｕ０に対して、アクタａ０と異なるアクタａ１が強制ブラウジングを行うセキュリティ攻撃が存在する場合、分析担当者は、異なる脅威情報として脅威一覧テーブル１０５に登録する。
【００１６】
設計・実装端末１０２は、設計・実装端末１０２を操作する設計・実装担当者によって、対象システム１０９、プログラムコード雛形一覧テーブル１０７に対して設計・実装１１２を行う。具体的には、たとえば、設計・実装担当者は、対象システム１０９を構成する機能に対するプログラムコードの雛形を生成し、プログラムコード雛形一覧テーブル１０７に登録する。また、設計・実装担当者は、プログラムコード雛形一覧テーブル１０７からプログラムコードの雛形を抽出し、抽出したプログラムコードを元にして対象システム１０９の実装を行う。
【００１７】
テスト端末１０３は、テスト端末１０３を操作するテスト担当者によって、テストプログラム１１０を使用して、対象システム１０９に対してテスト１１３を行う。具体的には、たとえば、テスト端末１０３は、テストプログラム生成装置１０４によって生成されたテストプログラム１１０を実行することにより、対象システム１０９の機能、たとえば、ユースケースｕ０のテストを行う。
【００１８】
また、テスト端末１０３は、テスト担当者によって、テストプログラム生成装置１０４によって作成されたアカウント情報テーブル１０８に対して、アカウント情報入力１１４を行う。具体的には、たとえば、テスト担当者は、テストプログラム生成装置１０４が作成したアカウント情報テーブル１０８にアカウントＩＤ（Ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）、パスワードという認証情報を入力する。入力後、テストプログラム生成装置１０４は、プログラムコード雛形一覧テーブル１０７に登録されているプログラムコードのうち、アクタに対応するアカウントＩＤ、パスワードを設定する箇所を検索する。設定する箇所がある場合、テストプログラム生成装置１０４は、アカウント情報テーブル１０８から取得し、テストプログラム１１０内に設定される。また、認証情報は、後述する脅威パターンライブラリテーブル１０６−１の試験パターンを構成する機能単位テンプレートのうち、認証を行う機能、たとえば、“認証”にて使用される。
【００１９】
テストプログラム生成装置１０４は、脅威一覧テーブル１０５、脅威パターンライブラリテーブル１０６−１、脅威パターン成功条件テーブル１０６−２、プログラムコード雛形一覧テーブル１０７にアクセスしてテストプログラム１１０を実行する。また、テストプログラム生成装置１０４は、アカウント情報テーブル１０８にアクセスしてテストプログラム１１０を実行してもよい。また、テストプログラム生成装置１０４は、テストプログラム１１０を生成し、他の装置、たとえば、テスト端末１０３がテストプログラム１１０を実行してもよい。テストプログラム生成装置１０４の機能的構成は、図７にて後述する。
【００２０】
次に各テーブルの説明を行う。脅威一覧テーブル１０５は、分析端末１０１によって分析された、脅威情報を管理する。脅威一覧テーブル１０５の各フィールドに関しては、図３にて後述する。脅威パターンライブラリテーブル１０６−１は、脅威情報のセキュリティ攻撃を実行する試験パターンを管理する。脅威パターンライブラリテーブル１０６−１の各フィールドに関しては、図４にて後述する。脅威パターン成功条件テーブル１０６−２は、脅威パターンライブラリテーブル１０６−１の試験パターンの成功条件を管理する。脅威パターン成功条件テーブル１０６−２の各フィールドに関しては、図５にて後述する。
【００２１】
プログラムコード雛形一覧テーブル１０７は、設計・実装端末１０２によって設計されたプログラムコードの雛形を管理する。プログラムコード雛形一覧テーブル１０７の各フィールドに関しては、図６にて後述する。アカウント情報テーブル１０８は、テストプログラム生成装置１０４によって作成され、アクタのアカウントＩＤ、パスワードを管理する。アカウント情報テーブル１０８の各フィールドに関しては、図１０にて後述する。
【００２２】
脅威一覧テーブル１０５、または、アカウント情報テーブル１０８は、テストプログラム生成装置１０４の外部に存在するが、内部に存在してもよい。同様に、脅威パターンライブラリテーブル１０６−１、脅威パターン成功条件テーブル１０６−２、プログラムコード雛形一覧テーブル１０７も、テストプログラム生成装置１０４の内部に存在するが、外部に存在してもよい。
【００２３】
（テストプログラム生成装置１０４のハードウェア構成）
図２は、テストプログラム生成装置１０４のハードウェア構成を示すブロック図である。図２において、テストプログラム生成装置１０４は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を備えている。また、記憶装置として、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、を備えている。また、ユーザやその他の機器との入出力装置として、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００２４】
ここで、ＣＰＵ２０１は、テストプログラム生成装置の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００２５】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２６】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２７】
Ｉ／Ｆ２０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２８】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２９】
スキャナ２１２は、画像を光学的に読み取り、テストプログラム生成装置内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３０】
図３は、脅威一覧テーブル１０５の記憶内容の一例を示す説明図である。脅威一覧テーブル１０５は、脅威情報である、セキュリティ攻撃の種別を示すセキュリティ攻撃種別と、攻撃対象、攻撃者を管理する。脅威一覧テーブル１０５は、脅威ＩＤ、脅威名、対象アクタＩＤ、対象ユースケースＩＤの各フィールドで構成する。脅威ＩＤは脅威名、対象アクタＩＤ、対象ユースケースＩＤを一意に特定するキーである。脅威名はセキュリティ攻撃の種別名を示しており、たとえば、強制ブラウジングやＣＳＲＦ（Ｃｒｏｓｓ−Ｓｉｔｅ  Ｒｅｑｕｅｓｔ  Ｆｏｒｇｅｒｉｅｓ）である。対象アクタＩＤは、試験対象となる対象ユースケースＩＤに接続する攻撃者である。対象ユースケースは、試験対象であるユースケースＩＤを示している。
【００３１】
図４は、脅威パターンライブラリテーブル１０６−１の記憶内容の一例を示す説明図である。脅威パターンライブラリテーブル１０６−１は、セキュリティ攻撃種別に対応する、テストの手順を定義した情報であるテスト手順情報を管理する。脅威パターンライブラリテーブル１０６−１は、脅威名、事前準備、テスト手順の各フィールドで構成する。脅威名は、セキュリティ攻撃の攻撃名を示している。事前準備は、テスト手順を行う前に行う機能を示しており、テスト手順は試験対象に対する機能を示している。事前準備、テスト手順がテスト手順情報となる。事前準備、テスト手順の各機能は機能単位テンプレートと表現し、後述するプログラムコード雛形一覧テーブル１０７の機能単位テンプレート名と一致する。
【００３２】
具体的には、たとえば、強制ブラウジングは、本来直接アクセスできない対象に、攻撃者が、ＵＲＬを直接指定するセキュリティ攻撃を示している。脅威名が強制ブラウジングのレコードは、事前準備フィールドに、“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ）”、テスト手順フィールドに、“アクセス（ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ）”が設定されている。したがって、強制ブラウジングを試験するプログラムは、事前準備として、攻撃者を認証し、テスト手順として、試験対象に対してアクセスするという動作をする。
【００３３】
同様に、ＣＳＲＦは、異なるサイトからの偽装されたリクエストを行うセキュリティ攻撃を示している。攻撃者は、試験対象に対するリクエスト内容が推測可能である場合に、偽装されたリクエストを送信し、試験対象は、偽装されたリクエストを受け付けてしまう。
【００３４】
脅威名がＣＳＲＦのレコードは、事前準備フィールドに、下記５つの機能単位テンプレートが設定されている。５つの機能単位テンプレートは、“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ（１））”、“アクセス（ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ）”、“セッション取得（ｓ）”、“ログアウト（）”、“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ（２））”である。また、テスト手順フィールドは、“指定したセッションでアクセス（ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ，ｓ）”が設定されている。
【００３５】
したがって、ＣＳＲＦを試験するプログラムは、事前準備として、攻撃者を認証し、試験対象にアクセスし、セッション情報を取得し、ログアウトをする。後に、攻撃者のアクタを再び認証し、テスト手順として、試験対象に対して取得したセッション情報でアクセスするという動作をする。
【００３６】
また、機能単位テンプレートは、引数を取ることができる。たとえば、“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ）”では、ｔａｒｇｅｔ＿ａｃｔｏｒが引数となり、脅威一覧テーブル１０５の対象アクタＩＤと置き換えることで、アクタＩＤに対応したテストプログラムを生成する。同様に、ｔａｒｇｅｔ＿ｕｓｅｃａｓｅは、対象ユースケースＩＤと置き換える。置き換えの様子は、図８に示す、機能単位テンプレート一覧テーブル８０１にて後述する。
【００３７】
図５は、脅威パターン成功条件テーブル１０６−２の記憶内容の一例を示す説明図である。脅威パターン成功条件テーブル１０６−２は、テスト手順に対応するテスト成功条件を定義した成功条件情報を管理する。脅威パターン成功条件テーブル１０６−２は、脅威名、成功条件の各フィールドで構成する。脅威名は、セキュリティ攻撃の攻撃名を示している。成功条件は、脅威パターンライブラリテーブル１０６−１のテスト手順にて成功したか否かを判断する条件である。また、成功条件も機能単位テンプレートである。具体的には、強制ブラウジングでは、アクセスを行い、アクセス例外が発生した場合に、テストが成功となる。
【００３８】
図６は、プログラムコード雛形一覧テーブル１０７の記憶内容の一例を示す説明図である。プログラムコード雛形一覧テーブル１０７は、機能単位テンプレート名、プログラムコードの各フィールドで構成する。機能単位テンプレート名は、機能を表す名称である。たとえば、“認証（）”は攻撃者を認証する機能を示している。プログラムコードは、機能単位テンプレート名に対応した実コードである。図６の例ではＪａｖａ（登録商標）コードである。
【００３９】
また、機能単位テンプレート名フィールドの値には引数を含んでもよい。具体的には、“アクセス（ｕ１）”であり、“ｕ１”の部分が引数となる。引数部分は、プログラムコードフィールドの実コード部分に置き換えられる。たとえば、“ｕ１”はプログラムコードの“Ｕ１．ａｃｃｅｓｓ（）”の“Ｕ１”が置き換えられる。図６では、引数の置き換えとしてユースケースＩＤの置き換えが示されているが、アクタＩＤを置き換える機能単位テンプレートであってもよい。たとえば、“アカウント情報（ａ０）”という機能単位テンプレート名に対応する“Ａ０．ｉｎｆｏ（）”というプログラムコードである。この場合、“Ａ０”が置き換えられる。
【００４０】
（テストプログラム生成装置１０４の機能的構成）
次に、テストプログラム生成装置１０４の機能的構成について説明する。図７は、テストプログラム生成装置１０４の機能的構成を示すブロック図である。テストプログラム生成装置１０４は、指定部７０１と、特定部７０２と、設定部７０５と、生成部７０６と、実行部７０７と、を含む構成である。また、作成部７０３と、取得部７０４とを含めてもよい。制御部となる機能（指定部７０１〜実行部７０６）は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをＣＰＵ２０１が実行することにより、その機能を実現する。または、Ｉ／Ｆ２０９を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００４１】
また、テストプログラム生成装置１０４は、脅威一覧テーブル１０５、脅威パターンライブラリテーブル１０６−１、脅威パターン成功条件テーブル１０６−２、プログラムコード雛形一覧テーブル１０７をデータベースとしてアクセスする。テストプログラム生成装置１０４は、さらに、アカウント情報テーブル１０８にアクセスしてもよい。
【００４２】
指定部７０１は、任意のセキュリティ攻撃を指定する機能を有する。具体的には、たとえば、脅威一覧テーブル１０５からセキュリティ攻撃として脅威ＩＤ“ｔ１”のレコードを指定する。脅威ＩＤ“ｔ１”のレコードを指定したことにより、セキュリティ攻撃種別として“強制ブラウジング”、攻撃対象として“ｕ０”が指定される。なお、指定されたデータは、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００４３】
特定部７０２は、データベースの中から指定部７０１によって指定されたセキュリティ攻撃を実行する試験パターンを構成する機能ごとに、攻撃対象を特定する機能を有する。また、攻撃対象へ接続する攻撃者を併せて特定してもよい。
【００４４】
具体的には、たとえば、指定部７０１によって脅威ＩＤ“ｔ１”のレコードが指定された場合、脅威名フィールドは“強制ブラウジング”となり、セキュリティ攻撃は強制ブラウジングとなる。また、攻撃者となる対象アクタＩＤは、“ａ２”、攻撃対象となる対象ユースケースＩＤは、“ｕ０”となる。そして、脅威パターンライブラリテーブル１０６−１の脅威名フィールドから“強制ブラウジング”であるレコードを選択し、事前準備、テスト手順の両フィールドから、機能単位テンプレートを抽出する。
【００４５】
抽出すると、特定部７０２は、“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ）”、“アクセス（ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ）”を得る。“ｔａｒｇｅｔ＿ａｃｔｏｒ”は攻撃者と、“ｔａｒｇｅｔ＿ａｃｔｏｒ”は攻撃対象をそれぞれ特定する。したがって、“アクセス（ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ）”に対して“ｕ０”を特定し、“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ）”に対して“ａ０”を特定する。なお、特定されたデータは、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に存在する機能単位テンプレート一覧テーブル８０１に記憶される。
【００４６】
作成部７０３は、特定部７０２によって特定された攻撃者ごとに、攻撃者と識別情報と識別情報に対応するパスワードとを項目とする一覧を作成する機能を有する。攻撃者はアクタＩＤであり、識別情報とはアカウントＩＤであり、一覧とはアカウント情報テーブル１０８である。
【００４７】
具体的には、たとえば、アクタＩＤ“ａ０”とアクタＩＤに対応するアカウントＩＤとパスワードとを項目とする。図４で示したＣＳＲＦのように１度のセキュリティ攻撃に対して複数の接続者が存在する場合もあるため、“ａ０（０）”、“ａ０（１）”、・・・、のように枝番を設定し、それぞれの識別情報を区別する。アカウント情報テーブル１０８への出力の様子は、図１０にて示す出力後のアカウント情報テーブル１００１である。なお、作成された一覧は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に存在するアカウント情報テーブル１０８に記憶される。
【００４８】
取得部７０４は、作成部７０３によって作成された一覧を出力した結果、項目が書き込まれた一覧を取得する機能を有する。具体的には、たとえば、アカウント情報テーブル１０８に対して、テスト端末１０３が、各項目を書き込み、書き込まれたアカウント情報テーブル１０８を取得する。書き込まれた様子は、図１０に示す書き込み後のアカウント情報テーブル１００２である。なお、取得された一覧は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００４９】
設定部７０５は、データベースを参照することにより、機能に対するプログラムコードの雛形を抽出する。そして、特定部７０２によって特定された攻撃対象を抽出された雛形に定義されている試験対象に設定することにより、機能単位のプログラムコードを生成する機能を有する。特定部７０２によって攻撃者が特定されている場合、抽出された雛形に定義されている試験者に設定してもよい。また、取得部７０４によって取得された一覧から、攻撃者に対応する識別情報とパスワードを雛形に定義された識別情報とパスワードに設定してもよい。
【００５０】
また、攻撃者を雛形へコメントとして設定してもよい。コメントとは、プログラムの動作に影響を与えない記述であり、Ｊａｖａ（登録商標）の場合、コンパイラは、プログラム内の“／／”文字列が出現した行は、“／／”文字列以降の文字列を無視して実行コードを作成する。
【００５１】
具体的には、たとえば、設定部７０５は、プログラムコード雛形一覧テーブル１０７を参照し、プログラムコードの雛形を抽出する。続けて、特定部７０２によって機能単位テンプレート一覧テーブル８０１の引数フィールドに設定した攻撃対象を、プログラムコードの雛形に定義されている試験対象に設定する。雛形には“ｕ１”と定義されており、“ｕ１”を引数フィールドの内容に設定する。また、引数フィールドに設定した攻撃者を試験者に設定する場合、雛形には、“ａ１”と定義されており、“ａ１”を引数フィールドの内容に設定する。
【００５２】
また、雛形に攻撃者に対応するアカウントＩＤ、パスワードが定義されている場合、取得したアカウント情報テーブル１０８から対応するアカウントＩＤ、パスワードを設定する。また、攻撃者を雛形へコメントとして設定する場合、たとえば、“／／ａｃｔｏｒ：ａ０（０）”として雛形に設定する。なお、設定された機能単位のプログラムコードは、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００５３】
生成部７０６は、試験パターンと試験パターンに対応する成功条件と設定部７０５によって設定された機能単位のプログラムコードとに基づいて、設計対象に関するプログラムをテストするテストプログラム１１０を生成する機能を有する。設計対象には試験パターンを構成する機能が含まれている。
【００５４】
具体的には、たとえば、設定部７０５によって機能単位のプログラムコードを、テストプログラム１１０の雛形にある、試験パターンの事前準備、テスト手順の位置に設定し、また試験パターンの成功条件に設定する。テストプログラム１１０の雛形には、たとえば、テスト手順であれば、“／／テスト手順”というコメントが記述されており、記述位置に、テスト手順の機能単位のプログラムコードを設定する。
【００５５】
実行部７０７は、特定された試験パターンに基づいて、攻撃対象に対してテストを実行し、試験パターンに対応する成功条件情報に基づいてテストの成否を判定する機能を有する。また、生成部７０６によって生成されたテストプログラム１１０を実行し、成否の判定を行ってもよい。具体的には、たとえば、テストプログラム生成装置１０４は、後述する図１３の矩形１３０３で示されたプログラムを実行する。なお、実行されたテストプログラム１１０の結果は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００５６】
図８は、機能単位テンプレート一覧テーブル８０１の記憶内容の一例を示す説明図である。機能単位テンプレート一覧テーブル８０１は、機能単位テンプレート名と、引数というフィールドで構成される。機能単位テンプレート名フィールドには、プログラムコード雛形一覧テーブル１０７の機能単位テンプレート名と等しい値が設定される。引数フィールドには脅威パターンライブラリテーブル１０６−１の機能単位テンプレートの引数が、脅威一覧テーブル１０５の対象アクタＩＤ、対象ユースケースＩＤと置き換わった値が設定される。
【００５７】
図９は、機能単位のプログラムコードの一覧９０１の記憶内容の一例を示す説明図である。機能単位のプログラムコードの一覧９０１は、機能単位テンプレート名、引数、プログラムコードという３つのフィールドを持つ。機能単位のプログラムコードの一覧９０１は、作成されたプログラムコードを格納しておくために使用される。機能単位テンプレート名フィールドは、機能単位テンプレート一覧テーブル８０１の機能単位テンプレート名フィールドと等しい値が設定される。引数フィールドは、機能単位テンプレート一覧テーブル８０１の引数フィールドと等しい値が設定される。プログラムコードフィールドは、プログラムコード雛形一覧テーブル１０７のプログラムコードを雛形として、引数フィールドの値が設定される。
【００５８】
具体的には、たとえば、機能単位テンプレート名フィールドが“認証（）”のレコードでは、プログラムコードフィールドの値に、引数フィールドに設定されている“ａ０（０）”が使用されている。
【００５９】
図１０は、アカウント情報テーブル１０８の出力後と各項目の入力後を示す説明図である。アカウント情報テーブル１０８は、アクタＩＤ、アカウントＩＤ、パスワードという３つのフィールドで構成される。出力後のアカウント情報テーブル１００１は、テストプログラム生成装置１０４が、アクタＩＤを出力した状態を示している。アクタＩＤフィールドに値が設定されており、アカウントＩＤ、パスワードフィールドには値が設定されていない。
【００６０】
書き込み後のアカウント情報テーブル１００２は、テスト端末１０３によって、アカウントＩＤ、パスワードフィールドが設定されたアカウント情報テーブル１０８の状態を示している。すべて異なるアカウントＩＤ、パスワードが設定されているが、同じアカウントＩＤに対するテストプログラムを生成したい場合は、同じ値を設定してもよい。
【００６１】
図１１〜図１３は、テストプログラム生成の様子を示す説明図である。図１１は、テストプログラム生成の様子を示す説明図（その１）である。矩形１１０１で示されるプログラムは、テストプログラムの雛形であり、初期状態を示している。また、テストプログラムの生成には、プログラムコード雛形一覧テーブル１０７と、機能単位テンプレート一覧テーブル８０１を使用する。
【００６２】
図１２は、テストプログラム生成の様子を示す説明図（その２）である。図１２では、機能単位のプログラムを生成する。テーブル１２０１は、テストプログラムの生成には、プログラムコード雛形一覧テーブル１０７と、機能単位テンプレート一覧テーブル８０１を組み合わせた状態を示している。さらに、テーブル１２０２では、引数フィールドをプログラムコードフィールドに設定した状態を示している。具体的には、破線による矩形１２０３にてアクタＩＤが、破線による矩形１２０４にてユースケースＩＤが設定されている。
【００６３】
図１３は、テストプログラム生成の様子を示す説明図（その３）である。図１３では、矩形１１０１で示されるプログラムと、図１２にて生成された機能単位のプログラムを使用して、テストプログラムを生成する。矩形１３０１で示されるプログラムは、矩形１１０１で示されるプログラムに、機能単位のプログラムを設定した状態である。破線による矩形１３０４にて“認証（）”のプログラムコードが、破線による矩形１３０５にて“アクセス（）”のプログラムコードがそれぞれ設定されていることを示す。
【００６４】
次に、矩形１３０２で示されるプログラムは、アカウントＩＤとパスワードを設定している。“／／ａｃｔｏｒ：ａ２（０）”から、アカウント情報テーブル１０８から値を取得し、設定する。破線による矩形１３０６が、アカウントＩＤの設定を示し、破線による矩形１３０７が、パスワードの設定を示す。
【００６５】
最後に、矩形１３０３で示されるプログラムは、成功条件を設定した状態を示している。破線による矩形１３０８は、図１１で示したプログラムコード雛形一覧テーブル１０７の“アクセス例外”のプログラムコードが設定されている状態を示す。“＠Ｔｅｓｔ（ｅｘｐｅｃｔｅｄ＝…）”に関して、“＠Ｔｅｓｔ”は、Ｊａｖａ（登録商標）で使用されるテストツールであるＪＵｎｉｔにて、テストメソッドを示すアノテーションである。また、引数の“ｅｘｐｅｃｔｅｄ”は、テストメソッドがどんな例外がスローされるのかを期待するのかを指定した属性である。
【００６６】
図１４は、テストプログラム生成処理のフローチャートである。テストプログラム生成装置１０４は、脅威一覧テーブル１０５から１つレコードを選択し、脅威名フィールドから脅威名を取得する（ステップＳ１４０１）。たとえば、テストプログラム生成装置１０４は、脅威一覧テーブル１０５の脅威ＩＤがｔ０のレコードを選択し、脅威名として“強制ブラウジング”を取得する。次に、テストプログラム生成装置１０４は、取得した脅威名と脅威パターンライブラリテーブル１０６−１の脅威名フィールドが一致するレコードを選択する（ステップＳ１４０２）。
【００６７】
続けて、テストプログラム生成装置１０４は、選択したレコードに対して、事前準備、テスト手順の機能単位テンプレートを抽出する（ステップＳ１４０３）。たとえば、脅威名フィールドが“強制ブラウジング”のレコードの場合、テストプログラム生成装置１０４は、事前準備として“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ）”、テスト手順として、“アクセス（ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ）”を抽出する。抽出した機能単位テンプレートに対して、テストプログラム生成装置１０４は、機能単位テンプレート一覧テーブル８０１への追加処理を行う（ステップＳ１４０４）。機能単位テンプレート一覧テーブル８０１への追加処理に関しては、図１５にて後述する。
【００６８】
機能単位テンプレート一覧テーブル８０１への追加が終了した後に、テストプログラム生成装置１０４は、機能単位テンプレートごとに機能単位のプログラムコードの生成を行う。初めに、テストプログラム生成装置１０４は、脅威パターンライブラリテーブル１０６−１の選択したレコードの事前準備フィールドの先頭にある機能単位テンプレートを取得する（ステップＳ１４０５）。続けて、取得した機能単位テンプレートに対して、テストプログラム生成装置１０４は、機能単位のプログラムコード生成処理を行う（ステップＳ１４０６）。ステップＳ１４０６での機能単位のプログラムコード生成処理は、事前準備、テスト手順用の処理を使用する。詳細は図１６にて後述する。
【００６９】
テストプログラム生成装置１０４は、生成された機能単位のプログラムコードを、テストプログラム雛形の事前準備もしくはテスト手順の位置に設定する（ステップＳ１４０７）。テストプログラム雛形の事前準備の位置、テスト手順の位置とは、たとえば、矩形１１０１にて示したテストプログラムの雛形の文字列にて、“／／事前準備”文字列、“／／テスト手順”文字列の次の行の位置である。事前準備の位置に関しては、“ｐｕｂｌｉｃ  ｖｏｉｄ  ｔｅｓｔＴ１（）  ｛”文字列の次の行の位置であってもよい。
【００７０】
設定後、テストプログラム生成装置１０４は、次の機能単位テンプレートが存在するかを確認する（ステップＳ１４０８）。存在する場合（ステップＳ１４０８：Ｙｅｓ）、テストプログラム生成装置１０４は、次の機能単位テンプレートを取得し（ステップＳ１４０９）、ステップＳ１４０６の処理に移行する。存在しない場合（ステップＳ１４０８：Ｎｏ）、テストプログラム生成装置１０４は、現在取得中の機能単位テンプレートは、事前準備フィールドの末尾かを確認する（ステップＳ１４１０）。事前準備フィールドの末尾である場合（ステップＳ１４１０：Ｙｅｓ）、テストプログラム生成装置１０４は、テスト手順フィールドの先頭の機能単位テンプレートを取得し（ステップＳ１４１１）、ステップＳ１４０６の処理に移行する。
【００７１】
事前準備フィールドの末尾でない場合（ステップＳ１４１０：Ｎｏ）、テスト手順フィールドの末尾であることを示している。前述の場合、テストプログラム生成装置１０４は、テストプログラム雛形にて、コメントとして記述されているアクタＩＤから、アカウント情報テーブル１０８の対応するアカウントＩＤ、パスワードを取得し、設定する（ステップＳ１４１２）。
【００７２】
次に、成功条件について設定するため、テストプログラム生成装置１０４は、ステップＳ１４０１にて取得した脅威名と脅威パターン成功条件テーブル１０６−２の脅威名フィールドが一致するレコードを選択する（ステップＳ１４１３）。続けて、テストプログラム生成装置１０４は、選択した機能単位テンプレートに対して、機能単位のプログラムコード生成処理を行う（ステップＳ１４１４）。ステップＳ１４１４での機能単位のプログラムコード生成処理は、成功条件用の処理を使用する。詳細は図１７にて後述する。
【００７３】
テストプログラム生成装置１０４は、生成された成功条件の機能単位のプログラムコードを、テストプログラム雛形の成功条件の位置に設定する（ステップＳ１４１５）。テストプログラム雛形の成功条件の位置とは、たとえば、矩形１１０１にて示したテストプログラムの雛形の文字列にて、“／／成功条件”文字列、“／／テスト手順”文字列の次の行の位置である。または、“ｐｕｂｌｉｃ  ｖｏｉｄ  ｔｅｓｔＴ１（）  ｛”文字列の前の行の位置であってもよい。
【００７４】
図１５は、機能単位テンプレート一覧テーブルへの追加処理のフローチャートである。テストプログラム生成装置１０４は、機能単位テンプレート一覧テーブル８０１にレコードを追加し、機能単位テンプレート名フィールドに選択した機能単位テンプレート名を、引数フィールドに引数部分を設定する（ステップＳ１５０１）。たとえば、脅威パターンライブラリテーブル１０６−１にて“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ）”が選択された場合、テストプログラム生成装置１０４は、機能単位テンプレート名フィールドに“認証（）”を設定する。また、テストプログラム生成装置１０４は、引数フィールドに“ｔａｒｇｅｔ＿ａｃｔｏｒ”を設定する。
【００７５】
レコードの追加後、テストプログラム生成装置１０４は、追加したレコードの引数フィールドに“ｔａｒｇｅｔ＿ａｃｔｏｒ”が含まれるかを確認する（ステップＳ１５０２）。含まれる場合（ステップＳ１５０２：Ｙｅｓ）、アクタに対する処理を行う。テストプログラム生成装置１０４は、“ｔａｒｇｅｔ＿ａｃｔｏｒ”を、脅威一覧テーブル１０５で選択したレコードの、対象アクタＩＤフィールドのアクタＩＤに設定する（ステップＳ１５０３）。
【００７６】
なお、脅威パターンライブラリテーブル１０６−１での“認証（ｔａｒｇｅｔ＿ａｃｔｏｒ（１））”のように、“ｔａｒｇｅｔ＿ａｃｔｏｒ”の後ろに引数“（ｉ）”が付属するときは、引数部分は変換せず、“ｔａｒｇｅｔ＿ａｃｔｏｒ”の部分のみ設定する。
【００７７】
テストプログラム生成装置１０４は、設定したアクタＩＤが機能単位テンプレート一覧テーブル８０１に存在する総数を算出し（ステップＳ１５０４）、算出した総数から、追加したレコードの引数フィールドに“アクタＩＤ（総数−１）”を設定する（ステップＳ１５０５）。具体的には、アクタＩＤとして“ａ１”が設定された場合、機能単位テンプレート一覧テーブルの引数に“ａ１”が含まれる総数を算出し、たとえば、総数が１つであれば、“ａ１（０）”と設定する。
【００７８】
ステップＳ１５０３〜ステップＳ１５０５によって、テストプログラム生成装置１０４は、機能単位テンプレートごとに、攻撃者となるアクタＩＤを特定する。また、テストプログラム生成装置１０４は、アカウント情報テーブル１０８に、アクタＩＤフィールドに“アクタＩＤ（総数−１）”を設定したレコードを作成する（ステップＳ１５０６）。
【００７９】
ステップＳ１５０２にて、引数フィールドに“ｔａｒｇｅｔ＿ａｃｔｏｒ”が含まれない場合（ステップＳ１５０２：Ｎｏ）、テストプログラム生成装置１０４は、引数フィールドに“ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ”が含まれるかを確認する（ステップＳ１５０７）。含まれる場合（ステップＳ１５０７：Ｙｅｓ）、“ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ”を、脅威一覧テーブル１０５で選択したレコードの、対象ユースケースＩＤフィールドのユースケースＩＤに設定する（ステップＳ１５０８）。
【００８０】
設定後、テストプログラム生成装置１０４は、特定したユースケースＩＤを追加したレコードの引数フィールドに設定する（ステップＳ１５０９）。ステップＳ１５０７〜ステップＳ１５０９によって、テストプログラム生成装置１０４は、機能単位テンプレートごとに、攻撃者となるアクタＩＤを特定する。
【００８１】
引数フィールドに“ｔａｒｇｅｔ＿ｕｓｅｃａｓｅ”が含まれない場合（ステップＳ１５０７：Ｎｏ）、テストプログラム生成装置１０４は、引数の設定を行わず、処理を終了する。ステップＳ１５０８：Ｎｏのルートは、たとえば、引数がセッション情報を示す“ｓ”である場合である。
【００８２】
図１６は、機能単位のプログラムコード生成処理（事前準備、テスト手順）のフローチャートである。テストプログラム生成装置１０４は、取得した機能単位テンプレートに対応する機能単位テンプレート一覧テーブル８０１のレコードを取得する（ステップＳ１６０１）。続けて、テストプログラム生成装置１０４は、取得したレコードの機能単位テンプレート名から、プログラムコード雛形一覧テーブル１０７のプログラムコードを取得する（ステップＳ１６０２）。
【００８３】
次に引数フィールドの反映を行う。テストプログラム生成装置１０４は、取得した機能単位テンプレート一覧テーブルの引数フィールドがアクタＩＤかを確認する（ステップＳ１６０３）。アクタＩＤである場合（ステップＳ１６０３：Ｙｅｓ）、テストプログラム生成装置１０４は、取得したプログラムコードに、引数をコメントとして設定する（ステップＳ１６０４）。
【００８４】
ステップＳ１６０４の終了後、もしくは、アクタＩＤでない場合（ステップＳ１６０３：Ｎｏ）、テストプログラム生成装置１０４は、取得した機能単位テンプレート一覧テーブル８０１の引数フィールドがユースケースＩＤかを確認する（ステップＳ１６０５）。ユースケースＩＤである場合（ステップＳ１６０５：Ｙｅｓ）、テストプログラム生成装置１０４は、取得したプログラムコード内の、アクセス対象のクラス名をユースケースＩＤから生成し、設定する（ステップＳ１６０６）。
【００８５】
ステップＳ１６０６の終了後、もしくは、ユースケースＩＤでない場合（ステップＳ１６０５：Ｎｏ）、テストプログラム生成装置１０４は、ステップＳ１６０４やステップＳ１６０６で設定されたプログラムコードを出力する（ステップＳ１６０７）。出力される具体例としては、機能単位のプログラムコードの一覧９０１でのプログラムコードとなる。
【００８６】
図１７は、機能単位のプログラムコード生成処理（成功条件）のフローチャートである。テストプログラム生成装置１０４は、選択した機能単位テンプレート名から、プログラムコード雛形一覧テーブル１０７のプログラムコードを取得する（ステップＳ１７０１）。取得後、テストプログラム生成装置１０４は、取得されたプログラムコードを出力する（ステップＳ１７０２）。
【００８７】
以上説明したように、テストプログラム生成装置１０４によれば、要件・仕様に基づいた脅威情報を指定し、脅威を実行する試験パターンと試験対象を特定する。そして、試験パターンに対応した機能に、特定した試験対象を設定し、試験パターンに沿った試験の生成を行うことにより、試験の誤検出を低下させることができる。また、要件・仕様外の冗長な試験を省くことができる。また、脅威分析で抽出した脅威のパターンごとにシナリオを生成するので、分析した内容に関してはすべてテストを網羅することができる。
【００８８】
また、脅威を実行する試験パターンと試験対象と試験対象へ接続する攻撃者を特定し、試験パターンに対応した機能に、特定した試験対象と攻撃者を設定してもよい。これにより、攻撃者の違いに対する試験の誤検出を低下させることができる。具体的には、たとえば、セキュリティ攻撃が強制ブラウジングである場合、一般ユーザに対してシステムは、強制ブラウジングを許可しない。しかし、システム管理者に対しては、システム不具合の確認等のため、システムは強制ブラウジングを許可する仕様である場合を想定する。このような仕様の場合、システム管理者による強制ブラウジングの試験を行わないことで、試験の誤検出を低下させることができる。
【００８９】
また、特定された攻撃者に対し、攻撃者と攻撃者のアカウントＩＤとパスワードを一覧に作成する。作成した一覧を出力した結果、外部によって書き込まれた一覧を取得し、取得された一覧から攻撃者に対応するアカウントＩＤとパスワードを試験パターンに対応した機能に設定してもよい。これにより、アクタがアカウントＩＤとパスワードを変更しても、テストプログラムを容易に変更することができ、テストプログラムのメンテナンスにかかる工数を減らすことができる。
【００９０】
また、特定した攻撃者を、試験パターンに対応した機能に、コメントとして設定してもよい。これにより、攻撃者のアクタＩＤがプログラムコードに存在しない場合でも、テストプログラムを確認した際に、どのアクタＩＤであるかが容易にわかるため、試験結果に対する攻撃者をキーとした解析も行いやすくなる。特定の攻撃者に対してぜい弱性の検出が他の攻撃者より多く、特定の攻撃者が仕様によりぜい弱性を認められていることが後からわかった場合に、その特定の攻撃者を試験から取り除くことで、試験の誤検出を低下させることができる。
【００９１】
なお、本実施の形態で説明したテスト方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本テストプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本テストプログラムは、インターネット等のネットワークを介して配布してもよい。
【００９２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【００９３】
（付記１）コンピュータに、セキュリティテストを実行させるテストプログラムであって、
セキュリティ攻撃種別と、セキュリティ攻撃種別に対応するテストの手順を定義した情報であるテスト手順情報と、該テスト手順に対応するテスト成功条件を定義した情報である成功条件情報とを対応付けて格納するデータベースにアクセス可能なコンピュータを、
セキュリティ攻撃種別と攻撃対象との指定を受け付ける指定手段、
前記データベースを参照し、前記受け付けたセキュリティ攻撃種別に対応するテスト手順情報を特定する特定手段、
前記特定したテスト手順情報に基づいて、前記受け付けた攻撃対象に対してテストを実行し、前記受け付けたセキュリティ攻撃種別に対応する成功条件情報に基づきテストの成否を判定する実行手段
として機能させることを特徴とするテストプログラム。
【００９４】
（付記２）コンピュータを、
認証情報を受け付けて取得する取得手段
としてさらに機能させ、
前記実行手段は、前記特定したテスト手順情報における認証に係る手順において前記受け付けた認証情報を用いる
ことを特徴とする付記１記載のテストプログラム。
【００９５】
（付記３）コンピュータに、
前記テストプログラムを生成させるテストプログラム生成プログラム。
【００９６】
（付記４）コンピュータに、セキュリティテストを実行させるテスト方法であって、
セキュリティ攻撃種別と、セキュリティ攻撃種別に対応するテストの手順を定義した情報であるテスト手順情報と、該テスト手順に対応するテスト成功条件を定義した情報である成功条件情報とを対応付けて格納するデータベースにアクセス可能なコンピュータが、
セキュリティ攻撃種別と攻撃対象との指定を受け付ける指定工程、
前記データベースを参照し、前記受け付けたセキュリティ攻撃種別に対応するテスト手順情報を特定する特定工程、
前記特定したテスト手順情報に基づいて、前記受け付けた攻撃対象に対してテストを実行し、前記受け付けたセキュリティ攻撃種別に対応する成功条件情報に基づきテストの成否を判定する実行工程
を実行することを特徴とするテストプログラム。
【００９７】
（付記５）セキュリティテストを実行するテスト装置であって、
セキュリティ攻撃種別と、セキュリティ攻撃種別に対応するテストの手順を定義した情報であるテスト手順情報と、該テスト手順に対応するテスト成功条件を定義した情報である成功条件情報とを対応付けて格納するデータベースにアクセス可能であり、
セキュリティ攻撃種別と攻撃対象との指定を受け付ける指定手段、
前記データベースを参照し、前記受け付けたセキュリティ攻撃種別に対応するテスト手順情報を特定する特定手段、
前記特定したテスト手順情報に基づいて、前記受け付けた攻撃対象に対してテストを実行し、前記受け付けたセキュリティ攻撃種別に対応する成功条件情報に基づきテストの成否を判定する実行手段
を備えることを特徴とするテスト装置。
【００９８】
（付記６）セキュリティ攻撃ごとに前記セキュリティ攻撃を実行する試験パターンおよび当該試験パターンに対応する成功条件と、前記試験パターンおよび前記成功条件を構成する機能を表現するプログラムコードの雛形と、前記セキュリティ攻撃の設計対象内での攻撃対象と、を格納するデータベースにアクセス可能なコンピュータを、
任意のセキュリティ攻撃を指定する指定手段、
前記データベースの中から前記指定手段によって指定されたセキュリティ攻撃を実行する試験パターンを構成する機能ごとに、前記攻撃対象を特定する特定手段、
前記データベースを参照することにより、前記機能に対するプログラムコードの雛形を抽出し、前記特定手段によって特定された攻撃対象を前記抽出された雛形に定義されている試験対象に設定することにより、機能単位のプログラムコードを生成する設定手段、
前記試験パターンと当該試験パターンに対応する成功条件と前記設定手段によって設定された機能単位のプログラムコードとに基づいて、前記試験パターンを構成する機能が含まれている前記設計対象に関するプログラムをテストするテストプログラムを生成する生成手段、
として機能させることを特徴とするテスト生成プログラム。
【００９９】
（付記７）セキュリティ攻撃ごとに前記セキュリティ攻撃を実行する試験パターンおよび当該試験パターンに対応する成功条件と、前記試験パターンおよび前記成功条件を構成する機能を表現するプログラムコードの雛形と、前記セキュリティ攻撃の設計対象内での攻撃対象および当該攻撃対象へ接続する攻撃者と、を格納するデータベースにアクセス可能なコンピュータを、
任意のセキュリティ攻撃を指定する指定手段、
前記データベースの中から前記指定手段によって指定されたセキュリティ攻撃を実行する試験パターンを構成する機能ごとに、前記攻撃対象と前記攻撃者を特定する特定手段、
前記データベースを参照することにより、前記機能に対するプログラムコードの雛形を抽出し、前記特定手段によって特定された攻撃対象と攻撃者とを前記抽出された雛形に定義されている試験対象と試験者とに設定することにより、機能単位のプログラムコードを生成する設定手段、
前記試験パターンと当該試験パターンに対応する成功条件と前記設定手段によって設定された機能単位のプログラムコードとに基づいて、前記試験パターンを構成する機能が含まれている前記設計対象に関するプログラムをテストするテストプログラムを生成する生成手段、
として機能させることを特徴とするテスト生成プログラム。
【０１００】
（付記８）前記コンピュータを、
前記特定手段によって特定された攻撃者ごとに、当該攻撃者と当該攻撃者の識別情報と当該識別情報に対応するパスワードとを項目とする一覧を作成する作成手段、
前記作成手段によって作成された一覧を出力した結果、前記項目が書き込まれた一覧を取得する取得手段として機能させ、
前記設定手段は、
前記データベースを参照することにより、前記機能に対するプログラムコードの雛形を抽出し、前記特定手段によって特定された攻撃対象と攻撃者とを前記抽出された雛形に定義されている試験対象と試験者とに設定し、前記取得手段によって取得された一覧から前記攻撃者に対応する識別情報とパスワードとを前記雛形に定義された識別情報とパスワードとに設定することにより、機能単位のプログラムコードを生成することを特徴とする付記７に記載のテスト生成プログラム。
【０１０１】
（付記９）前記設定手段は、
前記データベースを参照することにより、前記機能に対するプログラムコードの雛形を抽出し、前記特定手段によって特定された攻撃対象を前記抽出された雛形に定義されている試験対象に設定し、前記特定手段によって特定された攻撃者を前記抽出された雛形へコメントとして設定することにより、機能単位のプログラムコードを生成することを特徴とする付記７または８に記載のテスト生成プログラム。
【０１０２】
（付記１０）セキュリティ攻撃ごとに前記セキュリティ攻撃を実行する試験パターンおよび当該試験パターンに対応する成功条件と、前記試験パターンおよび前記成功条件を構成する機能を表現するプログラムコードの雛形と、前記セキュリティ攻撃の設計対象内での攻撃対象と、を格納するデータベースにアクセス可能であり、指定手段と特定手段と設定手段と生成手段とを備えるコンピュータが、
前記指定手段により、任意のセキュリティ攻撃を指定する指定工程、
前記特定手段により、前記データベースの中から前記指定工程によって指定されたセキュリティ攻撃を実行する試験パターンを構成する機能ごとに、前記攻撃対象を特定する特定工程、
前記設定手段により、前記データベースを参照することにより、前記機能に対するプログラムコードの雛形を抽出し、前記特定工程によって特定された攻撃対象を前記抽出された雛形に定義されている試験対象に設定することにより、機能単位のプログラムコードを生成する設定工程、
前記生成手段により、前記試験パターンと当該試験パターンに対応する成功条件と前記設定工程によって設定された機能単位のプログラムコードとに基づいて、前記試験パターンを構成する機能が含まれている前記設計対象に関するプログラムをテストするテストプログラムを生成する生成工程、
を実行することを特徴とするテスト生成方法。
【０１０３】
（付記１１）セキュリティ攻撃ごとに前記セキュリティ攻撃を実行する試験パターンおよび当該試験パターンに対応する成功条件と、前記試験パターンおよび前記成功条件を構成する機能を表現するプログラムコードの雛形と、前記セキュリティ攻撃の設計対象内での攻撃対象と、を格納するデータベースにアクセス可能であり、
任意のセキュリティ攻撃を指定する指定手段と、
前記データベースの中から前記指定手段によって指定されたセキュリティ攻撃を実行する試験パターンを構成する機能ごとに、前記攻撃対象を特定する特定手段と、
前記データベースを参照することにより、前記機能に対するプログラムコードの雛形を抽出し、前記特定手段によって特定された攻撃対象を前記抽出された雛形に定義されている試験対象に設定することにより、機能単位のプログラムコードを生成する設定手段と、
前記試験パターンと当該試験パターンに対応する成功条件と前記設定手段によって設定された機能単位のプログラムコードとに基づいて、前記試験パターンを構成する機能が含まれている前記設計対象に関するプログラムをテストするテストプログラムを生成する生成手段と、
を備えることを特徴とするテスト生成装置。
【符号の説明】
【０１０４】
１０４  テストプログラム生成装置
１０５  脅威一覧テーブル
１０６−１  脅威パターンライブラリテーブル
１０６−２  脅威パターン成功条件テーブル
１０７  プログラムコード雛形一覧テーブル
１０８  アカウント情報テーブル
７０１  指定部
７０２  特定部
７０３  作成部
７０４  取得部
７０５  設定部
７０６  生成部
７０７  実行部
【図１】
0005418135.tif 000002
【図２】
0005418135.tif 000003
【図３】
0005418135.tif 000004
【図４】
0005418135.tif 000005
【図５】
0005418135.tif 000006
【図６】
0005418135.tif 000007
【図７】
0005418135.tif 000008
【図８】
0005418135.tif 000009
【図９】
0005418135.tif 000010
【図１０】
0005418135.tif 000011
【図１１】
0005418135.tif 000012
【図１２】
0005418135.tif 000013
【図１３】
0005418135.tif 000014
【図１４】
0005418135.tif 000015
【図１５】
0005418135.tif 000016
【図１６】
0005418135.tif 000017
【図１７】
0005418135.tif 000018