(57)【要約】【課題】脆弱性診断を行う際に、診断の適否を適切に識別することができる診断プログラム等を提供する。【解決手段】診断プログラムは、第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信し、送信した前記複数の攻撃リクエストに対するレスポンスを取得し、取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定し、前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する処理をコンピュータに実行させることを特徴とする。【選択図】図１
2018169954.tif 000002
【特許請求の範囲】
【請求項１】
第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信し、
送信した前記複数の攻撃リクエストに対するレスポンスを取得し、
取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定し、
前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する
処理をコンピュータに実行させることを特徴とする診断プログラム。
【請求項２】
前記ステータスコードが示す値を、該ステータスコードの種類に応じて、又は前記レスポンスに含まれる文字列に応じて重み付けした上で前記標準偏差又は平均を特定する
ことを特徴とする請求項１に記載の診断プログラム。
【請求項３】
前記標準偏差又は平均の比較結果に応じて、前記第２の期間において特定の前記レスポンスが特定の発生パターンで発生しているか否かを判定し、
前記特定のレスポンスが前記特定の発生パターンで発生していると判定した場合、前記サーバにエラーが発生していると判定する
ことを特徴とする請求項１又は２に記載の診断プログラム。
【請求項４】
互いに攻撃コードが異なる前記複数の攻撃リクエストを、前記サーバにランダムに送信する
ことを特徴とする請求項１乃至３のいずれか一項に記載の診断プログラム。
【請求項５】
前記特定のレスポンスが連続して発生した連続発生回数が、所定回数を超えたか否かに応じて判定を行う
ことを特徴とする請求項３又は４に記載の診断プログラム。
【請求項６】
前記特定のレスポンスが連続して発生した連続発生時間が、所定時間を超えたか否かに応じて判定を行う
ことを特徴とする請求項３又は４に記載の診断プログラム。
【請求項７】
前記特定のレスポンスが周期的に発生した周期発生回数が、所定回数を超えたか否かに応じて判定を行う
ことを特徴とする請求項３乃至６のいずれか一項に記載の診断プログラム。
【請求項８】
第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信し、
送信した前記複数の攻撃リクエストに対するレスポンスを取得し、
取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定し、
前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する
処理をコンピュータに実行させることを特徴とする診断方法。
【請求項９】
第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信する送信部と、
送信した前記複数の攻撃リクエストに対するレスポンスを取得する取得部と、
取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定する特定部と、
前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する判定部と
を備えることを特徴とする診断装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、診断プログラム、診断方法及び診断装置に関する。
【背景技術】
【０００２】
近年、Ｗｅｂサーバ等のサーバシステムにおける異常を検出する様々な手法が提案されている。例えば特許文献１では、監視対象であるサーバの現在及び過去の稼働状態に基づき、サーバの異常を検出する異常検出方法等が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−３４２０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
一方で、セキュリティチェックを目的として疑似的な攻撃をサーバに加え、攻撃に対するレスポンスからサーバの脆弱性を診断する場合がある。特許文献１に係る発明では、検出される異常が、診断のための攻撃によるものか否かを識別することが難しい。
【０００５】
一つの側面では、脆弱性診断を行う際に、診断の適否を適切に識別することができる診断プログラム等を提供することにある。
【課題を解決するための手段】
【０００６】
一つの案では、診断プログラムは、第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信し、送信した前記複数の攻撃リクエストに対するレスポンスを取得し、取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定し、前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する処理をコンピュータに実行させることを特徴とする。
【発明の効果】
【０００７】
一つの側面では、脆弱性診断を行う際に、診断の適否を適切に識別することができる。
【図面の簡単な説明】
【０００８】
【図１】情報処理システムの構成例を示す模式図である。
【図２】ＰＣの構成例を示すブロック図である。
【図３】診断テーブルのレコードレイアウトの一例を示す説明図である。
【図４】脆弱性診断処理の概要を説明するための説明図である。
【図５】レスポンスのログデータの一例を示す説明図である。
【図６】エラー判定処理を説明するための説明図である。
【図７】レスポンスの連続発生回数に基づくエラー判定処理を説明するための説明図である。
【図８】ＰＣが実行する処理手順の一例を示すフローチャートである。
【図９】レスポンスの周期発生回数に基づくエラー判定処理を説明するための説明図である。
【図１０】実施の形態２に係るＰＣが実行する処理手順の一例を示すフローチャートである。
【図１１】実施の形態３に係るに係るＰＣのハードウェア群を示すブロック図である。
【図１２】上述した形態のＰＣの動作を示す機能ブロック図である。
【発明を実施するための形態】
【０００９】
以下、本発明をその実施の形態を示す図面に基づいて詳述する。
（実施の形態１）
図１は、情報処理システムの構成例を示す模式図である。本実施の形態では、Ｗｅｂアプリケーションを提供するサーバ装置について、セキュリティ上の脆弱性を診断する情報処理システムを一例として説明を行う。情報処理システムは、診断装置１及びサーバ２を含む。各装置は、インターネット等のネットワークＮを介して通信接続されている。
【００１０】
診断装置１は、種々の情報処理、情報の送受信等を行う端末装置であり、例えばパーソナルコンピュータ、サーバ装置等である。本実施の形態において診断装置１はパーソナルコンピュータであるものとし、以下では簡潔のためＰＣ１と読み替える。ＰＣ１は、診断対象であるサーバ２と通信を行い、サーバ２のセキュリティ上の脆弱性を診断する処理を行う。
【００１１】
サーバ２は、Ｗｅｂアプリケーションを提供するＷｅｂサーバであり、ＰＣ１が脆弱性を診断する診断対象の装置である。サーバ２は、図示しないクライアント端末と通信を行い、Ｗｅｂページの出力等を行う。
【００１２】
図２は、ＰＣ１の構成例を示すブロック図である。ＰＣ１は、制御部１１、記憶部１２、通信部１３、表示部１４、入力部１５を含む。
制御部１１はＣＰＵ、ＭＰＵ等の演算処理装置を含み、記憶部１２に記憶されたプログラムＰを読み出して実行することにより、ＰＣ１に係る種々の情報処理、制御処理等を行う。記憶部１２はＲＡＭ、ＲＯＭ等のメモリ素子を含み、制御部１１が処理を実行するために必要なプログラムＰ又はデータ等を記憶している。また、記憶部１２は演算処理を実行するために必要なデータ等を一時的に記憶する。また、記憶部１２は、脆弱性診断を行う際に用いる診断テーブル１２１を記憶している。通信部１３は通信処理回路等を含み、ネットワークＮを介して情報の送受信を行う。表示部１４は液晶ディスプレイ又は有機ＥＬ（Electro Luminescence）ディスプレイ等の画面を有し、制御部１１から与えられた画像を表示する。入力部１５はマウス、キーボード等であり、使用者による操作入力を受け付け、操作内容を制御部１１に通知する。
【００１３】
なお、本実施の形態においてＰＣ１は上記の構成に限られず、例えば音声の入出力を行うマイク及びスピーカ等の音声入出力部、可搬型記憶媒体に記憶された情報を読み取る読取部等を含んでもよい。
【００１４】
図３は、診断テーブル１２１のレコードレイアウトの一例を示す説明図である。診断テーブル１２１は、項目番号列、診断項目列、攻撃コード列を含む。項目番号は、脆弱性診断に係る各診断項目の項目番号を記憶している。診断項目列は、項目番号と対応付けて、各診断項目の内容を記憶している。診断項目は、脆弱性診断で確認するセキュリティ上のポイントである。攻撃コード列は、項目番号及び診断項目と対応付けて、各診断項目に係る診断を行うために攻撃リクエストに挿入される攻撃コードが記憶されている。攻撃リクエストは、ＰＣ１がサーバ２に対して要求するリクエストであり、脆弱性診断のために不正なアクセス、データ改竄等を行うリクエストである。
【００１５】
図４は、脆弱性診断処理の概要を説明するための説明図である。ＰＣ１は、ネットワークＮを介してサーバ２と通信を行い、サーバ２が提供するＷｅｂアプリケーションの脆弱性を診断する処理を行う。具体的にＰＣ１は、脆弱性診断のための攻撃リクエストを送信し、当該リクエストに対するサーバ２からのレスポンスを解析して診断を行う。
【００１６】
例えば図４に示すように、サーバ２は、複数のＷｅｂページからなるＷｅｂアプリケーションを提供する。ＰＣ１は、各Ｗｅｂページについて脆弱性の診断を行うため、各Ｗｅｂページを順次診断対象として攻撃リクエストを送信する。
【００１７】
ＰＣ１は、各Ｗｅｂページの診断を行うために、一のページについて複数の攻撃リクエストを送信する。上述の如く攻撃リクエストは、脆弱性診断のために用意されている各種攻撃用のコードを挿入したリクエストであり、各攻撃コードは診断項目に応じて定められている。ＰＣ１は各種攻撃コードに係る複数の攻撃リクエストを生成し、所定時間を掛けてサーバ２に順次送信する。サーバ２は、各攻撃リクエストに対するレスポンスをＰＣ１に返却する。
【００１８】
ＰＣ１は、サーバ２に対して送信した複数の攻撃リクエストに対応して、各リクエストに対するレスポンスを順次取得する。これによりＰＣ１は、レスポンスのログデータを得る（図５参照）。ＰＣ１は、取得したログデータを解析し、当該Ｗｅｂページに係る診断を行う。ＰＣ１は、各Ｗｅｂページについて複数の攻撃リクエストを順次送信し、対応するレスポンスを順次取得して各ページに係るログデータを得る。これによりＰＣ１は、各ページについて診断を行うことができる。
【００１９】
図５は、レスポンスのログデータの一例を示す説明図である。図５では、あるＷｅｂページについて診断を行った場合のレスポンスのログデータを図示する。図５Ａでは、正常に診断が行われた場合のログデータを、図５Ｂでは、サーバ２におけるメンテナンスによって診断が正常に行われなかった場合のログデータを示す。なお、図５のグラフは、横軸が攻撃リクエストの送信回数（攻撃リクエストの送信順序）を、縦軸がレスポンスに係るＨＴＴＰステータスコードを示す。
【００２０】
ＨＴＴＰステータスコードは、Ｗｅｂサーバからのレスポンスの意味を表現するコードである。ＰＣ１からのリクエストに応じて、サーバ２から、各種のステータスコードに係るレスポンスが出力される。具体的には図５に示すように、１００番台、２００番台、３００番台…の各種ステータスコードのレスポンスが出力される。例えば１００番台のステータスコードは、リクエストが受け取られて処理が継続されること（Informal：情報）を意味し、２００番台のステータスコードは、リクエストが成功したこと（Successful：成功）を意味する。ステータスコードの番号に応じて、各レスポンスの意味が表現される。
【００２１】
例えばＰＣ１は、４００番台及び５００番台のステータスコードをエラーコードとして認識し、エラーが発生したものと判断する。例えば図５Ａに示すログデータでは、ＰＣ１からの攻撃リクエストによって、４００番台のステータスコードに係るエラーが複数回発生している。ＰＣ１は、各エラーの内容と、対応する攻撃リクエストの診断項目とを照らし合わせて、当該Ｗｅｂページに係る脆弱性を診断する。
【００２２】
しかしながら、Ｗｅｂページの脆弱性の問題ではなく、サーバ２の動作状態、機能等の問題によって、診断と直接関係のないエラーが発生する場合がある。図５Ｂでは、サーバ２がメンテナンス中である場合に脆弱性診断を行った場合のログデータを示す。サーバ２がメンテナンス中であるため、サーバ２は攻撃リクエストによらず、同じエラーコードのレスポンスを一定時間出力している。具体的には、サーバ２は一定時間にわたって５００番台のエラーを連続して出力している。このように、例えばサーバ２の緊急メンテナンス、過負荷等の問題によって、脆弱性に直接関係がないエラーが出力される場合がある。また、例えばサーバ２が、データの登録数が一定数を超えると処理を中断するような機能を備えている場合、データが削除されるまでレスポンスが変化せず、攻撃リクエストによるレスポンスの変化を確認できない場合もある。
【００２３】
上記のように、サーバ２の動作状態、機能等によっては、攻撃リクエストによらないエラーが発生する場合がある。この場合、ＰＣ１はＷｅｂアプリケーションのセキュリティレベルを誤って診断する虞がある。また、エラーが発生した箇所を特定して該当箇所から診断をやり直す、発生箇所を特定できないために全ての診断をやり直す等、追加作業の必要性が出てくる虞もある。しかし、診断中は攻撃リクエストに起因するエラーも発生するため、診断中に特定のエラーが発生したことを判別して、サーバ２の問題によるエラーであると判定することは困難である。そこで本実施の形態では、サーバ２から出力されるレスポンスの傾向を、過去に診断された正常なレスポンスの傾向と比較することで、サーバ２の問題によってエラーが発生しているか否かを識別する。
【００２４】
図６は、エラー判定処理を説明するための説明図である。図６上側に、過去（第１の期間）に診断対象とした一のＷｅｂページについて診断を行った様子を図示する。また、図６下側に、同一のＷｅｂサイト内の別ページを現在（第２の期間）の診断対象として診断を行っている様子を図示する。
ＰＣ１は、上記と同様に、各種攻撃コードに係る攻撃リクエストを各Ｗｅｂページについて順次送信する。この場合にＰＣ１は、ログデータにおいてレスポンスの発生分布に偏りが起きないように、ランダムな順番で攻撃リクエストを送信する。具体的にＰＣ１は、診断項目をランダムに入れ替えて攻撃コードを選択し、選択された攻撃コードを挿入したリクエストを送信する。これによりＰＣ１は、各Ｗｅｂページについて、エラーの発生箇所に偏りが少ないログデータを得る。
【００２５】
ＰＣ１は、一のＷｅｂページについて全ての診断項目に係る攻撃リクエストを送信し、レスポンスの取得が完了した後、取得したレスポンスのステータスコードが示す値について、標準偏差及び平均を特定する。ステータスコードが示す値は、単純にコード番号を用いてもよいが、ステータスコードの種類に応じて重み付けをすると好適である。例えばＰＣ１は、４００番台及び５００番台のエラーコードを重み付けする。これにより、エラーコードと、その他のステータスコードとをより明確に識別することができる。ＰＣ１は、エラーコードに重み付けをした上で標準偏差及び平均を特定する。例えばＰＣ１は、各Ｗｅｂページについて診断が完了する度に、診断対象としたＷｅｂページに係るログデータから標準偏差及び平均を計算して、記憶部１２に保存しておく。
【００２６】
ここでＰＣ１は、一のＷｅｂページについて診断が完了した場合、現在の診断対象であるＷｅｂページと、過去に診断対象としたＷｅｂページとについて、標準偏差及び平均を比較する。すなわちＰＣ１は、過去（第１の期間）及び現在（第２の期間）夫々におけるレスポンスから特定された標準偏差及び平均を比較する。例えばＰＣ１は、現在診断対象としているＷｅｂページのデータと、一ページ前のＷｅｂページのデータとを比較する。
【００２７】
一般的に、同じＷｅｂサイト内では、診断によるレスポンスの傾向は各ページで同様になる場合が多い。従って、各Ｗｅｂページに係るレスポンスのログデータについて標準偏差及び平均を取った場合、同様の値を取る場合が多い。
【００２８】
ここで、例えば図６に示すように、現在サーバ２がメンテナンス中である場合を考える。この場合、上述の如くサーバ２は、攻撃リクエストによらない同一のレスポンスを連続的に出力する。これにより、現在診断対象としたＷｅｂページの診断結果では、前のページの診断結果に比べてエラーが多数発生する。これにより、現在のページに係るレスポンスの標準偏差及び平均は、前のページに係る値と大きく異なることになる。例えばＰＣ１は、現在のページに係る標準偏差及び平均が前のページに係る値より所定値以上大きい場合、サーバ２側の問題によってエラーが発生している可能性が高いと判定する。
【００２９】
このようにＰＣ１は、各ページのレスポンスに係るログデータの標準偏差及び平均を比較し、サーバ２でエラーが発生しているか否かを判定する。ＰＣ１は、比較結果に応じてさらに以下の判定処理を行い、サーバ２でエラーが発生しているか否かを確定する。
【００３０】
図７は、レスポンスの連続発生回数に基づくエラー判定処理を説明するための説明図である。ＰＣ１は、標準偏差及び平均が十分大きいと判定した場合、ログデータを解析し、エラーコードに係るレスポンスが特定の発生パターンで発生しているか否かを判定する。ＰＣ１は、当該判定結果に応じて、サーバ２でエラーが発生しているか否かを判定する。
具体的にＰＣ１は、エラーコードに係るレスポンスが連続して発生している連続発生回数を、コード別にカウントする。例えば４００番のエラー、４０１番のエラー、４０２番のエラー…というように、エラーコード別に各レスポンスが連続して発生した回数をカウントする。そしてＰＣ１は、各エラーコードに係るレスポンスが連続して発生した連続発生回数が、所定回数を超えて発生しているか否かを判定する。例えば図７に示す例では、ＰＣ１は、５００番台のエラーコードに係るレスポンスが一定回数連続して発生しているか否かを判定する。所定回数を超えて同一のエラーが連続して発生していると判定した場合、ＰＣ１は、サーバ２がメンテナンス等の理由でエラーを生じさせていると判断する。
【００３１】
なお、上記でＰＣ１は、特定のレスポンスが連続して発生している回数に応じて判定を行ったが、本実施の形態はこれに限定されるものではない。例えばＰＣ１は、特定のレスポンスが連続して発生している時間に応じて判定を行ってもよい。具体的にＰＣ１は、エラーコードに係るレスポンスが連続して発生している連続発生時間が、所定時間を超えたか否かを判定する。連続発生時間が所定時間を超える場合、ＰＣ１は、サーバ２側の問題でエラーが生じていると判断する。このように、ＰＣ１はレスポンスの発生回数ではなく、レスポンスの発生時間を基準として判定を行ってもよい。
【００３２】
所定回数を超えて同一のエラーが連続して発生していると判定した場合、ＰＣ１は、現在診断対象としたＷｅｂページについて、メンテナンス等の問題が解消してから再度診断を行う。具体的にＰＣ１は、攻撃コードを含まない通常のリクエストをサーバ２に送信し、当該リクエストに対するレスポンスから、サーバ２の動作が通常の状態に戻ったか否かを判定する。例えばＰＣ１は、診断を開始する前に、通常リクエストをサーバ２に送信して、通常動作時のレスポンスをサンプルとして取得しておく。ＰＣ１は、エラーの連続発生を検出した後に送信した通常リクエストに対するレスポンスと、通常動作時のレスポンスとを比較し、サーバ２の動作が通常の状態に戻ったか否かを判定する。
【００３３】
メンテナンスの終了等によりサーバ２の動作が通常の状態に戻った場合、ＰＣ１は、エラーの連続発生を検出したＷｅｂページについて、再度診断を行う。すなわちＰＣ１は、複数の攻撃リクエストをサーバ２に再送信し、レスポンスを再度取得する。ＰＣ１は、再度取得したレスポンスに基づいてエラーの発生の有無を再度判定し、サーバ２側で問題が生じているか否かを確認する。サーバ２側で問題が生じていない場合、ＰＣ１は、２回目の処理で得たログデータに基づき脆弱性診断を行う。一方、２回目の処理においてもサーバ２で同様の問題が生じている場合、ＰＣ１は、当該Ｗｅｂページについての診断をスキップし、次のページの診断を行う。
上記のように、ＰＣ１は、サーバ２から得た現在及び過去のレスポンスに係る標準偏差及び平均を比較し、サーバ２でエラーが発生している虞があるか否かを推定する。サーバ２でエラーが発生していると推定される場合、ＰＣ１はさらにレスポンスの発生パターンを分析し、サーバ２側の問題でエラーが発生しているか否かを確定する。これによりＰＣ１は、脆弱性診断を行う際に、エラーの発生原因を適切に識別することができる。
【００３４】
図８は、ＰＣ１が実行する処理手順の一例を示すフローチャートである。図８に基づいて、ＰＣ１が実行する処理の概要について説明する。
ＰＣ１の制御部１１は、サーバ２に送信する攻撃レスポンスに係る攻撃コードの種類をランダムに選択する（ステップＳ１１）。攻撃コードの種類は、診断項目に応じて予め規定されており、制御部１１は、規定された攻撃コードのいずれかをランダムに選択する。制御部１１は、選択した攻撃コードに係る攻撃リクエストを、現在診断対象としている一のＷｅｂページに対する診断用リクエストとしてサーバ２に送信する（ステップＳ１２）。
【００３５】
制御部１１は、攻撃リクエストに対するレスポンスをサーバ２から取得し、記憶部１２に保存する（ステップＳ１３）。制御部１１は、全ての種類の攻撃コードについて攻撃リクエストを送信したか否かを判定する（ステップＳ１４）。送信が完了していないと判定した場合（Ｓ１４：ＮＯ）、制御部１１は処理をステップＳ１１に戻す。制御部１１はステップＳ１１〜Ｓ１３の処理を繰り返し、現在診断対象としているＷｅｂページについて、レスポンスのログデータを蓄積する。制御部１１は、蓄積したログデータを元に脆弱性の診断を行う。
【００３６】
送信が完了したと判定した場合（Ｓ１４：ＹＥＳ）、制御部１１は、サーバ２から取得したレスポンスのステータスコードが示す値について、標準偏差及び平均を特定する（ステップＳ１５）。具体的に制御部１１は、現在診断対象としているＷｅｂページに係るレスポンスのログデータについて、ステータスコードに係るコード番号の標準偏差及び平均を算出する。この場合に制御部１１は、各レスポンスに係るステータスコードの種類に応じて重み付けを行った上で、標準偏差及び平均を算出する。具体的に制御部１１は、ステータスコードがエラーコードである場合、エラーコードのコード番号については重み付けを行い、標準偏差及び平均を算出する。
【００３７】
制御部１１は、過去（第１の期間）に特定した標準偏差及び平均と、現在（第２の期間）特定した標準偏差及び平均とを比較し、現在の標準偏差及び平均が過去の標準偏差及び平均よりも所定値以上大きいか否かを判定する（ステップＳ１６）。すなわち制御部１１は、現在診断対象としたＷｅｂページに係るレスポンスの発生分布が、過去に診断したＷｅｂページに係るレスポンスの発生分布と大きく異なるか否かを判定する。標準偏差及び平均が所定値以上大きくないと判定した場合（Ｓ１６：ＮＯ）、制御部１１は、処理をステップＳ１８に移行する。
【００３８】
標準偏差及び平均が所定値以上大きいと判定した場合（Ｓ１６：ＹＥＳ）、制御部１１はログデータを解析し、特定のレスポンスが連続して発生した連続発生回数が、所定回数を超えているか否かを判定する（ステップＳ１７）。具体的に制御部１１は、同一のエラーコードに係るレスポンスの連続発生回数が所定回数を超えているか否かを判定する。
【００３９】
ステップＳ１６でＮＯの場合、又はステップＳ１７でＮＯの場合、制御部１１は、現在サーバ２にエラーが発生していないと判断し、処理をステップＳ１８に移行する。制御部１１は、全てのＷｅｂページについて診断が完了したか否かを判定する（ステップＳ１８）。診断が完了したと判定した場合（Ｓ１８：ＹＥＳ）、制御部１１は一連の処理を終了する。診断が完了していないと判定した場合（Ｓ１８：ＮＯ）、制御部１１は、診断対象とするＷｅｂページを次のページに切り替え（ステップＳ１９）、処理をステップＳ１１に戻す。
【００４０】
特定のレスポンスの連続発生回数が所定回数を超えていると判定した場合（Ｓ１７：ＹＥＳ）、制御部１１は、連続発生を検出した回数が２回目であるか否かを判定する（ステップＳ２０）。２回目であると判定した場合（Ｓ２０：ＹＥＳ）、制御部１１は、処理をステップＳ１９に移行する。
【００４１】
２回目でないと判定した場合（Ｓ２０：ＮＯ）、制御部１１は、ステップＳ１２で送信した攻撃リクエストとは異なる通常リクエストをサーバ２に送信する（ステップＳ２１）。制御部１１は、通常リクエストに対するレスポンスを取得し、取得したレスポンスが通常のレスポンスであるか否かを判定する（ステップＳ２２）。例えば制御部１１は、診断開始前に通常リクエストをサーバ２に送信し、レスポンスログのサンプルを取得しておく。制御部１１は、予め取得しておいたサンプルデータと比較して、新たにサーバ２から取得したレスポンスが通常であるか否かを判定する。
【００４２】
通常のレスポンスでないと判定した場合（Ｓ２２：ＮＯ）、制御部１１は処理を一定時間待機し（ステップＳ２３）、ステップＳ２１に戻る。通常のレスポンスであると判定した場合（Ｓ２２：ＹＥＳ）、制御部１１は処理をステップＳ１１に戻す。これにより制御部１１は、サーバ２の問題によるエラーの発生を確認したＷｅｂページについて、攻撃リクエストを再送信し、エラーの発生の有無について再度判定を行う。２回目の診断でもサーバ２側でのエラーを確認した場合、制御部１１は当該ページについて診断をスキップし、次のページに診断を移行する。
【００４３】
なお、上記でＰＣ１は、ステータスコードについて標準偏差及び平均の双方を取って比較したが、本実施の形態はこれに限定されるものではなく、標準偏差及び平均の一方のみで比較を行ってもよい。
【００４４】
また、例えばＰＣ１は、過去に診断済みのいずれかのＷｅｂページに係るログデータを用いて標準偏差及び平均の比較を行ったが、本実施の形態はこれに限定されるものではない。例えばＰＣ１は、過去の診断結果に係る全ページについて標準偏差及び平均の統計を取り、統計値と最新の値とを比較してエラーの発生の有無を判定してもよい。
【００４５】
また、上記でＰＣ１は、ステータスコードの種類がエラーコードであるか否かに応じて重み付けを行ったが、本実施の形態はこれに限定されるものではない。例えばＰＣ１は、レスポンスに含まれる文字列に応じて重み付けを行ってもよい。例えばＰＣ１は、レスポンスに「Ｅｒｒｏｒ」等の特定の文字列が含まれるか否かに応じて重み付けを行う。当該処理によっても、ＰＣ１はステータスコードが示す値を適切に重み付けすることができる。
【００４６】
以上より、本実施の形態１によれば、脆弱性診断を行う際に、診断の適否を適切に識別することができる。
【００４７】
また、本実施の形態１によれば、エラーコードに係るレスポンスについて重み付けを行った上で標準偏差及び平均を取ることで、より適切に比較を行うことができる。
【００４８】
また、本実施の形態１によれば、標準偏差及び平均の比較を行うだけでなく、さらにエラーコードに係るレスポンスの発生パターンを分析することで、サーバ２におけるエラー発生の有無をより正確に識別することができる。
【００４９】
また、本実施の形態１によれば、各種攻撃コードに係る攻撃リクエストをランダムに送信することで、攻撃リクエストにより発生するエラーの発生分布の均一化が図られる。従って、ログデータにおいてエラーの発生箇所に偏りが少なくなるため、エラーの発生パターンを分析する際、通常の診断結果を誤って異常な診断結果と判定する事態を防止することができる。
【００５０】
また、本実施の形態１によれば、エラーの連続発生回数に応じて判定を行うことで、メンテナンス等の理由で一律固定のレスポンスが返却される事態を検知することができる。
【００５１】
また、本実施の形態１によれば、エラーの連続発生時間によっても判定を行うことができる。
【００５２】
また、本実施の形態１によれば、エラーの連続発生を検出した後、通常リクエストを送信してサーバ２からのレスポンスが通常の状態に戻るまで待機することで、脆弱性診断に係る処理を適切に継続することができる。
【００５３】
（実施の形態２）
本実施の形態では、特定のレスポンスが周期的に発生しているか否かに応じて、サーバ２にエラーが生じているか否かを判定する形態について述べる。なお、実施の形態１と重複する内容については同一の符号を付して説明を省略する。
図９は、レスポンスの周期発生回数に基づくエラー判定処理を説明するための説明図である。ＰＣ１は実施の形態１と同様に、過去及び現在の診断結果に係る標準偏差及び平均を比較し、サーバ２にエラーが発生しているか否かを推定する。そしてＰＣ１は、ログデータを解析し、特定のレスポンスが特定の発生パターンで発生しているか否かを判定する。
【００５４】
ここで、本実施の形態に係るＰＣ１は、エラーの連続発生回数について判定を行うだけでなく、エラーが周期的に発生した周期発生回数についても判定を行う。図９に、特定のレスポンスが周期的に発生している様子を図示している。具体的には、図９に示すログデータでは、４００番台のエラーコードのレスポンスが周期的に発生している様子が図示されている。図９に例示するログデータでは、セキュリティの脆弱性のためではなく、診断のための攻撃リクエストによりサーバ２において周期的に競合エラーが発生している。これによりサーバ２は、同じエラーコードのレスポンスを周期的に出力する。本実施の形態においてＰＣ１は、同じエラーが周期的に発生している状態を検出し、診断対象から当該ログデータを除外する。
【００５５】
ＰＣ１はログデータを解析し、同じエラーコードに係るレスポンスが周期的に発生した回数をカウントする。具体的にＰＣ１は、同じエラーコードのレスポンスが連続して発生した後、当該エラーコードに係るレスポンスが一定時間発生しなくなり、再度同じレスポンスが連続して発生した回数をカウントする。
【００５６】
ＰＣ１は、エラーコード別にレスポンスの周期発生回数をカウントする。そしてＰＣ１は、カウントした周期発生回数が所定回数を超えているか否かに応じて、サーバ２にエラーが発生しているか否かを判定する。サーバ２にエラーが発生していると判定した場合、ＰＣ１は、現在診断対象としているＷｅｂページについて、診断を再度行う。
【００５７】
具体的にＰＣ１は、エラーが周期的に発生した時間間隔に応じて攻撃リクエストの送信間隔を定め、再度診断を行う。ＰＣ１はログデータを解析し、エラーが周期的に発生している時間間隔を特定する。すなわちＰＣ１は、図９に示すように、同じエラーコードに係るレスポンスが連続して発生した後、次に当該エラーコードのレスポンスが発生するまでの時間間隔を特定する。そしてＰＣ１は、特定した時間間隔について、最大の時間間隔を特定する。ＰＣ１は、特定した最大の時間間隔を送信間隔として、複数の攻撃リクエストを再送信する。これにより、攻撃リクエストとの競合エラーの防止を図る。当該処理によっても特定のレスポンスが周期的に発生する場合、ＰＣ１は問題の解消が難しいと判断する。この場合、ＰＣ１は、現在診断対象としているＷｅｂページについて処理をスキップし、次のページについて診断を行う。
【００５８】
図１０は、実施の形態２に係るＰＣ１が実行する処理手順の一例を示すフローチャートである。特定のレスポンスの連続発生回数が所定回数を超えないと判定した場合（Ｓ１７：ＮＯ）、ＰＣ１の制御部１１は、以下の処理を実行する。
制御部１１はログデータを解析し、特定のレスポンスが周期的に発生した周期発生回数が、所定回数を超えているか否かを判定する（ステップＳ２０１）。具体的に制御部１１は、同じエラーコードに係るレスポンスが連続して発生した後、一定時間発生しなくなり、再度連続して発生する回数をカウントする。制御部１１は、周期発生回数が所定回数を超えているか否かを、エラーコード別に判定する。周期発生回数が所定回数を超えていないと判定した場合（Ｓ２０１：ＮＯ）、制御部１１は、処理をステップＳ１８に移行する。
【００５９】
周期発生回数が所定回数を超えていると判定した場合（Ｓ２０１：ＹＥＳ）、制御部１１は、レスポンスの周期発生を検出した回数が２回目であるか否かを判定する（ステップＳ２０２）。２回目であると判定した場合（Ｓ２０２：ＹＥＳ）、制御部１１は処理をステップＳ１９に移行する。２回目でないと判定した場合（Ｓ２０２：ＮＯ）、制御部１１は、当該レスポンスが周期的に発生する時間間隔の最大値を特定する（ステップＳ２０３）。制御部１１は、攻撃リクエストの送信間隔を、特定した時間間隔の最大値に設定し（ステップＳ２０４）、処理をステップＳ１１に戻す。
【００６０】
以上より、本実施の形態２によれば、診断用の攻撃リクエストとの競合によるエラーの発生を適切に識別することができる。
【００６１】
また、本実施の形態２によれば、特定のレスポンスが周期的に発生している時間間隔の最大値だけ攻撃リクエストの送信間隔を空けて再度診断を行うことで、適切に問題の回避を図ることができる。
【００６２】
（実施の形態３）
図１１は、実施の形態３に係るに係るＰＣ１のハードウェア群を示すブロック図である。読取部１６はディスクドライブ、メモリーカードスロット等であり、ＣＤ（Compact Disk）−ＲＯＭ、ＤＶＤ（Digital Versatile Disc）−ＲＯＭ、メモリーカード、又はＵＳＢ（Universal Serial Bus）等の可搬型記憶媒体１ａを読み取る。制御部１１はプログラムＰを可搬型記憶媒体１ａより読み取り、記憶部１２に記憶しても良い。また、制御部１１はネットワークＮを介して他のコンピュータからプログラムＰをダウンロードし、記憶部１２に記憶しても良い。さらにまた制御部１１は、半導体メモリ１ｂからプログラムＰを読み込んでも良い。
【００６３】
図１２は、上述した形態のＰＣ１の動作を示す機能ブロック図である。制御部１１がプログラムＰを実行することにより、ＰＣ１は以下のように動作する。送信部１２０１は、第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信する。取得部１２０２は、送信した前記複数の攻撃リクエストに対するレスポンスを取得する。特定部１２０３は、取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定する。判定部１２０４は、前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する。
【００６４】
本実施の形態３は以上の如きであり、その他は実施の形態１及び２と同様であるので、対応する部分には同一の符号を付してその詳細な説明を省略する。
【００６５】
以上の実施の形態１から実施の形態３を含む実施形態に関し、さらに以下の付記を開示する。
【００６６】
（付記１）
第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信し、
送信した前記複数の攻撃リクエストに対するレスポンスを取得し、
取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定し、
前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する
処理をコンピュータに実行させることを特徴とする診断プログラム。
（付記２）
前記ステータスコードが示す値を、該ステータスコードの種類に応じて、又は前記レスポンスに含まれる文字列に応じて重み付けした上で前記標準偏差又は平均を特定する
ことを特徴とする付記１に記載の診断プログラム。
（付記３）
前記標準偏差又は平均の比較結果に応じて、前記第２の期間において特定の前記レスポンスが特定の発生パターンで発生しているか否かを判定し、
前記特定のレスポンスが前記特定の発生パターンで発生していると判定した場合、前記サーバにエラーが発生していると判定する
ことを特徴とする付記１又は２に記載の診断プログラム。
（付記４）
互いに攻撃コードが異なる前記複数の攻撃リクエストを、前記サーバにランダムに送信する
ことを特徴とする付記３に記載の診断プログラム。
（付記５）
前記特定のレスポンスが連続して発生した連続発生回数が、所定回数を超えたか否かに応じて判定を行う
ことを特徴とする付記３又は４に記載の診断プログラム。
（付記６）
前記特定のレスポンスが連続して発生した連続発生時間が、所定時間を超えたか否かに応じて判定を行う
ことを特徴とする付記３又は４に記載の診断プログラム。
（付記７）
前記サーバにエラーが発生していると判定した場合、前記攻撃リクエストと異なる所定のリクエストを前記サーバに送信し、
送信した前記所定のリクエストに対するレスポンスに応じて、前記攻撃リクエストを再送信して判定を再度行う
ことを特徴とする付記５又は６に記載の診断プログラム。
（付記８）
前記特定のレスポンスが周期的に発生した周期発生回数が、所定回数を超えたか否かに応じて判定を行う
ことを特徴とする付記３乃至７のいずれか一に記載の診断プログラム。
（付記９）
前記サーバにエラーが発生していると判定した場合、前記特定のレスポンスが周期的に発生する時間間隔の最大値を特定し、
特定した前記最大値の時間間隔で前記複数の攻撃リクエストを再送信し、判定を再度行う
ことを特徴とする付記８に記載の診断プログラム。
（付記１０）
第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信し、
送信した前記複数の攻撃リクエストに対するレスポンスを取得し、
取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定し、
前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する
処理をコンピュータに実行させることを特徴とする診断方法。
（付記１１）
第１の期間、及び該第１の期間と異なる第２の期間において、複数の攻撃リクエストをサーバに送信する送信部と、
送信した前記複数の攻撃リクエストに対するレスポンスを取得する取得部と、
取得した前記レスポンスのステータスコードが示す値について標準偏差又は平均を特定する特定部と、
前記第１の期間及び第２の期間夫々において特定された前記標準偏差又は平均の比較結果に応じて、前記第２の期間において前記サーバにエラーが発生しているかどうかを判定する判定部と
を備えることを特徴とする診断装置。
【００６７】
今回開示された実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上記した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００６８】
１  ＰＣ（診断装置）
１１  制御部
１２  記憶部
Ｐ  プログラム
１２１  診断テーブル
１３  通信部
１４  表示部
１５  入力部
２  サーバ
【図１】
2018169954.tif 000003
【図２】
2018169954.tif 000004
【図３】
2018169954.tif 000005
【図４】
2018169954.tif 000006
【図５】
2018169954.tif 000007
【図６】
2018169954.tif 000008
【図７】
2018169954.tif 000009
【図８】
2018169954.tif 000010
【図９】
2018169954.tif 000011
【図１０】
2018169954.tif 000012
【図１１】
2018169954.tif 000013
【図１２】
2018169954.tif 000014