(57)【要約】  生成装置（１０）は、サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する。そして、生成装置（１０）は、集計された種類数が所定の条件を満たした場合には、プロファイルに含まれるパスを抽象化する処理を行う。
2019235074.tif 000002
【特許請求の範囲】
【請求項１】
生成装置によって実行される生成方法であって、
サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する処理を行う集計処理ステップと、
前記集計処理ステップにより集計された種類数が所定の条件を満たした場合には、前記プロファイルに含まれるパスを抽象化する処理を行う抽象化処理ステップと、
を含んだことを特徴とする生成方法。
【請求項２】
前記抽象化処理ステップは、前記集計処理ステップにより集計された種類数が所定の閾値以上である場合には、前記プロファイルに含まれるパスを抽象化する処理を行うことを特徴とする請求項１に記載の生成方法。
【請求項３】
前記抽象化処理ステップは、前記プロファイルのパスが、所定の条件を満たす場合、または、所定のパターンと一致する場合に、該プロファイルのパスを、前記動的に生成されたパスを抽象化候補のパスとして特定することを特徴とする請求項１に記載の生成方法。
【請求項４】
前記抽象化処理ステップは、前記集計処理ステップにより集計された種類数が所定の条件を満たした場合には、前記プロファイルに含まれるパスを抽象化するとともに、該抽象化された各パス・パラメータキーにおける文字クラス列の出現回数を合算することを特徴とする請求項１に記載の生成方法。
【請求項５】
サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する処理を行う集計処理部と、
前記集計処理部により集計された種類数が所定の条件を満たした場合には、前記プロファイルに含まれるパスを抽象化する処理を行う抽象化処理部と、
を備えたことを特徴とする生成装置。
【請求項６】
サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する処理を行う集計処理ステップと、
前記集計処理ステップにより集計された種類数が所定の条件を満たした場合には、前記プロファイルに含まれるパスを抽象化する処理を行う抽象化処理ステップと、
をコンピュータに実行させることを特徴とする生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成方法、生成装置および生成プログラムに関する。
【背景技術】
【０００２】
インターネットの普及に伴い、Ｗｅｂサーバに対する攻撃が急増している。攻撃の対策としてＩＤＳ（Intrusion  Detection  System）、ＩＰＳ（Intrusion  Prevention  System）、ＷＡＦ（Web  Application  Firewall）等が知られている。これらの技術では、ブラックリストやシグネチャファイルを用いたパターンで検出を行い、既知の攻撃の検知及び防御を行う。【０００３】
また、未知の攻撃の検出技術として、正常なＷｅｂサーバへのアクセス要求からパラメータ値の特徴等をプロファイルとして学習し、識別対象のアクセス要求の特徴と当該プロファイルとを比較することにより、当該アクセス要求が攻撃（正常なアクセスではない）であるか否かを判定する技術が知られている。【０００４】
例えば、正常なアクセス内容の特徴（プロファイル）として、ＷｅｂサイトへのＨＴＴＰリクエストにおけるパスとパラメータキーの組み合わせごとにパラメータ値の文字列構造を抽象化した情報（文字クラス列）を学習し、検査対象となるＨＴＴＰリクエストのパラメータ値の文字クラス列との類似度を検出し、未知の攻撃を検知するという技術が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１５／１８６６６２号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の技術では、動的に生成されるパスが含まれる場合に、攻撃の誤検知が多発し、効率よく攻撃検知を行うことが出来ない場合があるという課題があった。例えば、従来の技術では、動的に生成されるパスとそのパスのパラメータキーごとにパラメータ値を学習してしまうと学習対象のパラメータ値の出現回数が不足し、不適切なプロファイルが生成されてしまうことで誤検知が多発してしまう場合があった。【０００７】
また、例えば、従来の技術では、Webアプリケーション等の仕様によって動的に生成されるパスが一度しか生成されないような場合、当該パスを使用してプロファイルを生成しても、検知の際に対応するパスがプロファイル中に存在せず、攻撃を見逃してしまう場合があった。また、例えば、従来の技術では、動的に生成されるパスごとに学習を行う場合に、生成されたパスの数に比例してプロファイルのサイズも大きくなり、検知を行う際に照合に要する時間も比例して増大してしまう場合があった。【０００８】
本発明は上述したような技術が有する問題点を解決するためになされたものであり、動的に生成されるパスが含まれる場合であっても、攻撃検知の誤検知を抑制し、効率よく攻撃検知を行うことを可能とした生成方法、生成装置および生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するための本発明の生成方法は、生成装置によって実行される生成方法であって、サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する処理を行う集計処理ステップと、前記集計処理ステップにより集計された種類数が所定の条件を満たした場合には、前記プロファイルに含まれるパスを抽象化する処理を行う抽象化処理ステップと、を含んだことを特徴とする。【００１０】
また、本発明の生成装置は、サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する処理を行う集計処理部と、前記集計処理部により集計された種類数が所定の条件を満たした場合には、前記プロファイルに含まれるパスを抽象化する処理を行う抽象化処理部と、を備えたことを特徴とする。【００１１】
また、本発明の生成プログラムは、サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する処理を行う集計処理ステップと、前記集計処理ステップにより集計された種類数が所定の条件を満たした場合には、前記プロファイルに含まれるパスを抽象化する処理を行う抽象化処理ステップと、をコンピュータに実行させることを特徴とする。
【発明の効果】
【００１２】
本発明によれば、動的に生成されるパスが含まれる場合であっても、攻撃検知の誤検知を抑制し、効率よく攻撃検知を行うことができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、第１の実施形態に係る生成装置の構成の一例を示す図である。
【図２】図２は、文字クラス列変換部およびプロファイル保存部による処理を説明するための図である。
【図３】図３は、プロファイルとの類似度の計算方法を説明するための図である。
【図４】図４は、学習処理および検知処理の概要を説明する図である。
【図５】図５は、プロファイルの一例を示す図である。
【図６】図６は、パスを抽象化する前のプロファイルについて説明する図である。
【図７】図７は、パスを抽象化した後のプロファイルについて説明する図である。
【図８】図８は、パスの抽象化候補集計リストについて説明する図である。
【図９】図９は、第１の実施形態に係る生成装置におけるプロファイル生成部の処理の流れを示すフローチャートである。
【図１０】図１０は、パスの抽象化要否判定処理について説明する図である。
【図１１】図１１は、プロファイル更新処理について説明する図である。
【図１２】図１２は、抽象化候補パスを自動生成する処理を説明する図である。
【図１３】図１３は、同一の文字クラス列および類似する文字クラス列を集約する処理を説明する図である。
【図１４】図１４は、文字クラス列の集約対象および集約対象外を判定する処理を説明する図である。
【図１５】図１５は、パラメータキーを抽象化する処理を説明する図である。
【図１６】図１６は、パラメータキーを抽象化し、プロファイルを更新する処理を説明する図である。
【図１７】図１７は、プログラムが実行されることにより生成装置が実現されるコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願に係る生成方法、生成装置および生成プログラムの実施形態を図面に基づいて詳細に説明する。なお、本発明は、以下に説明する実施形態により限定されるものではない。
【００１５】
［第１の実施形態の構成］
まず、図１を用いて、第１の実施形態に係る生成装置の構成について説明する。図１は、第１の実施形態に係る生成装置の構成の一例を示す図である。図１に示すように、生成装置１０は、入力部１１、制御部１２及びプロファイル生成部１５を有する。また、生成装置１０は、サーバへのリクエストとの類似度に基づき、当該リクエストが攻撃であるか否かを判定するためのプロファイル１３を生成するための装置である。また、生成装置１０は、プロファイル１３を用いて攻撃であるリクエストの検知を行うこともできる。
【００１６】
入力部１１は、生成装置１０における学習又は分析のためのデータの入力を受け付ける。入力部１１は、分析対象データ入力部１１１及び学習データ入力部１１２を有する。分析対象データ入力部１１１は、分析データＨＴＴＰリクエスト２０の入力を受け付ける。
【００１７】
また、学習データ入力部１１２は、学習データＨＴＴＰリクエスト３０の入力を受け付ける。分析データＨＴＴＰリクエスト２０及び学習データＨＴＴＰリクエスト３０は、例えば、Ｗｅｂサイトへのアクセスの際に生成されるＨＴＴＰリクエストである。また、学習データＨＴＴＰリクエスト３０は、攻撃であるか否かがあらかじめ判明しているＨＴＴＰリクエストであってもよい。
【００１８】
制御部１２は、パラメータ抽出部１２１、文字クラス列変換部１２２、異常検知部１２３及びプロファイル保存部１２４を有する。制御部１２は、プロファイル１３の学習及び攻撃であるＨＴＴＰリクエストの検知に関する処理を行う。
【００１９】
パラメータ抽出部１２１は、入力部１１に入力された分析データＨＴＴＰリクエスト２０及び学習データＨＴＴＰリクエスト３０から、パス、パラメータキー及びパラメータキーに対応するパラメータ値を抽出する。
【００２０】
例えば、学習データＨＴＴＰリクエスト３０に「http://example.com/index.php?id=03&file=Top001.png」というＵＲＬが含まれている場合、パラメータ抽出部１２１は、パスとして「index.php」を抽出し、パラメータキーとして「id」及び「file」を抽出し、パラメータ値として、「03」及び「Top001.png」を抽出する。
【００２１】
また、文字クラス列変換部１２２は、パラメータ抽出部１２１によって抽出されたパラメータ値を文字クラス列に変換する。例えば、文字クラス列変換部１２２は、パラメータ抽出部１２１によって抽出されたパラメータ値である「03」及び「Top001.png」を文字クラス列に変換する。
【００２２】
文字クラス列変換部１２２は、例えば、パラメータ値の数字で構成される部分を「numeric」、アルファベットで構成される部分を「alpha」、記号で構成される部分を「symbol」に置き換えることで文字クラス列への変換を行う。文字クラス列変換部１２２は、例えば、パラメータ値「03」を文字クラス列「(numeric)」に変換する。また、文字クラス列変換部１２２は、例えば、パラメータ値「Top001.png」を文字クラス列「(alpha,  numeric,  symbol,  alpha)」に変換する。
【００２３】
異常検知部１２３は、文字クラス列変換部１２２から受け取ったパス、パラメータキー及び文字クラス列と、プロファイル１３との類似度を計算し、計算した類似度を閾値と比較すること等により攻撃の検知を行う。例えば、異常検知部１２３は、ある分析データＨＴＴＰリクエスト２０のパス、パラメータキー及び文字クラス列と、プロファイル１３との類似度が閾値以下である場合、当該分析データＨＴＴＰリクエスト２０を攻撃として検知する。また、異常検知部１２３は、検知結果１４を出力する。
【００２４】
プロファイル保存部１２４は、文字クラス列変換部１２２から受け取ったパス、パラメータキー及び文字クラス列をプロファイル１３として保存する。この時、パス及びパラメータキーに対応する文字クラス列が複数ある場合、例えば当該複数の文字クラス列のうち出現回数が閾値を超える文字クラス列をプロファイル１３として保存する。プロファイル保存部１２４の処理により、制御部１２は、学習部として機能する。
【００２５】
図２の例を用いて、制御部１２の処理について説明する。図２は、文字クラス列変換部１２２およびプロファイル保存部１２４による処理を説明するための図である。図２の上段は、同種のパラメータ値を示す、複数種の文字列を１つのクラスに分類した文字クラスの定義の一例を示す。文字クラスには、例えば、「numeric」や「space」などの文字クラスがある。図２の中段は、パラメータ値の先頭文字から最後の文字にかけて部分毎に文字クラスと比較し、文字クラスとの一致が最長になる文字クラスにその部分を置換し、文字クラスが順に配置された文字クラス列に変換される様子を示している。図２の下段は、上記のようにして、パラメータ値毎に文字クラス列を求め、文字クラス列毎の出現回数が閾値を超える文字クラス列をプロファイルとして保存する様子を示している。
【００２６】
制御部１２の文字クラス列変換部１２２は、パラメータ値を文字クラス列に変換する際、予め用意した文字クラスの正規表現に対して、パラメータ値のマッチした部分文字列と文字クラスが最長一致した部分を１つの文字クラスと判定し、先頭文字から順にすべての文字列を文字クラスへ変換する。これにより、１つの文字クラスに定義されたものが複数個連接されたもの、複合されたものなどの、複雑な構造を持つパラメータ値も、文字クラス列に変換可能となる。そして、プロファイル保存部１２４は、文字クラス列を選出する際、出現回数が閾値を超える文字クラス列を選択し、それをプロファイル１３として保存する。
【００２７】
次に、図３の例を用いて、プロファイルとの類似度の計算方法を説明する。図３は、プロファイルとの類似度の計算方法を説明するための図である。なお、ここでは、分析対象データにテストデータを用いている。文字クラス列変換部１２２は、学習処理と同様に、パラメータ値を文字クラス列に変換する。そして、異常検知部１２３は、プロファイルとの文字クラス列の類似度を求める。類似度算出方法としては、例えば、図３に示すＬＣＳ（最長共通部分列）を用いることができる。この結果、異常検知部１２３は、類似度Ｓが閾値Ｓｔより小さい場合、攻撃であると判定、そうでなければ攻撃でないと判定する。
【００２８】
次に、図４の例を用いて、学習処理および検知処理の概要を説明する。図４は、学習処理および検知処理の概要を説明する図である。図４の例では、パラメータキー「file」の場合で説明する。また、分析対象データとして、テストデータを用いている。
【００２９】
学習処理では、制御部１２が、出現回数が閾値を超える文字クラス列を選出する。検知処理では、制御部１２は、文字クラス列変換を行った後、類似度計算を行い、その結果により、攻撃であるか否かを判定する。
【００３０】
具体的には、図４に示すように、文字クラス列変換部１２２は、パラメータ値「Img.jpg」、「Test.png」及び「Top001.png」をそれぞれ、文字クラス列「(alpha,  symbol,  alpha)」、「(alpha,  symbol,  alpha)」及び「(alpha,  numeric,  symbol,  alpha)」に変換する。また、文字クラス列変換部１２２は、パラメータ値「Test_011.jpg」及び「Test_011.jpg'  or  1=1」を、それぞれ文字クラス列「(alpha,  symbol,  numeric,  symbol,  alpha)」及び「(alpha,  symbol,  numeric,  symbol,  alpha,  symbol,・・・)」に変換する。
【００３１】
次に、異常検知部１２３は、テストデータからの文字クラス列「(alpha,  symbol,  numeric,  symbol,  alpha)」及び「(alpha,  symbol,  numeric,  symbol,  alpha,  symbol,・・・)」に対応するパスとパラメータキーを組み合わせたデータとプロファイル１３との類似度を計算し、類似度Ｓが閾値Ｓｔより小さい場合、攻撃であると判定、そうでなければ攻撃でないと判定することで、攻撃の検知を行う。
【００３２】
また、プロファイル保存部１２４は、学習データに含まれるＵＲＬのパス「index.php」及びパラメータキー「file」に対応する文字クラス列のうち、例えば「(alpha,  symbol,  alpha)」を最も頻出する文字クラス列としてプロファイル１３に保存する。
【００３３】
ここで、図５を用いて、プロファイル１３について一例を説明する。図５は、プロファイルの一例を示す図である。図５に例示するように、プロファイル１３は、パス・パラメータキーの組合せ毎に、学習した文字クラス列、およびその出現回数を保持するデータベースである。プロファイル１３内の各エントリは、学習や操作によって、生成、更新、削除される。また、プロファイル１３内の各エントリは、後述する抽象化処理部１５２によってパスの抽象化処理がされる場合がある。また、プロファイル１３は、検知処理時に異常検知部１２３によって参照され、分析データの文字クラス列との比較に用いられる。
【００３４】
なお、図５の例では、パラメータ値の数字で構成される部分である「numeric」が「ＮＵ」と記載され、アルファベットで構成される部分である「alpha」が「ＡＬ」と記載され、記号で構成される部分である「symbol」が「ＳＹ」と記載されている。このような省略は、以下の説明でも適宜使用されるものとする。
【００３５】
プロファイル生成部１５は、集計処理部１５１、抽象化処理部１５２及びパスの抽象化候補集計リスト１５３を有する。集計処理部１５１は、サーバへのＨＴＴＰリクエストが攻撃であるか否かを判定するためのプロファイル１３に含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する処理を行う。
【００３６】
また、抽象化処理部１５２は、集計処理部１５１により集計された種類数が所定の条件を満たした場合には、プロファイル１３に含まれるパスを抽象化する処理を行う。具体的には、抽象化処理部１５２は、集計された種類数が所定の閾値以上である場合には、プロファイル１３に含まれるパスを抽象化する処理を行う。
【００３７】
ここで、図６および図７を用いて、プロファイル生成部１５における処理の概要を説明する。図６は、パスを抽象化する前のプロファイルについて説明する図である。図７は、パスを抽象化した後のプロファイルについて説明する図である。図６に示すように、前述の制御部１２は、学習データＨＴＴＰリクエストからパス、パラメータキーやパラメータ値を抽出し、抽出されたパラメータ値を文字クラス列に変換し、学習データに含まれるＵＲＬのパス及びパラメータキーに対応する文字クラス列のうち、出現回数が閾値を超えた文字クラス列をプロファイル１３に保存する。プロファイル１３は、パス・パラメータキーの組合せ毎に、学習した文字クラス列、およびその出現回数を保持する。
【００３８】
ここで、図６に例示する学習データＨＴＴＰリクエストにおける各パスは、リクエストの都度、異なるパスが動的に生成されたものであり、それぞれ出現回数が１回である。動的に生成されるパスについては、同一のパスと認識し、プロファイルを生成することが望ましい。
【００３９】
そこで、プロファイル生成部１５は、図７に例示するように、学習データＨＴＴＰリクエストに動的に生成されたパスが存在する場合、動的に生成されたパスを抽象化対象パスとして、抽象化対象パスの全体もしくは部分文字列を特定文字列へ置換するパスの抽象化処理を行う。例えば、図７の例では、パスの文字列で”<DYNAMIC>”（抽象化されたパスを意味する）に置換されている部分は動的に生成されたパスに該当する部分である。生成装置１０は、学習処理においては、パスの抽象化後の情報を使用してプロファイルを生成する。また、生成装置１０は、検知処理においては、パスの抽象化後の情報を使用して該当文字クラス列と類似度計算を行い、攻撃検知を行う。
【００４０】
なお、動的に生成されたパスを特定する方法としては、どのような方法であってもよい。例えば、抽象化処理部１５２は、プロファイルのパスが、所定の条件を満たす場合、または、所定のパターンと一致する場合に、該プロファイルのパスを、動的に生成されたパスを抽象化候補のパスとして特定する。例えば、一例として、パスについて、所定の条件を満たす場合（例えば、１６進数が３個以上続く場合）には、動的に生成されたパスであると特定するようにしてもよいし、予め定義された所定のパターン（例えば、「/*/program.php」）と一致する場合には、動的に生成されたパスであると特定するようにしてもよい。
【００４１】
パスの抽象化候補集計リスト１５３は、図８に例示するように、抽象化候補パス（動的に生成されるパスを特定文字列（例えば、<DYNAMIC>）に置換した文字列）と、抽象化対象パス（動的に生成されるパス）とパス種類数（抽象化対象パスの種類数）を一時的に保存するリストである。パスの抽象化候補集計リスト１５３は、抽象化処理部１５２において、パスの抽象化対象を集計するために使用される。また、パスの抽象化候補集計リスト１５３は、プロファイル１３の生成、更新が行われる度、集計処理部１５１により生成され、パスの抽象化処理後に削除される。
【００４２】
例えば、パスの抽象化候補を生成する手法として、パターンを事前に定義するようにしてもよい。例えば、図８の例を用いて説明すると、パターンとして、（/*/program.php）が予め定義されており、集計処理部１５１は、パターンとマッチするパスを/<DYNAMIC>/program.phpに置換してパスの抽象化候補集計リスト１５３に登録する。
【００４３】
［第１の実施形態の処理］
次に、図９を用いて、生成装置１０におけるプロファイル生成部１５の処理の流れについて説明する。図９は、第１の実施形態に係る生成装置におけるプロファイル生成部の処理の流れを示すフローチャートである。なお、図９の処理は、プロファイル保存部１２４により、プロファイル１３が生成または更新されたことを契機として処理を開始するものとする。
【００４４】
図９に示すように、生成装置１０の集計処理部１５１は、プロファイル１３を取得する（ステップＳ１０１）。なお、プロファイル１３の要素として、少なくとも、パス、パラメータキー、文字クラス列および文字クラス列の出現回数を含む。続いて、集計処理部１５１は、空のパスの抽象化候補集計リスト１５３を生成する初期化処理を行う（ステップＳ１０２）。なお、パスの抽象化候補集計リスト１５３の要素として、少なくとも抽象化候補パス、抽象化対象パス、パスの種類数を含む。
【００４５】
そして、集計処理部１５１は、取得したプロファイル１３の先頭行のパス、パラメータキーおよび文字クラス列を抽出し（ステップＳ１０３）、プロファイル１３から抽出した行のパスが抽象化済みか否か判定する（ステップＳ１０４）。例えば、集計処理部１５１は、パス抽象化の置換後文字列（以下、<DYNAMIC>と記載する）が含まれると判定した場合には（ステップＳ１０４肯定）、ステップＳ１０３に戻り、プロファイル１３の次の行の処理を行う。なお、パスが抽象化済みか否かを判定するその他の方法として、例えば、プロファイル１３にパスが抽象化済みか否かを示すパス抽象化フラグを持たせ、パス抽象化フラグが「０」なら抽象化前、「１」なら抽象化済みと判定するようにしてもよい。
【００４６】
また、集計処理部１５１は、<DYNAMIC>が含まれていないと判定した場合には（ステップＳ１０４否定）、パスの抽象化処理の候補であると判断し、パスの抽象化候補集計リスト１５３を更新する処理を行う（ステップＳ１０５）。
【００４７】
具体的には、集計処理部１５１は、当該パスの抽象化候補パス、当該パス（抽象化対象パス）の組み合わせが、パスの抽象化候補集計リスト１５３に既に存在するかを確認し、パスの抽象化候補集計リスト１５３に対し、確認結果に応じて、下記のａ）〜ｃ）のいずれかの更新を行う。なお、「当該パスの抽象化候補パスは存在せず、当該パスは存在する」ケースは処理上起こりえない。また、当該パスに動的生成パスが含まれない（パスの抽象化候補パスを生成できない）場合、当該パスの抽象化候補パス、当該パスは、パスの抽象化候補集計リスト１５３に追加しない。
ａ）当該パスの抽象化候補パス、当該パス、いずれも存在しない場合
当該パスの抽象化候補パス、当該パスをパスの抽象化候補集計リスト１５３のエントリに新規作成し、パス種類数のカウントを１にする。
ｂ）当該パスの抽象化候補パスは存在し、当該パスは存在しない場合
パスの抽象化候補集計リスト１５３の当該パスの抽象化候補パスのエントリに当該パスを追加し、パス種類数のカウントに１を加算する。
ｃ）当該パスの抽象化候補パス、当該パス、共に存在する場合
当該パスの抽象化候補パス、当該パスは、パスの抽象化候補集計リスト１５３に追加しない。
【００４８】
その後、集計処理部１５１は、終了条件を満たしたか否かを判定する（ステップＳ１０６）。例えば、集計処理部１５１は、取得したプロファイル１３の行が残っていれば、終了条件を満たしていないと判定し（ステップＳ１０６否定）、ステップＳ１０３に戻り、プロファイル１３の次の行の処理を行う。また、例えば、集計処理部１５１は、取得したプロファイル１３の行が残っていなければ、終了条件を満たしたと判定し（ステップＳ１０６肯定）、パスの抽象化候補集計リスト１５３を抽象化処理部１５２に出力する（ステップＳ１０７）。
【００４９】
続いて、抽象化処理部１５２は、パスの抽象化候補集計リスト１５３を取得し（ステップＳ１０８）、取得したパスの抽象化候補集計リスト１５３の先頭行の抽象化候補パス、抽象化対象パス、パス種類数を抽出する（ステップＳ１０９）。そして、抽象化処理部１５２は、パスの抽象化を行うか否か判定する（ステップＳ１１０）。例えば、抽象化処理部１５２は、パスの抽象化候補集計リスト１５３から取り出した行の抽象化候補パスのパス種類数が閾値以上であった場合は（ステップＳ１１０肯定）、パスの抽象化が必要なパスであると判断し、プロファイル更新処理を行う（ステップＳ１１１）。
【００５０】
また、抽象化処理部１５２は、パスの抽象化候補集計リスト１５３から取り出した行の抽象化候補パスのパス種類数が閾値未満であった場合は（ステップＳ１１０否定）、パスの抽象化が不要なパスであり、以降の処理対象ではないと判断し、ステップＳ１０９に戻り、パスの抽象化候補集計リスト１５３の次の行の処理を行う。
【００５１】
ここで、図１０の例を用いて、パスの抽象化を行うか否か判定する処理について説明する。図１０は、パスの抽象化済み判定処理について説明する図である。図１０の例では、パスの種類数の閾値が「３」であるものとする。このような場合に、図１０に例示するように、抽象化候補パス「/<DYNAMIC>/program.php」のパス種類数が「３」であり、パス種類数の閾値「３」以上であるため、抽象化処理部１５２は、抽象化候補パス「/<DYNAMIC>/program.php」について、パスの抽象化は「必要」と判定する。一方、抽象化候補パス「/<DYNAMIC>/view.php」のパス種類数が「１」であり、パス種類数の閾値「３」未満であるため、抽象化処理部１５２は、抽象化候補パス「/<DYNAMIC>/view.php」について、パスの抽象化は「不要」と判定する。
【００５２】
図９の説明に戻って、ステップＳ１１１において、抽象化処理部１５２は、パスの抽象化「要」と判断されたパスについて、当該パスのプロファイルをマージする（パスの抽象化処理）。抽象化処理部１５２は、マージする際の処理として、動的に生成されているパスを「<DYNAMIC>」に置換し、文字クラス列は集約する。また、抽象化処理部１５２は、図１１に例示するように、各文字クラス列の出現回数は、抽象化対象パスで、パラメータキーに同一の文字クラス列があるものについては、出現回数を合算し、抽象化対象パスで、パラメータキーに同一の文字クラス列がないものについては、出現回数を継承する。
【００５３】
図９の説明に戻って、抽象化処理部１５２は、終了条件を満たしたか否かを判定する（ステップＳ１１２）。例えば、抽象化処理部１５２は、取得したパスの抽象化候補集計リスト１５３の行が残っていれば、終了条件を満たしていないと判定し（ステップＳ１１２否定）、ステップＳ１０９に戻り、パスの抽象化候補集計リスト１５３の次の行の処理を行う。また、例えば、抽象化処理部１５２は、取得したパスの抽象化候補集計リスト１５３の行が残っていなければ、終了条件を満たしたと判定し（ステップＳ１１２肯定）、取得したパスの抽象化候補集計リスト１５３を削除し（ステップＳ１１３）、処理を終了する。
【００５４】
このように、第１の実施形態に係る生成装置１０は、パスの抽象化対象種類数を閾値により、パスの抽象化の要否を判断し、動的に生成されるパスを抽象化する。生成装置１０は、パスの抽象化処理では、動的生成されているパスのみを特定文字列へ置換することで、元のパス構成を保持したプロファイル１３を生成する。
【００５５】
（変形例）
さて、これまで本発明の実施形態について説明したが、本発明は上述した実施形態以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では変形例として本発明に含まれる他の実施例を説明する。
【００５６】
（１）パターンの自動生成
上記の説明では、パスの抽象化候補を生成する手法として、パターンを事前に定義しておくやり方を説明したが、これに限定されるものではなく、例えば、パターンを自動生成するようにしてもよい。
【００５７】
例えば、生成装置１０の集計処理部１５１は、16進数3桁以上のパスを特定文字列へ置換して抽象化候補パスを生成する。そして、生成装置１０の集計処理部１５１は、該当の抽象化候補パスが抽象化「要」と判断された場合、該当のパターンを作成することも考えられる。例えば、図１２の例を用いて説明すると、パスが16進数3桁以上の場合、<HEX>へ置換し、該当パスがパスの抽象化「要」と判定され、抽象化候補パスからパターンとして、「</16進数3桁以上>/program.php」を作成する。
【００５８】
また、例えば、生成装置１０の集計処理部１５１は、パスに含まれる共通文字列を自動的に抽出して、パターンを生成することも考えられる。例えば、生成装置１０の集計処理部１５１は、最長共通部分列（LCS）を利用して共通文字列を自動的に抽出しても良い。なお、上記の説明では、パスの一部分のみを抽象化しているが、パスの複数個所を抽象化してもよい。また、パターンを事前に定義する手法とパターンを自動生成する手法とを組み合わせて使用してもよい。
【００５９】
（２）集約対象
また、上記の説明では、文字クラス列の集約の対象は、同一の文字クラス列の場合を説明したが、これに限定されるものではなく、例えば、同一の文字クラス列に加え、所定の閾値以上の類似度を有する文字クラス列を集約の対象としてもよい。
【００６０】
生成装置１０の抽象化処理部１５２は、類似度を計算する方法として、例えば最長共通部分列を用いることができる。また、生成装置１０の抽象化処理部１５２は、文字クラス列を集約する方法として、例えば最長共通部分列を用いることができる。例えば、抽象化処理部１５２は、X,Yが文字クラス列とすると、LCS(X,Y)=Xの場合はYへ集約し、LCS(X,Y)=Yの場合はXへ集約し、これ以外の場合は集約しない。ここでLCS(X,Y)は、文字クラス列X,Yの最長共通部分列を示す。例えば、図１３の例では、パラメータキーidの文字クラス列では、LCS（{AL,NU},{AL}）＝{AL}なので、{AL,NU}に集約される。つまり、図１３の例を用いて説明すると、抽象化処理部１５２は、同一パラメータキーの文字クラス列{AL,NU}および文字クラス列{AL}の最長共通部分列{AL}と一致する文字クラス列があった場合、抽象化処理部１５２は、２種類の文字クラス列{AL,NU}と文字クラス列{AL}を文字クラス列{AL,NU}へ集約する。
【００６１】
また、上記の応用として、出現回数の低い文字クラス列は、誤入力されたパラメータ値を持つＨＴＴＰリクエストや攻撃のＨＴＴＰリクエストを学習してしまっている可能性があるため、集約の対象外としたほうが、より正確に攻撃を検知できるプロファイルを作成できる場合がある。このため、文字クラス列の集約において、各文字クラス列の相対的な出現率を求め、出現率の低いレアな文字クラス列を閾値により判定し、集約対象外としてもよい。例えば、図１４に例示するように、抽象化処理部１５２は、出現率に対する閾値が５％である場合、出現率が５％以上の文字クラス列のみを集約対象として、出現率５％未満の文字クラス列を集約対象外とする。
【００６２】
（３）パラメータキーの抽象化
また、上記の説明では、パスを抽象化する場合を説明したが、これに限定されるものではなく、例えば、パラメータキーを抽象化してもよい。なお、パスとパラメータキーの両方を抽象化するようにしてもよい。
【００６３】
ここで、図１５を用いて、パラメータキーの抽象化候補集計リストについて説明する。図１５に例示するように、集計処理部１５１は、上述したパスの抽象化候補集計リスト１５３における「抽象化候補パス」と「抽象化対象パス」を「抽象化候補パラメータキーのパス」、「抽象化候補パラメータキー」、「抽象化対象パラメータキー」とすることで、パラメータキーの抽象化候補集計リストを生成する。なお、異なるパスのパラメータキーを抽象化する場合は、抽象化候補パラメータキーのパスは*（ワイルドカード）とする。
【００６４】
このようにパラメータキーを抽象化する場合、上述したステップＳ１０５において、集計処理部１５１は、パラメータキーの抽象化候補集計リストを更新する処理を行う。
【００６５】
具体的には、集計処理部１５１は、抽象化候補パラメータキーのパスが、パラメータキーの抽象化候補集計リストに既に存在するかを確認し、抽象化候補パラメータキーのパスがパラメータキーの抽象化候補集計リストに既に存在する場合には、下記のａ）〜ｃ）のいずれかの更新を行い、抽象化候補パラメータキーのパスがパラメータキーの抽象化候補集計リストに既に存在しない場合には、下記のｄ）の更新を行う。なお、「当該パラメータキーの抽象化候補パラメータキーは存在せず、当該パラメータキーは存在する」ケースは処理上起こりえない。また、当該パラメータキーの抽象化候補パラメータキーを生成できない場合、当該パラメータキーの抽象化候補パラメータキー、当該パラメータキーは、パラメータキーの抽象化候補集計リストに追加しない。
ａ）当該パラメータキーの抽象化候補パラメータキー、当該パラメータキー、いずれも存在しない場合
当該パラメータキーの抽象化候補パラメータキー、当該パラメータキーをパラメータキーの抽象化候補集計リストのエントリに新規作成し、パラメータキー種類数のカウントを１にする。
ｂ）当該パラメータキーの抽象化候補パラメータキーは存在し、当該パラメータキーは存在しない場合
パラメータキーの抽象化候補集計リストの当該パラメータキーの抽象化候補パスのエントリに当該パラメータキーを追加し、パラメータキー種類数のカウントに１を加算する。
ｃ）当該パラメータキーの抽象化候補パラメータキー、当該パラメータキー、共に存在する場合
当該パラメータキーの抽象化候補パラメータキー、当該パラメータキーは、パラメータキーの抽象化候補集計リストに追加しない。
ｄ）当該パラメータキーの抽象化候補パラメータキー、当該パラメータキーの存在の有無にかかわらず、当該抽象化候補パラメータキーのパス、抽象化候補パラメータキー、抽象化対象パラメータキーをパラメータキーの抽象化候補集計リストに追加する。
【００６６】
また、パラメータキーを抽象化する場合、上述したステップＳ１１１において、抽象化処理部１５２は、図１６に例示するように、プロファイル１３を更新する処理を行う。図１６の例では、抽象化処理部１５２は、パラメータキーの数値部分を<NUM>に変換している。また、図１６に例示するように、抽象化処理部１５２は、パラメータキーの抽象化「要」と判断されたパラメータキーについて、文字クラス列は集約する。また抽象化処理部１５２は、図１６に例示するように、各文字クラス列の出現回数は、抽象化対象パラメータキーで、同一の文字クラス列があるものについては、出現回数を合算し、抽象化対象パラメータキーで、同一の文字クラス列がないものについては、出現回数を継承する。
【００６７】
［第１の実施形態の効果］
このように、第１の実施形態に係る生成装置１０は、サーバへのリクエストが攻撃であるか否かを判定するためのプロファイルに含まれるパスのうち、動的に生成されたパスを抽象化候補のパスとして特定し、該抽象化候補のパスごとに、パスの種類数を集計する。そして、生成装置１０は、集計された種類数が所定の条件を満たした場合には、プロファイルに含まれるパスを抽象化する処理を行う。
【００６８】
このため、第１の実施形態に係る生成装置１０では、動的に生成されるパスが含まれる場合であっても、攻撃検知の誤検知を抑制し、効率よく攻撃検知を行うことが可能である。具体的には、第１の実施形態に係る生成装置１０によれば、パスが動的に生成されるＷｅｂアプリケーションに対して、以下の効果が得られる。
【００６９】
例えば、第１の実施形態に係る生成装置１０では、パス毎に学習する際、学習対象のパラメータキーのパラメータ値の種類数や出現回数の不足を解消でき、当該パラメータキーに対して出現する文字クラス列を適切に保持したプロファイル１３を生成できる。この結果、第１の実施形態に係る生成装置１０では、正常なＨＴＴＰリクエストに対する誤検知を抑制できる。
【００７０】
また、例えば、第１の実施形態に係る生成装置１０では、一度しか生成されないパスに対しても適用可能なプロファイル１３を生成できるため、検知の際に、照合可能なパスがプロファイル１３中に存在しない状態となること、を解消できる。この結果、第１の実施形態に係る生成装置１０では、検知対象のＨＴＴＰリクエストのパスが動的に生成される場合でも検知が可能となり、攻撃の見逃しを抑制できる。
【００７１】
また、例えば、第１の実施形態に係る生成装置１０では、動的に生成されるパスの種類数が増加しても、プロファイルのサイズの増大を抑制できる。この結果、第１の実施形態に係る生成装置１０では、検知対象のＨＴＴＰリクエストとプロファイル１３の照合に要する時間が短くなり、システムの性能の低下を抑制できる。
【００７２】
［システム構成等］
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００７３】
また、本実施の形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータを含む情報については、特記する場合を除いて任意に変更することができる。
【００７４】
［プログラム］
また、上記の実施形態で述べた生成装置１０の機能を実現するプログラムを所望の情報処理装置（コンピュータ）にインストールすることによって実装できる。例えば、パッケージソフトウェアやオンラインソフトウェアとして提供される上記のプログラムを情報処理装置に実行させることにより、情報処理装置を生成装置１０として機能させることができる。ここで言う情報処理装置には、デスクトップ型またはノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistants）等がその範疇に含まれる。また、生成装置１０を、クラウドサーバに実装してもよい。
【００７５】
図１７を用いて、上記のプログラム（生成プログラム）を実行するコンピュータの一例を説明する。図１７に示すように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有する。これらの各部は、バス１０８０によって接続される。
【００７６】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１およびＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。ディスクドライブ１１００には、例えば、磁気ディスクや光ディスク等の着脱可能な記憶媒体が挿入される。シリアルポートインタフェース１０５０には、例えば、マウス１１１０およびキーボード１１２０が接続される。ビデオアダプタ１０６０には、例えば、ディスプレイ１１３０が接続される。
【００７７】
ここで、図１７に示すように、ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３およびプログラムデータ１０９４を記憶する。前記した実施形態で説明した各種データや情報は、例えばハードディスクドライブ１０９０やメモリ１０１０に記憶される。
【００７８】
そして、ＣＰＵ１０２０が、ハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して、上述した各手順を実行する。
【００７９】
なお、上記の生成プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限られず、例えば、着脱可能な記憶媒体に記憶されて、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、上記のプログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ＬＡＮ（Local  Area  Network）やＷＡＮ（Wide  Area  Network）等のネットワークを介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【００８０】
１０  生成装置
１１  入力部
１２  制御部
１３  プロファイル
１４  検知結果
１５  プロファイル生成部
２０  分析データＨＴＴＰリクエスト
３０  学習データＨＴＴＰリクエスト
１１１  分析対象データ入力部
１１２  学習データ入力部
１２１  パラメータ抽出部
１２２  文字クラス列変換部
１２３  異常検知部
１２４  プロファイル保存部
１５１  集計処理部
１５２  抽象化処理部
１５３  パスの抽象化候補集計リスト
【図１】
2019235074.tif 000003
【図２】
2019235074.tif 000004
【図３】
2019235074.tif 000005
【図４】
2019235074.tif 000006
【図５】
2019235074.tif 000007
【図６】
2019235074.tif 000008
【図７】
2019235074.tif 000009
【図８】
2019235074.tif 000010
【図９】
2019235074.tif 000011
【図１０】
2019235074.tif 000012
【図１１】
2019235074.tif 000013
【図１２】
2019235074.tif 000014
【図１３】
2019235074.tif 000015
【図１４】
2019235074.tif 000016
【図１５】
2019235074.tif 000017
【図１６】
2019235074.tif 000018
【図１７】
2019235074.tif 000019
【国際調査報告】
2019235074.tif 000020
2019235074.tif 000021
2019235074.tif 000022
2019235074.tif 000023