(57)【要約】  学習装置（１０）は、所定の期間に発生したサーバへのリクエストに含まれる所定の文字列の構造を抽象化した文字クラス列を生成する。また、学習装置（１０）は、リクエストに含まれる所定の識別情報及び文字クラス列の組み合わせごとに、組み合わせの出現回数が多いほど大きくなり、組み合わせの出現が継続しているほど大きくなるような更新用のスコアを計算する。また、学習装置（１０）は、リクエストが攻撃であるか否かを判定するための組み合わせごとのプロファイル（１４）を、更新用のスコアを基に更新する。
2019225228.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実行される学習方法であって、
所定の期間に発生したサーバへのリクエストに含まれる所定の文字列の構造を抽象化した文字クラス列を生成する生成工程と、
前記リクエストに含まれる所定の識別情報及び前記文字クラス列の組み合わせごとに、前記組み合わせの出現回数が多いほど大きくなり、前記組み合わせの出現が継続しているほど大きくなるような更新用のスコアを計算する計算工程と、
前記リクエストが攻撃であるか否かを判定するための前記組み合わせごとのプロファイルを、前記更新用のスコアを基に更新する更新工程と、
を含むことを特徴とする学習方法。
【請求項２】
前記計算工程は、前記組み合わせの出現が前記所定の期間の中で継続しているほど大きくなるように前記更新用のスコアを計算することを特徴とする請求項１に記載の学習方法。
【請求項３】
前記計算工程は、前記組み合わせが出現した期間の数が多いほど大きくなるように前記更新用のスコアを計算することを特徴とする請求項１に記載の学習方法。
【請求項４】
前記更新工程は、前記プロファイルに含まれる出現回数に前記更新用のスコアを加算した値が閾値以上である場合、前記プロファイルに含まれるステータスを段階的に上げ、さらに、前記ステータスが所定の段階以下である場合、前記出現回数を０とすることを特徴とする請求項１から３のいずれか１項に記載の学習方法。
【請求項５】
前記更新工程は、前記識別情報及び前記文字クラス列の組み合わせがあらかじめ設定されたリストに含まれている場合、前記プロファイルを無効化することを特徴とする請求項４に記載の学習方法。
【請求項６】
前記更新工程は、前記プロファイルの最終更新日時が、所定の日時よりも過去である場合、前記プロファイルを無効化することを特徴とする請求項４に記載の学習方法。
【請求項７】
所定の期間に発生したサーバへのリクエストに含まれる所定の文字列の構造を抽象化した文字クラス列を生成する生成部と、
前記リクエストに含まれる所定の識別情報及び前記文字クラス列の組み合わせごとに、前記組み合わせの出現回数が多いほど大きくなり、前記組み合わせの出現が継続しているほど大きくなるような更新用のスコアを計算する計算部と、
前記リクエストが攻撃であるか否かを判定するための前記組み合わせごとのプロファイルを、前記更新用のスコアを基に更新する更新部と、
を有することを特徴とする学習装置。
【請求項８】
コンピュータに、
所定の期間に発生したサーバへのリクエストに含まれる所定の文字列の構造を抽象化した文字クラス列を生成する生成ステップと、
前記リクエストに含まれる所定の識別情報及び前記文字クラス列の組み合わせごとに、前記組み合わせの出現回数が多いほど大きくなり、前記組み合わせの出現が継続しているほど大きくなるような更新用のスコアを計算する計算ステップと、
前記リクエストが攻撃であるか否かを判定するための前記組み合わせごとのプロファイルを、前記更新用のスコアを基に更新する更新ステップと、
を実行させることを特徴とする学習プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、学習方法、学習装置及び学習プログラムに関する。
【背景技術】
【０００２】
インターネットの普及に伴い、Ｗｅｂサーバに対する攻撃が急増している。攻撃の対策としてＩＤＳ（Intrusion  Detection  System）、ＩＰＳ（Intrusion  Prevention  System）、ＷＡＦ（Web  Application  Firewall）等が知られている。これらの技術では、ブラックリストやシグネチャファイルを用いたパターンで検出を行い、既知の攻撃の検知及び防御を行う。【０００３】
また、未知の攻撃の検出技術として、正常なＷｅｂサーバへのリクエストに含まれる所定の値から抽出した特徴を用いてプロファイルの学習を行い、当該プロファイルを用いて分析対象のリクエストが攻撃によるものであるか否かを判定する技術が知られている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】国際公開第２０１５／１８６６６２号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来の技術には、攻撃を検知するためのプロファイルの学習を適切に行うことが難しい場合があるという問題がある。なお、従来の技術は、正常なリクエストは、攻撃によるリクエストに比べて出現頻度が大きいという知見に基づいて学習及び判定を行っている。【０００６】
例えば、引用文献１に記載の技術では、出現回数が所定の順位以上である特徴を学習の対象として選定する場合がある。この場合、出現回数は十分に多いが、出現回数の順位が低いリクエストから抽出した特徴を学習の対象とすることができず、当該特徴を含むリクエストを分析する際に結果として誤検知となってしまう。【０００７】
また、単純に出現回数の多い特徴を学習の対象として選定することが考えられる。一方で、攻撃によるリクエストは短期間で大量に発生する場合がある。そのような場合、単純に出現回数の多い特徴を用いてプロファイルの学習を行うと、攻撃に依るリクエストの特徴まで学習してしまい、当該特徴を含むリクエストを分析する際に検知の見逃しが発生してしまうことになる。
【課題を解決するための手段】
【０００８】
本発明の学習方法は、コンピュータによって実行される学習方法であって、所定の期間に発生したサーバへのリクエストに含まれる所定の文字列の構造を抽象化した文字クラス列を生成する生成工程と、前記リクエストに含まれる所定の識別情報及び前記文字クラス列の組み合わせごとに、前記組み合わせの出現回数が多いほど大きくなり、前記組み合わせの出現が継続しているほど大きくなるような更新用のスコアを計算する計算工程と、前記リクエストが攻撃であるか否かを判定するための前記組み合わせごとのプロファイルを、前記更新用のスコアを基に更新する更新工程と、を含むことを特徴とする。
【発明の効果】
【０００９】
本発明によれば、攻撃を検知するためのプロファイルの学習を適切に行うことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１の実施形態に係る学習装置の構成の一例を示す図である。
【図２】図２は、第１の実施形態に係る学習処理及び検知処理について説明するための図である。
【図３】図３は、第１の実施形態に係る学習装置の計算処理について説明するための図である。
【図４】図４は、第１の実施形態に係るプロファイル出力用一時データの一例を示す図である。
【図５】図５は、第１の実施形態に係るプロファイルの更新処理について説明するための図である。
【図６】図６は、第１の実施形態に係るプロファイルの更新処理について説明するための図である。
【図７】図７は、第１の実施形態に係るプロファイルの更新処理について説明するための図である。
【図８】図８は、第１の実施形態に係る学習装置の計算処理の流れを示すフローチャートである。
【図９】図９は、第１の実施形態に係る学習装置の更新処理の流れを示すフローチャートである。
【図１０】図１０は、第２の実施形態に係るプロファイル出力用一時データの一例を示す図である。
【図１１】図１１は、第２の実施形態に係るプロファイルの更新処理について説明するための図である。
【図１２】図１２は、第２の実施形態に係るプロファイルの更新処理について説明するための図である。
【図１３】図１３は、第２の実施形態に係るプロファイルの更新処理について説明するための図である。
【図１４】図１４は、第２の実施形態に係る学習装置の計算処理の流れを示すフローチャートである。
【図１５】図１５は、第２の実施形態に係る学習装置の更新処理の流れを示すフローチャートである。
【図１６】図１６は、第３の実施形態に係るプロファイル出力用一時データの一例を示す図である。
【図１７】図１７は、第３の実施形態に係るプロファイルの更新処理について説明するための図である。
【図１８】図１８は、第３の実施形態に係るプロファイルの更新処理について説明するための図である。
【図１９】図１９は、第３の実施形態に係るプロファイルの更新処理について説明するための図である。
【図２０】図２０は、その他の実施形態に係るプロファイルの更新処理について説明するための図である。
【図２１】図２１は、その他の実施形態に係るプロファイルの更新処理について説明するための図である。
【図２２】図２２は、実施形態に係る学習プログラムを実行するコンピュータの一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願に係る学習方法、学習装置及び学習プログラムの実施形態を図面に基づいて詳細に説明する。なお、本発明は、以下に説明する実施形態により限定されるものではない。
【００１２】
［第１の実施形態の構成］
まず、図１を用いて、第１の実施形態に係る学習装置の構成について説明する。図１は、第１の実施形態に係る学習装置の構成の一例を示す図である。学習装置１０は、サーバへのリクエストとの類似度に基づき、当該リクエストが攻撃であるか否かを判定するためのプロファイル１４の学習を行う。また、学習装置１０は、プロファイル１４を用いて攻撃であるリクエストの検知を行う。図１に示すように、学習装置１０は、入力部１１及び制御部１２を有し、検知結果１３及びプロファイル１４を記憶する。
【００１３】
入力部１１は、学習装置１０における学習又は分析のためのデータの入力を受け付ける。入力部１１は、分析対象データ入力部１１１及び学習データ入力部１１２を有する。分析対象データ入力部１１１は、分析対象データ２０１の入力を受け付ける。また、学習データ入力部１１２は、学習データ２０２の入力を受け付ける。
【００１４】
ここで、分析対象データ２０１及び学習データ２０２は、例えば、Ｗｅｂサイトへのアクセスの際に生成されるＨＴＴＰリクエストである。また、学習データ２０２は、攻撃であるか否かがあらかじめ判明しているＨＴＴＰリクエストであってもよい。
【００１５】
制御部１２は、生成部１２１、検知部１２４及び保存部１２５を有する。また、生成部１２１は、抽出部１２２及び変換部１２３を有する。また、保存部１２５は、計算部１２６及び更新部１２７を有する。
【００１６】
生成部１２１は、サーバへのリクエストに含まれる所定の文字列の構造を抽象化した文字クラス列を生成する。ここで、サーバへのリクエストは、ＨＴＴＰリクエストであるものとする。以降、単にリクエストと記載した場合、ＨＴＴＰリクエストが含まれるものとする。生成部１２１は、抽出部１２２及び変換部１２３の処理によって文字クラス列を生成する。
【００１７】
抽出部１２２は、入力部１１に入力された分析対象データ２０１及び学習データ２０２からパラメータを抽出する。具体的には、抽出部１２２は、各ＨＴＴＰリクエストから、パス、パラメータのキー及びキーに対応するバリューを抽出する。ここで、バリューは、所定の文字列の一例である。
【００１８】
例えば、学習データ２０２に「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)」に変換する。
【００２１】
検知部１２４は、リクエストのうち、分析用のリクエストに含まれる所定の識別情報及び文字クラス列の組み合わせをプロファイル１４と照合し、異常を検知する。また、本実施形態において、所定の識別情報は、抽出部１２２によって抽出されたパス及びキーの組み合わせである。
【００２２】
具体的には、検知部１２４は、変換部１２３等から受け取ったパス、キー及び文字クラス列と、プロファイル１４との類似度を計算し、計算した類似度を閾値と比較すること等により攻撃の検知を行う。例えば、検知部１２４は、ある分析対象データ２０１のパス、キー及び文字クラス列と、プロファイル１４との類似度が閾値以下である場合、当該分析対象データ２０１を攻撃として検知する。また、検知部１２４は、検知結果１３を出力する。
【００２３】
保存部１２５は、リクエストのうち、学習用のリクエストに含まれる所定の識別情報及び文字クラス列の組み合わせごとの出現頻度をプロファイル１４として保存する。具体的には、保存部１２５は、変換部１２３から受け取ったパス、キー及び文字クラス列ごとの出現頻度をプロファイル１４として保存する。またこの時、パス及びキーに対応する各文字クラス列についてそれぞれの出現頻度を基に判定した当該文字クラス列のステータスもプロファイル１４として保存する。
【００２４】
また、計算部１２６は、パス、キー及び文字クラス列の組み合わせの出現回数を基に、プロファイル１４に保存される出現頻度を計算する。また、更新部１２７は、計算部１２６によって計算された出現頻度を基にプロファイル１４を更新する。計算部１２６及び更新部１２７の詳細な処理の内容については後述する。なお、プロファイル１４を更新することは、所定のデータをプロファイル１４として保存することと同意である。
【００２５】
ここで、図２を用いて、学習装置１０によって行われる学習処理及び検知処理について説明する。図２は、第１の実施形態に係る学習処理及び検知処理について説明するための図である。
【００２６】
まず、学習データ２０２には、ＵＲＬ「http://example.com/index.php?file=Img.jpg」、「http://example.com/index.php?file=Test.png」及び「http://example.com/index.php?file=Top001.png」が含まれているとする。また、分析対象データ２０１には、ＵＲＬ「http://example.com/index.php?file=Test011.jpg」及び「http://example.com/index.php?file=Test_011.jpg' or '1'='1」が含まれているとする。
【００２７】
このとき、抽出部１２２は、学習データ２０２から、バリュー「Img.jpg」、「Test.png」及び「Top001.png」を抽出する。また、抽出部１２２は、分析対象データ２０１から、バリュー「Test011.jpg」及び「Test_011.jpg' or '1'='1」を抽出する。
【００２８】
次に、図２に示すように、変換部１２３は、バリュー「Img.jpg」、「Test.png」及び「Top001.png」をそれぞれ、文字クラス列「(alpha,  symbol,  alpha)」、「(alpha,  symbol,  alpha)」及び「(alpha,  numeric,  symbol,  alpha)」に変換する。
【００２９】
また、変換部１２３は、バリュー「Test011.jpg」及び「Test_011.jpg' or '1'='1」を、それぞれ文字クラス列「(alpha,  numeric,  symbol,  alpha)」及び「(alpha,  symbol,  numeric,  symbol,  alpha,  symbol,  space,  alpha,  space,  symbol,  numeric,  symbol,  numeric)」に変換する。
【００３０】
ここで、alphaは英字全体を、numericは数字全体を、symbolは記号全体を、spaceは空白文字を表す文字クラスであるとする。文字クラスの定義はあらかじめ与えられているものとし、ここで例示したalpha、numeric、symbol、space以外の文字クラスが定義されていてもよい。
【００３１】
次に、検知部１２４は、分析対象データ２０１からの文字クラス列「(alpha,  numeric,  symbol,  alpha)」及び「(alpha,  symbol,  numeric,  symbol,  alpha,  symbol,  space,  alpha,  space,  symbol,  numeric,  symbol,  numeric)」に対応するパスとキーを組み合わせたデータとプロファイル１４との類似度を計算し、攻撃の検知を行う。
【００３２】
また、保存部１２５は、学習データ２０２に含まれるＵＲＬのパス「index.php」及びキー「file」に対応する文字クラス列のうち、例えば「(alpha,  symbol,  alpha)」を有効なステータスである文字クラス列としてプロファイル１４に保存する。
【００３３】
計算部１２６及び更新部１２７の処理について説明する。まず、計算部１２６は、リクエストに含まれる所定の識別情報及び文字クラス列の組み合わせごとに、組み合わせの出現回数が多いほど大きくなり、組み合わせの出現が継続しているほど大きくなるような更新用のスコアを計算する。本実施形態では、計算部１２６は、組み合わせの出現が所定の期間の中で継続しているほど大きくなるように更新用のスコアを計算する。ここで、計算部１２６によって計算される更新用のスコアは、前述したプロファイル１４の更新に用いられる出現頻度である。
【００３４】
図３を用いて、計算部１２６による計算処理について説明する。図３は、第１の実施形態に係る学習装置の計算処理について説明するための図である。図３の例では、計算部１２６は、出現回数の補正値を更新用のスコアとして計算する。
【００３５】
図３に示すように、まず、計算部１２６は、生成部１２１によって生成された文字クラス列を基に、パス、パラメータのキー、文字クラス列の組み合わせごとの出現回数を、１日のうちの所定の時間ブロックごとに集計する。
【００３６】
図３は、例えば、組み合わせＡが、０：００〜４：００の間に０回、４：００〜８：００の間に５回、８：００〜１２：００の間に４５回、１２：００〜１６：００の間に３０回、１６：００〜２０：００の間に１０回、２０：００〜２４：００の間に０回出現したことを示している。
【００３７】
そして、計算部１２６は、各組み合わせについて、各時間ブロックの出現回数の合計に、ブロックの総数に対する当該組み合わせが出現したブロックの数の割合を掛けた値を、出現回数の補正値として計算する。例えば、計算部１２６は、組み合わせＡの出現回数の補正値を、９０×４／６＝６０と計算する。同様に、計算部１２６は、組み合わせＢの出現回数の補正値を、１２０×１／６＝２０と計算する。
【００３８】
このため、本実施形態では、出現回数の補正値は、各組み合わせの出現回数が多いほど大きくなる。さらに、本実施形態では、出現回数の補正値は、各組み合わせの出現が１日の中で継続しているほど大きくなる。
【００３９】
また、図３の例では、組み合わせＢの方が組み合わせＡに比べて出現回数が多いが、組み合わせＡの方が継続性は高いため、最終的なスコアでは組み合わせＡが組み合わせＢを上回っている。
【００４０】
更新部１２７は、リクエストが攻撃であるか否かを判定するための組み合わせごとのプロファイルを、更新用のスコアを基に更新する。本実施形態では、更新部１２７は、計算部１２６によって計算された出現回数の補正値を用いてプロファイル１４を更新する。
【００４１】
まず、更新部１２７は、プロファイル１４を読み込み、プロファイル出力用一時データを初期化する。図４は、第１の実施形態に係るプロファイル出力用一時データの一例を示す図である。図４に示すように、更新部１２７は、プロファイル１４をプロファイル出力用一時データに反映させることで初期化を行う。
【００４２】
次に、更新部１２７は、計算部１２６によって計算された出現回数の補正値を用いて、プロファイル出力用一時データを更新する。図５、図６及び図７を用いて、プロファイル１４の更新処理について説明する。図５、図６及び図７は、第１の実施形態に係るプロファイルの更新処理について説明するための図である。
【００４３】
図５に示すように、パス、パラメータのキー及び文字列クラスがプロファイル出力用一時データに存在する場合、更新部１２７は、当該組み合わせに対応するプロファイル出力用一時データの出現回数に、計算部１２６によって計算された出現回数の補正値を加える。例えば、パスが「path1」、パラメータのキーが「param1」、文字クラス列が「文字クラス列２」である組み合わせはプロファイル出力用一時データに存在するため、更新部１２７は、当該組み合わせの出現回数０に、計算部１２６によって計算された出現回数の補正値３０を加える。
【００４４】
一方、図６に示すように、パス、パラメータのキー及び文字列クラスがプロファイル出力用一時データに存在しない場合、更新部１２７は、当該組み合わせに対応するレコードをプロファイル出力用一時データに追加する。なお、追加されたレコードのステータスは未設定のままとする。例えば、パスが「path2」、パラメータのキーが「param2」、文字クラス列が「文字クラス列４」である組み合わせはプロファイル出力用一時データに存在しないため、更新部１２７は、当該組み合わせに対応するレコードをプロファイル出力用一時データに追加する。
【００４５】
ここで、本実施形態では、プロファイル１４には、ステータスとして「有効」、「準無効」、「無効」及び未設定が存在する。検知部１２４は、ステータスが「有効」であるプロファイル１４を用いて検知を行う。
【００４６】
ここで、更新部１２７は、以下のルールに従って、プロファイル出力用一時データのステータス及び出現回数を更新する。
（ルール１−１）
更新前のステータスが「有効」である場合、ステータスを「有効」のままとする。
（ルール１−２）
更新前のステータスが「準無効」であって、出現回数が閾値以上である場合、ステータスを「有効」に更新する。
（ルール１−３）
更新前のステータスが「準無効」であって、出現回数が閾値未満である場合、ステータスを「準無効」のままとし、出現回数を０に更新する。
（ルール１−４）
更新前のステータスが「無効」であって、出現回数が閾値以上である場合、ステータスを「準無効」に更新し、出現回数を０に更新する。
（ルール１−５）
更新前のステータスが「無効」であって、出現回数が閾値未満である場合、ステータスを「無効」のままとし、出現回数を０に更新する。
（ルール１−６）
更新前のステータスが未設定である場合、ステータスを「無効」とし、出現回数を０に更新する。
【００４７】
例えば、閾値が３０である場合、更新部１２７は、図７のようにステータスを更新する。図７の例では、パスが「path1」、パラメータのキーが「param1」、文字クラス列が「文字クラス列１」である組み合わせは、更新前のステータスが「有効」であるため、更新部１２７は、当該組み合わせのステータスを「有効」のままとする。また、パスが「path1」、パラメータのキーが「param1」、文字クラス列が「文字クラス列２」である組み合わせは、更新前のステータスが「準無効」であり、出現回数が閾値以上であるため、更新部１２７は、当該組み合わせのステータスを「有効」に更新する。
【００４８】
そして、更新部１２７は、更新したプロファイル出力用一時データで、プロファイル１４を更新する。例えば、更新部１２７は、プロファイル出力用一時データから作成したプロファイル１４を、既存のプロファイル１４と置き換える。
【００４９】
このように、更新部１２７は、プロファイル１４に含まれる出現回数に更新用のスコアを加算した値が所定の閾値以上である場合、プロファイル１４に含まれるステータスを段階的に上げ、さらに、ステータスが所定の段階以下である場合は、出現回数を０に更新し既存のプロファイル１４の出現回数と置き換える。
【００５０】
［第１の実施形態の処理］
図８を用いて、学習装置１０の計算処理の流れについて説明する。図８は、第１の実施形態に係る学習装置の計算処理の流れを示すフローチャートである。図８に示すように、まず、計算部１２６は、入力データを取得する（ステップＳ１０１）。ここで、計算部１２６が取得する入力データは、パス、パラメータのキー及び文字クラス列の組み合わせである。
【００５１】
次に、計算部１２６は、出現回数を集計する（ステップＳ１０２）。ここで、計算部１２６は、集計した出現回数を基に、出現回数の補正値を計算する（ステップＳ１０３）。そして、計算部１２６は、処理結果データを出力する（ステップＳ１０４）。具体的には、計算部１２６は、計算結果を更新部１２７に受け渡す。
【００５２】
図９を用いて、学習装置１０の更新処理の流れについて説明する。図９は、第１の実施形態に係る学習装置の更新処理の流れを示すフローチャートである。図９に示すように、まず、更新部１２７は、入力データを取得する（ステップＳ１５１）。ここで、更新部１２７が取得する入力データは、計算部１２６によって計算された、パス、パラメータのキー及び文字クラス列の組み合わせごとの出現回数の補正値である。
【００５３】
次に、更新部１２７は、プロファイル出力用一時データを初期化する（ステップＳ１５２）。ここで、初回学習でない場合（ステップＳ１５３、Ｎｏ）、プロファイル１４は作成済みのため、更新部１２７は、プロファイル１４を読み込む（ステップＳ１５４）。この時点で、初回学習である場合（ステップＳ１５３、Ｙｅｓ）でも、初回学習でない場合（ステップＳ１５３、Ｎｏ）でも、プロファイル出力用一時データは、プロファイル１４を反映している。
【００５４】
ここから、更新部１２７は、入力データを１件ずつループして処理していく（ステップＳ１５５）。入力データのパス、パラメータのキー及び文字クラス列の組み合わせが、プロファイル出力用一時データに存在する場合（ステップＳ１５６、Ｙｅｓ）、更新部１２７は、プロファイル出力用一時データのレコードを更新する（ステップＳ１５７）。一方、入力データのパス、パラメータのキー及び文字クラス列の組み合わせが、プロファイル出力用一時データに存在しない場合（ステップＳ１５６、Ｎｏ）、更新部１２７は、プロファイル出力用一時データにレコードを追加する（ステップＳ１５８）。
【００５５】
そして、更新部１２７は、プロファイル出力用一時データのステータス及び出現回数を更新する（ステップＳ１５９）。具体的には、更新部１２７は、前述のルール１−１からルール１−６に従ってステータス及び出現回数の更新を行う。入力データの全てについて更新処理が終了した場合、更新部１２７は、ループを終了する（ステップＳ１６０）。そして、更新部１２７は、処理結果データを出力する（ステップＳ１６１）。具体的には、更新部１２７は、プロファイル出力用一時データを用いてプロファイル１４を更新する。
【００５６】
［第１の実施形態の効果］
学習装置１０は、所定の期間に発生したサーバへのリクエストに含まれる所定の文字列の構造を抽象化した文字クラス列を生成する。また、学習装置１０は、リクエストに含まれる所定の識別情報及び文字クラス列の組み合わせごとに、組み合わせの出現回数が多いほど大きくなり、組み合わせの出現が継続しているほど大きくなるような更新用のスコアを計算する。また、学習装置１０は、リクエストが攻撃であるか否かを判定するための組み合わせごとのプロファイル１４を、更新用のスコアを基に更新する。このように、本実施形態では、パターンの単純な出現回数だけでなく、継続性を考慮したプロファイルの学習を行っているため、攻撃を検知するためのプロファイルの学習を適切に行うことができる。
【００５７】
学習装置１０は、組み合わせの出現が所定の期間の中で継続しているほど大きくなるように更新用のスコアを計算することができる。このように、本実施形態では、期間内での継続性を計算することができるため、パターンが出現するサイクルを考慮した学習が可能になる。
【００５８】
更新部１２７は、プロファイル１４に含まれる出現回数に更新用のスコアを加算した値が所定の閾値以上である場合、プロファイル１４に含まれるステータスを段階的に上げ、さらに、ステータスが所定の段階以下である場合は、出現回数を０に更新し既存のプロファイル１４の出現回数と置き換える。これにより、学習装置１０は、ステータスが急に変化することを防止することができる。
【００５９】
［第２の実施形態］
第１の実施形態では、学習装置１０は、パス、パラメータのキー、文字クラス列の組み合わせごとの出現回数を、所定の期間（例えば、１日）のうちの所定の時間ブロックごとに集計し、更新用のスコアを計算し、プロファイル１４を更新していた。一方で、第２の実施形態では、学習装置１０は、パス、パラメータのキー、文字クラス列の組み合わせごとの出現回数及び、各組み合わせが出現した所定の期間の数を基に更新用のスコアを計算し、プロファイル１４を更新する。
【００６０】
第２の実施形態の学習装置１０は、第１の実施形態の場合と同様の構成を有する。ただし、第２の実施形態では、学習装置１０の一部の処理部が第１の実施形態とは異なる処理を行う。第２の実施形態において第１の実施形態と同様の処理を行う処理部については説明を省略する。
【００６１】
まず、更新部１２７は、プロファイル１４を読み込み、プロファイル出力用一時データを初期化する。図１０は、第２の実施形態に係るプロファイル出力用一時データの一例を示す図である。図１０に示すように、更新部１２７は、プロファイル１４をプロファイル出力用一時データに反映させることで初期化を行う。
【００６２】
ここで、第２の実施形態では、プロファイル１４には出現学習回数が含まれる。出現学習回数は、学習が行われた回数である。つまり、出現学習回数は、各レコードが追加された後、更新が行われた回数ということができる。例えば、学習装置１０に、１日１回学習データ２０２が入力され、毎回更新が行われたプロファイル１４のレコードの出現学習回数は学習を行った日数ということができる。
【００６３】
次に、更新部１２７は、生成部１２１によって生成された文字クラス列を基に、パス、パラメータのキー、文字クラス列の組み合わせごとの出現回数を用いて、プロファイル出力用一時データを更新する。図１１、図１２及び図１３を用いて、プロファイル１４の更新処理について説明する。図１１、図１２及び図１３は、第２の実施形態に係るプロファイルの更新処理について説明するための図である。
【００６４】
図１１に示すように、パス、パラメータのキー及び文字列クラスがプロファイル出力用一時データに存在する場合、更新部１２７は、当該組み合わせに対応するプロファイル出力用一時データの出現回数に、生成部１２１から受け取った出現回数を加え、プロファイル出力用一時データの出現学習回数に１を加算する。例えば、パスが「pathA」、パラメータのキーが「paramA」、文字クラス列が「文字クラス列Ａ」である組み合わせはプロファイル出力用一時データに存在するため、更新部１２７は、当該組み合わせの出現回数１００に、生成部１２１から受け取った出現回数５を加え、出現学習回数４に１を加算する。
【００６５】
一方、図１２に示すように、パス、パラメータのキー及び文字列クラスがプロファイル出力用一時データに存在しない場合、更新部１２７は、当該組み合わせに対応するレコードをプロファイル出力用一時データに追加し、出現学習回数を１に設定する。なお、追加されたレコードのステータスは未設定のままとする。例えば、パスが「pathA」、パラメータのキーが「paramA」、文字クラス列が「文字クラス列Ｃ」である組み合わせはプロファイル出力用一時データに存在しないため、更新部１２７は、当該組み合わせに対応するレコードをプロファイル出力用一時データに追加し、出現学習回数を１に設定する。
【００６６】
ここで、計算部１２６は、組み合わせが出現した期間の数が多いほど大きくなるように更新用のスコアを計算する。具体的には、計算部１２６は、出現学習回数に応じて、プロファイル出力用一時データの出現回数を補正する。
【００６７】
図１３を用いて、計算部１２６による計算処理について説明する。図１３は、第２の実施形態に係る学習装置の計算処理について説明するための図である。図１３の例では、計算部１２６は、補正後の出現回数を更新用のスコアとして計算する。
【００６８】
ここで、計算部１２６は、以下のルールに従って補正後の出現回数を計算する。また、あらかじめ学習回数の閾値が定められており、学習回数が閾値を超えていない場合、計算部１２６は補正を行わない。
（ルール２−１）
更新前のステータスが「有効」である場合、出現回数をそのまま補正後の出現回数とする。
（ルール２−２）
更新前のステータスが「有効」以外である場合、出現回数に、学習回数の閾値に１を加算した値に対する出現学習回数の割合を掛けた値を補正後の出現回数とする。
【００６９】
例えば、学習回数の閾値が６である場合、計算部１２６は、図１３のようにステータスを更新する。図７の例では、パスが「pathA」、パラメータのキーが「paramA」、文字クラス列が「文字クラス列Ａ」である組み合わせは、ステータスが「有効」以外であるため、計算部１２６は、補正後の出現回数を、１０５×（５／（６＋１））＝７５と計算する。
【００７０】
ここで、更新部１２７は、プロファイル出力用一時データのステータス及び出現回数を更新する。ここでは、更新部１２７は、第１の実施形態と同様に、前述のルール１−１からルール１−６に従ってステータス及び出現回数の更新を行う。なお、ここで更新される出現回数は、補正後の出現回数である。そして、更新部１２７は、更新後のプロファイル出力用一時データで、プロファイル１４を更新する。例えば、更新部１２７は、プロファイル出力用一時データから作成したプロファイル１４を、既存のプロファイル１４と置き換える。
【００７１】
［第２の実施形態の処理］
図１４を用いて、学習装置１０の計算処理の流れについて説明する。図１４は、第２の実施形態に係る学習装置の計算処理の流れを示すフローチャートである。図１４に示すように、まず、計算部１２６は、入力データを取得する（ステップＳ２０１）。ここで、計算部１２６が取得する入力データは、パス、パラメータのキー及び文字クラス列の組み合わせである。
【００７２】
次に、計算部１２６は、出現回数を集計する（ステップＳ２０２）。そして、計算部１２６は、処理結果データを出力する（ステップＳ２０３）。具体的には、計算部１２６は、計算結果を更新部１２７に受け渡す。
【００７３】
図１５を用いて、学習装置１０の更新処理の流れについて説明する。図１５は、第２の実施形態に係る学習装置の更新処理の流れを示すフローチャートである。図１５に示すように、まず、更新部１２７は、入力データを取得する（ステップＳ２５１）。ここで、更新部１２７が取得する入力データは、計算部１２６から受け取った、パス、パラメータのキー及び文字クラス列の組み合わせごとの出現回数である。
【００７４】
次に、更新部１２７は、プロファイル出力用一時データを初期化する（ステップＳ２５２）。ここで、初回学習でない場合（ステップＳ２５３、Ｎｏ）、プロファイル１４は作成済みのため、更新部１２７は、プロファイル１４を読み込む（ステップＳ２５４）。この時点で、初回学習である場合（ステップＳ２５３、Ｙｅｓ）でも、初回学習でない場合（ステップＳ２５３、Ｎｏ）でも、プロファイル出力用一時データは、プロファイル１４を反映している。
【００７５】
ここから、更新部１２７は、入力データを１件ずつループして処理していく（ステップＳ２５５）。入力データのパス、パラメータのキー及び文字クラス列の組み合わせが、プロファイル出力用一時データに存在する場合（ステップＳ２５６、Ｙｅｓ）、更新部１２７は、プロファイル出力用一時データのレコードを更新する（ステップＳ２５７）。一方、入力データのパス、パラメータのキー及び文字クラス列の組み合わせが、プロファイル出力用一時データに存在しない場合（ステップＳ２５６、Ｎｏ）、更新部１２７は、プロファイル出力用一時データにレコードを追加する（ステップＳ２５８）。
【００７６】
そして、学習回数があらかじめ定めた回数に達している場合（ステップＳ２５９、Ｙｅｓ）、計算部１２６は、出現学習回数を基にプロファイル出力用一時データの出現回数を補正する（ステップＳ２６０）。その後、更新部１２７は、プロファイル出力用一時データのステータス及び出現回数を更新する（ステップＳ２６１）。具体的には、更新部１２７は、第１の実施形態と同様に、前述のルール１−１からルール１−６に従ってステータス及び出現回数の更新を行う。学習回数があらかじめ定めた回数に達していない場合（ステップＳ２５９、Ｎｏ）、更新部１２７は、次のループへ進む。
【００７７】
入力データの全てについて更新処理が終了した場合、更新部１２７は、ループを終了する（ステップＳ２６２）。そして、更新部１２７は、処理結果データを出力する（ステップＳ２６３）。具体的には、更新部１２７は、プロファイル出力用一時データを用いてプロファイル１４を更新する。
【００７８】
［第２の実施形態の効果］
計算部１２６は、組み合わせが出現した期間の数が多いほど大きくなるように更新用のスコアを計算する。これにより、学習装置１０は、長期にわたって継続して出現しているリクエストをより正常なものとみなしてプロファイルを更新していくことができる。
【００７９】
［第３の実施形態］
これまで、学習装置１０が、出現回数及び更新前のステータスに基づいてステータスを更新する場合について説明した。一方で、ステータスの更新は、プロファイル１４の最終更新日に基づいて行われてもよい。第３の実施形態では、学習装置１０が、プロファイル１４の最終更新日に基づいてステータスの更新を行う場合について説明する。
【００８０】
第３の実施形態の学習装置１０は、第１の実施形態の場合と同様の構成を有する。ただし、第３の実施形態では、学習装置１０の一部の処理部が第１の実施形態とは異なる処理を行う。第３の実施形態において第１の実施形態と同様の処理を行う処理部については説明を省略する。
【００８１】
まず、更新部１２７は、プロファイル１４を読み込み、プロファイル出力用一時データを初期化する。図１６は、第３の実施形態に係るプロファイル出力用一時データの一例を示す図である。図１６に示すように、更新部１２７は、プロファイル１４をプロファイル出力用一時データに反映させることで初期化を行う。ここで、第３の実施形態では、プロファイル１４には最終学習データ出現日が含まれる。最終学習データ出現日は、当該レコードが最後に更新された日時である。
【００８２】
次に、更新部１２７は、生成部１２１によって生成された文字クラス列を基に、パス、パラメータのキー、文字クラス列の組み合わせごとの出現回数を用いて、プロファイル出力用一時データを更新する。図１７、図１８及び図１９を用いて、プロファイル１４の更新処理について説明する。図１７、図１８及び図１９は、第３の実施形態に係るプロファイルの更新処理について説明するための図である。
【００８３】
図１７に示すように、パス、パラメータのキー及び文字列クラスがプロファイル出力用一時データに存在する場合、更新部１２７は、当該組み合わせに対応するプロファイル出力用一時データの出現回数に、生成部１２１から受け取った出現回数を加える。さらに、更新部１２７は、最終学習データ出現日を更新時の日付に更新する。
【００８４】
例えば、パスが「pathA」、パラメータのキーが「paramA」、文字クラス列が「文字クラス列Ａ」である組み合わせはプロファイル出力用一時データに存在するため、更新部１２７は、当該組み合わせの出現回数１００に、生成部１２１から受け取った出現回数５を加え、最終学習データ出現日を更新時の日付「2017/12/22」に更新する。
【００８５】
なお、更新時とは、更新部１２７が更新処理を行っている時点の日時である。また、更新部１２７は、最終学習データ出現日を当該データのリクエストが発生した日時等に更新するようにしてもよい。
【００８６】
一方、図１８に示すように、パス、パラメータのキー及び文字列クラスがプロファイル出力用一時データに存在しない場合、更新部１２７は、当該組み合わせに対応するレコードをプロファイル出力用一時データに追加する。このとき、更新部１２７は、最終学習データ出現日を追加時の日付に更新する。なお、追加されたレコードのステータスは未設定のままとする。
【００８７】
例えば、パスが「pathA」、パラメータのキーが「paramA」、文字クラス列が「文字クラス列Ｃ」である組み合わせはプロファイル出力用一時データに存在しないため、更新部１２７は、当該組み合わせに対応するレコードをプロファイル出力用一時データに追加し、最終学習データ出現日をレコード追加時の日付「2017/12/22」に更新する。
【００８８】
ここで、更新部１２７は、図１９に示すように、プロファイル出力用一時データのステータスを更新する。このとき、更新部１２７は、最終学習データ出現日が、更新時よりも所定の日数以上過去である場合、ステータスを「無効」に更新する。また、更新部１２７は、ステータスを「無効」に更新するとともに、出現回数を０にリセットしてもよい。このように、更新部１２７は、プロファイル１４の最終更新日時が、所定の日時よりも過去である場合、プロファイル１４を無効化する。
【００８９】
さらに、更新部１２７は、上記の最終更新日時に基づく更新において無効化されなかったレコードについては、第１の実施形態と同様に、前述のルール１−１からルール１−６に従ってステータス及び出現回数の更新を行う。そして、更新部１２７は、更新後のプロファイル出力用一時データで、プロファイル１４を更新する。例えば、更新部１２７は、プロファイル出力用一時データから作成したプロファイル１４を、既存のプロファイル１４と置き換える。
【００９０】
［第３の実施形態の効果］
計算部１２６は、組み合わせが一定の期間以上出現しなくなったプロファイル１４を無効化する。これにより、学習装置１０は、時間の経過により有効でなくなったプロファイル１４の影響を受けることなく検知を行うことができる。
【００９１】
［その他の実施形態］
上記の実施形態では、プロファイル１４のステータスとして、「有効」、「準無効」、「無効」及び未設定が存在することとしたが、ステータスの種類はこれに限定されない。例えば、図２０に示すように、「有効」、「無効」、未設定のみが存在していてもよい。図２０は、その他の実施形態に係るプロファイルの更新処理について説明するための図である。この場合、更新部１２７は、出現回数が閾値以上であれば常にステータスを「有効」に更新し、出現回数が閾値未満であれば常にステータスを「無効」に更新することができる。また、「有効」、「第１段階の準無効」、「第２の段階の準無効」、「無効」及び未設定のように、さらに多段階のステータスの種類が存在していてもよい。
【００９２】
また、更新部１２７は、識別情報及び文字クラス列の組み合わせがあらかじめ設定されたリストに含まれている場合、プロファイル１４を無効化する。例えば、図２１に示すように、パス、パラメータのキー及び文字クラス列が学習対象外文字クラスリストに掲載されたものである場合、更新部１２７は、常にステータスを「無効」に更新する。なお、パス、パラメータのキー及び文字クラス列は、識別情報の一例である。例えば、学習対象外文字クラスリストは、攻撃であることが既知のリクエストに基づいて作成されるブラックリストである。
【００９３】
さらに、更新部１２７は、上記の学習対象外文字クラスリストに基づく更新において無効化されなかったレコードについては、第１の実施形態と同様に、前述のルール１−１からルール１−６に従ってステータス及び出現回数の更新を行う。そして、更新部１２７は、更新後のプロファイル出力用一時データで、プロファイル１４を更新する。
【００９４】
なお、実施形態では、プロファイル１４を表形式で表しているが、プロファイル１４のデータの記憶形式としては表形式の他、ＪＳＯＮ（JavaScript（登録商標）  Object  Notation）形式やMySQL、PostgreSQL等のデータベースを用いて記憶してもよい。また、分析対象データ２０１、学習データ２０２は、いずれもＨＴＴＰリクエストを複数含むデータであり、例えばＷｅｂサーバのアクセスログやアクセスログをパース又は変換したＪＳＯＮ形式のデータであってもよい。また、説明した計算部１２６や更新部１２７による各処理は、単独で用いられてもよいし、適宜組み合わせて用いられてもよい。
【００９５】
［プログラム］
一実施形態として、学習装置１０は、パッケージソフトウェアやオンラインソフトウェアとして上記の学習を実行する学習プログラムを所望のコンピュータにインストールさせることによって実装できる。例えば、上記の学習プログラムを情報処理装置に実行させることにより、情報処理装置を学習装置１０として機能させることができる。ここで言う情報処理装置には、デスクトップ型又はノート型のパーソナルコンピュータが含まれる。また、その他にも、情報処理装置にはスマートフォン、携帯電話機やＰＨＳ（Personal  Handyphone  System）等の移動体通信端末、さらには、ＰＤＡ（Personal  Digital  Assistant）等のスレート端末等がその範疇に含まれる。
【００９６】
また、学習装置１０は、ユーザが使用する端末装置をクライアントとし、当該クライアントに上記の学習に関するサービスを提供する学習サーバ装置として実装することもできる。例えば、学習サーバ装置は、更新前のプロファイル及び分析対象のＨＴＴＰリクエストを入力とし、更新済みのプロファイルを出力とする学習サービスを提供するサーバ装置として実装される。この場合、学習サーバ装置は、Ｗｅｂサーバとして実装することとしてもよいし、アウトソーシングによって上記の学習に関するサービスを提供するクラウドとして実装することとしてもかまわない。
【００９７】
図２２は、実施形態に係る学習プログラムを実行するコンピュータの一例を示す図である。コンピュータ１０００は、例えば、メモリ１０１０、ＣＰＵ１０２０を有する。また、コンピュータ１０００は、ハードディスクドライブインタフェース１０３０、ディスクドライブインタフェース１０４０、シリアルポートインタフェース１０５０、ビデオアダプタ１０６０、ネットワークインタフェース１０７０を有する。これらの各部は、バス１０８０によって接続される。
【００９８】
メモリ１０１０は、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ（Random  Access  Memory）１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、ハードディスクドライブ１０９０に接続される。ディスクドライブインタフェース１０４０は、ディスクドライブ１１００に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブ１１００に挿入される。シリアルポートインタフェース１０５０は、例えばマウス１１１０、キーボード１１２０に接続される。ビデオアダプタ１０６０は、例えばディスプレイ１１３０に接続される。
【００９９】
ハードディスクドライブ１０９０は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、学習装置１０の各処理を規定するプログラムは、コンピュータにより実行可能なコードが記述されたプログラムモジュール１０９３として実装される。プログラムモジュール１０９３は、例えばハードディスクドライブ１０９０に記憶される。例えば、学習装置１０における機能構成と同様の処理を実行するためのプログラムモジュール１０９３が、ハードディスクドライブ１０９０に記憶される。なお、ハードディスクドライブ１０９０は、ＳＳＤにより代替されてもよい。
【０１００】
また、上述した実施形態の処理で用いられる設定データは、プログラムデータ１０９４として、例えばメモリ１０１０やハードディスクドライブ１０９０に記憶される。そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０９０に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出して実行する。
【０１０１】
なお、プログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０９０に記憶される場合に限らず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ１１００等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、プログラムモジュール１０９３及びプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶されてもよい。そして、プログラムモジュール１０９３及びプログラムデータ１０９４は、他のコンピュータから、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【０１０２】
１０  学習装置
１１  入力部
１２  制御部
１３  検知結果
１４  プロファイル
１１１  分析対象データ入力部
１１２  学習データ入力部
１２１  生成部
１２２  抽出部
１２３  変換部
１２４  検知部
１２５  保存部
１２６  計算部
１２７  更新部
２０１  分析対象データ
２０２  学習データ
【図１】
2019225228.tif 000003
【図２】
2019225228.tif 000004
【図３】
2019225228.tif 000005
【図４】
2019225228.tif 000006
【図５】
2019225228.tif 000007
【図６】
2019225228.tif 000008
【図７】
2019225228.tif 000009
【図８】
2019225228.tif 000010
【図９】
2019225228.tif 000011
【図１０】
2019225228.tif 000012
【図１１】
2019225228.tif 000013
【図１２】
2019225228.tif 000014
【図１３】
2019225228.tif 000015
【図１４】
2019225228.tif 000016
【図１５】
2019225228.tif 000017
【図１６】
2019225228.tif 000018
【図１７】
2019225228.tif 000019
【図１８】
2019225228.tif 000020
【図１９】
2019225228.tif 000021
【図２０】
2019225228.tif 000022
【図２１】
2019225228.tif 000023
【図２２】
2019225228.tif 000024
【国際調査報告】
2019225228.tif 000025
2019225228.tif 000026
2019225228.tif 000027
2019225228.tif 000028