(57)【要約】【課題】誤検知の少ない異常検知を実現する。【解決手段】パケットを処理するネットワーク装置であって、所定の手順で処理を実行することによって以下の各機能部を実現する演算デバイスと、前記演算デバイスに接続された記憶デバイスと、パケットを送受信する装置と接続されるインターフェースとを備え、前記装置からパケットを受信する受信処理部と、前記受信したパケットの特徴量を所定の学習アルゴリズムによって学習し、前記パケットが正常であるか異常であるかを判定するためのパラメータを生成する推定部と、前記推定部が生成したパラメータを用いて、前記パケットが正常であるか異常であるかを判定する監視部と、前記監視部が異常であると判定したパケットについて、前記推定部の学習によって前記パラメータを更新するか否かを設定する検証指示部とを備えることを特徴とするネットワーク装置。【選択図】図４
2020061667.tif 000002
【特許請求の範囲】
【請求項１】
パケットを処理するネットワーク装置であって、
所定の手順で処理を実行することによって以下の各機能部を実現する演算デバイスと、前記演算デバイスに接続された記憶デバイスと、パケットを送受信する装置と接続されるインターフェースとを備え、
前記装置からパケットを受信する受信処理部と、
前記受信したパケットの特徴量を所定の学習アルゴリズムによって学習し、前記パケットが正常であるか異常であるかを判定するためのパラメータを生成する推定部と、
前記推定部が生成したパラメータを用いて、前記パケットが正常であるか異常であるかを判定する監視部と、
前記監視部が異常であると判定したパケットについて、前記推定部の学習によって前記パラメータを更新するか否かを設定する検証指示部とを備えることを特徴とするネットワーク装置。
【請求項２】
請求項１に記載のネットワーク装置であって、
前記監視部が異常であると判定したパケットについて、前記検証指示部によって前記パラメータを更新することが選択された場合、前記推定部は、学習に使用したパケットを受信後、異常であると判定されたパケットの間のパケットを学習に使用しないことを特徴とするネットワーク装置。
【請求項３】
請求項１に記載のネットワーク装置であって、
前記推定部は、前記受信したパケットに含まれる変数の位置を推定して、前記パケットの特徴量を学習することを特徴とするネットワーク装置。
【請求項４】
請求項１に記載のネットワーク装置であって、
前記推定部は、前記受信したパケットに含まれる変数の型を推定して、前記パケットの特徴量を学習することを特徴とするネットワーク装置。
【請求項５】
請求項４に記載のネットワーク装置であって、
前記推定部は、複数のパケットが同一の位置に同一の型の変数を含んでいる場合に、当該パケットの変数の型を推定して、前記パケットの特徴量を学習することを特徴とするネットワーク装置。
【請求項６】
請求項１に記載のネットワーク装置であって、
前記監視部が異常であると判定したパケットを、異常であると判定されたパラメータごとに分類し、前記分類されたパケット同士が時系列において所定の関係を満たす場合に、同一の事象に起因すると判定する識別部を備えることを特徴とするネットワーク装置。
【請求項７】
請求項１に記載のネットワーク装置であって、
前記監視部が異常であると判定したパケットについて、異常の情報と、異常と判定されたパケットのタイムスタンプと、前記パラメータを更新するか否かを指示するインターフェースとを含む表示画面を生成することを特徴とするネットワーク装置。
【請求項８】
ネットワーク装置がパケットを処理する方法であって、
前記ネットワーク装置は、所定の手順で処理を実行する演算デバイスと、前記演算デバイスに接続された記憶デバイスと、パケットを送受信する装置と接続されるインターフェースとを有し、
前記方法は、
前記演算デバイスが、前記装置からパケットを受信し、
前記演算デバイスが、前記受信したパケットの特徴量を所定の学習アルゴリズムによって学習し、前記パケットが正常であるか異常であるかを判定するためのパラメータを生成し、
前記演算デバイスが、前記生成されたパラメータを用いて、前記パケットが正常であるか異常であるかを判定し、
前記演算デバイスが、前記異常であると判定されたパケットについて、学習によって前記パラメータを更新するか否かを設定することを特徴とする方法。
【請求項９】
請求項８に記載の方法であって、
前記演算デバイスは、前記異常であると判定されたパケットについて、前記パラメータを更新することが選択された場合、前記学習に使用したパケットを取得した期間から異常であると判定されたパケットの間のパケットを学習に使用しないことを特徴とする方法。
【請求項１０】
請求項８に記載の方法であって、
前記演算デバイスは、前記受信したパケットに含まれる変数の位置を推定して、前記パケットの特徴量を学習することを特徴とする方法。
【請求項１１】
請求項８に記載の方法であって、
前記演算デバイスは、前記受信したパケットに含まれる変数の型を推定して、前記パケットの特徴量を学習することを特徴とする方法。
【請求項１２】
請求項１１に記載の方法であって、
前記演算デバイスは、複数のパケットが同一の位置に同一の型の変数を含んでいる場合に、当該パケットの変数の型を推定して、前記パケットの特徴量を学習することを特徴とする方法。
【請求項１３】
請求項８に記載の方法であって、
前記演算デバイスは、前記異常であると判定されたパケットを、異常であると判定されたパラメータごとに分類し、前記分類されたパケット同士が時系列において所定の関係を満たす場合に、同一の事象に起因すると判定することを特徴とする方法。
【請求項１４】
請求項８に記載の方法であって、
前記演算デバイスは、異常であると判定されたパケットについて、異常の情報と、異常と判定されたパケットのタイムスタンプと、前記パラメータを更新するか否かを指示するインターフェースとを含む表示画面を生成することを特徴とする方法。
【請求項１５】
ネットワーク装置がパケットを処理するためのプログラムであって、
前記ネットワーク装置は、所定の手順で処理を実行する演算デバイスと、前記演算デバイスに接続された記憶デバイスと、パケットを送受信する装置と接続されるインターフェースとを有し、
前記プログラムは、
前記装置からパケットを受信する手順と、
前記受信したパケットの特徴量を所定の学習アルゴリズムによって学習し、前記パケットが正常であるか異常であるかを判定するためのパラメータを生成する手順と、
前記生成されたパラメータを用いて、前記パケットが正常であるか異常であるかを判定する手順と、
前記異常であると判定されたパケットについて、学習によって前記パラメータを更新するか否かを設定する手順とを、前記演算デバイスに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク装置に関する。
【背景技術】
【０００２】
インフラの制御システムにおいてセキュリティ対策を行うにあたり、制御システムの動作が変わる可能性があることから、ネットワークを構成する装置のプログラム変更が困難である。そのため、制御ネットワーク上のパケットを監視することによるセキュリティ対策が必要となる。
【０００３】
このため、制御ネットワークのパケットを監視することによって、不審な通信や乗っ取りプロセスの発生を検出する技術が従来から取り組まれている。しかしながら、制御システムにおける正しい通信を用いてサイバー攻撃が行われた場合、従来技術では攻撃を検出できない。正しい通信による攻撃を防ぐためには、業務としての通信パターンを識別し、正しい通信における不正な業務を検出することが重要である。
【０００４】
本技術分野の背景技術として、特開２０１８−７３２４７（特許文献１）、特開２００７−２３５８７９（特許文献２）及び特開２００４−３１２０８３（特許文献３）がある。
【０００５】
特許文献１（特開２０１８−７３２４７号公報）には、「制御対象機器から該制御対象機器の状態を示す通知を受信する受信ステップと、制御装置から前記制御対象機器へ送信された制御コマンドを受信する監視ステップと、前記受信ステップによって受信された前記制御対象機器の状態に応じて、前記監視ステップによって受信された制御コマンドの通過を許可するか遮断するかを判定する判定ステップとをコンピュータに実行させること」が開示されている（請求項７参照）。
【０００６】
特許文献２（特開２００７−２３５８７９号公報）には、「ネットワークからデータを取得して上記ネットワークの通常状態を学習し、上記通常状態から外れる状態を上記ネットワークの異常として検知する異常検知システムと通信する学習能力評価装置において、上記ネットワークからデータを取得して記憶装置に記憶するデータ取得部と、上記データ取得部が取得したデータから上記異常検知システムの学習能力の評価項目に対する検知用データと学習用データとの組を評価用データとして抽出して記憶装置に記憶する評価用データ抽出部と、上記評価用データ抽出部が抽出した評価用データを上記異常検知システムへ通信装置によって送信する評価用データ送信部と、上記評価用データ送信部が評価用データを送信した場合に、上記異常検知システムにより検知された結果である検知結果情報を取得して記憶装置に記憶する検知結果情報取得部と、上記検知結果情報取得部が取得した検知結果情報に基づいて上記評価項目を評価するためのパラメータを処理装置によって算出する分析用データ評価部とを備えることを特徴とする学習能力評価装置」が開示されている（請求項１参照）。
【０００７】
特許文献３（特開２００４−３１２０８３号公報）には、「ネットワーク上を伝送するトラヒックデータを入力し、学習データ作成装置により作成された学習データと前記トラヒックデータから変数を選択する変数選択手段と、該選択された変数をニューラルネットや決定木等の解析アルゴリズムを用いて解析を行い、パターンを生成する処理手段と、該生成されたパターンを用いて前記解析結果を評価する評価手段とを有し、前記変数選択手段および処理手段、評価手段における処理を１回以上行うことにより、侵入の検知に有効なパターンを生成して異常なトラヒックデータを検知する侵入検知システム」が開示されている（要約参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１８−７３２４７号公報
【特許文献２】特開２００７−２３５８７９号公報
【特許文献３】特開２００４−３１２０８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１に記載の方法では、制御対象機器の状態に応じた許可ルールの作成に多くの工数を要する課題がある。また、詳細仕様が開示されていないシステムへの適用が困難である。
【００１０】
特許文献２に記載の方法では、検知精度の収束の速さなどの学習能力を評価するが、学習量が多すぎる、いわゆる過学習によって検知精度が低下する場合が考慮されていない。
【００１１】
特許文献３に記載の方法では、トラヒックデータのフォーマットが不明の場合に変数を識別することが考慮されていない。
【００１２】
このため、詳細仕様が開示されていなかったり、仕様書が散逸しているような制御システムにも実用的なセキュリティ監視機能を導入するためには、詳細仕様を前提とせず、誤検知が少ない異常検知を実現する必要があるが、前述したように、既存の技術では解決されていない。
【課題を解決するための手段】
【００１３】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、  パケットを処理するネットワーク装置であって、所定の手順で処理を実行することによって以下の各機能部を実現する演算デバイスと、前記演算デバイスに接続された記憶デバイスと、パケットを送受信する装置と接続されるインターフェースとを備え、前記装置からパケットを受信する受信処理部と、前記受信したパケットの特徴量を所定の学習アルゴリズムによって学習し、前記パケットが正常であるか異常であるかを判定するためのパラメータを生成する推定部と、前記推定部が生成したパラメータを用いて、前記パケットが正常であるか異常であるかを判定する監視部と、前記監視部が異常であると判定したパケットについて、前記推定部の学習によって前記パラメータを更新するか否かを設定する検証指示部とを備えることを特徴とする。
【発明の効果】
【００１４】
本発明の一態様によれば、詳細仕様を前提としない監視方式によって誤検知の少ない異常検知を実現できる。前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
【図面の簡単な説明】
【００１５】
【図１】実施例１のネットワークシステムの構成の一例を示す説明図である。
【図２】実施例１の分析装置のハードウェア構成及びプログラム構成の一例を示すブロック図である。
【図３】実施例１の分析装置が受信するミラーパケットのフォーマットの一例を示す図である。
【図４】実施例１の分析装置及び転送装置の各機能部の関係を示すブロック図である。
【図５】実施例１の通信状態管理部が保持するデータ構造の一例を示す図である。
【図６】実施例１の学習結果記憶部が保持するデータ構造の一例を示す図である。
【図７】実施例１の型ルール記憶部が保持するデータ構造の一例を示す図である。
【図８】実施例１の受信処理部が実行する処理の詳細を示すフローチャートである。
【図９】実施例１のグループ化部が実行する処理の詳細を示すフローチャートである。
【図１０】実施例１の型推定部が実行する処理の詳細を示すフローチャートである。
【図１１】実施例１の監視部が実行する処理の詳細を示すフローチャートである。
【図１２】実施例１の検証指示部が実行する処理の詳細を示すフローチャートである。
【図１３】実施例１の異常識別部が実行する処理の詳細を示すフローチャートである。
【図１４】実施例１の監視部が実行する処理の一部（ステップＳ１０１１）の詳細を示すフローチャートである。
【図１５】実施例１の型推定部の動作を示す図である。
【図１６】実施例１の型ルール記憶部のポインタが示す処理の一例を示すフローチャートである。
【図１７】実施例１の型ルール記憶部のポインタが示す処理の一例を示すフローチャートである。
【図１８】実施例１の異常識別部が異常の情報を分類する際のデータ構造の一例を示す図である。
【図１９】実施例１の異常識別部が出力する画面の例を示す図である。
【図２０】実施例２のネットワークシステムの構成の一例を示す説明図である。
【図２１】実施例２の学習装置のハードウェア構成及びプログラム構成の一例を示すブロック図である。
【図２２】実施例２の監視装置のハードウェア構成及びプログラム構成の一例を示すブロック図である。
【図２３】実施例２の学習装置、監視装置及び転送装置の各機能部の関係を示すブロック図である。
【発明を実施するための形態】
【００１６】
以下、本発明の実施例を図面を用いて説明する。
【００１７】
以下、添付図面を参照して本発明の実施例を説明する。各実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。各図において共通の構成には同一の参照符号が付されている。
【００１８】
＜実施例１＞
実施例１では、本発明の基本的な一例について説明する。図１は、実施例１のネットワークシステムの構成の一例を示す図である。
【００１９】
実施例１のネットワークシステムは、一つ以上の分析装置１００、転送装置１０１、ゲートウェイ１０２、コンピュータ１０３、ＳＣＡＤＡ１０４、ＨＭＩ１０５、ＰＬＣ１０６、及びＷＡＮ１０７から構成される制御システムネットワークである。制御システムネットワークを構成する装置は、図示した数に限られず、それぞれ一つ以上含まれていればよい。なお、以下の説明において、同種の装置を纏めて説明する場合には添え字を省略し（例えば、転送装置１０１）、同種の装置を別個に説明する場合には添え字を付す（例えば、転送装置１０１−１）。
【００２０】
分析装置１００、ゲートウェイ１０２、ＰＣ１０３、ＳＣＡＤＡ１０４、ＨＭＩ１０５、ＰＬＣ１０６、及びＷＡＮ１０７は、それぞれ、転送装置１０１を介して相互に接続される。
【００２１】
図１に示す例では、ＷＡＮ１０７及びＰＣ１０３は転送装置１０１−１に接続し、ＧＷ１０２−１は転送装置１０１−１及び転送装置１０１−２に接続し、分析装置１００−１、ＳＣＡＤＡ１０４、及びＨＭＩ１０５は転送装置１０１−２に接続し、ＧＷ１０２−２は転送装置１０１−２及び転送装置１０１−３に接続し、分析装置１００−１、ＰＬＣ１０６−１、及びＰＬＣ１０６−２は転送装置１０１−３に接続する。
【００２２】
転送装置１０１は、例えばスイッチやルータ等の装置であり、接続されている装置から送信されるパケットを他の装置に転送する。また、転送装置１０１は、受信したパケットを複製し、ミラーパケットを生成する機能を有する。転送装置１０１は、生成したミラーパケットを分析装置１００に送信する。ゲートウェイ１０２は、ファイアウォール、スイッチ、ルータ、パケット中継機能を備えたサーバ等であり、接続されている装置から送信されるパケットを他の装置に転送する際に、設定されたルールに基づいてパケットの転送を遮断する機能を有する。ＰＣ１０３は、一般的なオフィス用途のサーバ、ワークステーション、パーソナルコンピュータ等である。
【００２３】
ＳＣＡＤＡ（Ｓｕｐｅｒｖｉｓｏｒｙ  Ｃｏｎｔｒｏｌ  Ａｎｄ  Ｄａｔａ  Ａｃｑｕｉｓｉｔｉｏｎ）１０４は、制御システムにおけるシステム管理やプロセス制御を行うコンピュータである。ＨＭＩ（Ｈｕｍａｎ  Ｍａｃｈｉｎｅ  Ｉｎｔｅｒｆａｃｅ）１０５は、ＳＣＡＤＡの情報を人が閲覧するための機能を提供するコンピュータである。ＰＬＣ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｃｏｎｔｒｏｌｌｅｒ）１０６は、制御システムにおける産業機械等を制御するための機能を有するコンピュータである。ＷＡＮ１０７は、外部のネットワークである。
【００２４】
分析装置１００は、転送装置１０１から受信したミラーパケットを分析し、制御システムにおける業務を抽出する。業務とは、「制御コマンドの送信から当該コマンドによる制御が終了する（例えば、制御結果の返信）までの一連のデータのやりとり」や「特定の機器に対する継続的な死活確認のためのデータのやり取り」のように、制御システムの運用において意味を成す一連のデータのやりとりである。また、分析装置１００は、転送装置１０１から受信したミラーパケットを監視し、業務から外れた通信を検出する。さらに、分析装置１００は、転送装置１０１から受信したミラーパケットから得た情報を可視化するインターフェースを提供する。分析装置１００は、転送装置１０１と別に設けたが、転送装置１０１に内蔵されてもよい。また、１台の分析装置１００が、複数の転送装置１０１に接続されてもよい。実施例２で後述するように、分析装置１００を複数の装置に分けて構成しもてよい。分析装置１００の詳細は図２を用いて後述する。
【００２５】
図２は、実施例１の分析装置１００のハードウェア構成及びプログラム構成の一例を示すブロック図である。
【００２６】
分析装置１００は、ハードウェア構成として、演算装置２００、主記憶装置２０１、二次記憶装置２０２、ＮＩＦ２０３、及び出力装置２０４を有する。演算装置２００、主記憶装置２０１、二次記憶装置２０２、ＮＩＦ２０３、及び出力装置２０４は、システムバス２０６を介して互いに接続される。なお、各構成は、直接接続されてもよいし、複数に分かれたバスを介して接続されてもよい。
【００２７】
演算装置２００は、主記憶装置２０１に格納されるプログラムを実行する、例えば、ＣＰＵ、ＧＰＵ等である。演算装置２００がプログラムを実行することによって分析装置１００が有する機能が実現される。以下では、機能部を主語にして処理を説明する場合、演算装置２００が当該機能部を実現するプログラムを実行していることを示す。
【００２８】
主記憶装置２０１は、演算装置２００が実行するプログラム及び当該プログラムの実行に必要なデータを格納する。主記憶装置２０１は、不揮発性の記憶素子であるＲＯＭ及び揮発性の記憶素子であるＲＡＭを含む。ＲＯＭは、不変のプログラム（例えば、ＢＩＯＳ）などを格納する。ＲＡＭは、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような高速かつ揮発性の記憶素子であり、演算装置２００が実行するプログラム及びプログラムの実行時に使用されるデータを一時的に格納する。また、主記憶装置２０１は、各プログラムが使用するワークエリア及びバッファ等の記憶領域を有する。主記憶装置２０１に格納されるプログラムについては後述する。
【００２９】
二次記憶装置２０２は、例えば、磁気記憶装置（ＨＤＤ）、フラッシュメモリ（ＳＳＤ）等の大容量かつ不揮発性の記憶装置で構成され、演算装置２００が実行するプログラム及びデータを格納する。主記憶装置２０１に格納されるプログラム及びデータは二次記憶装置２０２に格納されてもよい。この場合、演算装置２００が、二次記憶装置２０２からプログラム及びデータを読み出し、主記憶装置２０１上に当該プログラム及びデータをロードする。
【００３０】
ＮＩＦ２０３は、所定のプロトコルに従って、他の装置との通信を制御するインターフェースである。本実施例の分析装置１００は、転送装置１０１に接続するためのＮＩＦ２０３を有する。ＮＩＦ２０３は、転送装置１０１から受信したミラーパケットを、後述する受信処理部２１１に出力する。
【００３１】
出力装置２０４は、分析装置１００の処理結果等を出力するインターフェースである。例えば、処理結果を表示するディスプレイ、タッチパネル等が考えられる。なお、出力装置２０４として、他の装置に処理結果を送信するＮＩＦが実装されてもよい。なお、出力装置２０４は、出力機能として実現してもよく、様々な実装方法でよい。
【００３２】
入力装置２０５は、分析装置１００の制御やパラメータを指定するための入力インターフェースである。例えば、キーボード、マウス、タッチパネルなどの入力デバイスである。なお、入力装置２０５として、他の装置から入力を受信するＮＩＦが実装されてもよい。なお、入力装置２０５は、入力機能として実現してもよく、様々な実装方法でもよい。
【００３３】
次に、主記憶装置２０１に格納されるプログラムの概要を説明する。本実施例の主記憶装置２０１は、受信処理部２１１、通信状態管理部２１２、グループ化部２１３、型ルール記憶部２１４、型推定部２１５、学習結果記憶部２１６、監視部２１７、検証指示部２１８、及び異常識別部２１９を実現するためのプログラムを格納する。なお、主記憶装置２０１には前述した以外のプログラムが格納されてもよい。各プログラムによる処理の詳細は後述する。
【００３４】
受信処理部２１１は、転送装置１０１から受信したミラーパケットのデータをメモリに複製し、ミラーパケットのデータをグループ化部２１３へ渡す。また、受信処理部２１１は、受信したミラーパケットのデータを監視部２１７に転送する。
【００３５】
通信状態管理部２１２は、グループ化部２１３によってグループ化されたミラーパケットのデータを、グループごとに保存する。
【００３６】
グループ化部２１３は、ミラーパケットデータを一連の業務によって生成された可能性のあるパケットのグループに分類する。グループ化部２１３は、パケットを一時的に格納するバッファを有する。
【００３７】
型ルール記憶部２１４は、型推定部２１５が変数及び変数の型を推定するための変数の定義の情報を保持する。
【００３８】
型推定部２１５は、データ内に含まれる変数及び変数の型を推定する。
【００３９】
学習結果記憶部２１６は、型推定部２１５が推定した変数及び変数の型の情報を保持する。学習結果記憶部２１６が保持する情報は、業務による通信かによってパケットデータを分類するために監視部２１７によって利用される。
【００４０】
監視部２１７は、学習した正常業務と受信したミラーパケットのデータとを比較して、業務によるものでないパケットを、セキュリティ異常として検出する。
【００４１】
検証指示部２１８は、異常識別部２１９により単一の事象に基づくと識別された異常が、セキュリティ異常であるかを判定し、セキュリティ異常でない場合、監視部２１７により異常と判定されたデータを型推定部２１５に送信して、型推定結果を更新する。
【００４２】
異常識別部２１９は、監視部２１７が検出した異常が同一事象に基づく異常か否か識別する。
【００４３】
演算装置２００が実行するプログラムは、リムーバブルメディア（ＣＤ−ＲＯＭ、フラッシュメモリなど）又はネットワークを介してコミュニケーションサーバ装置１に提供され、非一時的記憶媒体である不揮発性の二次記憶装置２０２に格納される。このため、分析装置１００は、リムーバブルメディアからデータを読み込むインターフェースを有するとよい。
【００４４】
分析装置１００は、物理的に一つの計算機上で、又は、論理的又は物理的に構成された複数の計算機上で構成される計算機システムであり、同一の計算機上で別個のスレッドで動作してもよく、複数の物理的計算機資源上に構築された仮想計算機上で動作してもよい。
【００４５】
図３は、実施例１の分析装置１００が受信するミラーパケットのフォーマットの一例を示す図である。
【００４６】
パケット３００は、ＭＡＣヘッダ３１０、ＩＰヘッダ３２０、ＴＣＰヘッダ３３０、ＴＣＰオプションヘッダ３４０、及びペイロード３６０を含む。
【００４７】
ＭＡＣヘッダ３１０は、ＤＭＡＣ３１１、ＳＭＡＣ３１２、ＴＰＩＤ３１３、ＴＣＩ３１４、及びＴｙｐｅ３１５を含む。ＤＭＡＣ３１１は、宛先ＭＡＣアドレスを表す。ＳＭＡＣ３１２は、送信元ＭＡＣアドレスを表す。ＴＰＩＤ３１３は、タグ付きフレームであること及びタグの種類を表す。ＴＣＩ３１４は、タグの情報を表す。Ｔｙｐｅ３１５は、ＭＡＣフレームのタイプを表す。
【００４８】
ＴＣＩ３１４は、さらに、ＰＣＰ３１６、ＣＦＩ３１７、及びＶＩＤ３１８を含む。ＰＣＰ３１６は優先度を表す。ＣＦＩ３１７はＭＡＣアドレスが正規フォームであるか否かを表す。ＶＩＤ３１８はＶＬＡＮのＩＤを表す。なお、ＶＬＡＮが使用されていないネットワークの場合、ＴＰＩＤ３１３及びＴＣＩ３１４は存在しない。この場合、分析装置１００はＶＩＤが「０」であるものとして処理を行う。
【００４９】
ＩＰヘッダ３２０は、ＩＰ  ｌｅｎｇｔｈ３２１、ｐｒｏｔｏｃｏｌ３２２、ＳＩＰ３２３、及びＤＩＰ３２４を含む。ＩＰ  ｌｅｎｇｔｈ３２１は、ＭＡＣヘッダ３１０を除くパケット長を表す。ｐｒｏｔｏｃｏｌ３２２は、プロトコル番号を表す。ＳＩＰ３２３は、送信元ＩＰアドレスを表す。ＤＩＰ３２４は、宛先ＩＰアドレスを表す。
【００５０】
ＴＣＰヘッダ３３０は、ｓｒｃ．ｐｏｒｔ３３１、ｄｓｔ．ｐｏｒｔ３３２、ＳＥＱ３３３、ＡＣＫ３３４、ｆｌａｇ３３５、ｔｃｐ  ｈｌｅｎ３３６、及びｗｉｎ＿ｓｉｚｅ３３７を含む。ｓｒｃ．ｐｏｒｔ３３１は、送信元ポート番号を表す。ｄｓｔ．ｐｏｒｔ３３２は、宛先ポート番号を表す。ＳＥＱ３３３は、送信シーケンス番号を表す。ＡＣＫ３３４は、受信シーケンス番号を表す。ｆｌａｇ３３５は、ＴＣＰフラグ番号を表す。ｔｃｐ  ｈｌｅｎ３３６は、ＴＣＰのヘッダ長を表す。ｗｉｎ＿ｓｉｚｅ３３７は、対向装置へ通知する  広告ウィンドウサイズを表す。
【００５１】
ＴＣＰオプションヘッダ３４０は、０又は複数のオプションを含む。例えば、ｏｐｔｉｏｎ  ｋｉｎｄ３４１、ｏｐｔｉｏｎ  ｌｅｎｇｔｈ３４２、及びオプション情報３４３等のオプションが含まれる。ｏｐｔｉｏｎ  ｋｉｎｄ３４１は、オプション種別を表す。ｏｐｔｉｏｎ  ｌｅｎｇｔｈ３４２は、オプション長を表す。オプション情報３４３は、オプションの種類に応じた情報を表す。
【００５２】
例えば、ＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）オプションは、ＴＣＰ通信を開始するときに自装置が受信可能なＭＳＳサイズを対向装置に通知するために用いられる。ＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫｎｏｗｌｅｄｇｅｍｅｎｔ）オプションは、ＴＣＰ通信を開始するときに、自装置がＳＡＣＫオプションに対応可能であることを対向装置に通知するために用いられる。ＳＡＣＫオプションは、さらに、通信中にパケットの廃棄が検出されたときに部分的に受信できたデータ箇所を対向装置に通知するために用いられる。タイムスタンプオプションは、通信中の自装置の受信時刻を対向装置に通知するために用いられる。ウィンドウスケールオプションは、ｗｉｎ＿ｓｉｚｅ３３７によって通知される値を右シフトするビット数を対向装置に通知して対向装置に通知可能な広告ウィンドウサイズの最大値を大きくするために用いられる。このように、ＴＣＰオプションヘッダ３４０は、通信開始時及び通信中に自装置の対応可能な機能及び情報を対向装置に伝えるために用いられる。
【００５３】
図４は、実施例１の分析装置１００及び転送装置１０１の各機能部の関係を示すブロック図である。転送装置１０１は、三つ以上のＮＩＦ４１１−１、４１１−２、４１１−３を有し、また、ポートミラーリング機能部４１０を含む。
【００５４】
ポートミラーリング機能部４１０は、ＮＩＦ４１１−１から受信したパケットをＮＩＦ４１１−２に転送し、受信したパケットと同一のミラーパケットをＮＩＦ４１１−３から分析装置１００に送信する。また、ポートミラーリング機能部４１０は、ＮＩＦ４１１−２から受信したパケットをＮＩＦ４１１−１に転送し、受信したパケットと同一のミラーパケットをＮＩＦ４１１−３から分析装置１００に送信する。
【００５５】
ＮＩＦ２０３は、転送装置１０１から受信したミラーパケットを受信処理部２１１に出力する。
【００５６】
受信処理部２１１は、ＮＩＦ２０３からの入力を監視しており、パケットが入力されるとグループ化部２１３に出力する。
【００５７】
グループ化部２１３は、受信処理部２１１から受信したパケットデータを、一連の業務によって生成された可能性があるグループに所定のアルゴリズムによって分類する。分類後、グループ単位でパケットデータを通信状態管理部２１２及び型推定部２１５に出力する。分類に用いる所定のアルゴリズムについては図９を参照して後述する。
【００５８】
通信状態管理部２１２は、グループ化されたデータを、分類されたグループに従って保持する。通信状態管理部２１２が保持したデータは、型推定部２１５及び監視部２１７によって参照される。
【００５９】
型ルール記憶部２１４は、型推定部２１５が変数及び変数の型を推定するための変数の定義の情報を保持する。型ルール記憶部２１４に保持される情報は、入力装置２０５から入力される。
【００６０】
型推定部２１５は、グループ化されたデータを受信し、受信したデータ内に含まれる変数及び変数の型を所定のアルゴリズムによって推定し、推定結果を学習結果記憶部２１６に保存する。推定に用いる所定のアルゴリズムについては後述する。
【００６１】
学習結果記憶部２１６は、型推定部２１５によって学習結果として得られた情報を保持する。学習結果記憶部２１６に保持される情報は、監視部２１７が業務による通信と業務によらない通信とを分類するために使用される。
【００６２】
監視部２１７は、通信状態管理部２１２からグループ化されたデータを受信し、学習結果記憶部２１６に保持される情報を参照して、データが業務によるものか判定する。業務によるものでない場合、当該パケットにはセキュリティリスクがあると判定し、出力装置２０４に異常を出力する。
【００６３】
検証指示部２１８は、異常識別部２１９から異常の情報及び識別結果を受信し、受信した異常が実際にセキュリティ異常かセキュリティ異常でないかを所定のアルゴリズムによって判定し、セキュリティ異常でない場合には、異常と判定したデータを型推定部２１５に送信する。判定に用いる所定のアルゴリズムについては後述する。
【００６４】
異常識別部２１９は、監視部２１７が検出した異常が同一事象に基づく異常であるかを所定のアルゴリズムによって識別し、異常の情報及び識別結果を検証指示部２１８に出力する。識別に用いる所定のアルゴリズムについては後述する。
【００６５】
以上に説明した機能ブロックは、前述したように、演算装置２００がプログラムを実行することによって実現されるが、その一部又は全部をハードウェア（例えば、ＦＰＧＡやＡＳＩＣ）で構成してもよい。
【００６６】
図５は、通信状態管理部２１２が保持するデータ構造の一例を示す図である。
【００６７】
通信状態管理部２１２は、グループ化部２１３によって分類されたグループに従って、データを保持する。図５に示す例では、四つのテーブル５００−１〜５００−４の各々が、４グループのデータを保持している。各行５０１−１、５０１−２は、ミラーパケットのデータに相当する。各テーブルの列５０２−０、５０２−１、５０２−２…は、元のパケットデータの各バイト値であり、Ｔｉｍｅｓｔａｍｐ５０２−３は、ミラーパケットのタイムスタンプであり、例えば、受信処理部２１１がミラーパケットを受信した時刻である。
【００６８】
図６は、学習結果記憶部２１６が保持するデータ構造の一例を示す図である。
【００６９】
学習結果記憶部２１６は、型推定部２１５が推定した変数及び変数の型を保持する。学習結果記憶部２１６に保持される情報は、監視部２１７が業務による通信であるかによってパケットデータを分類するために使用される。図６に示す例では、各行６０１−１、６０１−２、…のそれぞれは、一つの変数及び変数の型の情報を示す。ＩＤ６０２−０は変数の識別番号であり、例えば通し番号である。
【００７０】
各列Ｐｒｏｔｏｃｏｌ６０２−１、ＳｒｃＩＰ６０２−２、ＤｓｔＩＰ６０２−３、ＳｒｖＰｏｒｔ６０２−４、Ｌｅｎｇｔｈ６０２−５は、検出すべき変数を含むパケットを示すための情報である。Ｐｒｏｔｏｃｏｌ６０２−１はパケットのプロトコル、ＳｒｃＩＰ６０２−２はパケットの送信元ＩＰアドレス、ＤｓｔＩＰ６０２−３はパケットの宛先ＩＰアドレス、ＳｒｖＰｏｒｔ６０２−４はｓｒｃ．ｐｏｒｔ３３１、ｄｓｔ．ｐｏｒｔ３３２のうち小さいほうのポート番号、Ｌｅｎｇｔｈ６０２−５はパケットのサイズを表し、これらの全てが一致するパケットに、検出すべき変数が含まれる可能性がある。
【００７１】
Ｏｆｆｓｅｔ６０２−６、Ｓｉｚｅ６０２−７は、パケット中のどの位置に変数が含まれるかを示す情報である。Ｏｆｆｓｅｔ６０２−６はパケットの先頭からバイト数で数えた変数の位置、Ｓｉｚｅ６０２−７はバイト数で表した変数の大きさ、Ｅｎｄｉａｎ６０２−８は、変数のエンディアンを表す。Ｔｙｐｅ６０２−８は変数の型を表し、Ｕｎｉｘ時間（Ｅｐｏｃｈ）、ＡＳＣＩＩ  Ｉｎｔ（ＡＳＣＩＩで表現した整数）などの値を取る。変数の型はここで挙げた種類以外でもよい。
【００７２】
図６に示すデータ構造は、型推定部２１５が一時的なデータ構造として利用する変数リストにも用いられる。
【００７３】
図７は、型ルール記憶部２１４が保持するデータ構造の一例を示す図である。
【００７４】
型ルール記憶部２１４は、変数の型名を示すＴｙｐｅ７００−１−１、変数の型の定義を示す関数を示すＰｏｉｎｔｅｒ７０１−１−２、及びバイト数で表した変数の大きさを示すＳｉｚｅ７０１−１−３を保持する。Ｐｏｉｎｔｅｒ７０１−１−２は、関数へのポインタでなく、独立したプログラムの起動パスでもよい。なお、同じ変数の型でも変数のサイズ毎に異なる型ルールを記憶できるように構成されている。この場合、Ｐｏｉｎｔｅｒ７０１−１−２には異なる関数が定義されても、同じ関数が定義されてもよい。
【００７５】
次に、各部による処理をフローチャートを用いて説明する。
【００７６】
図８は、受信処理部２１１が実行する処理の詳細を示すフローチャートである。
【００７７】
分析装置１００が起動した後、受信処理部２１１は、転送装置１０１からミラーパケットの受信を待ち受け（ステップＳ８１０）、受信したミラーパケットデータをグループ化部２１３へ複製する（ステップＳ８２０）。そして、受信処理部２１１は、ステップＳ８１０及びステップＳ８２０の処理を繰り返す。
【００７８】
受信処理部２１１は、分析装置１００の起動時以外に、この処理を開始してもよい。
【００７９】
図９は、グループ化部２１３が実行する処理の詳細を説明するフローチャートである。
【００８０】
グループ化部２１３は、受信処理部２１１からミラーパケットデータを受け取ると（ステップＳ９１０）、受け取ったミラーパケットデータを、所定のアルゴリズムを用いて分類する（ステップＳ９１５）。以下、ステップＳ９１５における所定のアルゴリズムのいくつかの例を説明する。
【００８１】
一つ目の例として、グループ化部２１３は、ｓｒｃ．ｐｏｒｔ３３１、ｄｓｔ．ｐｏｒｔ３３２のうち小さいほうのポート番号であるＳｒｖＰｏｒｔと、ｐｒｏｔｏｃｏｌ３２２と、ＳＩＰ３２３と、ＤＩＰ３２４と、パケット長の五つの値の全てが同一かによって、受信したミラーパケットデータを分類してもよい。この例では、同一端末間の同一アプリケーションによる通信であるパケットを分類できる。
【００８２】
二つ目の例としてパケット長及びｐｒｏｔｏｃｏｌ３２２の二つの値が同一かによって、受信したミラーパケットデータを分類してもよい。この例では、同一の命令を含んだパケットを分類できる。
【００８３】
前述した二つの例は、制御システムでは特定のフォーマットに準拠して通信が行われることを利用している。このような分類によって、グループ内のパケットの特定の位置に、同一の命令やパラメータが保存されていることを可能性があるパケットを分類できる。
【００８４】
次に、グループ化部２１３は、分類されたミラーパケットデータがグループの先頭パケットであるかを、所定のアルゴリズムを用いて判定する（ステップＳ９１１）。以下、ステップＳ９１１における所定のアルゴリズムのいくつかの例を説明する。
【００８５】
一つ目の例として、所定のデルタ時間を空けて同一の分類がされたパケットを受信した場合に、当該パケットをグループ先頭パケットであると判定する。この例では、一連の業務による継続した通信が行われている場合に、一連の業務のパケットをグループ化できる。
【００８６】
二つ目の例として、ｆｌａｇ３３５にＳＹＮフラグが設定されている場合に、受信したパケットをグループ先頭パケットであると判定する。この例では、一連の業務ごとに通信が切断されるプロトコルにおいて、一連の業務のパケットをグループ化できる。
【００８７】
三つ目の例として、ペイロード３５０の特定のフィールドの値をグループ化の指標（いわゆる番兵値）として、番兵値が特定の値である場合に、受信したパケットをグループ先頭パケットであると判定する。この例は、ペイロードの定義や意味情報の一部が分かっている場合に効果的である。
【００８８】
その結果、受信したパケットがグループ先頭パケットでない場合、グループ化部２１３は、受信パケットをバッファに格納する（ステップＳ９１４）。
【００８９】
一方、受信したパケットがグループ先頭パケットである場合、グループ化部２１３は、バッファが空であるかを判定する（ステップＳ９１２）。その結果、バッファが空である場合、グループ化部２１３は、受信パケットをバッファに格納する（ステップＳ９１４）。
【００９０】
一方、バッファが空でない場合、グループ化部２１３は、バッファに格納されているパケットを型推定部２１５へ複製し、バッファをクリアする（ステップＳ９１３）。さらに、グループ化部２１３は、受信パケットをバッファに格納する（ステップＳ９１４）。
【００９１】
受信パケットをバッファに格納した後、この処理を終了して、次のパケットの受信を待ち受ける。
【００９２】
図１０は、型推定部２１５が実行する処理の詳細を示すフローチャートである。
【００９３】
型推定部２１５は、グループ化部２１３からデータを受け取ると（ステップＳ１０１０）、グループ先頭パケットを走査し、変数を識別し、変数リストを作成する（ステップＳ１０１１）。型推定部２１５は、変数リストの最初の変数を選択する（ステップＳ１０１２）。型推定部２１５は、選択した変数がグループ内の全パケットに含まれるか否かを判定する（ステップＳ１０１３）。ステップＳ１０１３にて、選択した変数がグループ内の全パケットに含まれると判定された場合、パケットに含まれる変数の位置及び変数の型が推定されたと判定し、作成された変数リストに含まれる変数情報を学習結果記憶部２１６に保存し（ステップＳ１０１４）、ステップＳ１０１５に進む。
【００９４】
ステップＳ１０１３にて、選択した変数がグループ内の全パケットに含まれないと判定された場合、型推定部２１５は、変数リストの次の変数があるか判定する（ステップＳ１０１５）。ステップＳ１０１５にて、変数リストの全ての変数の処理が完了していると判定された場合、型推定部２１５は処理を終える。ステップＳ１０１５にて、変数リストの次の変数があると判定された場合、型推定部２１５は変数リストの次の変数を選択し（ステップＳ１０１６）、ステップＳ１０１３に戻る。
【００９５】
図１４は、ステップＳ１０１１の詳細を示すフローチャートである。
【００９６】
ステップＳ１０１１において、型推定部２１５は、型ルール記憶部２１４に格納される最初の型を選択する（ステップＳ１４００）。次に、グループ先頭パケットの先頭から、現在選択中の型のＳｉｚｅ６０２−７バイトを選択する（ステップＳ１４０１）。選択している型のＰｏｉｎｔｅｒ７０１−１−２が示す関数によって、ステップＳ１４０１にて選択したバイト列が選択している型の変数であるかを判定し（ステップＳ１４０２）、Ｙｅｓの場合、変数リストに現在の変数の型情報を追加し（ステップＳ１４０３）、ステップＳ１４０４に進む。
【００９７】
ステップＳ１４０２にて、Ｐｏｉｎｔｅｒ７０１−１−２が示す関数は、選択しているバイト列を入力とし、真偽値を返り値とする。ステップＳ１４０２にてＮｏの場合、現在選択中のバイト列がパケットの最後尾であるかを判定する（ステップＳ１４０４）。ステップＳ１４０４にてＹｅｓの場合、現在選択中の型が型ルールの最後の型であるかを判定する（ステップＳ１４０６）。ステップＳ１４０６にてＹｅｓの場合、ステップＳ１０１１の処理を終える。ステップＳ１４０６にてＮｏの場合、ステップＳ１４０１に戻る。ステップＳ１４０４にてＮｏの場合、パケット中における選択範囲を１バイト後ろにずらし（ステップＳ１４０５）、ステップＳ１４０２に戻る。
【００９８】
図１５は、型推定部２１５の動作を示す図である。
【００９９】
型推定部２１５は、ステップＳ１０１１によってグループ内の最初のパケットにおいて変数が含まれている可能性のある位置を特定し、ステップＳ１０１３によって変数の特定を確定させる。
【０１００】
図１１は、監視部２１７が実行する処理の詳細を示すフローチャートである。
【０１０１】
監視部２１７は、受信処理部２１１からミラーパケットのデータを受け取ると（ステップＳ１１１０）、学習結果記憶部２１６に格納された情報を用いて、受け取ったデータに含まれるはずの変数が含まれているかを判定する。すなわち、受け取ったミラーパケットがパケットの条件６０２−１〜６０２−５と一致し、受け取ったミラーパケットの変数の位置の条件６０２−６〜６０２−７の位置のデータが変数の条件６０２−８〜６０２−９と一致するかによって、変数に正常な値が保持されているか否か判定する（ステップＳ１１２０）。
【０１０２】
監視部２１７は、ステップＳ１１２０にて変数が正常でないと判定された場合、出力装置２０４へ異常を出力して（ステップＳ１１３０）、処理を終える。また、監視部２１７は、ステップＳ１１２０にて変数が正常であると判定された場合、処理を終える。
【０１０３】
出力装置２０４へ異常を出力する形態として、異常発生を報知する画面を表示するためのデータを出力したり、警報音を発生したり、ＨＭＩ１０５へ通知を出力して、回転警告灯を動作させたりする。
【０１０４】
図１２は、検証指示部２１８が実行する処理の詳細を示すフローチャートである。
【０１０５】
検証指示部２１８は、異常識別部２１９から異常の情報を受け取ると（ステップＳ１２１０）、受け取った異常が誤検知か否かを判定する（ステップＳ１２１１）。誤検知か否かは、例えば、システム出荷前の運用試験中はセキュリティ異常がないはずのため誤検知と判定し、実際の運用中には全てセキュリティ異常と判定する。また、入力装置２０５から誤検知であることが入力された場合、誤検知であるとを判定してもよい。
【０１０６】
検証指示部２１８は、ステップＳ１２１１にて誤検知と判定された場合、型推定部２１５へ異常パケットを送信し（ステップＳ１２１２）、処理を終える。検証指示部２１８は、ステップＳ１２１１にて誤検知でないと判定された場合、処理を終える。
【０１０７】
型推定部２１５は、検証指示部２１８が誤検知と判定した異常パケットを学習し、学習結果記憶部２１６を更新する。このとき、型推定部２１５は、既に学習に用いたデータに加えて、異常を誤検知したパケットを学習し、既に学習に用いたデータ（すなわち、学習期間に受信したパケット）から異常を誤検知したパケットまでに受信したパケットは学習しない。このため再学習において、過学習による検知精度の低下を抑制できる。
【０１０８】
図１３は、異常識別部２１９が実行する処理の詳細を示すフローチャートである。
【０１０９】
異常識別部２１９は、監視部２１７から異常の情報を受け取ると（ステップ１３１０）、異常検知の原因となった変数ごとに異常の情報を分類する（ステップＳ１３１１）。次に異常識別部２１９は、受け取った異常と同一の分類をされている異常とを比較し、時系列において所定の関係を満たすか否かを判定する（ステップＳ１３１２）。所定の関係として、例えば、タイムスタンプの差が閾値以下である、時系列上連続したパケットによる異常である、などがある。
【０１１０】
ステップＳ１３１２にて所定の関係を満たすと判定された場合、異常識別部２１９は、新しい事象に起因する異常ではないと判定し、処理を終える。ステップＳ１３１２にて所定の関係を満たさないと判定された場合、異常識別部２１９は、新しい事象に起因する異常であると判定し、異常の情報を検証指示部２１８へ渡し、異常の情報を出力装置２０４へ出力し（ステップＳ１３１３）、処理を終える。
【０１１１】
図１８は、異常識別部２１９がステップＳ１３１１にて異常の情報を分類する際のデータ構造を示す図である。
【０１１２】
Ｖａｒｉａｂｌｅ１８−１は、異常検知の原因となった変数の識別番号であり、学習結果記憶部２１６のＩＤ６０２−０に対応する。Ｌａｓｔ  ａｎｏｍａｌｙ  ｔｉｍｅ１８−２は、当該変数によって検知された最後の異常のタイムスタンプである。
【０１１３】
図１６は、型ルール記憶部２１４のＰｏｉｎｔｅｒ７０１−１−２が示すポインタの処理の一例を示すフローチャートであり、変数の型をＵｎｉｘ時間（１９７０年１月１日からの経過時間）として定義する例を示す。
【０１１４】
受け取ったミラーパケットが、Ｔｙｐｅ６０２−９がＥｐｏｃｈであるパケットの条件６０２−１〜６０２−５と一致する場合、バイト列をＵｎｉｘ  ｅｐｏｃｈを示す整数であると解釈し、パケットのタイムスタンプとの時間差を計算する（ステップＳ１６１０）。次に、計算した時間差が所定の閾値より小さいかを判定する（ステップＳ１６２０）。所定の閾値は、例えば、１時間としてもよい。ステップＳ１６２０にて時間差が閾値より小さいと判定された場合、システムによってタイムスタンプとして保存されているバイト列であるので、真を返す（ステップＳ１６３０）。ステップＳ１６２０で閾値より大きい場合、システムによってタイムスタンプとして保存されているバイト列ではないので、偽を返す（ステップＳ１６４０）。
【０１１５】
図１７は、型ルール記憶部２１４のＰｏｉｎｔｅｒ７０１−１−２が示すポインタの処理の別の一例を示すフローチャートであり、変数の型をＡＳＣＩＩで表現された整数として定義する例を示す。
【０１１６】
受け取ったミラーパケットが、Ｔｙｐｅ６０２−９がＡｓｃｉｉ＿ｉｎｔであるパケットの条件６０２−１〜６０２−５と一致する場合、バイト列の各バイトの値がＡＳＣＩＩコードで整数（０〜９）を示す０ｘ３０〜０ｘ３９の範囲内であるかを判定し（ステップＳ１７１０）、各バイトの値が当該範囲内である場合、真を返し（ステップＳ１７２０）、各バイトの値が当該範囲内でない場合、偽を返す（ステップＳ１７３０）。
【０１１７】
実施例１の分析装置１００は、ポートミラーリング機能部４１０を有する転送装置１０１から送信されるミラーパケットを用いて処理を実行したが、ネットワークタップがネットワーク信号を分岐して取り出し、取り出したパケットを用いて同様の処理を実行してもよい。
【０１１８】
図１９は、異常識別部２１９が出力する画面の例を示す図である。
【０１１９】
異常識別部２１９が出力する情報は、異常を識別する番号１９−１、異常の情報として、異常と判定された際に用いられた変数の情報である異常情報１９−２、異常と判定されたミラーパケットのタイムスタンプを示す時刻１９−３、実際にセキュリティ異常であるか、型推定部２１５による推定結果を確認する操作のための操作領域１９−４、及び異常種類毎に時系列に異常発生時刻を示すグラフ１９−５を含む。操作領域１９−４は、型推定部２１５による推定結果が異常であることを確認する「異常」ボタン、及び、型推定部２１５による推定結果が誤検知であり、再学習によって型推定部２１５による推定結果を更新することを確認する「誤検知」ボタンを含む。操作領域１９−４において「誤検知」ボタンが操作された場合、検証指示部２１８がステップＳ１２１１で誤検知と判定する。グラフ１９−５の異常の種類は、学習結果記憶部２１６の各行の情報に対応する。
【０１２０】
本例では、画面への出力を例として記載したが、同様の情報をファイルに出力したり、別のプログラムに出力してもよい。
【０１２１】
図１９に示すように、異常情報１９−２と、異常と判定されたパケットのタイムスタンプ１９−３と、再学習を指示する操作領域１９−４とを含む表示画面を生成するので、異常の情報を見ながら誤検知であるかを指示でき、誤検知の場合には再学習によって、型推定部２１５による推定結果を更新して、以後のパケットにおける誤検知を抑制できる。
【０１２２】
実施例１では、通信プロトコルとしてＴＣＰを例に説明したが、本実施例はＴＣＰ以外のプロトコルにも適用可能である。例えば、ＵＤＰ等のように、データが一定の長さを上限としてパケットに区切られて送受信される通信プロトコルであれば、本発明を適用できる。
【０１２３】
また、長さが異なるパケットを一つのクラスタに分類する場合、後のデータを０でパディングしてパケット長を揃えるとよい。
【０１２４】
実施例１によれば、通信プロトコル中のペイロードデータの意味情報が未知の場合においても、通信を分析して業務の情報を抽出し、サイバー攻撃などのセキュリティリスクを検知できる。特に、ネットワーク内へのセキュリティソフトのインストールによって、ノードにおいて遅延を生じさせたくない場合でもセキュリティリスクを検知できる。また、セキュリティソフトをインストールした場合には動作検証が必要であるところ、動作検証を必要とせずに、正常業務でない通信を検知できる。
【０１２５】
また、型推定部２１５が、受け取ったミラーパケットがパケットの条件６０２−１〜６０２−５と一致し、受け取ったミラーパケットの変数の位置の条件６０２−６〜６０２−７の位置のデータが変数の条件６０２−８〜６０２−９と一致するかによって、変数に正常な値が保持されているパケットを学習して、学習結果記憶部２１６に記憶する。このため、パケットに含まれる値に規則性がなくても、値そのもので異常を判定できる。
【０１２６】
また、監視部２１７及び異常識別部２１９が異常であると判定したパケットを、検証指示部２１８が誤検知と判定することによって、型推定部２１５が、異常を誤検知したパケットを学習し、学習結果記憶部２１６を更新する。このとき、型推定部２１５は、既に学習に用いたデータに加えて、異常を誤検知したパケットを学習し、既に学習に用いたデータから異常を誤検知したパケットまでに受信したパケットは学習しない。このため、過学習による検知精度の低下を抑制できる。
【０１２７】
また、異常識別部２１９は、パケットが直前に検知された異常パケットと所定の関係を満たす場合、新しい事象に起因する異常ではないと判定し、所定の関係を満たさないと判定された場合、新しい事象に起因する異常であると判定する。このため、同一事象に起因する異常の出力を抑制し、分析装置１００の使いやすさを向上できる。
【０１２８】
なお、本発明は、通信プロトコル中のフォーマット（例えば、ペイロードデータの意味情報）が既知の場合にも、適用可能である。その場合、セキュリティリスクの検知のために、通信プロトコル中のペイロードデータの意味情報を解釈するためのプログラム設計の工数を削減できる。
【０１２９】
＜実施例２＞
実施例１では、正常な業務による通信の学習と、通信が正常な業務に含まれるか否かの監視とを同一の分析装置１００に実装する。実施例２では、学習と監視を異なる装置に実装する例を示す。
【０１３０】
以下、実施例１との差異を中心に、実施例２について説明する。なお、実施例１と同一の構成、同一の処理には同一の符号を付し、それらの説明を省略する。
【０１３１】
図２０は、実施例２のネットワークシステムの構成の一例を示す図である。
【０１３２】
実施例２のネットワークシステムは、一つ以上の分析装置１００、学習装置２０１０、監視装置２０２０、ゲートウェイ１０２、コンピュータ１０３、ＳＣＡＤＡ１０４、ＨＭＩ１０５、ＰＬＣ１０６、及びＷＡＮ１０７から構成される制御システムネットワークである。制御システムネットワークを構成する装置は、図示した数に限られず、それぞれ一つ以上含まれていればよい。なお、以下の説明において、同種の装置を纏めて説明する場合には添え字を省略し（例えば、学習装置２０１０）、同種の装置を別個に説明する場合には添え字を付す（例えば、学習装置２０１０−１）。
【０１３３】
学習装置２０１０、監視装置２０２０、ゲートウェイ１０２、ＰＣ１０３、ＳＣＡＤＡ１０４、ＨＭＩ１０５、ＰＬＣ１０６、及びＷＡＮ１０７は、それぞれ、転送装置１０１を介して相互に接続される。
【０１３４】
図２０に示す例では、実施例１における分析装置１００−１の代わりに、学習装置２０１０−１及び監視装置２０２０−１が転送装置１０１−２に接続される。また、実施例１における分析装置１００−２の代わりに、学習装置２０１０−２及び監視装置２０２０−２が転送装置１０１−３に接続される。
【０１３５】
学習装置２０１０は、転送装置１０１から受信したミラーパケットを分析し、制御システムにおける業務を抽出する。監視装置２０２０は、転送装置１０１から受信したミラーパケットを監視し、業務から外れた通信を検出する。さらに、学習装置２０１０及び監視装置２０２０は、転送装置１０１から受信したミラーパケットから得た情報を可視化するインターフェースを提供する。学習装置２０１０の詳細は図２１を用いて後述し、監視装置２０２０の詳細は図２２を用いて後述する。
【０１３６】
図２１は、実施例２の学習装置２０１０のハードウェア構成及びプログラム構成の一例を示すブロック図である。
【０１３７】
学習装置２０１０のハードウェア構成は、実施例１の分析装置１００と同一であるため説明を省略する。
【０１３８】
学習装置２０１０の主記憶装置２０１は、受信処理部２１１、通信状態管理部２１２、グループ化部２１３、型ルール記憶部２１４、型推定部２１００及び学習結果記憶部２１６を実現するプログラムを格納する。受信処理部２１１、通信状態管理部２１２、グループ化部２１３、型ルール記憶部２１４、及び学習結果記憶部２１６は、実施例１と同一であるため、説明を省略する。
【０１３９】
学習装置２０１０の型推定部２１００は、グループ化部２１３によってグループ化されたパケットデータ及び型ルール記憶部２１４に保存されている型ルールを用いて、業務による通信に含まれる変数の型を推定し、推定結果を出力装置２０４に出力する。なお、学習装置２０１０が、学習結果記憶部２１６を有してもよい。つまり、学習装置２０１０及び監視装置２０２０の少なくとも一つが学習結果記憶部２１６を有すればよい。
【０１４０】
図２２は、実施例２の監視装置２０２０のハードウェア構成及びプログラム構成の一例を示すブロック図である。
【０１４１】
監視装置２０２０のハードウェア構成は、実施例１の分析装置１００と同一であるため説明を省略する。
【０１４２】
監視装置２０２０の主記憶装置２０１は、受信処理部２１１、通信状態管理部２１２、グループ化部２１３、型ルール記憶部２１４、学習結果記憶部２１６、監視部２１７、検証指示部２１８、及び異常識別部２１９を実現するプログラムを格納する。受信処理部２１１、通信状態管理部２１２、グループ化部２１３、型ルール記憶部２１４、学習結果記憶部２１６、監視部２１７、検証指示部２１８、及び異常識別部２１９は、実施例１と同一であるため、説明を省略する。
【０１４３】
監視装置２０２０は、実施例１の分析装置１００から型推定部２１５を取り除き、型推定部２１５の代わりに入力装置２０５を経由して推定結果を学習結果記憶部２１６に保存するものである。
【０１４４】
図２３は、実施例２の学習装置２０１０、監視装置２０２０及び転送装置１０１の各機能部の関係を示すブロック図である。
【０１４５】
実施例２では、処理が重い型推定部２１００と、リアルタイムの処理が求められる監視部２１７、検証指示部２１８、及び異常識別部２１９とを、別の装置に実装することによって、システム全体の処理能力を高め、大量の通信に対するセキュリティリスクの検知を実現可能としている。
【０１４６】
なお、学習装置２０１０と監視装置２０２０とで、受信処理部２１１、通信状態管理部２１２、グループ化部２１３、及び型ルール記憶部２１４の一部又は全部を共通化し、いずれか一方に実装してもよい。
【０１４７】
なお、本発明は前述した実施例に限定されるものではなく、添付した特許請求の範囲の趣旨内における様々な変形例及び同等の構成が含まれる。例えば、前述した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに本発明は限定されない。また、ある実施例の構成の一部を他の実施例の構成に置き換えてもよい。また、ある実施例の構成に他の実施例の構成を加えてもよい。また、各実施例の構成の一部について、他の構成の追加・削除・置換をしてもよい。
【０１４８】
また、前述した各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよく、プロセッサがそれぞれの機能を実現するプログラムを解釈し実行することにより、ソフトウェアで実現してもよい。
【０１４９】
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶装置、又は、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に格納することができる。
【０１５０】
また、制御線や情報線は説明上必要と考えられるものを示しており、実装上必要な全ての制御線や情報線を示しているとは限らない。実際には、ほとんど全ての構成が相互に接続されていると考えてよい。
【符号の説明】
【０１５１】
１００  分析装置
１０１  転送装置
２００  演算装置
２０１  主記憶装置
２０２  二次記憶装置
２０３  ＮＩＦ
２０４  出力装置
２０５  入力装置
２１１  受信処理部
２１２  通信状態管理部
２１３  グループ化部
２１４  型ルール記憶部
２１５  型推定部
２１６  学習結果記憶部
２１７  監視部
２１８  検証指示部
２１９  異常識別部
４１０  ポートミラーリング機能部
２０１０  学習装置
２０２０  監視装置
【図１】
2020061667.tif 000003
【図２】
2020061667.tif 000004
【図３】
2020061667.tif 000005
【図４】
2020061667.tif 000006
【図５】
2020061667.tif 000007
【図６】
2020061667.tif 000008
【図７】
2020061667.tif 000009
【図８】
2020061667.tif 000010
【図９】
2020061667.tif 000011
【図１０】
2020061667.tif 000012
【図１１】
2020061667.tif 000013
【図１２】
2020061667.tif 000014
【図１３】
2020061667.tif 000015
【図１４】
2020061667.tif 000016
【図１５】
2020061667.tif 000017
【図１６】
2020061667.tif 000018
【図１７】
2020061667.tif 000019
【図１８】
2020061667.tif 000020
【図１９】
2020061667.tif 000021
【図２０】
2020061667.tif 000022
【図２１】
2020061667.tif 000023
【図２２】
2020061667.tif 000024
【図２３】
2020061667.tif 000025