(57)【要約】【課題】検知した各フローに関する事象がシーケンシャルに発生する条件で観測対象ネットワークの異常を検知する。【解決手段】プロセッサとメモリを有し、受信したフロー統計情報に基づいて観測対象ネットワークの異常を検知するネットワーク異常検知装置であって、前記観測対象ネットワークのパケットのヘッダ情報から集計された前記フロー統計情報を受信して、フロー統計情報蓄積部に収集する統計情報収集部と、複数のフローに関する事象の時系列的な順序関係が予め設定されたシナリオを含むシナリオ情報と、前記フロー統計情報蓄積部から所定の期間のフロー統計情報を取得して、前記シナリオ情報のうち前記シナリオの事象と一致するフロー統計情報の有無に基づいて、前記観測対象ネットワークの異常の有無を判定する異常検知部と、を有する。【選択図】図２
2020092332.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサとメモリを有し、受信したフロー統計情報に基づいて観測対象ネットワークの異常を検知するネットワーク異常検知装置であって、
前記観測対象ネットワークのパケットのヘッダ情報から集計された前記フロー統計情報を受信して、フロー統計情報蓄積部に収集する統計情報収集部と、
複数のフローに関する事象の時系列的な順序関係が予め設定されたシナリオを含むシナリオ情報と、
前記フロー統計情報蓄積部から所定の期間のフロー統計情報を取得して、前記シナリオ情報のうち前記シナリオの事象と一致するフロー統計情報の有無に基づいて、前記観測対象ネットワークの異常の有無を判定する異常検知部と、
を有することを特徴とするネットワーク異常検知装置。
【請求項２】
請求項１に記載のネットワーク異常検知装置であって、
前記シナリオは、複数の事象に関するフロー条件と、複数の前記事象のそれぞれについて予め設定された閾値条件と、複数の事象の前記時系列的な順序関係を含み、
前記フロー条件は、送信元または宛先の情報を含み、
前記閾値条件は、前記フロー条件が発生した数量に関する閾値を含み、
前記順序関係は、複数の事象の時系列的な前後関係を含むことを特徴とするネットワーク異常検知装置。
【請求項３】
請求項１に記載のネットワーク異常検知装置であって、
前記異常検知部は、
前記シナリオ情報を設定するユーザインタフェースを提供することを特徴とするネットワーク異常検知装置。
【請求項４】
請求項１に記載のネットワーク異常検知装置であって、
前記異常検知部は、
前記シナリオの事象と一致するフロー統計情報があった場合には、当該フロー統計情報に関する情報を異常が発生したログ情報として出力することを特徴とするネットワーク異常検知装置。
【請求項５】
請求項１に記載のネットワーク異常検知装置であって、
前記フロー統計情報は、
ＮｅｔＦｌｏｗを用いてパケットのヘッダ情報から生成された情報であることを特徴とするネットワーク異常検知装置。
【請求項６】
プロセッサとメモリを有するネットワーク異常検知装置が、観測対象ネットワークの中継装置から受信したフロー統計情報に基づいて観測対象ネットワークの異常を検知するネットワーク異常検知システムであって、
前記中継装置は、
前記観測対象ネットワークのパケットのヘッダ情報から前記フロー統計情報を生成して前記ネットワーク異常検知装置へ送信し、
前記ネットワーク異常検知装置は、
観測対象ネットワークのパケットのヘッダ情報から集計されたフロー統計情報を受信して、フロー統計情報蓄積部に収集する統計情報収集部と、
複数のフローに関する事象の時系列的な順序関係が予め設定されたシナリオを含むシナリオ情報と、
前記フロー統計情報蓄積部から所定の期間のフロー統計情報を取得して、前記シナリオ情報のうち前記シナリオの事象と一致するフロー統計情報の有無に基づいて、前記観測対象ネットワークの異常の有無を判定する異常検知部と、
を有することを特徴とするネットワーク異常検知システム。
【請求項７】
請求項６に記載のネットワーク異常検知システムであって、
前記中継装置は、
前記観測対象ネットワークのパケットからミラーパケットを出力するミラー装置と、
前記ミラー装置から出力されたミラーパケットを受信してヘッダ情報に基づいてフロー統計情報を生成する情報収集装置と、
を含むことを特徴とするネットワーク異常検知システム。
【請求項８】
プロセッサとメモリを有する計算機が、受信したフロー統計情報に基づいて観測対象ネットワークの異常を検知するネットワーク異常検知方法であって、
前記計算機が、観測対象ネットワークのパケットのヘッダ情報から集計された前記フロー統計情報を受信して、フロー統計情報蓄積部に収集する第１のステップと、
前記計算機が、前記フロー統計情報蓄積部から所定の期間のフロー統計情報を取得する第２のステップと、
前記計算機が、複数のフローに関する事象の時系列的な順序関係が予め設定されたシナリオを含むシナリオ情報のうち、前記シナリオの事象と一致するフロー統計情報の有無に基づいて、前記観測対象ネットワークの異常の有無を判定する第３のステップと、
を含むことを特徴とするネットワーク異常検知方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークの異常検知機能を有する装置に関する。
【背景技術】
【０００２】
ＤＤｏＳ（Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄｅｎｉａｌ  ｏｆ  Ｓｅｒｖｉｃｅ）攻撃や、標的型攻撃等のサイバー攻撃によるセキュリティリスクが高まっている。
【０００３】
標的型攻撃における攻撃は手順化されており、攻撃者による一連の攻撃手順はサイバーキルチェーンと呼ばれている。サイバーキルチェーンの一例として、非特許文献１、５、６が知られている。
【０００４】
サイバーキルチェーンは、下記の攻撃手順から構成される。「偵察」（攻撃対象の情報収集）、「武器化」（攻撃コード、マルウェア作成）、「デリバリ」（作成した攻撃コード、マルウェアをメール、Ｗｅｂサイト等を経由して攻撃対象へ送付）、「エクスプロイト」（攻撃対象（標的）にエクスプロイト、マルウェアを実行させる）、「インストール」（標的がマルウェア感染）、「Ｃ＆Ｃ（Command and Control）」（Ｃ＆Ｃサーバがマルウェアに感染した端末と通信して遠隔操作、感染拡大、内部情報探索）、「目的実行」（マルウェアに感染した端末がサーバから情報を漏洩）。
【０００５】
これらの攻撃手順の全部または一部を検知することによって、標的型の攻撃を検知することができる。単独の攻撃手順を検知する方法の一つに、通信の振る舞いを分析して、サイバーキルチェーンの攻撃手順に特徴的な通信を検知する方法が考えられる。
【０００６】
通信の振る舞いを分析するための従来技術として、通信を構成するパケットヘッダの情報で定まるフロー毎にカウントするＮｅｔＦｌｏｗ（例えば、非特許文献２）、ｓＦｌｏｗ（例えば、非特許文献３）等のフロー統計技術が知られている。また、通信を構成するパケットそのものを収集するミラーリング技術（例えば、非特許文献４）が知られている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Ｔａｒｕｎ  Ｙａｄａｖ、Ｒａｏ  Ａｒｖｉｎｄ  Ｍａｌｌａｒｉ著、“Ｔｅｃｈｎｉｃａｌ  Ａｓｐｅｃｔｓ  ｏｆ  Ｃｙｂｅｒ  Ｋｉｌｌ  Ｃｈａｉｎ”、International Symposium on Security in Computing and Communication、SSCC 2015、 Security in Computing and Communications pp 438-452
【非特許文献２】ＲＦＣ３９５４  “Ｃｉｓｃｏ  Ｓｙｓｔｅｍｓ  ＮｅｔＦｌｏｗ  Ｓｅｒｖｉｃｅｓ  Ｅｘｐｏｒｔ  Ｖｅｒｓｉｏｎ  ９”、Ｃｉｓｃｏ  Ｓｙｓｔｅｍｓ、２０１５年１０月１４日
【非特許文献３】ＲＦＣ３１７６  “ＩｎＭｏｎ  Ｃｏｒｐｏｒａｔｉｏｎ’ｓ  ｓＦｌｏｗ：  Ａ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｍｏｎｉｔｏｒｉｎｇ  Ｔｒａｆｆｉｃ  ｉｎ  Ｓｗｉｔｃｈｅｄ  ａｎｄ  Ｒｏｕｔｅｄ  Ｎｅｔｗｏｒｋｓ”、ＩｎＭｏｎ  Ｃｏｒｐ、２００１年９月発行
【非特許文献４】“ポリシーベースミラーリング機能”、アラクサラネットワークス株式会社
【非特許文献５】秋本 智、笠原  義晃、堀  良彰、櫻井  幸一  著、“同一ドメインの問い合わせに着目したボットネット検出のためのＤＮＳトラヒック解析”、平成24年度電気関係学会九州支部連合大会（第65回連合大会）講演論文集、２０１２年９月２４日
【非特許文献６】張  宗華、門林  雄基  著、“ボットネットの把握と停止に向けての総合的検討：問題点と対策”、情報通信研究機構季報Ｖｏｌ．５４、２００８年
【発明の概要】
【発明が解決しようとする課題】
【０００８】
サイバーキルチェーンを検知するためには、例えば、サイバーキルチェーンにおける攻撃手順「Ｃ＆Ｃ」に相当するＣ＆Ｃサーバとマルウェアに感染した端末の通信と、感染後に発生するサイバーキルチェーンの攻撃手順の「目的実行」に相当するマルウェアに感染した端末とサーバの通信を検知する必要がある。
【０００９】
上記を一般化すると、複数のフローに関する事象を各々検知して、検知した各フローに関する事象がシーケンシャル（所定の順序）に発生する条件で検知することがサイバーキルチェーンの検知には必要である。
【００１０】
しかし、上記従来のフロー統計技術や、ミラーリング技術を用いた通信の振る舞いの分析では、上述のようなサイバーキルチェーンの検知機能は開示されていない。このため、上記従来例では、複数のフローに関する事象を各々検知しても、検知した各フローに関する事象がシーケンシャルに発生する条件で検知することができないという課題があった。
【課題を解決するための手段】
【００１１】
本発明は、プロセッサとメモリを有し、受信したフロー統計情報に基づいて観測対象ネットワークの異常を検知するネットワーク異常検知装置であって、前記観測対象ネットワークのパケットのヘッダ情報から集計された前記フロー統計情報を受信して、フロー統計情報蓄積部に収集する統計情報収集部と、複数のフローに関する事象の時系列的な順序関係が予め設定されたシナリオを含むシナリオ情報と、前記フロー統計情報蓄積部から所定の期間のフロー統計情報を取得して、前記シナリオ情報のうち前記シナリオの事象と一致するフロー統計情報の有無に基づいて、前記観測対象ネットワークの異常の有無を判定する異常検知部と、を有する。
【発明の効果】
【００１２】
本発明によれば、複数のフローに関する事象を各々検知して、検知した各フローに関する事象がシーケンシャルに発生する条件で観測対象ネットワークの異常（例えば、サイバーキルチェーン）を検知することが可能となる。
【００１３】
本明細書において開示される主題の、少なくとも一つの実施の詳細は、添付されている図面と以下の記述の中で述べられる。開示される主題のその他の特徴、態様、効果は、以下の開示、図面、請求項により明らかにされる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施例１を示し、ネットワーク異常検知装置を用いたネットワーク異常検知システムのブロック図である。
【図２】本発明の実施例１を示し、ネットワーク異常検知装置の構成の一例を示すブロック図である。
【図３】本発明の実施例１を示し、パケットの構成の一例を示す図である。
【図４】本発明の実施例１を示し、フロー統計データベースの構成の一例を示す図である。
【図５】本発明の実施例１を示し、シナリオテーブルの構成の一例を示す図である。
【図６】本発明の実施例１を示し、ＳＹＳＬＯＧデータベースの構成の一例を示す図である。
【図７Ａ】本発明の実施例１を示し、ネットワーク異常検知装置で行われる処理の一例を示すフローチャートの前半部である。
【図７Ｂ】本発明の実施例１を示し、ネットワーク異常検知装置で行われる処理の一例を示すフローチャートの後半部である。
【図８Ａ】本発明の実施例１の変形例を示し、ネットワーク異常検知装置で行われる処理の一例を示すフローチャートの前半部である。
【図８Ｂ】本発明の実施例１の変形例を示し、ネットワーク異常検知装置で行われる処理の一例を示すフローチャートの後半部である。
【図９】本発明の実施例１の変形例を示し、ネットワーク異常検知装置を用いたネットワーク異常検知システムのブロック図である。
【図１０】本発明の実施例２を示し、ネットワーク異常検知システムの一例を示すブロック図である。
【図１１】本発明の実施例２を示し、ネットワーク異常検知システムで情報漏洩が発生した場合に時系列で発生するフローの一例を示すシーケンス図である。
【図１２Ａ】本発明の実施例２を示し、情報漏洩が発生した場合のフロー１の帯域変動のグラフである。
【図１２Ｂ】本発明の実施例２を示し、情報漏洩が発生した場合のフロー２の帯域変動のグラフである。
【図１３】本発明の実施例２を示し、シナリオテーブルの一例を示す図である。
【図１４Ａ】本発明の実施例２を示し、ネットワーク異常検知装置で行われる情報漏洩検知処理の一例を示すフローチャートの第１部である。
【図１４Ｂ】本発明の実施例２を示し、ネットワーク異常検知装置で行われる情報漏洩検知処理の一例を示すフローチャートの第２部である。
【図１４Ｃ】本発明の実施例２を示し、ネットワーク異常検知装置で行われる情報漏洩検知処理の一例を示すフローチャートの第３部である。
【図１４Ｄ】本発明の実施例２を示し、ネットワーク異常検知装置で行われる情報漏洩検知処理の一例を示すフローチャートの第４部である。
【図１５】本発明の実施例３を示し、ネットワーク異常検知システムの一例を示すブロック図である。
【図１６】本発明の実施例３を示し、ネットワーク異常検知システムでボットネットによる活動が発生した場合で時系列に発生するフローの一例を示すシーケンス図である。
【図１７Ａ】本発明の実施例３を示し、攻撃活動が発生した場合のフローの帯域変動のグラフである。
【図１７Ｂ】本発明の実施例３を示し、攻撃活動が発生した場合のフローの帯域変動のグラフである。
【図１８】本発明の実施例３を示し、シナリオテーブルの一例を示す図である。
【図１９Ａ】本発明の実施例３を示し、ネットワーク異常検知装置で行われるボットネット検知処理の一例を示すフローチャートの第１部である。
【図１９Ｂ】本発明の実施例３を示し、ネットワーク異常検知装置で行われるボットネット検知処理の一例を示すフローチャートの第２部である。
【図１９Ｃ】本発明の実施例３を示し、ネットワーク異常検知装置で行われるボットネット検知処理の一例を示すフローチャートの第３部である。
【図１９Ｄ】本発明の実施例３を示し、ネットワーク異常検知装置で行われるボットネット検知処理の一例を示すフローチャートの第４部である。
【図２０】本発明の実施例１を示し、シナリオテーブルを編集するユーザインタフェースの一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を添付図面に基づいて説明する。
【実施例１】
【００１６】
本発明の実施例１として、本発明のネットワーク異常検知装置１００を用いたネットワーク異常検知システムの構成例と、本発明のネットワーク異常検知装置１００の装置構成を説明する。
【００１７】
図１は、本発明のネットワーク異常検知装置１００を用いたネットワーク異常検知システムのブロック図を示す。
【００１８】
観測対象ネットワーク２００におけるパケット中継装置１６０のミラー機能（またはネットワークタップ（ミラー装置）のミラー機能）を用いて生成した観測対象パケットのミラーパケットが、観測対象ネットワーク２００から情報収集装置１１０へ送信される。
【００１９】
情報収集装置１１０では、ミラーパケットのヘッダ情報で定義されるフロー毎にパケット数や、Ｂｙｔｅ数等の統計情報を採取して、これらの情報をフロー統計情報としてネットワーク異常検知装置１００へ送信する。
【００２０】
フロー統計情報の取得には、ＲＦＣ３９５４で定義されたＮｅｔＦｌｏｗを用いてもよい。ネットワーク異常検知装置１００は、情報収集装置１１０から受信したフロー統計情報をフロー統計情報データベース５０へ蓄積し、当該蓄積されたフロー統計情報に基づいて観測対象ネットワーク２００の異常の有無を分析する。
【００２１】
ネットワーク異常検知装置１００は、観測対象ネットワーク２００の異常を検知すると、検知したネットワークの異常に関する情報をネットワーク異常検知装置１００の表示端末１３０で表示する。
【００２２】
また、ネットワーク異常検知装置１００は、検知したネットワークの異常に関する情報をＳＹＳＬＯＧとして可視化サーバ１２０に送信する。可視化サーバ１２０は、他のセキュリティ装置とも接続することができるため、他の装置（図示省略）で取得した通信に関する情報や、インシデント情報と連携させてネットワーク異常検知装置１００で検知されたネットワークの異常に関する情報を表示端末１４０に表示することができる。
【００２３】
これにより例えば、ネットワーク異常検知装置１００で検知した観測対象ネットワーク２００の異常の発生箇所や、当該ネットワークの異常の発生前後の通信に関する情報やインシデント情報を可視化サーバ１２０等で分析することができ、より多角的なネットワークの異常の情報表示が可能となる。
【００２４】
なお、図１において、情報収集装置１１０と、ネットワーク異常検知装置１００と、可視化サーバ１２０は図示しないネットワークで相互に接続されている。
【００２５】
図２は、本発明のネットワーク異常検知装置１００のブロック図を示す。ネットワーク異常検知装置１００は、情報収集装置１１０や可視化サーバ１２０とパケットの入出力を行うパケット転送処理部１０１と、情報収集装置１１０から収集したフロー統計情報を分析して観測対象ネットワーク２００の異常を検知するネットワーク異常検知部１０２と、パケット転送処理部１０１及びネットワーク異常検知部１０２を接続する接続インタフェース１０３を有する。
【００２６】
パケット転送処理部１０１は、ＣＰＵ１０１０とメモリ１０１１と、パケット送受信部１０１２を含む。メモリ１０１１にはパケットバッファ１０３０が設定される。また、メモリ１０１１にはパケット処理プログラム（図示省略）がロードされて、ＣＰＵ１０１０によって実行される。
【００２７】
ネットワーク異常検知部１０２は、ＣＰＵ１０２０とメモリ１０２１と、ハードディスク１０２２とを含む。また、ネットワーク異常検知部１０２には、入力端末１５０や表示端末１３０が接続される。
【００２８】
メモリ１０１１にはシナリオテーブル２０と、イベント収集バッファ３０と、異常検知プログラム４０が格納される。異常検知プログラム４０はＣＰＵ１０２０によって実行される。ハードディスク１０２２には、フロー統計情報データベース５０と、ＳＹＳＬＯＧデータベース７０が格納される。
【００２９】
図３は、パケット３００の構成図を示す。パケット３００は、Ｌ１（Ｌａｙｅｒ１）情報３０１と、Ｌ２（Ｌａｙｅｒ２）情報３０２と、Ｌ３（Ｌａｙｅｒ３）情報３０３と、Ｌ４（Ｌａｙｅｒ４）情報３０４と、Ｌ７（Ｌａｙｅｒ７）情報３０５と、ペイロード３０６と、ＦＣＳ（Ｆｒａｍｅ  Ｃｈｅｃｋ  Ｓｅｑｕｅｎｃｅ）３０７から構成される。
【００３０】
イーサネット（イーサネットは登録商標、以下同じ）の場合、Ｌ１情報３０１にはＩＦＧ（Ｉｎｔｅｒ  Ｆｒａｍｅ  Ｇａｐ）とＰｒｅａｍｂｌｅが含まれる。
【００３１】
Ｌ２情報３０２にはイーサネットヘッダ情報と、ＶＬＡＮ  Ｔａｇ情報等が含まれる。Ｌ３情報３０３にはＩＰヘッダ情報が含まれる。Ｌ４情報３０４にはＴＣＰヘッダ情報またはＵＤＰヘッダ情報等が含まれる。Ｌ７情報３０５にはｈｔｔｐヘッダ情報またはｍａｉｌヘッダ情報等が含まれる。
【００３２】
パケット３００が、上述したＮｅｔＦｌｏｗのフロー統計パケットである場合には、パケット３００は通常ＵＤＰパケットであり、ＮｅｔＦｌｏｗのフロー統計情報はＬ７情報３０５に格納される。
【００３３】
上記図２において、パケット転送処理部１０１のパケット送受信部１０１２にパケット３００が入力されて、パケット受信処理が開始される。
【００３４】
パケット送受信部１０１２にパケット３００が入力されると、パケット３００の受信をパケット送受信部１０１２がＣＰＵ１０１０に通知し、パケット３００の内容をパケットバッファ１０３０に書き込む。
【００３５】
ＣＰＵ１０１０はパケット３００の受信の通知を受けると、パケットバッファ１０３０からパケット３００を読み出し、パケット３００がＮｅｔＦｌｏｗのフロー統計情報であった場合は、パケット転送処理部１０１とネットワーク異常検知部１０２を接続する接続インタフェース１０３を経由して、パケット３００のＮｅｔＦｌｏｗのフロー統計情報をネットワーク異常検知部１０２へ送信する。
【００３６】
ネットワーク異常検知部１０２は、パケット３００のＮｅｔＦｌｏｗのフロー統計情報を受信すると、ＣＰＵ１０２０がパケット３００のＮｅｔＦｌｏｗのフロー統計情報をメモリ１０２１へ一時的に格納する。
【００３７】
ＣＰＵ１０２０は、所定のタイミングでメモリ１０２１からパケット３００のＮｅｔＦｌｏｗのフロー統計情報を読み出し、ハードディスク１０２２のフロー統計ＤＢ１０２２０に格納する。
【００３８】
ＣＰＵ１０２０は、各機能部のプログラムに従って処理を実行することによって、所定の機能を提供する機能部として稼働する。例えば、ＣＰＵ１０２０は、異常検知プログラム４０に従って処理を実行することで異常検知部として機能する。他のプログラムについても同様である。さらに、ＣＰＵ１０２０は、各プログラムが実行する複数の処理のそれぞれの機能を提供する機能部としても稼働する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００３９】
上記処理によって、ネットワーク異常検知装置１００のフロー統計情報データベース５０には、情報収集装置１１０が収集したパケットに基づくフロー統計情報が蓄積される。
【００４０】
図４は、フロー統計データベース（以下、ＤＢとする）５０の構成図を示す。フロー統計ＤＢ５０は、フロー統計レコード１（５１−１）と、フロー統計レコード２（５１−２）と、・・・、フロー統計レコードＮ（５１−Ｎ）のＮ個のフロー統計情報から構成される。なお、以下の説明では、フロー統計レコードを特定しない場合には「−」以降を省略した符号「５１」を用いる。また、他の構成要素の符号についても同様である。
【００４１】
フロー統計レコード５１は、Ｌ２情報、Ｌ３情報、Ｌ４情報、Ｌ７情報のうちの任意の情報で構成してよいが、本実施例ではＬ３情報、Ｌ４情報の情報で構成する例を示す。
【００４２】
フロー統計レコード５１は、フロー統計の規格のバージョンを示すフロー統計バージョン５２と、観測対象パケットのＩＰバージョン５３と、観測対象パケットの送信元ＩＰアドレス５４と、観測対象パケットの宛先ＩＰアドレス５５と、観測対象パケットのＬ４情報のプロトコル５６と、観測対象パケットのＬ４情報の送信元ポート番号５７と、観測対象パケットのＬ４情報の宛先ポート番号５８と、観測対象パケットのフローとしてのパケット数５９と、観測対象パケットのフローとしてのＢｙｔｅ数６０と、フロー開始時刻６１の情報で構成される。
【００４３】
ネットワーク異常検知部１０２のＣＰＵ１０２０は、所定の時間間隔またはネットワーク異常検知装置１００の運用管理者が設定した時間間隔で、フロー統計ＤＢ５０のフロー開始時刻６１が上述の時間間隔の間に該当する複数のフロー統計レコード５１−１〜５１−Ｎをフロー統計ＤＢ５０１から読み出し、メモリ１０２１内のイベント収集バッファ３０に格納する。
【００４４】
換言すれば、ＣＰＵ１０２０は、所定の時間間隔毎に直前の時間間隔のフロー統計レコード５１をフロー統計情報ＤＢ５０から抽出して、イベント収集バッファ３０へ格納する。
【００４５】
イベント収集バッファ３０に格納された複数のフロー統計レコード５１の情報と、シナリオテーブル２０に基づいて、異常検知プログラム４０は、観測対象ネットワーク２００の異常を検知する。
【００４６】
図５は、シナリオテーブル２０の構成図を示す。シナリオテーブル２０は、複数のシナリオエントリ２１−１〜２１−Ｎから構成される。シナリオテーブル２０は、観測対象ネットワーク２００の異常を検知するために、フロー統計レコード５１で第１の事象（フロー１とする）が発生した後に、第２の事象（フロー２とする）が発生したことを判定するための条件が予め設定されたテーブルである。
【００４７】
本実施例１のネットワーク異常検知装置１００は、第１の事象（フロー１のフロー条件）が発生（フロー１の閾値条件を満足）し、第２の事象（フロー２のフロー条件）が発生（フロー２の閾値条件を満足）したことを検出した場合に、異常の判定を行う例を示すが、これに限定されるものではなく、第３の事象や、第４の事象など多数の事象をシナリオテーブル２０に設定してもよい。
【００４８】
また、ネットワーク異常検知装置１００は、第１の事象と第２の事象が発生し、かつ前記第１及び第２の事象の発生が所定の順序関係（時系列的な関係）を満足する場合に、シナリオエントリ２１に設定された異常が観測対象ネットワーク２００に発生したと判定する。
【００４９】
シナリオエントリ２１−１〜２１−Ｎは、フロー１のフロー条件２２と、フロー１の閾値条件２３と、フロー２のフロー条件２４と、フロー２の閾値条件２５と、フロー１とフロー２間のフロー関係条件２６と、フロー１とフロー２間の時間関係条件２７から構成される。
【００５０】
シナリオエントリ２１は、サイバーキルチェーンの手順等に対応して設定することができ、例えば、シナリオエントリ２１−１には情報漏洩を検出するためのシナリオが設定され、シナリオエントリ２１−２には、ボットネットを検出するためのシナリオが設定される。
【００５１】
情報漏洩を検出するシナリオエントリ２１−１としては、例えば、フロー１のフロー条件２２として特定のサーバを送信元として、宛先が観測対象ネットワーク２００内のＰＣへのフローで、フロー２のフロー条件２４として観測対象ネットワーク２００内のＰＣを送信元とし、宛先が外部の計算機へのフローで、フロー１の閾値条件２３とフロー２の閾値条件２５がバイト数で設定される。そして、フロー１とフロー２間のフロー関係条件２６には、フロー１の宛先アドレスとフロー２の送信元アドレスが同一という条件が設定される。また、フロー１とフロー２間の時間関係条件２７には、フロー１の後にフロー２が所定時間内に実行されるという時系列的な条件が設定される。
【００５２】
シナリオエントリ２１−１〜２１−Ｎは、フロー条件２２〜時間関係条件２７の全ての条件で構成してもよいし、一部の条件で構成してもよい。シナリオエントリ２１は、ネットワーク異常検知装置１００の運用管理者が入力端末１５０経由でネットワーク異常検知装置１００に設定する。
【００５３】
異常検知プログラム４０を実行するＣＰＵ１０２０は、メモリ１０２１内のシナリオテーブル２０から全てのシナリオエントリ２１を読み出して、各シナリオエントリ２１に設定された条件に合致するフロー統計レコード５１の組み合わせを、イベント収集バッファ３０に格納されたフロー統計レコード５１から抽出する。
【００５４】
そして、ＣＰＵ１０２０は、各シナリオエントリ２１に設定された条件に合致すると判定したフロー統計レコード５１を構成するフローを、観測対象ネットワーク２００の異常発生として判定する。
【００５５】
この際、ＣＰＵ１０２０は、フロー統計情報ＤＢ５０のフロー統計レコードについて、シナリオテーブル２０のフロー１とフロー２間のフロー関係条件２６と、フロー１とフロー２間の時間関係条件２７に基づいて、時間的に先に発生したフロー１のフロー条件２２と、フロー１の閾値条件２３を満たすフローの判定を行う。
【００５６】
すなわち、ＣＰＵ１０２０は、フロー統計情報ＤＢ５０のフロー統計レコードについて、フロー１のフロー条件２２とフロー１の閾値条件２３を満たすフローをフロー１としてイベント収集バッファ３０に格納する。
【００５７】
また、ＣＰＵ１０２０は、フロー統計情報ＤＢ５０のフロー統計レコードについて、フロー２のフロー条件２４と、フロー２の閾値条件２５と、フロー１とフロー２間のフロー関係条件２６を満たすフロー２の判定を行う。
【００５８】
そして、ＣＰＵ１０２０は、次にフロー１と２間のフロー関係条件２６を満たすフローをフロー２とする場合、更にフロー１と２間の時間関係条件２７を満たすフロー２の判定を行い、いずれも満たしたフローをイベント収集バッファ３０に登録する。
【００５９】
上述の処理（ネットワーク異常検知アルゴリズム１）により、イベント収集バッファ３０に登録されたフロー１とフロー２の組み合わせでネットワークの異常を検知する。ＣＰＵ１０２０は、ネットワーク異常検知としたフロー１とフロー２を表示端末１３０で表示することで、ネットワーク異常検知装置１００の運用管理者は観測対象ネットワーク２００で異常を検知したフローを把握することができる。
【００６０】
また、ＣＰＵ１０２０は、観測対象ネットワーク２００で異常を検知したフロー１とフロー２からＳＹＳＬＯＧを生成して可視化サーバ１２０に送信することで、ネットワーク異常検知システムの運用管理者はネットワークで異常を検知したフローを可視化サーバ１２０の表示端末１４０で把握することができる。
【００６１】
図６は、ＳＹＳＬＯＧ  ＤＢ７０の一例を示す。本実施例１では、セキュリティ情報を送信するために用いられているＣＥＦ（Ｃｏｍｍｏｎ  Ｅｖｅｎｔ  Ｆｏｒｍａｔ）をＳＹＳＬＯＧに格納してネットワーク異常検知装置１００が可視化サーバ１２０に送信する例である。
【００６２】
ＳＹＳＬＯＧ  ＤＢ７０は、ＳＹＳＬＯＧレコード１（７０−１）と、ＳＹＳＬＯＧレコード２（７０−２）と、ＳＹＳＬＯＧレコードＮ（７０−Ｎ）から構成される。
【００６３】
各ＳＹＳＬＯＧレコード（７０−１〜７０−Ｎ）は、ＳＹＳＬＯＧ７１を含む。ＳＹＳＬＯＧ７１において、「ｄａｔｅｔｉｍｅ」はＳＹＳＬＯＧ７１が生成された時刻を示す。「ｈｏｓｔ」はＳＹＳＬＯＧ７１が生成されたホストのＩＰアドレスまたはホスト名を示す。「ＣＥＦ：０」はＣＥＦのバージョンを示す。「ＡＬＡＸＡＬＡ  Ｎｅｔｗｏｒｋｓ」はネットワーク異常検知装置１００のベンダ名を示す。「ＡＸ−ＸＸ」はネットワーク異常検知装置１００の装置名を示す。「１．０」はネットワーク異常検知装置１００のバージョンを示す。
【００６４】
続いて、ＳＹＳＬＯＧ７１の「０」はイベント種別ＩＤを示す。「Ａｂｎｏｒｍａｌ  ｆｌｏｗ」は検知されたネットワーク異常の種別名を示す。続く「３」はＳｅｖｅｒｉｔｙを示す。「ｒｔ」はネットワーク異常の発生時刻を示す。「ｄｖｃ」はネットワーク異常が発生した検知装置のＩＰアドレスを示す。続いて「ｒｅｑｕｅｓｔ」は検知されたネットワーク異常の詳細情報を格納したＵＲＬを示す。「ｄｅｖｉｃｅＩｎｂｏｕｎｄＩｎｔｅｒｆａｃｅ」はネットワーク異常の発生したＶＬＡＮ情報または回線情報を示す。「ｓｍａｃ」は検知されたネットワーク異常の送信元ＭＡＣアドレスを示す。
【００６５】
ＳＹＳＬＯＧ７１は、その他、検知したネットワーク異常の宛先ＭＡＣアドレスや、送信元ＩＰアドレス、宛先ＩＰアドレス、プロトコル、宛先ポート番号、送信元ポート番号、異常検知した閾値、閾値の種別、パケットレート、Ｂｙｔｅレート、宛先ＩＰアドレス異なり数、送信元ＩＰアドレス異なり数、宛先ＭＡＣアドレス異なり数、送信元ＭＡＣアドレス異なり数等をＳＹＳＬＯＧにて表示してもよい。
【００６６】
なお、宛先ＩＰアドレス異なり数は、ネットワーク異常検知装置１００が収集したフロー統計レコードに含まれる宛先ＩＰアドレスの種類の数を示す。送信元ＩＰアドレス異なり数等についても同様である。
【００６７】
ネットワーク異常検知装置１００が、図６のフォーマットで送信したＳＹＳＬＯＧ７１は、ネットワーク異常検知装置１００に接続された表示端末１（１３０）で表示することができる。
【００６８】
また、ネットワーク異常検知装置１００が図６のフォーマットで送信したＳＹＳＬＯＧ７１を受信した可視化サーバ１２０は、ＳＹＳＬＯＧ７１に格納されたネットワーク異常の情報をグラフィカルに可視化して、可視化サーバ１２０に接続された表示端末２（１０）で表示することができる。
【００６９】
次に、ＣＰＵ１０２０が実行する異常検知プログラム４０の処理の一例を図７Ａ、図７Ｂの示すフローチャートに示す。以下の説明では、ＣＰＵ１０２０を処理の主体とするが、異常検知プログラム（異常検知部）４０やネットワーク異常検知装置１００が処理の主体であってもよい。
【００７０】
ステップ１９００では、所定の時間間隔毎Δｔ毎にＣＰＵ１０２０が処理を開始する。
【００７１】
次のステップ１９０１では、ＣＰＵ１０２０がフロー統計ＤＢ５０のフロー統計レコード５１のうち、現在時刻ＮＯＷ−Δｔ≦フロー開始時刻６１＜現在時刻ＮＯＷ、を満たすフロー統計レコード５１を検索してイベント収集バッファ３０に格納する。
【００７２】
次のステップ１９０２では、ＣＰＵ１０２０がシナリオテーブル２０を読み出す。次のステップ１９０３では、ＣＰＵ１０２０がシナリオエントリ番号ｉ＝１とする。次のステップ１９０４では、ＣＰＵ１０２０がシナリオテーブル２０からシナリオエントリ番号ｉ（ｉ＝１〜Ｉ）に対応するシナリオエントリ２１−１〜２１−Ｎを読み出す。なお、番号Ｉは、シナリオエントリ２１の総数を示し、Ｉ＝Ｎとなる。
【００７３】
次のステップ１９０５では、ＣＰＵ１０２０がイベント収集バッファ３０に格納したフロー統計レコード５１のうち、フロー１のフロー条件２２と、フロー１の閾値条件２３の２つの検索条件を満たすフロー統計レコード５１を検索する。
【００７４】
次のステップ１９０６では、ＣＰＵ１０２０が上記検索条件（１９０５）を満たしたフロー統計レコード５１の全てに番号ｊ（ｊ＝１〜Ｊ）を付与してフロー１としてイベント収集バッファ３０に格納する。なお、番号Ｊは、フロー１が閾値を超えて発生したフロー統計レコード５１の数の最大値である。
【００７５】
次のステップ１９０７では、ＣＰＵ１０２０がイベント収集バッファ３０に格納したフロー統計レコード５１のうち、フロー２のフロー条件２４と、フロー２の閾値条件２５の２つの検索条件を満たすフロー統計レコード５１を検索する。
【００７６】
次のステップ１９０８では、ＣＰＵ１０２０が上記検索条件（１９０７）を満たしたフロー統計レコード５１の全てに番号ｋ（ｋ＝１〜Ｋ）を付与してフロー２としてイベント収集バッファ３０に格納する。なお、番号Ｋは、フロー２が閾値を超えて発生したフロー統計レコード５１の数の最大値である。
【００７７】
上記処理によって、イベント収集バッファ３０には、シナリオエントリ２１−ｉのフロー１（事象１）とフロー２（事象２）がそれぞれの閾値条件を超えたフロー統計レコード５１に番号ｋが付与されて格納される。
【００７８】
次のステップ１９０９では、ＣＰＵ１０２０がフロー統計レコード５１の番号ｊ＝１とする。
【００７９】
次に図７Ｂのステップ１９１０では、ＣＰＵ１０２０がフロー統計レコード５１の番号ｊをフロー１の番号として、フロー１とフロー２間のフロー関係条件２６と、フロー１とフロー２間の時間関係条件２７を満たすフロー統計レコード５１をフロー２から検索する。
【００８０】
すなわち、ＣＰＵ１０２０は、イベント収集バッファ３０に格納されたフロー統計レコード５１のうち、フロー１の番号ｊについてフロー関係条件２６と時間関係条件２７を満足するフロー２のレコードを検索する。
【００８１】
次のステップ１９１１では、ＣＰＵ１０２０が上記検索条件（１９１０）を満たしたフロー統計レコード５１の全てについて、番号ｌ（ｌ＝１〜Ｌ）を付与し、フロー１のフロー統計レコード５１の番号ｊに対応するフロー２のフロー統計レコード５１の番号ｋとしてイベント収集バッファ３０に格納する。なお、番号Ｌは、番号ｊのフロー統計レコード５１とフロー１、２間のフロー関係条件２６と時間関係条件２７を満足するレコードの数の最大値である。
【００８２】
次のステップ１９１２では、ＣＰＵ１０２０がフロー１のフロー統計レコード５１の番号ｊとフロー２のフロー統計レコード５１の番号ｌの組み合わせでネットワーク異常検知する。
【００８３】
すなわち、ＣＰＵ１０２０は、イベント収集バッファ３０のフロー統計レコード５１のうち、フロー１（事象１）が閾値を超えた番号ｊのフロー統計レコード５１と、フロー２（事象２）が閾値を超え、かつ、フロー１、２間の相関関係が上記ステップ１９１０の検索条件を満たす番号ｌのフロー統計レコード５１の組み合わせが、番号ｉのシナリオエントリ２１の異常に該当するか否かを判定する。
【００８４】
ＣＰＵ１０２０は、異常を判定した場合、番号ｉのシナリオエントリ２１の異常を表示端末１３０に出力し、ＳＹＳＬＯＧ７１を生成する。あるいは、ＣＰＵ１０２０は、異常を判定した番号ｉのシナリオエントリ２１と番号ｊ、ｌのフロー統計レコード５１をメモリ１０２１に保持し、図７Ａ、図７Ｂの処理が完了した後に、異常の報知を表示端末１３０へ出力するようにしてもよい。
【００８５】
次に、ステップ１９１３の判定では、ＣＰＵ１０２０が、番号ｊが最大値Ｊより小さいか否かを判定する。ステップ１９１３の判定結果がＹＥＳの場合には、次のステップ１９１４で、ＣＰＵ１０２０が番号ｊに１を加算して、ステップ１９１０に戻って上記処理を繰り返す。
【００８６】
一方、ステップ１９１３の判定結果がＮＯの場合は、次のステップ１９１５で、ＣＰＵ１０２０は、シナリオエントリ２１の番号ｉがＩより小さいか否かを判定する。ステップ１９１５の判定結果がＹＥＳの場合は、次のステップ１９１６に進んで、番号ｉに１を加算して、上記ステップ１９０４に戻って上記処理を繰り返す。一方、ステップ１９１５の判定結果がＮＯの場合は、全てのシナリオエントリ２１について処理が完了したので、異常検知プログラム４０を終了する。
【００８７】
上記処理によって、ネットワーク異常検知装置１００は、フロー統計情報ＤＢ５０に蓄積されたフロー統計レコード５１について、シナリオテーブル２０のシナリオエントリ２１毎に定義された複数の事象が順次発生したか否かを判定することが可能となる。
【００８８】
これにより、ネットワーク異常検知装置１００は、複数のフローに関する事象を時系列の順で各々検知して、検知した各フローに関する事象が所定の順序で発生する異常を確実に検知することが可能となる。
【００８９】
ネットワーク異常検知装置１００は、サイバーキルチェーンの、偵察、武器化、デリバリエクスプロイト、インストール、Ｃ＆Ｃ（Command and Control）、目的実行の各手順をシナリオエントリ２１で定義しておくことで、観測対象ネットワーク２００の異常または異常の予兆を検知することが可能となる。
【００９０】
本実施例１では、ネットワーク異常検知装置１００が、シナリオエントリ２１毎にフロー条件２２と閾値条件２３を満たすフロー統計レコード５１をフロー１として番号ｊを付与してイベント収集バッファ３０に格納する。さらに、ネットワーク異常検知装置１００は、フロー条件２４と閾値条件２５を満たすフロー統計レコード５１をフロー２として番号ｋを付与してイベント収集バッファ３０に格納する。
【００９１】
そして、ネットワーク異常検知装置１００は、フロー１のフロー統計レコード５１の番号ｊについて、フロー関係条件２６と時間関係条件２７を満たすフロー２について異常の検知を行う。
【００９２】
これにより、フロー条件２２を満たして閾値条件２３を超えるフロー統計レコード５１がフロー１として検知されると、ネットワーク異常検知装置１００は、フロー条件２４を満たして閾値条件２５を超えるフロー統計レコード５１をフロー２として検知する。そして、フロー関係条件２６と時間関係条件２７を満たすフロー１とフロー２のペアを異常が検知されたフローとして特定することができる。
【００９３】
本実施例１では、フロー１とフロー２の２つの事象をシナリオテーブル２０に設定する例を示したが、３つ以上の事象（フロー）についてもシナリオテーブル２０へ定義しておくことで、複雑な手順の異常についても検出することが可能となる。
【００９４】
なお、時間順序を逆に辿って観測対象ネットワーク２００の異常を判定する別のアルゴリズムとして、ＣＰＵ１０２０が、フロー２のフロー条件２４とフロー２の閾値条件２５を満たすフローの判定を行い、次にフロー２のフロー条件２４とフロー２の閾値条件２５を満たすフローをフロー２としてイベント収集バッファ３０に格納する。
【００９５】
そして、ＣＰＵ１０２０は、フロー１のフロー条件２２とフロー１の閾値条件２３とフロー１とフロー２間のフロー関係条件２６を満たすフロー１の判定を行い、次にフロー１と２間のフロー関係条件２６を満たすフローをフロー１とする場合は、更にフロー１とフロー２間の時間関係条件２７を満たすフロー１の判定を行い、いずれの条件も満たしたフローをフロー１としてイベント収集バッファ３０に登録する。
【００９６】
フロー１とフロー２の時間順序を逆に辿って判定する上述のネットワーク異常検知アルゴリズムにより、イベント収集バッファ３０に登録されたフロー１とフロー２の組み合わせで観測対象ネットワーク２００の異常を検知することもできる。
【００９７】
ネットワーク異常検知としたフロー１とフロー２を表示端末１３０で表示することで、ネットワーク異常検知装置１００の運用管理者は、ネットワーク異常検知したフローを把握することができる。
【００９８】
または、ネットワーク異常検知としたフロー１とフロー２をｓｙｓｌｏｇに格納して可視化サーバ１２０に送信することで、ネットワーク異常検知システムの運用管理者はネットワーク異常検知したフローを把握することができる。
【００９９】
ＣＰＵ１０２０が実行する異常検知プログラム４０の処理の変形例を図８Ａ、図８Ｂのフローチャートに示す。図８Ａ、図８Ｂのフローチャートは、上述のように、フロー１とフロー２の時間順序を逆に辿って判定する処理を示し、その他については上記図７Ａ、図７Ｂと同様である。
【０１００】
ステップ２０００では、所定の時間間隔毎Δｔ毎にＣＰＵ１０２０が処理を開始する。次のステップ２００１では、ＣＰＵ１０２０がフロー統計ＤＢ５０のフロー統計レコード５１のうち、現在時刻ＮＯＷ−Δｔ≦フロー開始時刻６１＜現在時刻ＮＯＷ、を満たすフロー統計レコード５１を検索してイベント収集バッファ３０に格納する。
【０１０１】
次のステップ２００２〜２００４では、ＣＰＵ１０２０がシナリオテーブル２０を読み出し、シナリオエントリ番号ｉ＝１とし、シナリオテーブル２０からシナリオエントリ番号ｉ（ｉ＝１〜Ｉ）に対応するシナリオエントリ２１−ｉを読み出す。
【０１０２】
次のステップ２００５では、イベント収集バッファ３０に格納したフロー統計レコード５１のうちフロー２のフロー条件２２と、フロー２の閾値条件２５を満たすフロー統計レコード５１を検索する。
【０１０３】
次のステップ２００６では、ＣＰＵ１０２０が上記検索条件（２００５）を満たしたフロー統計レコード５１の全てに番号ｊ（ｊ＝１〜Ｊ）を付与してフロー２としてイベント収集バッファ３０に格納する。なお、番号Ｊは、フロー２が閾値を超えて発生したフロー統計レコード５１の数（最大値）である。
【０１０４】
次のステップ２００７では、ＣＰＵ１０２０がイベント収集バッファ３０に格納したフロー統計レコード５１のうち、フロー１のフロー条件２２と、フロー１の閾値条件２３の２つの検索条件を満たすフロー統計レコード５１を検索する。
【０１０５】
次のステップ２００８では、ＣＰＵ１０２０が上記検索条件（２００７）を満たしたフロー統計レコード５１の全てに番号ｋ（ｋ＝１〜Ｋ）を付与してフロー１としてイベント収集バッファ３０に格納する。なお、番号Ｋは、フロー１が閾値を超えて発生したフロー統計レコード５１の数の最大値である。
【０１０６】
次のステップ２００９では、ＣＰＵ１０２０がフロー統計レコード５１の番号ｊ＝１とする。
【０１０７】
次に図８Ｂのステップ２０１０では、ＣＰＵ１０２０がフロー統計レコード５１の番号ｊをフロー２の番号として、フロー１とフロー２間のフロー関係条件２６と、フロー１とフロー２間の時間関係条件２７を満たすフロー統計レコード５１をフロー１から検索する。
【０１０８】
次のステップ２０１１では、ＣＰＵ１０２０が上記検索条件（２０１０）を満たしたフロー統計レコード５１の全てについて、番号ｌ（ｌ＝１〜Ｌ）を付与し、フロー２のフロー統計レコード５１の番号ｊに対応するフロー１のフロー統計レコード５１の番号ｋとしてイベント収集バッファ３０に格納する。なお、番号Ｌは、番号ｊのフロー統計レコード５１とフロー１、２間のフロー関係条件２６と時間関係条件２７を満足するレコードの数の最大値である。
【０１０９】
次のステップ２０１２では、ＣＰＵ１０２０がフロー２のフロー統計レコード５１の番号ｊとフロー１のフロー統計レコード５１の番号ｌの組み合わせでネットワーク異常検知する。この処理は、図７Ｂのステップ１９１２と同様である。
【０１１０】
次に、ステップ２０１３の判定では、ＣＰＵ１０２０が、番号ｊが最大値Ｊより小さいか否かを判定する。ステップ２０１３の判定結果がＹＥＳの場合には、次のステップ２０１４で、ＣＰＵ１０２０が番号ｊに１を加算して、ステップ２０１０に戻って上記処理を繰り返す。
【０１１１】
一方、ステップ２０１３の判定結果がＮＯの場合は、次のステップ２０１５で、ＣＰＵ１０２０は、シナリオエントリ２１の番号ｉがＩより小さいか否かを判定する。ステップ２０１５の判定結果がＹＥＳの場合は、次のステップ２０１６に進んで、番号ｉに１を加算して、上記ステップ２００４に戻って上記処理を繰り返す。一方、ステップ２０１５の判定結果がＮＯの場合は、全てのシナリオエントリ２１について処理が完了したので、異常検知プログラム４０を終了する。
【０１１２】
なお、ＣＰＵ１０２０がイベント収集バッファ３０に格納するフロー統計レコード５１の情報は、シナリオエントリ２１の判定に必要な情報に限定することで、フロー統計ＤＢ５０から読み出すフロー統計レコード５１の情報量と、イベント収集バッファ３０の容量を削減することが可能となり、異常検知の高速化と負荷軽減を実現できる。
【０１１３】
図９は、実施例１の変形例を示し、ネットワーク異常検知装置１００を用いたネットワーク異常検知システムのブロック図を示す。本変形例の観測対象ネットワーク２００では、パケット中継装置１６０がフロー統計機能を有する。パケット中継装置１６０は、観測対象ネットワーク２００のトラフィックを収集してフロー統計情報を生成して、ネットワーク異常検知装置１００へ送信する。
【０１１４】
パケット中継装置１６０で行われるフロー統計情報の取得には、前記非特許文献２に示したＲＦＣ３９５４のＮｅｔＦｌｏｗを用いてもよい。ネットワーク異常検知装置１００は、図１と同様の処理を行なう。
【０１１５】
つまり、ネットワーク異常検知装置１００は、パケット中継装置１６０から受信したフロー統計情報に基づいて、観測対象ネットワーク２００の異常の有無を分析し、ネットワークの異常を検知すると、検知したネットワークの異常に関する情報をネットワーク異常検知装置１００に接続された表示端末１３０で表示する。
【０１１６】
また、ネットワーク異常検知装置１００は、検知したネットワーク異常に関する情報をＳＹＳＬＯＧとして可視化サーバ１２０に送信する。可視化サーバ１２０は、他のセキュリティ装置とも接続することができるため、他の装置で取得した通信の情報や、インシデント情報と連携させてネットワーク異常検知装置１００で取得したネットワークの異常に関する情報を表示することができる。
【０１１７】
これにより、例えば、ネットワーク異常検知装置１００は検知したネットワークの異常の発生箇所や、当該ネットワークの異常の発生前後の通信情報やインシデント情報を表示端末１３０に表示することができ、より多角的なネットワーク異常の情報表示が可能となる。
【０１１８】
図２０は、シナリオテーブル２０のシナリオエントリ２１を編集（追加や削除）するユーザインタフェースの一例を示す。
【０１１９】
ネットワーク異常検知装置１００の運用管理者が入力端末１５０経由でシナリオエントリ２１の追加や削除のコマンドを入力すると、ＣＰＵ１０２０がコマンドを受け付けて、表示端末１３０に追加コマンド１３０１１〜１３０１３と、追加コマンドの結果１３０２と、削除コマンド１３０３と、削除コマンド結果１３０４を表示する。なお、表示端末１３０の画面の「＃」は、コマンドプロンプトである。
【０１２０】
追加コマンドは、シナリオテーブル２０にｌｅａｋａｇｅ（情報漏洩）というシナリオエントリ２１を追加することを示すコマンド（１３０１１）と、ｌｅａｋａｇｅの１ｓｔイベント（ｓｅｑ  １）のフロー条件は送信元ＩＰアドレスが１９２．１６８．１．１０１で、宛先ＩＰアドレスが任意（ａｎｙ）、閾値種別（ｔｈｒ−ｔｙｐｅ）をＢｙｔｅ数（ｂｙｔｅｓ）として１００００Ｂｙｔｅを超過であることを示すコマンド（１３０１２）と、ｌｅａｋａｇｅの２ｎｄイベント（ｓｅｑ  ２）のフロー条件は、送信元ＩＰアドレスがｓｅｑ１で検知した任意のＩＰアドレス（ａｎｙ（ｓｉｐ（ｓｅｑ１）））で、宛先ＩＰアドレスが１９２．０．２．１で、閾値種別をＢｙｔｅ数（ｂｙｔｅｓ）として１００００Ｂｙｔｅｓを超過し、１ｓｔイベントから２ｎｄイベント発生までの期間（ｄｕｒａｔｉｏｎ）が３分（３ｍ）以内であることを示すコマンド（１３０１３）から構成される。
【０１２１】
コマンドには、フロー１のフロー条件２２、フロー２のフロー条件２４の例として、ＩＰバージョン５３を特定の値とする条件や、送信元ＩＰアドレス５４と宛先ＩＰアドレス５５の両方または一方を特定の値または特定の範囲の値とする条件や、プロトコル５６を特定の値とする条件や、送信元ポート番号５７と宛先ポート番号５８の両方または片方を特定の値とする条件等が含まれる。
【０１２２】
フロー１の閾値条件２３または、フロー２の閾値条件２５の例としては、パケット数５９が特定の値以上または以下とする条件や、Ｂｙｔｅ数６０特定の値以上または以下とする条件や、単位時間当たりのパケット数（パケットレート）が特定の値以上または以下とする条件や、単位時間当たりのＢｙｔｅ数（Ｂｙｔｅレート）が特定の値以上または以下とする条件や、特定の送信元ＩＰアドレス５４を含む複数のフロー統計レコード５１において異なる宛先ＩＰアドレス５５の数（以降、宛先ＩＰアドレス異なり数と呼ぶ）を特定の値以上または以下とする条件や、特定の宛先ＩＰアドレス５５を含む複数のフロー統計レコード５１において異なる送信元ＩＰアドレス５４の数（以降、送信元ＩＰアドレス異なり数と呼ぶ）が特定の値以上または以下とする条件等が含まれる。
【０１２３】
フロー１とフロー２間のフロー関係条件２６の例としては、フロー１とフロー２の送信元ＩＰアドレス５４が一致する条件や、フロー１とフロー２の宛先ＩＰアドレス５５が一致する条件や、フロー１の宛先ＩＰアドレス５５とフロー２の送信元ＩＰアドレス５４が一致する条件や、フロー１の送信元ＩＰアドレス５４とフロー２の宛先ＩＰアドレス５５３が一致する条件等が含まれる。
【０１２４】
フロー１とフロー２間の時間関係条件２７の例としては、フロー１のフロー開始時刻６１よりフロー２のフロー開始時刻６１が遅い条件や、フロー１のフロー開始時刻６１よりフロー２のフロー開始時刻６１が早い条件や、フロー１のフロー開始時刻６１よりフロー２のフロー開始時刻６１が一定時間の範囲で遅い条件や、フロー１のフロー開始時刻６１よりフロー２のフロー開始時刻６１が一定時間の範囲で早い条件等が含まれる。
【０１２５】
ＣＰＵ１０２０が観測対象ネットワーク２００の異常を検知すると、ＣＰＵ１０２０は異常を検知したフローの情報を格納したＳＹＳＬＯＧ７１を生成し、生成したＳＹＳＬＯＧ７１をＳＹＳＬＯＧ  ＤＢ７０に格納する。
【０１２６】
ＣＰＵ１０２０は、所定の時間間隔ΔＴまたはネットワーク異常検知装置１００の運用管理者が設定した時間間隔でＳＹＳＬＯＧ  ＤＢ７０を読み出して、装置外へ未送信のＳＹＳＬＯＧ７１があれば、未送信のＳＹＳＬＯＧ７１を接続インタフェース１０３経由でパケット転送処理部１０１へ送信する。
【０１２７】
接続インタフェース１０３はＳＹＳＬＯＧ７１の受信をＣＰＵ１０１０へ通知し、ＣＰＵ１０１０はＳＹＳＬＯＧ７１をＩＰパケット化してメモリ１０１１のパケットバッファ１０３０に格納し、パケット送受信部１０１２にてイーサフレーム化してから送信する。
【０１２８】
以上のように、実施例１では、ネットワーク異常検知装置１００が、複数のフローに関する事象を時系列の順で各々検知して、検知した各フローに関する事象が所定の順序で発生する観測対象ネットワーク２００の異常または異常の兆候を確実に検知することが可能となる。
【０１２９】
なお、上記実施例１では、ネットワーク異常検知装置１００の内部で、パケット転送処理部１０１とネットワーク異常検知部１０２が分離した構成を示したが、一体で構成されてもよい。この場合、パケット送受信部１０１２と、パケットバッファ１０３０を、ネットワーク異常検知部１０２に統合すればよい。
【０１３０】
また、上記実施例１では、異常検知プログラム４０が、所定の時間間隔毎に直前の時間間隔のフロー統計レコード５１をフロー統計情報ＤＢ５０から抽出して、観測対象ネットワーク２００の異常を検知する例を示したが、ネットワーク異常検知装置１００の利用者が指定した期間のフロー統計レコード５１について、異常の検知を行ってもよい。
【０１３１】
また、上記実施例１では、異常検知プログラム４０が、検知した観測対象ネットワーク２００で異常が発生した情報をＳＹＳＬＯＧとして可視化サーバ１２０に出力する例を示したが、ＳＹＳＬＯＧに代わってログメッセージを外部へ出力してもよい。
【実施例２】
【０１３２】
本発明の実施例２として、本発明のネットワーク異常検知装置１００で情報漏洩の検知を行う例について説明する。
【０１３３】
図１０は、本発明のネットワーク異常検知装置１００を用いた情報漏洩検知を実現するネットワーク異常検知システムの構成の一例を示すブロック図である。
【０１３４】
観測対象ネットワーク２００は、マルウェアに感染した感染端末２１０と、ファイルサーバ２２０と、感染端末２１０とファイルサーバ２２０を接続するスイッチ２３０と、スイッチ２３０が中継する通信をミラーするミラーポート２３１と、スイッチ２３０に接続されたルータ２４０から構成される。また、情報漏洩を実行する攻撃者が管理するＣ＆Ｃサーバ４００は観測対象ネットワーク２００の外部から接続され、感染端末２１０に対する命令を発行して感染端末２１０を操作することができる。
【０１３５】
感染端末２１０が、ファイルサーバ２２０から機密情報等のファイルを奪取して攻撃者のＣ＆Ｃサーバ４００へ情報漏洩する場合の通信を説明する。なお前提として、感染端末２１０はマルウェアに感染しており、攻撃者はＣ＆Ｃサーバ４００から感染端末２１０を操作することが可能であり、攻撃者は感染端末２１０を操作することによって観測対象ネットワーク２００のネットワーク構成や、サーバ構成を把握しているものとする。
【０１３６】
感染端末２１０は、ファイルサーバ２２０から機密情報ファイルをダウンロードする。感染端末２１０は、ダウンロードした機密情報ファイルをＣ＆Ｃサーバ４００へ送信することで、機密情報ファイルが攻撃者に漏洩される。
【０１３７】
図１１は、上述の情報漏洩が発生した場合の観測対象ネットワーク２００において時系列で発生するフローの一例を示すシーケンス図である。
【０１３８】
上述の情報漏洩が発生する場合、まず、感染端末２１０がファイルサーバ２２０の機密情報ファイルを受信する通信が開始する（Ｆ１）。次に、感染端末２１０が外部のＣ＆Ｃサーバ４００に対し機密情報ファイルを送信する通信が開始される（Ｆ２）。
【０１３９】
情報漏洩に関する上述のフローの時間関係に関する条件は、ファイルサーバ２２０を送信元ＩＰアドレス、感染端末２１０を宛先ＩＰアドレスとするフロー１（図中Ｆ１）が発生し、フロー１の発生後に、感染端末２１０を送信元ＩＰアドレスとし、Ｃ＆Ｃサーバ４００を宛先ＩＰアドレスとするフロー２（図中Ｆ２）が発生する、という事象が含まれる。
【０１４０】
また情報漏洩に関する上述のフローの関係に関する条件として、フロー１の宛先ＩＰアドレスと、フロー２の送信元ＩＰアドレスは一致する、という事象が含まれる。
【０１４１】
フロー１のフロー条件２２としては、送信元ＩＰアドレス＝ファイルサーバ２２０（一般化すると、情報漏洩元として監視対象とするＩＰアドレス）、宛先ＩＰアドレスとなる感染端末のＩＰアドレスは未知であるから、宛先ＩＰアドレス＝任意となる。情報漏洩元として想定するＩＰアドレスを特定しない場合は、送信元ＩＰアドレス＝任意としてもよい。
【０１４２】
フロー２のフロー条件２４としては、送信元ＩＰアドレスとなる感染端末のＩＰアドレスは未知であるから、送信元ＩＰアドレス＝任意、宛先ＩＰアドレスとなるＣ＆ＣサーバのＩＰアドレスは未知であるから、宛先ＩＰアドレス＝任意となる。
【０１４３】
なお、Ｃ＆Ｃサーバ４００のＩＰアドレスには、既知のＣ＆Ｃサーバ４００のアドレスリストに登録されたＩＰアドレスを適用してもよい。既存のＣ＆Ｃサーバ４００のアドレスリストがある場合は、既存のＣ＆Ｃサーバ４００に関するフロー２のアドレスを特定できる。
【０１４４】
本実施例２では、情報漏洩を検知するアルゴリズムとして実施例１で説明した時間順序を逆に辿って判定する変形例で判定する方が、実施例１の図７Ａ、図７Ｂより判定対象となるフロー統計レコード５１を削減することができる。したがって、情報漏洩検知の負荷を低減して効率化することができ、情報漏洩検知を高速化することができる。
【０１４５】
本実施例２では、前記実施例１のアルゴリズム１（図７Ａ、図７Ｂ）とアルゴリズム２（図８Ａ、図８Ｂ）を組み合わせたアルゴリズムを情報漏洩検知アルゴリズムとして、ネットワーク異常検知装置１００の異常検知プログラム４０で実行する例を示す。
【０１４６】
既存のＣ＆Ｃサーバ４００のアドレスリストに記載されるアドレスに関しては、ネットワーク異常検知装置１００が、上述のアルゴリズム２で判定し、未知のＣ＆Ｃサーバを想定した情報漏洩検知は上述のアルゴリズム１で判定することで、未知のＣ＆Ｃサーバと既知のＣ＆Ｃサーバに対して効率よく対応することができる。情報漏洩検知アルゴリズムについては、情報漏洩検知のシナリオテーブルにおけるシナリオエントリ２１について説明した後に詳述する。
【０１４７】
フロー１の閾値条件としては、フロー１のＢｙｔｅ数＞機密情報ファイルのＢｙｔｅ数という条件と、フロー２のＢｙｔｅ数＞機密情報ファイルのＢｙｔｅ数という条件となる。なお、必要に応じて閾値はパケット数、Ｂｙｔｅレート、パケットレートとしてもよい。
【０１４８】
閾値に対して比較対象とする検知パラメタであるＢｙｔｅ数の測定対象となる時間範囲は、ネットワーク異常検知装置１００の運用管理者の設定により、検知パラメタの対象とすべきフロー開始時刻６１の時間範囲を調整することで変更可能とする。
【０１４９】
また、閾値が低すぎて情報漏洩していないフローを誤検知してしまう場合には、閾値を上げて調整することにより誤検知を低減することができる。逆に閾値が高すぎて情報漏洩検知できない場合には、閾値を下げて調整することができる。情報漏洩検知に適切な閾値を設定するためには、ネットワーク異常検知装置１００の運用開始時に、ネットワーク異常の発生していない正常状態における検知パラメタであるＢｙｔｅ数またはパケット数またはＢｙｔｅレートまたはパケットレートを監視して、ネットワーク異常検知装置１００の運用管理者が適切な閾値を検討して設定する必要がある。
【０１５０】
これらの条件を後述するシナリオテーブル２０に設定することで、ＣＰＵ１０２０がシナリオテーブル２０を参照し、フロー統計ＤＢ５０からフロー統計レコード５１を読み出してイベント収集バッファ３０に格納したフロー統計レコード５１のうち、シナリオテーブル２０の設定条件に一致するフロー統計レコード５１を判定することで、情報漏洩を検知することができる。
【０１５１】
図１２Ａ、図１２Ｂは、情報漏洩が発生した場合のフロー１、フロー２のネットワークの帯域変動の例を示すグラフである。フロー１とフロー２におけるピークは各々機密情報ファイルのＢｙｔｅ数に相当するピークであり、フロー１（図１２Ａ）のピークの方がフロー２（図１２Ｂ）のピークより時間的に先に発生する。
【０１５２】
図１３は、情報漏洩検知におけるシナリオテーブル２０におけるシナリオエントリ２１の例を示す。
【０１５３】
シナリオエントリ２１は、フロー１のフロー条件２２として送信元ＩＰアドレス（Ｓｏｕｒｃｅ  ＩＰ、以下ＳＩＰ）＝ファイルサーバのＩＰアドレスと、宛先ＩＰアドレス（Ｄｅｓｔｉｎａｔｉｏｎ  ＩＰ、以下ＤＩＰ）＝ｄ．ｃ．（任意）の値が設定される。
【０１５４】
フロー１の閾値条件２３としては、Ｂｙｔｅ数＞１ＧＢｙｔｅ、という条件が設定される。フロー２のフロー条件２４としては、ＳＩＰ＝任意、ＤＩＰ＝観測対象ネットワーク外のＩＰアドレス、という条件が設定される。
【０１５５】
フロー２の閾値条件２５としては、Ｂｙｔｅ数＞１ＧＢｙｔｅ、という条件が設定される。フロー１とフロー２間のフロー関係条件２６としては、フロー１のＤＩＰ＝フロー２のＳＩＰ、という条件が設定される。
【０１５６】
フロー１とフロー２間の時間関係条件２７としては、フロー１のフロー開始時刻＜フロー２のフロー開始時刻＜フロー１のフロー開始時刻＋１時間、という条件が設定される。
【０１５７】
これにより、ファイルサーバ２２０から感染端末の疑いのある任意のＩＰアドレス宛に１ＧＢｙｔｅを超えるフロー１が発生し、フロー１が発生してから１時間以内にフロー１の宛先ＩＰアドレスを送信元ＩＰアドレスとして観測対象ネットワーク２００の外部のＩＰアドレス宛に発生したフロー２を検知することが可能となり、情報漏洩の疑いのある通信を検知することができる。
【０１５８】
なお、フロー２のＤＩＰとなる観測対象ネットワーク２００の外部のＩＰアドレスには、既存のＣ＆Ｃサーバ４００のアドレスリストに登録されたＩＰアドレスを適用してもよい。
【０１５９】
ＣＰＵ１０２０が実行する異常検知プログラム４０の情報漏洩検知アルゴリズムを図１４Ａ〜図１４Ｄに示す。
【０１６０】
ステップ２１００では、所定の時間間隔毎Δｔ毎にＣＰＵ１０２０が処理を開始する。次のステップ２１４０では、ＣＰＵ１０２０が、フロー統計情報ＤＢ５０と既知のアドレスリストを参照して、フロー統計レコード５１にＩＰアドレスが既知のＣ＆Ｃサーバがあるか否かを判定する。なお、既知のＣ＆Ｃサーバ４００のアドレスリストは、図示はしないが、予めハードディスク１０２２等に格納されているものとする。
【０１６１】
ステップ２１４０の判定結果がＮＯの場合はステップ２１０１へ進み、ＹＥＳの場合は図１４Ｃのステップ２１４１へ進む。
【０１６２】
既知のＣ＆Ｃサーバ４００のＩＰアドレスが存在しないステップ２１０１では、ＣＰＵ１０２０が、フロー統計ＤＢ５０のフロー統計レコード５１のうち、現在時刻ＮＯＷ−Δｔ≦フロー開始時刻６１＜現在時刻ＮＯＷ、を満たすフロー統計レコード５１を読み出して、イベント収集バッファ３０に格納する。
【０１６３】
次のステップ２１０２〜２１０４では、ＣＰＵ１０２０がシナリオテーブル２０を読み出し、シナリオエントリ番号ｉ＝１とし、シナリオテーブル２０からシナリオエントリ番号ｉ（ｉ＝１〜Ｉ）に対応するシナリオエントリ２１−ｉを読み出す。
【０１６４】
次のステップ２１０５では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうちフロー１のフロー条件２２が、ＳＩＰ＝ファイルサーバ２２０のＩＰアドレスと、フロー１の閾値条件２３がフロー１のＢｙｔｅ数＞機密情報ファイルのＢｙｔｅ数を満たすフロー統計レコード５１を検索する。
【０１６５】
次のステップ２１０６では、ＣＰＵ１０２０が上記検索条件（２１０５）を満たしたフロー統計レコード５１の全てに番号ｊ（ｊ＝１〜Ｊ）を付与してフロー１としてイベント収集バッファ３０に格納する。なお、番号Ｊは、フロー１が閾値を超えて発生したフロー統計レコード５１の数（最大値）である。
【０１６６】
次のステップ２１０７では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうちフロー２のフロー条件２４の、ＤＩＰ＝観測対象ネットワーク外のＩＰアドレスと、フロー２の閾値条件２５のフロー２のＢｙｔｅ数＞機密情報ファイルのＢｙｔｅ数を満たすフロー統計レコード５１を検索する。
【０１６７】
次のステップ２１０８では、ＣＰＵ１０２０が、上記検索条件（２１０５）を満たしたフロー統計レコード５１の全てに番号ｋ（ｋ＝１〜Ｋ）を付与してフロー２としてイベント収集バッファ３０に格納する。
【０１６８】
次に図１４Ｂのステップのステップ２１０９では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｊ＝１とする。
【０１６９】
次にステップ２１１０では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｊをフロー１とし、フロー１と２間のフロー関係条件２６が、フロー１のＤＩＰ＝フロー２のＳＩＰで、フロー１とフロー２間の時間関係条件２７が、フロー１のフロー開始時刻＜フロー２の開始時刻＜フロー１の開始時刻＋１時間、を満たすフロー統計レコード５１をフロー２から検索する。
【０１７０】
次のステップ２１１１では、ＣＰＵ１０２０が、上記検索条件（２１１０）を満たしたフロー統計レコード５１の全てに番号ｌ（ｌ＝１〜Ｌ）を付与して、フロー１のフロー統計レコード５１の番号ｊに対応するフロー２のフロー統計レコード５１の番号ｌとしてイベント収集バッファ３０に格納する。
【０１７１】
次のステップ２１１２では、ＣＰＵ１０２０が、フロー１のフロー統計レコード５１の番号ｊと、フロー２のフロー統計レコード５１の番号ｌの組み合わせでネットワークの異常を検知する。この処理は、前記実施例１の図７Ｂに示したステップ１９１２と同様である。
【０１７２】
次に、ステップ２１１３の判定では、ＣＰＵ１０２０が、番号ｊが最大値Ｊより小さいか否かを判定する。ステップ２１１３の判定結果がＹＥＳの場合には、次のステップ２１１４で、ＣＰＵ１０２０が番号ｊに１を加算して、ステップ２１１０に戻って上記処理を繰り返す。
【０１７３】
一方、ステップ２１１３の判定結果がＮＯの場合は、次のステップ２１１５で、ＣＰＵ１０２０は、シナリオエントリ２１の番号ｉが最大値Ｉより小さいか否かを判定する。ステップ２１１５の判定結果がＹＥＳの場合は、次のステップ２１１６に進んで、番号ｉに１を加算して、上記図１４Ａのステップ２１０４に戻って上記処理を繰り返す。一方、ステップ２１１５の判定結果がＮＯの場合は、全てのシナリオエントリ２１について処理が完了したので、異常検知プログラム４０を終了する。
【０１７４】
一方、図１４Ａのステップ２１４０の判定結果がＹＥＳの場合、ＣＰＵ１０２０は、図１４Ｃのステップ２１４１へ進み、Ｃ＆Ｃサーバ４００の番号ｍ＝１とする。
【０１７５】
次にステップ２１４２では、ＣＰＵ１０２０が、Ｃ＆Ｃサーバの番号ｍ（ｍ＝１〜Ｍ）宛の通信をフロー２として情報漏洩検知の判定を開始する。なお、Ｍはステップ２１４０で取得したＣ＆Ｃサーバ４００の総数（最大値）を示す。
【０１７６】
次のステップ２１２１では、ＣＰＵ１０２０が、フロー統計ＤＢ５０のフロー統計レコード５１のうち、現在時刻ＮＯＷ−Δｔ≦フロー開始時刻６１＜現在時刻ＮＯＷ、を満たすフロー統計レコード５１を取得してイベント収集バッファ３０に格納する。
【０１７７】
次のステップ２１２２〜２１２４では、ＣＰＵ１０２０が、シナリオテーブル２０を読み出し、シナリオエントリ番号ｉ＝１とし、シナリオエントリｉ（ｉ＝１〜Ｉ）に対応するシナリオエントリ２１をシナリオテーブル２０から読み出す。
【０１７８】
次のステップ２１２５では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうちフロー２のフロー条件２４が、ＤＩＰ＝Ｃ＆ＣサーバｍのＩＰアドレスと、フロー２の閾値条件２５がフロー２のＢｙｔｅ数＞機密情報ファイルのＢｙｔｅ数を満たすフロー統計レコード５１を検索する。
【０１７９】
次のステップ２１２６では、ＣＰＵ１０２０が、上記検索条件（２１２５）を満たすフロー統計レコード５１の全てについて番号ｋ（ｋ＝１〜Ｋ）を付与し、フロー２としてイベント収集バッファ３０に格納する。
【０１８０】
次のステップ２１２７では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうちフロー１のフロー条件２２が、ＳＩＰ＝ファイルサーバのＩＰアドレスで、フロー１の閾値条件２３が、フロー１のＢｙｔｅ数＞機密情報ファイルのＢｙｔｅ数を満たすフロー統計レコード５１を検索する。
【０１８１】
次のステップ２１２８では、ＣＰＵ１０２０が、上記検索条件（２１２７）を満足するフロー統計レコード５１の全てに番号ｊ（ｊ＝１〜Ｊ）を付与し、フロー１としてイベント収集バッファ３０に格納する。
【０１８２】
次に図１４Ｄのステップ２１２９では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｋ＝１とする。
【０１８３】
次のステップ２１３０では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｋをフロー２とし、フロー１とフロー２間のフロー関係条件２６が、フロー１のＤＩＰ＝フロー２のＳＩＰで、フロー１とフロー２間の時間関係条件２７が、フロー１のフロー開始時刻＜フロー２の開始時刻＜フロー１の開始時刻＋１時間、を満たすフロー統計レコード５１をフロー１から検索する。
【０１８４】
次のステップ２１３１では、ＣＰＵ１０２０が、上記検索条件（２１３０）を満たすフロー統計レコード５１の全てについて、番号ｌ（ｌ＝１〜Ｌ）を付与し、フロー２のフロー統計レコード５１の番号ｋに対応するフロー１のフロー統計レコード５１の番号ｌとしてイベント収集バッファ３０に格納する。
【０１８５】
次のステップ２１３２では、ＣＰＵ１０２０が、フロー１のフロー統計レコード５１の番号ｊと、フロー２のフロー統計レコード５１の番号ｌの組み合わせでネットワークの異常を検知する。この処理は、前記実施例１の図７Ｂに示したステップ１９１２と同様である。
【０１８６】
次に、ステップ２１３３の判定では、ＣＰＵ１０２０が、番号ｋが最大値Ｋより小さいか否かを判定する。ステップ２１３３の判定結果がＹＥＳの場合には、次のステップ２１３４で、ＣＰＵ１０２０が番号ｋに１を加算して、ステップ２１３０に戻って上記処理を繰り返す。
【０１８７】
一方、ステップ２１３３の判定結果がＮＯの場合は、次のステップ２１３５で、ＣＰＵ１０２０は、シナリオエントリ２１の番号ｉが最大値Ｉより小さいか否かを判定する。ステップ２１３５の判定結果がＹＥＳの場合は、次のステップ２１３６に進んで、番号ｉに１を加算して、上記図１４Ｃのステップ２１２４に戻って上記処理を繰り返す。一方、ステップ２１３５の判定結果がＮＯの場合は、次のステップ２１３７で、ＣＰＵ１０２０は、Ｃ＆Ｃサーバ４００の番号ｍが最大値Ｍより小さいか否かを判定する。
【０１８８】
ステップ２１３７の判定結果がＹＥＳの場合は、ＣＰＵ１０２０が、次のステップ２１３８に進んで、番号ｍに１を加算して、上記図１４Ｃのステップ２１４２へ戻って上記処理を繰り返す。一方、ステップ２１３７の判定結果がＮＯの場合は、ＣＰＵ１０２０が、図１４Ａのステップ２１０１へ進んで、上記処理を実行する。
【０１８９】
以上のように、実施例２のネットワーク異常検知装置１００は、既知のＣ＆Ｃサーバ４００のＩＰアドレスがフロー統計レコード５１に含まれていない場合には、前記実施例１と同様に、フロー１からフロー２の順序で異常の検知を行うアルゴリズム１（図７Ａ、図７Ｂ）を実行する。一方、既知のＣ＆Ｃサーバ４００のＩＰアドレスがフロー統計レコード５１に含まれている場合、ネットワーク異常検知装置１００は、フロー２からフロー１の順序で異常の検知を行うアルゴリズム２（図８Ａ、図８Ｂ）を実行した後にアルゴリズム１（図７Ａ、図７Ｂ）を実行してからを実施する。
【０１９０】
これにより、ネットワーク異常検知装置１００は、判定対象となるフロー統計レコード５１を削減して、複数のフローに関する事象を時系列の順で各々検知して、検知した各フローに関する事象が所定の順序で発生する情報漏洩を確実に検知することが可能となる。
【実施例３】
【０１９１】
本発明の実施例３として、本発明のネットワーク異常検知装置１００を用いてボットネットを検知する例を説明する。ボットネットの活動形態に関しては、前記非特許文献５や非特許文献６等に記載されるとおりである。
【０１９２】
図１５は、本発明のネットワーク異常検知装置１００を用いたボットネットの検知を実現するネットワーク異常検知システムの構成の一例を示すブロック図である。
【０１９３】
観測対象ネットワーク２００は、感染端末１（２１０−１）と感染端末２（２１０−２）、及び感染端末Ｎ（２１０−Ｎ）から構成されるボットネットと、ＤＮＳサーバ２２１と、ボットネットとＤＮＳサーバ２２１を接続するスイッチ２３０と、ルータ２４０から構成される。スイッチ２３０は、スイッチ２３０が中継する通信をミラーするミラーポート２３１を有する。
【０１９４】
また、ボットネットを操作する攻撃者が管理するＣ＆Ｃサーバ４００は、観測対象ネットワーク２００の外部から接続され、感染端末２１０に対する命令を発行して感染端末２１０を操作することができる。
【０１９５】
ボットネットが攻撃活動を開始する場合、攻撃命令を発行するＣ＆Ｃサーバ４００との通信を確立するため、まずボットネットに属する感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）がほぼ同時にＤＮＳサーバ２２１にアクセスしてＣ＆Ｃサーバ４００のＩＰアドレスの取得を試みる。
【０１９６】
次に、ＤＮＳサーバ２２１へのアクセスの結果、Ｃ＆Ｃサーバ４００のＩＰアドレスを取得したボットネットに属する感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）は、コールバック通信と呼ばれるＣ＆Ｃサーバ４００に攻撃命令を要求する通信を行なう。
【０１９７】
コールバック通信では、ボットネットに属する感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）がほぼ同時にＣ＆Ｃサーバ４００にアクセスする。従って、ボットネットからＤＮＳサーバ２２１に対する同時アクセスと、この後に発生するボットネットからＣ＆Ｃサーバ４００に対する同時アクセスをネットワーク異常検知装置１００で検知することが可能になると、ボットネットの存在が疑われる通信を検知することができる。
【０１９８】
図１６は、上述のボットネットによる攻撃活動が発生した場合の観測対象ネットワーク２００において時系列に発生するフローの一例を示すシーケンス図である。
【０１９９】
上述のボットネットによる攻撃活動が発生する場合、まず、感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）からＤＮＳサーバ２２１に対しＣ＆Ｃサーバ４００のドメインネームからＩＰアドレスの取得を要求する通信が、一斉に開始される（フロー１〜Ｎ）。
【０２００】
感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）がＤＮＳサーバ２２１へのアクセスの結果、Ｃ＆Ｃサーバ４００のＩＰアドレスを取得する。次に、感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）は、Ｃ＆Ｃサーバ４００に対するコールバック通信を一斉に開始する（フローＮ＋１〜２Ｎ）。
【０２０１】
ボットネットによる攻撃活動に関する上述のフローの時間関係に関する条件（２７）として、感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）のＮ個の異なる送信元ＩＰアドレス５４と、ＤＮＳサーバ２２１を宛先ＩＰアドレス５５とするフロー１〜Ｎが発生する。そして、フロー１〜Ｎの発生後に、感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）を送信元ＩＰアドレス５４とし、Ｃ＆Ｃサーバ４００を宛先ＩＰアドレス５５とするフローＮ＋１〜２Ｎが発生する、という事象が含まれる。
【０２０２】
またボットネットによる攻撃活動に関する上述のフローの関係に関する条件（２６）として、フロー１〜Ｎの送信元ＩＰアドレス５４と、フローＮ＋１〜２Ｎの送信元ＩＰアドレス５４のうちＮ個以上の送信元ＩＰアドレス５４が一致する、という事象が含まれる。ただし、異常検知の判定に本条件を含めると、ＣＰＵ１０２０の処理負荷が高くなる場合には、本条件を異常検知の判定から除外して、後述する送信元ＩＰアドレス５４の異なり数の条件で代用することもできる。
【０２０３】
フロー１〜Ｎのフロー条件（２２）としては、送信元ＩＰアドレス５４となる感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）のＩＰアドレスは未知であるから、任意の異なるＮ個のＩＰアドレスとなる。宛先ＩＰアドレス５５＝ＤＮＳサーバ２２１のＩＰアドレスとなる。
【０２０４】
フローＮ＋１〜２Ｎのフロー条件（２４）としては、送信元ＩＰアドレス５４となる感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）のＩＰアドレスは未知であるから、任意の異なるＮ個のＩＰアドレスとなる。宛先ＩＰアドレス５５となるＣ＆ＣサーバのＩＰアドレスは未知であるから、宛先ＩＰアドレス５５＝任意となる。
【０２０５】
なお、Ｃ＆Ｃサーバ４００のＩＰアドレスには既存のＣ＆Ｃサーバ４００のアドレスリストに登録されたＩＰアドレスを適用してもよい。既知のＣ＆Ｃサーバ４００のアドレスリストが存在する場合は、既知のＣ＆Ｃサーバ４００に関するフロー２のアドレスを特定することが可能となる。
【０２０６】
従って、ボットネット検知のアルゴリズムとして実施例１で説明した時間順序を逆に辿って判定するアルゴリズム２（図８Ａ、図８Ｂ）で判定する方が、アルゴリズム１（図７Ａ、図７Ｂ）より判定対象となるフロー統計レコード５０１を削減ことができる。
【０２０７】
これにより、ボットネット検知の負荷を低減して効率化することができ、ボットネットの検知を高速化することができる。
【０２０８】
本実施例３では、アルゴリズム１とアルゴリズム２を組み合わせたボットネット検知アルゴリズムとして、既存のＣ＆Ｃサーバ４００のアドレスリストに存在するアドレスに関してはアルゴリズム２で判定し、未知のＣ＆Ｃサーバを想定したボットネット検知はアルゴリズム１で判定する。
【０２０９】
これにより、ネットワーク異常検知装置１００は、未知のＣ＆Ｃサーバ４００と既知のＣ＆Ｃサーバ４００に対して効率よく対応することができる。ボットネット検知アルゴリズムについては、ボットネット検知のシナリオテーブル２０におけるシナリオエントリ２１について説明した後に詳述する。
【０２１０】
フロー１〜Ｎの閾値条件（２３）としては、フロー１〜Ｎの感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）の送信元ＩＰアドレス５４の個数を用いる。観測対象ネットワーク２００での感染端末２１０の個数は未知であるから、ボットネットによる攻撃活動として検知するための送信元ＩＰアドレス５４の個数をＮ設定し、送信元ＩＰアドレス５４の異なり数＞Ｎとする。なお、必要に応じて送信元ＩＰアドレス５４ではなく送信元ＭＡＣアドレスの数を用いて、送信元ＭＡＣアドレス数＞Ｎとしてもよい。
【０２１１】
閾値条件（２３）に対して比較対象とする検知パラメタである送信元ＩＰアドレス５４の異なり数の測定対象となる時間範囲は、ネットワーク異常検知装置１００の運用管理者の設定により、検知パラメタの対象とすべきフロー開始時刻６１の時間範囲を調整することで変更可能とする。
【０２１２】
また、閾値が低すぎて正常なフローをボットネットによる攻撃活動として誤検知してしまう場合には、閾値を上げて調整することにより誤検知を低減することができる。逆に閾値が高すぎてボットネット検知できない場合には、閾値を下げて調整することができる。ボットネット検知に適切な閾値を設定するためには、ネットワーク異常検知装置１００の運用開始時に、観測対象ネットワーク２００で異常の発生していない正常状態における検知パラメタである送信元ＩＰアドレス５４の異なり数を監視して、ネットワーク異常検知装置１００の運用管理者が適切な閾値を検討して設定する必要がある。
【０２１３】
これらの条件を後述するシナリオテーブル２０に設定することで、ＣＰＵ１０２０がシナリオテーブル２０を参照し、フロー統計ＤＢ５０から読み出してイベント収集バッファ３０に格納するフロー統計レコード５１のうち、シナリオテーブル２０の設定条件に一致するフロー統計レコード５１について異常の有無を判定することで、ボットネットによる攻撃活動を検知することができる。
【０２１４】
図１７Ａは、ボットネットからＤＮＳサーバ２２１への帯域（送信元ＩＰアドレス５４の異なり数）と時間の関係を示すグラフである。図１７Ｂは、ボットネットからＣ＆Ｃサーバ４００への帯域（送信元ＩＰアドレス５４の異なり数）と時間の関係を示すグラフである。
【０２１５】
図示の例では、フロー１〜Ｎ、フローＮ＋１〜２Ｎの送信元ＩＰアドレスの異なり数の時間変動、即ちＤＮＳサーバ２２１宛フローの送信元ＩＰアドレスの異なり数とＣ＆Ｃサーバ４００宛フローの送信元ＩＰアドレスの異なり数の例を示す。
【０２１６】
ＤＮＳサーバ２２１宛フローとＣ＆Ｃサーバ４００宛フローにおけるピークは、いずれも感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）の端末数に相当するピークであり、ＤＮＳサーバ２２１宛フローのピークの方がＣ＆Ｃサーバ４００宛フローのピークより時間的に先に発生する。
【０２１７】
図１８は、ボットネット検知におけるシナリオテーブル２０におけるシナリオエントリ２１の例を示す。シナリオエントリ２１は、フロー１〜Ｎのフロー条件２２としてＳＩＰ＝ｄ．ｃ．（任意）、ＤＩＰ＝ＤＮＳサーバ２２１のＩＰアドレスの値が設定される。フロー１〜Ｎの閾値条件２３として、送信元ＩＰアドレスの異なり数＞１００、が設定される。
【０２１８】
フローＮ＋１〜２Ｎのフロー条件２４としてＳＩＰ＝任意と、ＤＩＰ＝観測対象ネットワーク２００外のＩＰアドレスが設定される。フローＮ＋１〜２Ｎの閾値条件２５として、送信元ＩＰアドレスの異なり数＞１００が設定される。
【０２１９】
フロー１〜ＮとＮ＋１〜２Ｎ間のフロー関係条件２６として、フロー１〜Ｎの送信元ＩＰアドレスとフローＮ＋１〜２Ｎの送信元ＩＰアドレスのうちＮ個以上の送信元ＩＰアドレスが一致することが設定される。
【０２２０】
フロー１〜ＮとフローＮ＋１〜２Ｎ間の時間関係条件２７として、フロー１〜Ｎのうち最初のフロー開始時刻＜フローＮ〜２Ｎのうち、最初のフロー開始時刻＜フロー１〜Ｎのうち最初のフロー開始時刻＋１時間と設定される。
【０２２１】
これにより、ネットワーク異常検知装置１００では、感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）からＤＮＳサーバ２２１宛に送信元ＩＰアドレスの異なり数＞１００のフロー１〜Ｎが発生し、フロー１〜Ｎの発生後１時間以内に感染端末１（２１０−１）〜感染端末Ｎ（２１０−Ｎ）を送信元ＩＰアドレスとして観測対象ネットワーク２００外のＩＰアドレス宛に発生したフローＮ＋１〜２Ｎを検知することが可能となり、ボットネットによる攻撃活動の被疑となる通信を検知することができる。
【０２２２】
ただし、異常検知の判定にフロー１〜ＮとＮ＋１〜２Ｎ間のフロー関係条件２６を含めるとＣＰＵ１０２０の処理負荷が高くなる場合には、フロー１〜ＮとＮ＋１〜２Ｎ間のフロー関係条件２６を異常検知の判定から除外して、フロー１〜Ｎの閾値条件２３とフローＮ＋１〜２Ｎの閾値条件２５で代用することもできる。
【０２２３】
なお、フローＮ＋１〜２ＮのＤＩＰとなる観測対象ネットワーク２００外のＩＰアドレスには、既存のＣ＆Ｃサーバ４００のアドレスリストに登録されたＩＰアドレスを適用してもよい。
【０２２４】
ＣＰＵ１０２０が実行する異常検知プログラム４０のボットネット検知アルゴリズムを図１９Ａ〜図１９Ｄに示す。
【０２２５】
ステップ２２００では、ＣＰＵ１０２０が、所定の時間間隔毎Δｔ毎に判定開始する。
【０２２６】
次のステップ２２４０では、ＣＰＵ１０２０が、フロー統計情報ＤＢ５０と既知のアドレスリストを参照して、フロー統計レコード５１にＩＰアドレスが既知のＣ＆Ｃサーバがあるか否か判定する。なお、既知のＣ＆Ｃサーバ４００のアドレスリストは、図示はしないが、予めハードディスク１０２２に格納されているものとする。
【０２２７】
ステップ２２４０の判定結果がＮＯの場合は、ステップ２２０１へ進み、ＹＥＳの場合は図１９Ｃのステップ２２４１へ進む。
【０２２８】
既知のＣ＆Ｃサーバ４００のＩＰアドレスが存在しないステップ２２０１では、ＣＰＵ１０２０が、フロー統計ＤＢ５０のフロー統計レコード５１のうち、現在時刻ＮＯＷ−Δｔ≦フロー開始時刻６１＜現在時刻ＮＯＷ、を満たすフロー統計レコード５１を読み出してイベント収集バッファ３０に格納する。
【０２２９】
次のステップ２２０２〜２２０４では、シナリオテーブル２０を読み出し、シナリオエントリ番号ｉ＝１とし、シナリオエントリ番号ｉに対応するエントリをシナリオテーブル２０から読み出す。
【０２３０】
次のステップ２２０５では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうち、フロー１〜Ｎのフロー条件２２が、ＤＩＰ＝ＤＮＳサーバのＩＰアドレスと、フロー１〜Ｎの閾値条件２３が、フロー１〜Ｎの送信元ＩＰアドレス異なり数＞１００、を満たすフロー統計レコード５１を検索する。
【０２３１】
次のステップ２２０６では、ＣＰＵ１０２０が、上記検索条件（２２０５）を満たすフロー統計レコード５１の全てに番号ｊ（ｊ＝１〜Ｊ）を付与し、フロー１〜Ｎとしてイベント収集バッファ３０に格納する。
【０２３２】
次のステップ２２０７では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうち、フローＮ＋１〜２Ｎのフロー条件２４が、ＤＩＰ＝観測対象ネットワーク２００外のＩＰアドレスと、フローＮ＋１〜２Ｎの閾値条件２５がフローＮ＋１〜２Ｎの送信元ＩＰアドレス異なり数＞１００、を満たすフロー統計レコード５１を検索する。
【０２３３】
次のステップ２２０８では、ＣＰＵ１０２０が、上記検索条件（２２０７）を満たすフロー統計レコード５１の全てについて番号ｋ（ｋ＝１〜Ｋ）を付与し、フローＮ＋１〜２Ｎとしてイベント収集バッファ３０に格納する。
【０２３４】
次に図１９Ｂのステップ２２０９では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｊ＝１とする。
【０２３５】
次のステップ２２１０では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｊを、フロー１〜Ｎとし、フロー１〜ＮとフローＮ＋１〜２Ｎ間のフロー関係条件２６が、フロー１〜ＮのＳＩＰ＝フローＮ＋１〜２ＮのＳＩＰと、フロー１〜ＮとフローＮ＋１〜２Ｎ間の時間関係条件２７が、フロー１〜Ｎのフロー開始時刻＜フローＮ＋１〜２Ｎの開始時刻＜フロー１〜Ｎの開始時刻＋１時間を満たすフロー統計レコード５１をフローＮ＋１〜２Ｎから検索する。
【０２３６】
次のステップ２２１１では、ＣＰＵ１０２０が、上記検索条件（２２１０）を満たすフロー統計レコード５１の全てについて、番号ｌ（ｌ＝１〜Ｌ）を付与し、フロー１〜Ｎのフロー統計レコード５１の番号ｊに対応するフローＮ＋１〜２Ｎのフロー統計レコード５１の番号ｌとしてイベント収集バッファ３０に格納する。
【０２３７】
次のステップ２２１２では、ＣＰＵ１０２０が、フロー１〜Ｎのフロー統計レコード５１の番号ｊと、フローＮ＋１〜２Ｎのフロー統計レコード５１の番号ｌの組み合わせでネットワークの異常を検知する。この処理は、前記実施例１の図７Ｂに示したステップ１９１２と同様である。
【０２３８】
次に、ステップ２２１３の判定では、ＣＰＵ１０２０が、番号ｊが最大値Ｊより小さいか否かを判定する。ステップ２２１３の判定結果がＹＥＳの場合には、次のステップ２２１４で、ＣＰＵ１０２０が番号ｊに１を加算して、ステップ２２１０に戻って上記処理を繰り返す。
【０２３９】
一方、ステップ２２１３の判定結果がＮＯの場合は、次のステップ２２１５で、ＣＰＵ１０２０は、シナリオエントリ２１の番号ｉがＩより小さいか否かを判定する。ステップ２２１５の判定結果がＹＥＳの場合は、次のステップ２２１６に進んで、番号ｉに１を加算して、上記図１９Ａのステップ２２０４に戻って上記処理を繰り返す。一方、ステップ２２１５の判定結果がＮＯの場合は、全てのシナリオエントリ２１について処理が完了したので、異常検知プログラム４０を終了する。
【０２４０】
一方、図１９Ａのステップ２２４０の判定結果がＹＥＳの場合、ＣＰＵ１０２０は、図１９Ｃのステップ２２４１へ進み、Ｃ＆Ｃサーバ４００の番号ｍ＝１とする。
【０２４１】
次のＹＥＳ２２４２では、ＣＰＵ１０２０が、Ｃ＆Ｃサーバ４００（番号ｍ（ｍ＝１〜Ｍ））宛の通信をフロー２としてボットネット検知の判定を開始する。
【０２４２】
次のステップ２２２１では、ＣＰＵ１０２０が、フロー統計ＤＢ５０のフロー統計レコード５１のうち、現在時刻ＮＯＷ−Δｔ≦フロー開始時刻６１＜現在時刻ＮＯＷ、を満たすフロー統計レコード５１を読み出してイベント収集バッファ３０に格納する。
【０２４３】
次のステップ２２２２〜２２２４では、ＣＰＵ１０２０が、シナリオテーブル２０を読み出して、シナリオエントリ番号ｉ＝１とし、シナリオエントリの番号ｉ（ｉ＝１〜Ｉ）に対応するシナリオエントリ２１を読み出す。
【０２４４】
次のステップ２２２５では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうち、フローＮ＋１〜２Ｎのフロー条件２４がＤＩＰ＝Ｃ＆ＣサーバｍのＩＰアドレスと、フローＮ＋１〜２Ｎの閾値条件２５が、フローＮ＋１〜２Ｎの送信元ＩＰアドレス異なり数＞１００、を満たすフロー統計レコード５１を検索する。
【０２４５】
次のステップ２２２６では、ＣＰＵ１０２０が、上記検索条件（２２２５）を満足するフロー統計レコード５１の全てについて番号ｋ（ｋ＝１〜Ｋ）を付与し、フローＮ＋１〜２Ｎとしてイベント収集バッファ３０に格納する。
【０２４６】
次のステップ２２２７では、ＣＰＵ１０２０が、イベント収集バッファ３０に格納したフロー統計レコード５１のうち、フロー１〜Ｎのフロー条件２２がＤＩＰ＝ＤＮＳサーバのＩＰアドレスと、フロー１〜Ｎの閾値条件２３がフロー１〜Ｎの送信元ＩＰアドレス異なり数＞１００、を満たすフロー統計レコード５１を検索する。
【０２４７】
次のステップ２２２８では、ＣＰＵ１０２０が、上記検索条件（２２２７）を満たすフロー統計レコード５１の全てについて番号ｊ（ｊ＝１〜Ｊ）を付与し、フロー１〜Ｎとしてイベント収集バッファ３０に格納する。
【０２４８】
次に図１９Ｄのステップ２２２９では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｋ＝１とする。
【０２４９】
次のステップ２２３０では、ＣＰＵ１０２０が、フロー統計レコード５１の番号ｋをフローＮ＋１〜２Ｎとし、フロー１〜ＮとＮ＋１〜２Ｎ間のフロー関係条件２６が、フロー１〜ＮのＳＩＰ＝フローＮ＋１〜２ＮのＳＩＰと、フロー１〜ＮとフローＮ＋１〜２Ｎ間の時間関係条件２７が、フロー１〜Ｎのフロー開始時刻＜フローＮ＋１〜２Ｎの開始時刻＜フロー１〜Ｎの開始時刻＋１時間、を満たすフロー統計レコード５１をフロー１〜Ｎから検索する。
【０２５０】
次のステップ２２３１では、ＣＰＵ１０２０が、上記検索条件（２２３０）を満たすフロー統計レコード５１の全てについて番号ｌ（ｌ＝１〜Ｌ）を付与し、フローＮ＋１〜２Ｎのフロー統計レコード５１の番号ｋに対応するフロー１〜Ｎのフロー統計レコード５１の番号ｌとしてイベント収集バッファ３０に格納する。
【０２５１】
次のステップ２２３２では、ＣＰＵ１０２０が、フロー１〜Ｎのフロー統計レコード５１の番号ｊと、フローＮ＋１〜２Ｎのフロー統計レコード５１の番号ｌの組み合わせでネットワークの異常を検知する。この処理は、前記実施例１の図７Ｂに示したステップ１９１２と同様である。
【０２５２】
次のステップ２２３３では、ＣＰＵ１０２０が、番号ｋが最大値Ｋより小さいか否かを判定する。ステップ２２３３の判定結果がＹＥＳの場合は、次のステップ２２３４で、ＣＰＵ１０２０が、番号ｋに１を加算して、上記ステップ２２３０に戻って上記処理を繰り返す。
【０２５３】
一方、ステップ２２３３の結果がＮＯの場合は、ステップ２２３５で、ＣＰＵ１０２０は、シナリオエントリ２１の番号ｉが最大値Ｉより小さいか否かを判定する。ステップ２２３５の結果がＹＥＳの場合は、ステップ２２３６で、ＣＰＵ１０２０が、番号ｉに１を加算して、図１９Ｃのステップ２２２４に戻って上記処理を繰り返す。
【０２５４】
一方、ステップ２２３５の結果がＮＯの場合は、ステップ２２３７で、ＣＰＵ１０２０が、Ｃ＆Ｃサーバ４００の番号ｍがＭより小さいか否かを判定する。ステップ２２３７の判定結果がＹＥＳの場合は、ステップ２２３８では、ＣＰＵ１０２０が、番号ｍに１を加算して、図１９Ｃのステップ２２４２に戻って上記処理を繰り返す。
【０２５５】
一方、ステップ２２３７の判定結果がＮＯの場合は、上記図１９Ａのステップ処理２２０１に進み、ＣＰＵ１０２０は上記処理を実行する。
【０２５６】
以上のように、実施例３のネットワーク異常検知装置１００は、既知のＣ＆Ｃサーバ４００のＩＰアドレスがフロー統計レコード５１に含まれていない場合には、前記実施例１と同様に、フロー１からフロー２の順序で異常の検知を行うアルゴリズム１（図７Ａ、図７Ｂ）を実行する。一方、既知のＣ＆Ｃサーバ４００のＩＰアドレスがフロー統計レコード５１に含まれている場合、ネットワーク異常検知装置１００は、フロー２からフロー１の順序で異常の検知を行うアルゴリズム２（図８Ａ、図８Ｂ）を実行した後にアルゴリズム１（図７Ａ、図７Ｂ）を実行してからを実施する。
【０２５７】
これにより、ネットワーク異常検知装置１００は、判定対象となるフロー統計レコード５１を削減して、複数のフローに関する事象を時系列の順で各々検知して、検知した各フローに関する事象が所定の順序で発生するボットネットの活動報を確実に検知することが可能となる。
【０２５８】
＜まとめ＞
【０２５９】
以上のように、上記実施例１〜３のネットワーク異常検知装置（１００）は、プロセッサ（１０２０）とメモリ（１０２１）を有し、受信したフロー統計情報に基づいて観測対象ネットワーク（２００）の異常を検知するネットワーク異常検知装置（１００）であって、前記観測対象ネットワークのパケットのヘッダ情報から集計されたフロー統計情報を受信して、フロー統計情報蓄積部（５０）に収集する統計情報収集部（１０１）と、複数のフローに関する事象の時系列的な順序関係が予め設定されたシナリオ（２１）を含むシナリオ情報（２０）と、フロー統計情報蓄積部（５０）から所定の期間のフロー統計情報（５１）を取得して、前記シナリオ情報（２０）のうち前記シナリオ（２１）の事象と一致するフロー統計情報（５１）の有無に基づいて、前記観測対象ネットワーク（２００）の異常の有無を判定する異常検知部（１０２）と、を有する。
【０２６０】
これにより、ネットワーク異常検知装置１００が、複数のフローに関する事象を時系列の順で各々検知して、検知した各フローに関する事象が所定の順序で発生する観測対象ネットワーク２００の異常（サイバーキルチェーン）または異常の兆候を確実に検知することが可能となる。
【０２６１】
また、ネットワーク異常検知装置（１００）のであって、前記シナリオ（２１）は、複数の事象に関するフロー条件（２２、２４）と、複数の前記事象のそれぞれについて予め設定された閾値条件（２３、２５）と、複数の前記事象の順序関係（２６、２７）を含み、前記フロー条件（２２、２４）は、送信元（５４）または宛先（５５）の情報を含み、前記閾値条件（２３、２５）は、前記フロー条件が発生した数量に関する閾値を含み、前記順序関係（２６、２７）は、複数の事象の時系列的な前後関係を含む。
【０２６２】
これにより、ネットワーク異常検知装置１００は、サイバーキルチェーンの、偵察、武器化、デリバリエクスプロイト、インストール、Ｃ＆Ｃ、目的実行の各手順をシナリオエントリ２１で定義しておくことで、観測対象ネットワーク２００の異常または異常の予兆を検知することが可能となる。
【０２６３】
また、前記異常検知部（１０２）は、前記シナリオ情報（２０）を設定するユーザインタフェースを提供する。これにより、ネットワーク異常検知装置１００の利用者は、新たなサイバーキルチェーンの手順や特徴を随時、追加または修正することが可能となる。
【０２６４】
また、前記異常検知部（１０２）は、前記シナリオ（２１）の事象と一致するフロー統計情報（５１）があった場合には、当該フロー統計情報（５１）に関する情報を異常が発生したログ情報（７１）として出力する。これにより、ネットワーク異常検知装置１００は、観測対象ネットワーク２００の異常に関する情報をＳＹＳＬＯＧ７１として出力することにより、可視化サーバ１２０等で異常の内容を表示することが可能となる。
【０２６５】
また、前記フロー統計情報は、ＮｅｔＦｌｏｗを用いてパケットのヘッダ情報から生成された情報である。これにより、ネットワーク異常検知装置１００は、既存のネットワーク装置から収集した情報に基づいて、観測対象ネットワーク２００の異常または異常の兆候を検知することが可能となる。
【０２６６】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に記載したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加、削除、又は置換のいずれもが、単独で、又は組み合わせても適用可能である。
【０２６７】
また、上記の各構成、機能、処理部、及び処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、及び機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に置くことができる。
【０２６８】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【０２６９】
２０  シナリオテーブル
２１  シナリオエントリ
３０  イベント収集バッファ
４０  異常検知プログラム
５０  フロー統計情報データベース
７０  ＳＹＳＬＯＧデータベース
１００  ネットワーク異常検知装置
１０１  パケット転送処理部
１０２  ネットワーク異常検知部
１３０  表示端末
１５０  入力端末
２００  観測対象ネットワーク
１０１０  ＣＰＵ
１０１１  メモリ
１０１２  パケット送受信部
１０２０  ＣＰＵ
１０２１  メモリ
１０２２  ハードディスク
【図１】
2020092332.tif 000003
【図２】
2020092332.tif 000004
【図３】
2020092332.tif 000005
【図４】
2020092332.tif 000006
【図５】
2020092332.tif 000007
【図６】
2020092332.tif 000008
【図７Ａ】
2020092332.tif 000009
【図７Ｂ】
2020092332.tif 000010
【図８Ａ】
2020092332.tif 000011
【図８Ｂ】
2020092332.tif 000012
【図９】
2020092332.tif 000013
【図１０】
2020092332.tif 000014
【図１１】
2020092332.tif 000015
【図１２Ａ】
2020092332.tif 000016
【図１２Ｂ】
2020092332.tif 000017
【図１３】
2020092332.tif 000018
【図１４Ａ】
2020092332.tif 000019
【図１４Ｂ】
2020092332.tif 000020
【図１４Ｃ】
2020092332.tif 000021
【図１４Ｄ】
2020092332.tif 000022
【図１５】
2020092332.tif 000023
【図１６】
2020092332.tif 000024
【図１７Ａ】
2020092332.tif 000025
【図１７Ｂ】
2020092332.tif 000026
【図１８】
2020092332.tif 000027
【図１９Ａ】
2020092332.tif 000028
【図１９Ｂ】
2020092332.tif 000029
【図１９Ｃ】
2020092332.tif 000030
【図１９Ｄ】
2020092332.tif 000031
【図２０】
2020092332.tif 000032