(57)【要約】  判定装置（１０）は、ｗｅｂアプリケーション（ｗｅｂサーバ）への攻撃リクエストに含まれる攻撃コードの攻撃タイプに応じ、攻撃コードのエミュレーションを実施し、エミュレーションの結果、攻撃に成功した場合にｗｅｂアプリケーションからのレスポンスに現れる特徴を抽出する。その後、判定装置（１０）は、攻撃リクエスト以降のサーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、抽出した特徴を有するかそれぞれ検査し、複数のレスポンスのうち少なくともいずれか一つが、抽出した特徴を有する場合、攻撃コードによる攻撃が成功したと判定する。
2019225216.tif 000002
【特許請求の範囲】
【請求項１】
攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定方法であって、
前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定ステップと、
前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出ステップと、
前記攻撃リクエスト以降の前記サーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する成否判定ステップと
を含んだことを特徴とする判定方法。
【請求項２】
前記成否判定ステップは、前記攻撃リクエストから所定時間以内に前記サーバへ送信された複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定することを特徴とする請求項１に記載の判定方法。
【請求項３】
前記成否判定ステップは、前記攻撃リクエスト以降の前記サーバへのリクエストであって、且つ、前記攻撃リクエストと送信元ＩＰアドレスが同じ複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定することを特徴とする請求項１に記載の判定方法。
【請求項４】
過去のリクエストとレスポンスから、所定のキーワードが含まれるリクエストのＵＲＬパス部分を入力ＵＲＬとし、所定のキーワードを含まれるレスポンスに対応するリクエストのＵＲＬパス部分を出力ＵＲＬとし、該入力ＵＲＬおよび出力ＵＲＬの組を、検査対象のリクエストを検索するための入出力ＵＲＬルールとして作成する入出力ＵＲＬルール作成ステップをさらに含み、
前記成否判定ステップは、前記攻撃リクエストのＵＲＬパス部分が前記入出力ＵＲＬルールの入力ＵＲＬと一致する場合に、前記攻撃リクエスト以降の前記サーバへのリクエストのうち、該入力ＵＲＬに対応する出力ＵＲＬに一致するリクエストに対応するレスポンスが、前記抽出した特徴を有するか検査し、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定することを特徴とする請求項１に記載の判定方法。
【請求項５】
前記攻撃コードから作成されたファイル名を抽出し、該抽出したファイル名を、検査対象のリクエストを検索するためのファイル名ルールとして作成するファイル名ルール作成ステップをさらに含み、
前記成否判定ステップは、前記攻撃リクエスト以降の前記サーバへのリクエストのうち、前記ファイル名ルールのファイル名が含まれるリクエストに対応するレスポンスが、前記抽出した特徴を有するか検査し、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定することを特徴とする請求項１に記載の判定方法。
【請求項６】
攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定装置であって、
前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定部と、
前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出部と、
前記攻撃リクエスト以降の前記サーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する成否判定部と
を備えたことを特徴とする判定装置。
【請求項７】
攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定プログラムであって、
前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定ステップと、
前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出ステップと、
前記攻撃リクエスト以降の前記サーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する成否判定ステップと
をコンピュータに実行させることを特徴とする判定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、判定方法、判定装置および判定プログラムに関する。
【背景技術】
【０００２】
ｗｅｂアプリケーションは多くのサービスで利用されている一方で、不特定多数からアクセス可能なため攻撃に晒されやすい性質を持つ。攻撃は、ＷＡＦ（Web  Application  Firewall）、ＮＩＤＳ（Network-based  Intrusion  Detection  System）等により検知することができるが、攻撃が成功したか否かについては大量のアラートを調査・検証する必要がある。そこで、例えば、攻撃が成功したか否かを判定するため、攻撃リクエストに対応するレスポンスを検査し、攻撃が成功した際に現れる特徴があれば攻撃が成功したと判定し、攻撃が成功した際に現れる特徴がなければ攻撃が失敗したと判定する技術が考えられる（例えば、非特許文献１参照）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】鐘揚、青木一史、三好潤、嶋田創、高倉弘喜、"AVT  Lite:  攻撃コードのエミュレーションに基づくWeb攻撃の成否判定手法"、コンピュータセキュリティシンポジウム  2017  論文集、2017
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記した従来の技術では、攻撃リクエストに対応するレスポンスを検査対象とするので、攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡（特徴）が現れる場合には、攻撃の成否を適切に判定することが出来ない場合があるという課題があった。【０００５】
本発明は、上記に鑑みてなされたものであって、攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡が現れる場合であっても、攻撃の成否を適切に判定することを容易にすることを目的とする。
【課題を解決するための手段】
【０００６】
上述した課題を解決し、目的を達成するために、本発明の判定方法は、攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定方法であって、前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定ステップと、前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出ステップと、前記攻撃リクエスト以降の前記サーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する成否判定ステップとを含んだことを特徴とする。【０００７】
また、本発明の判定装置は、攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定装置であって、前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定部と、前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出部と、前記攻撃リクエスト以降の前記サーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する成否判定部とを備えたことを特徴とする。【０００８】
また、本発明の判定プログラムは、攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定プログラムであって、前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定ステップと、前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出ステップと、前記攻撃リクエスト以降の前記サーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、前記抽出した特徴を有するかそれぞれ検査し、前記複数のレスポンスのうち少なくともいずれか一つが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する成否判定ステップとをコンピュータに実行させることを特徴とする。
【発明の効果】
【０００９】
本発明によれば、攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡が現れる場合であっても、攻撃の成否を適切に判定することができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１の実施形態の判定装置の動作概要を説明する図である。
【図２】図２は、第１の実施形態の判定装置の動作概要を説明する図である。
【図３】図３は、図１の判定装置の構成例を示す図である。
【図４】図４は、図３の攻撃タイプ別キーワードリストの例を示す図である。
【図５】図５は、図３の判定装置による攻撃の成否を判定する処理を説明する図である。
【図６】図６は、図３の判定装置による攻撃の成否を判定する処理を説明する図である。
【図７】図７は、図３の判定装置の処理手順を示すフローチャートである。
【図８】図８は、第１の実施形態の判定装置の効果を説明する図である。
【図９】図９は、第１の実施形態の判定装置の効果を説明する図である。
【図１０】図１０は、第１の実施形態の判定装置の効果を説明する図である。
【図１１】図１１は、第２の実施形態の判定装置の構成例を示す図である。
【図１２】図１２は、第２の実施形態の判定装置による入出力ＵＲＬルールを作成する処理を説明する図である。
【図１３】図１３は、第２の実施形態の判定装置による入出力ＵＲＬルールを作成する処理を説明する図である。
【図１４】図１４は、第２の実施形態の判定装置による攻撃の成否を判定する処理を説明する図である。
【図１５】図１５は、第３の実施形態の判定装置の構成例を示す図である。
【図１６】図１６は、第３の実施形態の判定装置によるファイル名ルールテーブルを作成する処理を説明する図である。
【図１７】図１７は、第３の実施形態の判定装置による攻撃の成否を判定する処理を説明する図である。
【図１８】図１８は、各実施形態の判定装置を含むネットワークの構成例を示す図である。
【図１９】図１９は、判定プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら、本発明の実施形態を説明する。本発明は本実施形態に限定されない。
【００１２】
［第１の実施形態］
［概要］
図１および図２を用いて、第１の実施形態の判定装置１０の動作概要を説明する。まず、判定装置１０は、例えば、図１に示すように、ｗｅｂアプリケーション（ｗｅｂサーバ）への攻撃リクエスト（１）を受信すると、この攻撃リクエストに含まれる攻撃コードと、攻撃タイプとを特定する。そして、判定装置１０は、特定した攻撃タイプ（例えば、OS（Operating  System）コマンドを悪用する攻撃タイプ）に応じたエミュレータで攻撃コードを実行し、実行の結果のｗｅｂサーバから出力される情報を攻撃の成功時に出力される特徴（例えば、「root：*：0：/bin/sh…」）として抽出する（２）。
【００１３】
その後、判定装置１０は、ｗｅｂサーバからのレスポンス（３）を検査し、レスポンスに、（２）で抽出した特徴（例えば、「root：*：0：/bin/sh」）が含まれている場合、攻撃は成功と判定する（（４）検査結果  攻撃は成功）。ここで、第１の実施形態の判定装置１０では、図２に示すように、攻撃リクエストがあった際、抽出された特徴を攻撃リクエストに対するレスポンスだけでなく、それ以後のレスポンスであって、所定の条件に合致した全てのレスポンスを検査対象として、抽出した特徴が含まれているか否かを判定し、抽出した特徴が含まれている場合には、攻撃は成功と判定する。
【００１４】
このようにすることで、判定装置１０は、攻撃リクエストがあった際、抽出された痕跡を用いて、そのリクエストに対するレスポンスだけでなく、以後のレスポンスに対しても検査を行うことで複数リクエストに跨る攻撃の成否を判定することができる。この結果、判定装置１０では、既存のシステムを改変することなく、複数のリクエストに跨る攻撃に対して、その攻撃の成否を適切に判定することが可能である。
【００１５】
［構成］
次に、図３を用いて判定装置１０の構成を説明する。判定装置１０は、記憶部１１と、攻撃検知部１２１と、攻撃タイプ判定部１２２と、攻撃コード解析部（特徴抽出部）１２３と、特徴選定部１２４と、成否判定部１２５とを備える。
【００１６】
攻撃タイプ別キーワードリスト１１１は、攻撃タイプごとに、当該攻撃タイプの攻撃コードに含まれるキーワードを示した情報である。この攻撃タイプ別キーワードリスト１１１は、攻撃タイプ判定部１２２が、攻撃コードに含まれるキーワードから攻撃タイプを判定する際に参照される。
【００１７】
なお、攻撃タイプは、例えば、A.OSコマンドを悪用する攻撃タイプ、B.プログラムコードを悪用する攻撃タイプ、C.SQLコマンド（DBの機能）を悪用する攻撃タイプ（例えば、SQL  Injection等）、D.HTTPレスポンスを悪用する攻撃タイプ（例えば、XSS、Header  Injection等）、E.ファイル操作を悪用する攻撃タイプ（例えば、ディレクトリトラバーサル等）の５つのタイプに分けられる。
【００１８】
なお、図４に例示するように、上記のA.の攻撃タイプではOSコマンドの名前をキーワードとする。また、B.の攻撃タイプではプログラミング言語で利用する固有表現をキーワードとする。例えば、PHPであればprint_r、var_dump、base64_decode等のPHPに固有の関数あるいはPHPの固有表現等（$_GET、$_POST等）をキーワードとする。その他のプログラミング言語（Java（登録商標）、Perl、Ruby、Python等）においても同等である。そのため、B.の攻撃タイプではプログラミング言語毎に攻撃タイプ別キーワードリストを保持している。このとき、どのプログラミング言語に当たるかの情報は、例えば、図４に示すように、サブ攻撃タイプとして保持する。
【００１９】
また、C.の攻撃タイプではSQLコマンドの名前（select、update、insert、drop等）やDBアクセスの際の特徴的な表現をキーワードとする。例えば、MySQLの場合、information_schema、@@version、mysql等である。さらに、D.の攻撃タイプではHTMLやJavascript（登録商標）で利用される固有表現（alert、onclick等）をキーワードとする。また、E.の攻撃タイプではディレクトリトラバーサル攻撃で利用される固有表現（../等）をキーワードとする。
【００２０】
図３の説明に戻る。特徴候補ＤＢ１１２は、攻撃コード解析部１２３よる攻撃コードのエミュレーションの結果、ｗｅｂサーバから出力された情報（特徴候補）を記憶する。
【００２１】
リクエスト・レスポンスＤＢ１１３は、様々なｗｅｂアプリケーション（ｗｅｂサーバ）へのリクエストおよび様々なｗｅｂアプリケーション（ｗｅｂサーバ）からのレスポンスを記憶する。なお、このリクエスト・レスポンスＤＢ１１３は、特徴選定部１２４が、特徴候補から、通常のレスポンスに頻繁に登場する語（普遍的な語）を除外する際に参照されるための情報も記憶してもよい。この場合には、リクエスト・レスポンスＤＢ１１３は、例えば、攻撃が来ないことが保証されている試験環境でレスポンスを取得して作成される。あるいは、攻撃検知部１２１で検知されなかったリクエストに対応するレスポンスを用いて作成される。
【００２２】
特徴ＤＢ１１４は、攻撃コードによる攻撃の成功時にｗｅｂサーバから出力される特徴を記憶する。具体的には、特徴ＤＢ１１４は、特徴候補ＤＢ１１２に記憶される特徴候補の中から特徴選定部１２４により選定された特徴を記憶する。この特徴ＤＢ１１４に記憶される特徴は、成否判定部１２５が、ｗｅｂサーバからのレスポンスに基づき、攻撃が成功したか否かを判定する際に参照される。
【００２３】
攻撃検知部１２１は、ｗｅｂサーバへのリクエストが攻撃か否かの判定（攻撃検知）を行う。攻撃検知のアルゴリズムは、既存のシグネチャ検知のアルゴリズム（例えば、Snort  (https://www.snort.org/)や、Bro(https://www.bro.org/)）や、異常検知のアルゴリズム（例えば、Detecting  Malicious  Inputs  of  Web  Application  Parameters  Using  Character  Class  Sequences,  COMPSAC,  2015）を用いてよい。
【００２４】
なお、ここでは、攻撃検知部１２１が処理対象とするリクエストにおけるURLエンコードやHTMLエンコードはデコード済みであるとする。例えば、リクエストが「GET  /index.php?id=1234%3Bcat%20%2Fetc%2Fpasswd%3B」である場合、「GET  /index.php?id=1234;cat  /etc/passwd;」にデコード済みであるものとする。
【００２５】
また、リクエストにおける攻撃コードの部分は、上記の既存のシグネチャ検知や異常検知のアルゴリズムにより出力されるものとする。例えば、リクエストが「GET  /index.php?id=1234;cat  /etc/passwd;」である場合、上記のアルゴリズムにより、上記のリクエストの攻撃コードの部分である「1234;cat  /etc/passwd;」が出力されるものとする。
【００２６】
攻撃タイプ判定部１２２は、攻撃検知部１２１により攻撃と判定されたリクエストに含まれる攻撃コードに対して攻撃タイプの判定を行う。
【００２７】
ここで、攻撃タイプ判定部１２２は、例えば、ｗｅｂアプリケーションに対する攻撃の中でも特に重要と思われる、５つの攻撃タイプ（上記のA.〜E.の攻撃タイプ）のいずれであるかを判定する。ここでの攻撃タイプの判定は、攻撃コードに含まれるキーワードが、攻撃タイプ別キーワードリスト１１１（図３参照）に示されるどの攻撃タイプのキーワードとマッチするかにより行われる。
【００２８】
例えば、攻撃タイプ判定部１２２は、攻撃タイプ別キーワードリスト１１１を参照して、攻撃コードに「cat」が含まれていれば、当該攻撃コードをA.の攻撃タイプ（OSコマンドを悪用する攻撃タイプ）と判定する。また、攻撃タイプ判定部１２２は、攻撃コードに「print_r」が含まれていれば、当該攻撃コードをB.の攻撃タイプ（プログラムコードを悪用する攻撃タイプ）であり、その中でもphpを用いた攻撃タイプであると判定する。
【００２９】
なお、攻撃タイプ判定部１２２は、攻撃コードが、攻撃タイプ別キーワードリスト１１１（図３参照）に示される複数の攻撃タイプのキーワードとマッチした場合、例えば、攻撃コードの最初（攻撃コード内で最も左の位置）に出現したキーワードの攻撃タイプであると判定する。
【００３０】
一例を挙げると、攻撃コードが「;php  -e  “$i=123456789;var_dump($1)”;」の場合、攻撃タイプ別キーワードリスト１１１において、A.の攻撃タイプのキーワードである「php」と、B.の攻撃タイプのキーワードである「var_dump」とが出現する。このような場合、攻撃タイプ判定部１２２は、上記の攻撃コードにおいて「php」の方が「var_dump」よりも初めに出現しているので、A.の攻撃タイプと判定する。
【００３１】
なお、攻撃タイプ判定部１２２は、攻撃タイプ別キーワードリスト１１１を参照して、攻撃コードがどの攻撃タイプともマッチしなかった場合は判定不可とする。
【００３２】
攻撃コード解析部１２３は、攻撃コードについてエミュレータを用いた動的解析を行うことにより、当該攻撃コードを実行した際にｗｅｂサーバからのレスポンスに現れる特徴（出力）を抽出する。
【００３３】
具体的には、攻撃コード解析部１２３は、攻撃タイプ判定部１２２で判定された攻撃コードの攻撃タイプに応じたエミュレータを用いて、当該攻撃コードによるｗｅｂアプリケーションへの攻撃のエミュレーションを実施する。そして、攻撃コード解析部１２３は、攻撃コードのエミュレーションにおいて攻撃に対するレスポンスに現れる出力を、攻撃の成功時に現れる特徴候補として抽出する。
【００３４】
なお、上記の各攻撃タイプに応じたエミュレータは、例えば、デバッガやインタープリタを応用して事前に作成しておき、攻撃コード解析部１２３は、事前作成されたエミュレータから、攻撃タイプに応じたエミュレータを選択する。
【００３５】
攻撃コード解析部１２３は、例えば、以下のようにして攻撃コードを実行した際のリクエストに対するレスポンスに現れる特徴（出力）を抽出する。
【００３６】
例えば、攻撃コードの攻撃タイプがA.OSコマンドを悪用する攻撃タイプである場合、攻撃コード解析部１２３は、OSコマンドを実行できる環境（例えば、Windows（登録商標）のコマンドプロンプト、Linux（登録商標）のbash、あるいはコマンドをエミュレートできるエミュレータ）を用いて、当該攻撃コードをコマンドとして実行する。
【００３７】
一例を挙げると、攻撃コード解析部１２３は、「bash  -c  "cat  /etc/passwd;”」というように、bashコマンドに-c引数で指定したコマンドを実行させる。そして、攻撃コード解析部１２３は、コマンドの実行による標準出力、標準エラー出力の内容を特徴候補として抽出する。例えば、攻撃コード解析部１２３は、攻撃コード「cat  /etc/passwd;」に対し、標準出力：「root:*:0:/bin/sh  …」、標準エラー出力「なし」という情報を特徴候補として抽出する。
【００３８】
また、例えば、攻撃コードの攻撃タイプが、B.プログラムコードを悪用する攻撃タイプである場合、攻撃コード解析部１２３は、プログラミング言語に対して適切なインタープリタあるいはエミュレータを用いて、当該攻撃コードを実行する。
【００３９】
一例を挙げると、攻撃コードが、phpコードの場合、攻撃コード解析部１２３は、「php  -r  ”print(‘123456789’);die();”」というように、phpインタープリタに-r引数で指定したコードを実行させる。また、攻撃コードがpythonコードの場合、攻撃コード解析部１２３は、「python  -c  “import  sys;print  123456789;sys.exit()”」というように、pythonインタープリタに-c引数で指定したコードを実行させる。
【００４０】
そして、攻撃コード解析部１２３は、コードの実行後、標準出力、標準エラー出力の内容を特徴候補として抽出する。例えば、phpコードの場合、攻撃コード「print(‘123456789’);die();」に対し、標準出力「123456789」、標準エラー出力「なし」という情報を特徴候補として抽出する。
【００４１】
また、攻撃コードの攻撃タイプが、C.SQLコマンド(DBの機能)を悪用する攻撃タイプ（例えば、SQL  Injection等）である場合、攻撃コード解析部１２３は、DBに対してSQL文を実行できるターミナルあるいはエミュレータを用いて、当該攻撃コードを実行する。
【００４２】
なお、SQL  Injection攻撃によって挿入されるSQL文（SQLコマンド）は部分的なものであり、そのままでは実行できない。よって、攻撃コード解析部１２３は、SQL文の整形を行う。例えば、攻撃コード解析部１２３は、SQL文のSELECT句等より前の部分を消去することにより、SQL文をSELECT句等が攻撃コードの最初に現れるように変更する。なお、攻撃コード解析部１２３が、SQL文の句のうち、最初に現れるように調整するキーワードはSELECT句以外の句（例えば、update、delete、drop等の句）であってもよく、これらの句は攻撃タイプ別キーワードリスト１１１（図３参照）で与えられているものとする。
【００４３】
攻撃コード解析部１２３は、整形後のSQL文の実行による標準出力、標準エラー出力の内容を特徴候補として抽出する。例えば、攻撃コード解析部１２３は、攻撃コード「’  union  select  123456789  -」を「select  123456789」に整形する。そして、攻撃コード解析部１２３は、整形後の攻撃コードの実行による標準出力「123456789」、標準エラー出力「なし」という情報を特徴候補として抽出する。
【００４４】
また、攻撃コードの攻撃タイプが、D.HTTPレスポンスを悪用する攻撃タイプ（例えば、XSS、Header  Injection等）である場合、攻撃コード解析部１２３は、攻撃の性質上、攻撃コードそのものがレスポンスとしてクライアントに送られるため、攻撃コードそのものを特徴候補として抽出する。
【００４５】
例えば、攻撃コードがXSSによる攻撃コード「<script>alert(1)</script>」である場合、攻撃コード解析部１２３は、「<script>alert(1)</script>」を特徴候補として抽出する。また、攻撃コードがHeader  Injectionによる攻撃コード「\r\nSet-Cookie:1234;」である場合、攻撃コード解析部１２３は、「\r\nSet-Cookie:1234;」を特徴候補として抽出する。
【００４６】
また、攻撃コードの攻撃タイプが、E.ファイル操作を悪用する攻撃タイプ（例えば、ディレクトリトラバーサル等）である場合、攻撃コード解析部１２３は、攻撃コードに現れるファイル名をOS内で検索し、そのファイル名のファイルの内容を特徴候補として抽出する。
【００４７】
例えば、攻撃コードが「../../../../etc/passwd」である場合、攻撃コード解析部１２３は、OS内から検索された、当該攻撃コードに現れるファイル名のファイルの内容である「root:*:0:/bin/sh  …」を特徴候補として抽出する。
【００４８】
このようにすることで、攻撃コード解析部１２３は、攻撃コードの攻撃タイプに応じたエミュレーションを実行し、当該攻撃コードによる攻撃の成功時の特徴（特徴候補）を抽出することができる。なお、攻撃コード解析部１２３により抽出された特徴候補は特徴候補ＤＢ１１２に記憶される。
【００４９】
特徴選定部１２４は、攻撃コード解析部１２３により抽出された特徴候補の中から、特徴としては不適切な候補を除外する。具体的には、特徴選定部１２４は、特徴候補ＤＢ１１２に記憶される特徴候補の中から、普遍的過ぎて攻撃の成否の判定に利用できない可能性の高い特徴候補を除外する。
【００５０】
例えば、特徴選定部１２４は、特徴候補ＤＢ１１２に記憶される特徴候補のうち、文字列長が極端に短い（例えば、文字列長が２以下の）特徴候補を除外し、その後、通常のレスポンスにも現れる普遍的な語の特徴候補を除外し、残った特徴候補を攻撃成功時の特徴として、特徴ＤＢ１１４に記憶する。
【００５１】
例えば、特徴選定部１２４は、特徴候補「1、2、title、page、123456789」の中から、文字列長が所定値（例えば、２）以下の特徴候補「1、2」を除外する。その後、特徴選定部１２４は、文字列長が所定値（例えば、２）以下の特徴候補を除外した「title、page、123456789」から普遍的な語を除外する。
【００５２】
ここでの普遍的な語は、例えば、攻撃でないリクエストに対するレスポンスに含まれる語であるものとする。従って、特徴選定部１２４は、リクエスト・レスポンスＤＢ１１３を参照して、特徴候補「title、page、123456789」のうち、リクエスト・レスポンスＤＢ１１３における出現回数が１以上の特徴候補を除外する。そして、特徴選定部１２４は、除外の結果の残った特徴候補を攻撃成功時の特徴として、特徴ＤＢ１１４に記憶する。
【００５３】
一例を挙げる。ここでは、リクエスト・レスポンスＤＢ１１３にレスポンス「<html><title>My  blog  page</title><p>Hello  world  !  Date  :  2017/4/1</p></html>」が記憶されている場合を考える。この場合、特徴選定部１２４は、特徴候補「title、page、123456789」のうち、当該レスポンスに出現する特徴候補「title、page」を除外する。そして、特徴選定部１２４は、除外の結果の残った特徴候補「123456789」を攻撃成功時の特徴として、特徴ＤＢ１１４に記憶する。
【００５４】
このようにすることで、特徴選定部１２４は、特徴候補ＤＢ１１２から、普遍的な語を除外する際、リクエスト・レスポンスＤＢ１１３を用いることとしたが、予め用意された普遍的な語のリストを用いることとしてもよい。
【００５５】
また、特徴選定部１２４は、攻撃コード解析部１２３により抽出された特徴候補に対し、上記のように、文字列長が極端に短い特徴候補の除外と、普遍的な語の特徴候補の除外とを行ってもよいし、いずれか一方のみを行ってもよい。
【００５６】
成否判定部１２５は、攻撃リクエスト以降のｗｅｂサーバへの複数のリクエストにそれぞれ対応する複数のレスポンスが、抽出した特徴を有するかそれぞれ検査し、複数のレスポンスのうち少なくともいずれか一つが、抽出した特徴を有する場合、攻撃コードによる攻撃が成功したと判定する。一方、成否判定部１２５は、当該のレスポンスに、特徴ＤＢ１１４に記憶される特徴が含まれない場合、攻撃は失敗したと判定する。そして、成否判定部１２５は、攻撃の成否（成功／失敗）の判定結果を出力する。
【００５７】
つまり、成否判定部１２５では、攻撃リクエストから抽出できた痕跡（特徴）を特徴ＤＢ１１４から取得し、レスポンスにその痕跡の有無を検査することで攻撃の成否を判定する。
【００５８】
例えば、成否判定部１２５では、攻撃リクエストから所定の閾値Ｔ時間以内にｗｅｂサーバへ送信された複数のリクエストにそれぞれ対応する複数のレスポンスが、抽出した特徴を有するかそれぞれ検査し、複数のレスポンスのうち少なくともいずれか一つが、抽出した特徴を有する場合、攻撃コードによる攻撃が成功したと判定する。具体的には、成否判定部１２５は、攻撃リクエストがあった際、その攻撃リクエストの痕跡を、攻撃リクエストに対するレスポンスだけでなく、所定の閾値Ｔ時間以内の送信元ＩＰアドレスが攻撃リクエストと同じ、全てのレスポンスに対して攻撃痕跡の検査を行う。なお、時間条件以外にも、特徴ＤＢ１１４に保持されているリクエスト数あるいは痕跡数が閾値になるまで、送信元ＩＰアドレスが攻撃リクエストと同じ、全てのレスポンスに対して攻撃痕跡の検査を行うようにしてもよい。
【００５９】
ここで、図５および図６の例を用いて、攻撃の成否を判定する処理について説明する。図５および図６は、図３の判定装置による攻撃の成否を判定する処理を説明する図である。図５の例では、リクエスト１が攻撃と判定され，攻撃痕跡が抽出された際に検査対象となるレスポンスはどれかを表している。この例では検査する対象となるレスポンスは１、２及び４である。また、レスポンス３は攻撃リクエストの送信元ＩＰアドレスと異なるため、検査対象外であり、レスポンス５はリクエスト１からＴ時間以上経過しているため、検査対象外である。このように送信元ＩＰアドレスによって制限を設けた理由としては検証するレスポンスの候補数をできるだけ減らすことによって処理パフォーマンスを向上させるためである。
【００６０】
また、図６で例示するように、リクエスト１による攻撃がレスポンス３で攻撃痕跡と一致したので攻撃が成功したと判定している例である。つまり、成否判定部１２５では、攻撃リクエスト１があった際、抽出された痕跡をそのリクエスト１に対するレスポンス１だけでなく、以後のレスポンス３に対しても検査を行うことで複数リクエストに跨る攻撃の成否を判定することができる。
【００６１】
［処理手順］
次に、図７を用いて、判定装置１０の処理手順を説明する。まず、判定装置１０の攻撃検知部１２１は、ｗｅｂアプリケーションへのリクエストが攻撃か否かを判定する（Ｓ１）。ここで、当該リクエストが攻撃であれば（Ｓ１でＹｅｓ）、攻撃タイプ判定部１２２は、攻撃タイプ別キーワードリスト１１１を参照して、当該リクエストに含まれる攻撃コードの攻撃タイプを判定する（Ｓ２）。攻撃タイプ判定部１２２が攻撃タイプを判定可能な場合（Ｓ３でＹｅｓ）、攻撃コード解析部１２３は、判定された攻撃タイプに基づき、攻撃コードのエミュレーションを実行し、実行の結果出力された情報を、攻撃成功時の特徴候補として抽出する攻撃コード解析処理を行う（Ｓ４）。なお、Ｓ１において攻撃検知部１２１がｗｅｂアプリケーションへのリクエストは攻撃ではないと判定した場合（Ｓ１でＮｏ）、処理を終了する。
【００６２】
Ｓ４の後、特徴選定部１２４は、Ｓ４で抽出された特徴候補の中から、特徴としては不適切な特徴候補（例えば、普遍的な語）を除外した特徴候補を、攻撃の成否の判定に用いる特徴として選定する（Ｓ５）。この攻撃の成否の判定に用いる特徴は、例えば、特徴ＤＢ１１４に記憶される。
【００６３】
Ｓ５の後、特徴ＤＢ１１４に特徴が存在すれば（Ｓ６でＹｅｓ）、成否判定部１２５は、攻撃リクエストがあってから一定時間Ｔが経過したか判定する（Ｓ７）。この結果、攻撃リクエストがあってから一定時間Ｔが経過していれば（Ｓ７でＹｅｓ）、成否判定部１２５は、攻撃は失敗したとして、外部装置等に通知する（Ｓ１０）。また、攻撃リクエストがあってから一定時間Ｔが経過していなければ（Ｓ７でＮｏ）、成否判定部１２５は、到着したリクエストのレスポンス内に特徴ＤＢ１１４に記憶される特徴が含まれるか判定する（Ｓ８）。例えば、成否判定部１２５は、特徴ＤＢ１１４に記憶される特徴と、攻撃の成否の判定対象となるｗｅｂアプリケーションからのレスポンスとを照合することにより、攻撃が成功したか否かを判定する。
【００６４】
Ｓ８の特徴検査において、成否判定部１２５が、到着したリクエストのレスポンス内に特徴ＤＢ１１４に記憶される特徴が含まれると判定した場合（Ｓ８でＹｅｓ）、攻撃は成功したとして、外部装置等に通知する（Ｓ９）。また、到着したリクエストのレスポンス内に特徴ＤＢ１１４に記憶される特徴が含まれていないと判定した場合（Ｓ８でＮｏ）、Ｓ７に戻り、上記の処理を繰り返す。つまり、成否判定部１２５は、攻撃リクエストがあってから一定時間Ｔ以内のレスポンスに、特徴ＤＢ１１４に記憶される特徴が含まれている場合、当該ｗｅｂアプリケーションへの攻撃が成功したと判定する。
【００６５】
なお、Ｓ３において攻撃タイプ判定部１２２が攻撃タイプの判定不可能な場合（Ｓ３でＮｏ）、あるいは、Ｓ６において特徴ＤＢ１１４に特徴が存在しないと判定された場合（Ｓ６でＮｏ）、判定装置１０は、攻撃の成否判定は不可として、外部装置等に通知する（Ｓ１１）。
【００６６】
［第１の実施形態の効果］
このような判定装置１０によれば、攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡が現れる場合であっても、攻撃の成否を適切に判定することができるという効果を奏する。
【００６７】
攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡が現れるような、複数のリクエストに跨る典型的な攻撃には、例えば、Second  order  SQL  injection、Stored  XSS、Blind  command  injection、Command  execution  via  File  Uploadなどが存在する。ここで、図８〜図１０の具体例を用いて、第１の実施形態の判定装置１０の効果を説明する。図８〜図１０は、第１の実施形態の判定装置の効果を説明する図である。
【００６８】
まず、図８を用いて、Second  order  SQL  injectionやStored  XSS等の攻撃に対する第１の実施形態の判定装置の効果を説明する。例えば、ブログアプリケーションで記事を編集するURL(/edit.php)と記事を閲覧するURL(/view.php)が存在するとする。また、以下のように記事IDを指定して、記事を編集したり閲覧したりする仕様であるとする。
編集：GET  /edit.php?id=1&content=My  first  post
閲覧：GET  /view.php?id=1
【００６９】
contentパラメタのサニタイズ処理に脆弱性があり、SQLインジェクションやXSSの脆弱性がある場合、図８に例示するリクエスト（１）やリクエスト（３）のように攻撃が可能である。アプリケーションの仕様上、攻撃コード「union  select  version()--」や「<script>alert(1);</script>」は記事の編集時ではなく、記事を閲覧する時に実行されるため、/edit.phpにアクセスした際に攻撃成功の痕跡が現れる訳ではなく、その後記事を閲覧する/view.phpにアクセスした際に攻撃成功の痕跡が現れる。ここで、攻撃の痕跡とは、攻撃コードを実行した証跡であり、例えばSQLインジェクションである「union  select  version()--」の場合には、DBのバージョン情報(10.0.3-MariaDB等の文字列)が漏洩する。
【００７０】
第１の実施形態の判定装置１０では、リクエスト（１）やリクエスト（３）に対応するレスポンス（１）、（３）だけでなく、リクエスト（２）やリクエスト（４）に対応するレスポンス（２）、（４）も検査対象とするので、攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡が現れる場合であっても、攻撃の成否を適切に判定することができる。
【００７１】
次に、図９を用いて、Blind  command  injectionの攻撃に対する第１の実施形態の判定装置の効果を説明する。この攻撃は任意のコマンド／コードが実行できる脆弱性がある場合に、アプリケーションの仕様により出力に制約がある場合でも利用できる攻撃手法である。例えば、図９に例示するリクエスト（１）の攻撃が行われた場合，攻撃者が挿入した攻撃コード部分である「;cat  /etc/passwd」が実行され、意図しないファイル（/etc/passwd）の内容が漏洩する。
【００７２】
しかし、アプリケーションの仕様によっては出力に制限があるため、上記の攻撃コードではファイルの内容を出力できない場合がある。そのため攻撃者はリクエスト（１）に示すように、ファイルの内容を一旦公開されているディレクトリにファイルとして書き込み、その後そのファイルに直接アクセスすることで攻撃コードの実行結果を漏洩させることができる（例えば、参考文献参照）。
参考文献：Commix:  Detecting  &  Exploiting  Command  Injection  Flaws.
https://www.blackhat.com/docs/eu-15/materials/eu-15-Stasinopoulos-Commix-Detecting-And-Exploiting-Command-Injection-Flaws.pdf
【００７３】
このような攻撃では攻撃コードが含まれているのはリクエスト（１）であるが、攻撃成功の痕跡であるファイル/etc/passwdの内容はレスポンス（２）に現れる。第１の実施形態の判定装置１０では、リクエスト（１）に対応するレスポンス（１）だけでなく、リクエスト（２）に対応するレスポンス（２）も検査対象とするので、攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡が現れる場合であっても、攻撃の成否を適切に判定することができる。
【００７４】
次に、図１０を用いて、Command  execution  via  File  Uploadの攻撃に対する第１の実施形態の判定装置の効果を説明する。この攻撃手法はファイルをアップロードできる機能を悪用するものである。例えば、ブログ等のコンテンツを管理するアプリケーションでは画像などのメディアのみに限ってファイルをアップロードする機能が存在するが、実装の脆弱性によりPHP等のサーバ上実行可能なファイルもアップロードできてしまう場合がある。
【００７５】
例えば、図１０に例示するリクエスト（１）は/upload.phpを経由して攻撃コード「<?php  system(“cat  /etc/passwd”)?>」が書かれたファイルexploit.jpg.phpをアップロードしている。アップロードしたファイルが/uploadfileというディレクトリに保存されることがわかっていれば、下記に示すリクエスト（２）のようにアクセスすることで攻撃コードを実行できる。この攻撃では下記のように、攻撃コードが含まれているのはリクエスト（１）であるが、攻撃成功の痕跡であるファイル/etc/passwdの内容はレスポンス（２）に現れる。
【００７６】
第１の実施形態の判定装置１０では、リクエスト（１）に対応するレスポンス（１）だけでなく、リクエスト（２）に対応するレスポンス（２）も検査対象とするので、攻撃リクエストに対応するレスポンスとは異なるレスポンスに攻撃の痕跡が現れる場合であっても、攻撃の成否を適切に判定することができる。
【００７７】
［第２の実施形態］
上記した第１の実施形態の判定装置１０では、送信元ＩＰアドレスによる制約を設けることによって検査対象を絞り込んでいたが、攻撃者によってはリクエスト毎に異なるＩＰアドレスを使用してアクセスする可能性も存在し、検査漏れとなる。このため、送信元ＩＰアドレスの制約をなくすことで、検査漏れを減らすことができるが、検査対象が膨大になり処理性能に影響を及ぼす。
【００７８】
このため、攻撃手法に応じた個別の制約を設けることで検査対象を絞り込むようにしてもよい。例えば、Second  order  SQL  injectionやStored  XSSによる攻撃手法では入力と出力の関係性を事前にリクエスト・レスポンスの内容からルール化し、リクエストのURLに制約となるルールを設けることで検査対象を絞り込む。この場合の判定装置１０を、第２の実施形態の判定装置１０ａとして説明する。前述した実施形態と同じ構成については同じ符号を付して説明を省略する。
【００７９】
図１１を用いて第２の実施形態の判定装置１０ａの構成を説明する。図１１に示すように、第２の実施形態の判定装置１０ａは、第１の実施形態の判定装置１０と比較して、入出力ＵＲＬルールテーブル１１５および入出力ＵＲＬルール作成部１２６を有する点が異なる。
【００８０】
入出力ＵＲＬルールテーブル１１５は、入力ＵＲＬおよび出力ＵＲＬの組を、検査対象のリクエストを検索するための入出力ＵＲＬルールとして規定したテーブルである。
【００８１】
入出力ＵＲＬルール作成部１２６は、過去のリクエストとレスポンスから、所定のキーワードが含まれるリクエストのＵＲＬパス部分を入力ＵＲＬとし、所定のキーワードを含まれるレスポンスに対応するリクエストのＵＲＬパス部分を出力ＵＲＬとし、該入力ＵＲＬおよび出力ＵＲＬの組を、検査対象のリクエストを検索するための入出力ＵＲＬルールとして作成する。
【００８２】
つまり、入出力ＵＲＬルール作成部１２６では、入出力ＵＲＬルール作成部では過去のリクエストとレスポンスから、ユーザから入力を受け取るＵＲＬとその入力が処理されて出力されるＵＲＬのルールを作成する。以下に入出力ＵＲＬルール作成部１２６の具体的な処理例を記載する。
【００８３】
まず、入出力ＵＲＬルール作成部１２６は、リクエストＵＲＬからパラメタ値を抽出し、入力がキーワードとなる文字列かどうか判定する。キーワードとなる文字列はそのアプリケーションの一般的な出力やＨＴＭＬとして普遍的な表現を除外した固有的な表現である文字列である。例えば、図１２の例ではidパラメタの１、２、３は一般的な表現であるが、contentの1234abcd,5678wxyzはキーワードである。
【００８４】
そして、入出力ＵＲＬルール作成部１２６は、キーワードが含まれるレスポンスが存在する場合、キーワードが含まれるリクエストのＵＲＬパス部分を入力ＵＲＬとする。キーワードが含まれるレスポンスに対するリクエストのＵＲＬパス部分を出力ＵＲＬとする。例えば、図１２の例では入力ＵＲＬは/edit.php、出力ＵＲＬは/view.phpとなる。
【００８５】
入出力ＵＲＬルール作成部１２６は、上記の入力ＵＲＬと出力ＵＲＬの対応を一つのタプル（入力ＵＲＬ，出力ＵＲＬ）として集計し、タプルの出現回数が閾値Ｎ以上出現した場合、入出力ＵＲＬルールテーブル１１５に格納する。例えば、入出力ＵＲＬルールテーブル１１５では、図１３の例に例示するように、入出力ＵＲＬルール作成部１２６によって格納された入力ＵＲＬと出力ＵＲＬとの組が記憶されている。
【００８６】
成否判定部１２５は、攻撃リクエストのＵＲＬパス部分が入出力ＵＲＬルールの入力ＵＲＬと一致する場合に、攻撃リクエスト以降のｗｅｂサーバへのリクエストのうち、該入力ＵＲＬに対応する出力ＵＲＬに一致するリクエストに対応するレスポンスが、抽出した特徴を有するか検査し、抽出した特徴を有する場合、攻撃コードによる攻撃が成功したと判定する。
【００８７】
具体的には、成否判定部１２５は、攻撃リクエストのＵＲＬパスが入出力ＵＲＬルールテーブル１１５の入力ＵＲＬに存在するか検査する。そして、成否判定部１２５は、存在する場合、その入力ＵＲＬに対応する出力ＵＲＬに一致するリクエストのＵＲＬパスのレスポンスのみを検査対象とする。例えば、図１３に例示する入出力ＵＲＬルールの場合には、攻撃リクエストのＵＲＬパスが/edit.phpならば、リクエストＵＲＬパスが/view.phpとなるリクエストのレスポンスのみを検査することとなる。
【００８８】
図１４での例では、リクエスト１による攻撃がレスポンス３で攻撃痕跡と一致したので攻撃が成功したと判定している。なお、この例では、入出力ＵＲＬルールテーブル１１５は、図１３に例示したものを利用しているものとする。図１４に例示するように、第１の実施形態の判定装置１０では、リクエスト３は送信元ＩＰアドレスがリクエスト１のものと異なるため、検査対象外となり検知漏れが発生していたが、第２の実施形態の判定装置１０ａでは、リクエストＵＲＬパスが/view.phpとなるリクエストのレスポンスを検査するので、リクエスト３が検査対象となり、攻撃が成功したと正しく判定することが可能である。
【００８９】
このように、第２の実施形態の判定装置１０ａでは、攻撃リクエストの送信元ＩＰアドレスが変化しても、攻撃の入出力が異なるＵＲＬとなる攻撃についても検査対象とすることができ、検知漏れを減らすことが可能である。
【００９０】
［第３の実施形態］
上記した第２の実施形態の判定装置１０ａでは、入出力のＵＲＬに着目して検査対象を絞り込むことをしていたが、Blind  command  injectionやCommand  execution  via  File  Uploadは入出力でＵＲＬは変化しないため、第２の実施形態の判定装置１０ａでは対応できない。しかし、これらの攻撃手法はファイルを介するため、作成されるファイル名とリクエストのＵＲＬを比較することで検査対象を絞りこむことが可能である。この場合の判定装置１０を、第３の実施形態の判定装置１０ｂとして説明する。前述した実施形態と同じ構成については同じ符号を付して説明を省略する。
【００９１】
図１５を用いて第３の実施形態の判定装置１０ｂの構成を説明する。図１５に示すように、第３の実施形態の判定装置１０ｂは、第２の実施形態の判定装置１０ａと比較して、ファイル名ルールテーブル１１６およびファイル名ルール作成部１２７を有する点が異なる。
【００９２】
ファイル名ルールテーブル１１６は、攻撃コードから作成されたファイル名を、検査対象のリクエストを検索するためのファイル名ルールとして規定したテーブルである。
【００９３】
ファイル名ルール作成部１２７は、攻撃コードから作成されたファイル名を抽出し、該抽出したファイル名を、検査対象のリクエストを検索するためのファイル名ルールとして作成し、ファイル名ルールテーブル１１６に格納する。
【００９４】
例えば、Blind  command  injectionの場合には、攻撃者はＯＳのリダイレクト機能等を用いてファイルを作成するため、リダイレクトの表現に続くファイル名を抽出する。例えば、攻撃コードが「cat  /etc/passwd  >  /var/www/secret」の場合リダイレクトの表現が「>  」であり、それに続くファイル名はsecretであるため、ファイル名ルール作成部１２７は、図１６に例示するように、secretをファイル名ルールテーブル１１６に保存する。
【００９５】
また、例えば、Command  execution  via  File  Uploadの場合には、ファイルアップロードはリクエストメソッドがPOSTでかつ、ヘッダに「Content-Type:  multipart/form-data;  boundary=----」等の表現が現れるため、リクエストの内容から判別することができる。そして、ファイルはfilename等のパラメタに保存されているため、その値を抽出することでアップロードされるファイル名を判別できる。そして、ファイル名ルール作成部１２７は、抽出したファイルはファイル名ルールテーブル１１６に保存する。
【００９６】
成否判定部１２５は、攻撃リクエスト以降のｗｅｂサーバへのリクエストのうち、ファイル名ルールのファイル名が含まれるリクエストに対応するレスポンスが、抽出した特徴を有するか検査し、抽出した特徴を有する場合、攻撃コードによる攻撃が成功したと判定する。つまり、成否判定部１２５は、リクエストのＵＲＬにファイル名ルールテーブル１１６に存在するか検索を行い、存在する場合のみ、そのリクエストのレスポンスは検査対象とする。
【００９７】
図１７は、リクエスト１による攻撃がレスポンス３で攻撃痕跡と一致したので攻撃が成功したと判定している例である。ファイル名ルールテーブル１１６には、前述したように、ファイル名ルールとして、secretが保存されているものとする。第１の実施形態の判定装置１０では、リクエスト３は送信元ＩＰアドレスがリクエスト１のものと異なるため、検査対象外となり検知漏れが発生していたが、第３の実施形態の判定装置１０ｂでは、リクエスト３のＵＲＬにはsecretが含まれており、リクエスト３が検査対象となるため、攻撃が成功したと正しく判定される。
【００９８】
このように、第３の実施形態の判定装置１０ｂでは、攻撃リクエストの送信元ＩＰアドレスが変化しても、攻撃コードの出力をファイルに介する攻撃についても検査対象とすることができ、検知漏れを減らすことが可能である。
【００９９】
［その他の実施形態］
なお、各実施形態で述べた判定装置１０、１０ａ、１０ｂにおける攻撃検知部１２１は、判定装置１０の外部に設置されていてもよい。例えば、図１８（ａ）、（ｂ）に示すように、判定装置１０、１０ａ、１０ｂの外部に設置されるＷＡＦ等の攻撃検知機器により実現されてもよい。また、判定装置１０、１０ａ、１０ｂは、図１８（ａ）に示すように、攻撃の成否の判定対象となるｗｅｂサーバと直接接続する構成（インライン構成）としてもよいし、図１８（ｂ）に示すように、ｗｅｂサーバとＷＡＦ等の攻撃検知機器経由で接続する構成（タップ構成）としてもよい。
【０１００】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１０１】
また、本実施の形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１０２】
［プログラム］
また、上記の実施形態で述べた判定装置１０の機能を実現するプログラムを所望の情報処理装置（コンピュータ）にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記のプログラムを情報処理装置に実行させることにより、情報処理装置を判定装置１０として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistants）等がその範疇に含まれる。また、判定装置１０を、クラウドサーバに実装してもよい。
【０１０３】
図１９を用いて、上記のプログラム（判定プログラム）を実行するコンピュータの一例を説明する。図１９に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【０１０４】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【０１０５】
ここで、図１９に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。前記した実施形態で説明した各種データや情報は、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【０１０６】
そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【０１０７】
なお、上記の判定プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、上記のプログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【０１０８】
１０  判定装置
１１  記憶部
１１１  攻撃タイプ別キーワードリスト
１１２  特徴候補ＤＢ
１１３  リクエスト・レスポンスＤＢ
１１４  特徴ＤＢ
１１５  入出力ＵＲＬルールテーブル
１１６  ファイル名ルールテーブル
１２１  攻撃検知部
１２２  攻撃タイプ判定部
１２３  攻撃コード解析部
１２４  特徴選定部
１２５  成否判定部
１２６  入出力ＵＲＬルール作成部
１２７  ファイル名ルール作成部
【図１】
2019225216.tif 000003
【図２】
2019225216.tif 000004
【図３】
2019225216.tif 000005
【図４】
2019225216.tif 000006
【図５】
2019225216.tif 000007
【図６】
2019225216.tif 000008
【図７】
2019225216.tif 000009
【図８】
2019225216.tif 000010
【図９】
2019225216.tif 000011
【図１０】
2019225216.tif 000012
【図１１】
2019225216.tif 000013
【図１２】
2019225216.tif 000014
【図１３】
2019225216.tif 000015
【図１４】
2019225216.tif 000016
【図１５】
2019225216.tif 000017
【図１６】
2019225216.tif 000018
【図１７】
2019225216.tif 000019
【図１８】
2019225216.tif 000020
【図１９】
2019225216.tif 000021
【国際調査報告】
2019225216.tif 000022
2019225216.tif 000023