(57)【要約】【課題】異常なパケットを、精度よく特定することができる異常検知方法、または、精度よく特定するための異常検知モデルを学習する学習方法などを提供する。【解決手段】異常検知方法は、取得した複数の学習用パケットのそれぞれについて、当該複数の学習用パケットに含まれるペイロードにおけるＮ−ｇｒａｍの組み合わせであって、取り得る全ての組み合わせを抽出し、当該パケットから抽出した全ての組み合わせが、取得した当該パケットが有するペイロードにおいて出現する回数である第１の数をカウントし、複数の第１の数に基づいて、スムージング処理を行うことで算出した第１の確率を異常検知モデルとし、複数のパケットのそれぞれについて算出したスコアが、メモリに記憶されている異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが異常であることを出力する。【選択図】図１４
2019110513.tif 000002
【特許請求の範囲】
【請求項１】
監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知する異常検知装置が実行する異常検知方法であって、
前記異常検知装置は、プロセッサおよびメモリを備え、
前記メモリは、複数の学習用パケットを用いた学習により生成された異常検知モデルを記憶しており、
前記異常検知方法では、前記プロセッサが、
前記複数の学習用パケットを取得し、
取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、
前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、
抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、
算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させ、
複数のパケットを取得し、
取得した複数のパケットのそれぞれについて、当該パケットに対して算出したスコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが以上であることを出力する
異常検知方法。
【請求項２】
前記第１の確率の算出では、前記スムージング処理として、前記第１の数の全てに、正の数を加算することで複数の第２の数を算出し、抽出した前記全ての第１の組み合わせのそれぞれについて算出した前記複数の第２の数に基づいて、前記第１に確率を算出する
請求項１に記載の異常検知方法。
【請求項３】
前記抽出では、Ｎ−ｇｒａｍを用いることで、前記Ｎ個のデータ単位の前記第１の組み合わせを抽出する
請求項１または２に記載の異常検知方法。
【請求項４】
前記Ｎは、２または３である
請求項３に記載の異常検知方法。
【請求項５】
前記出力では、取得した前記複数のパケットのそれぞれについて、
（１）当該パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第２の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第２の組み合わせを抽出し、
（２）当該パケットから抽出した前記全ての第２の組み合わせのそれぞれについて、当該第２の組み合わせが、取得した当該パケットが有する前記ペイロードにおいて出現する回数である第３の数をカウントし、
（３）当該パケットにおける前記全ての第２の組み合わせのそれぞれについてカウントすることで得られた複数の前記第３の数に基づいて、当該パケットにおいて当該第２の組み合わせが出現する確率である複数の第２の確率を算出し、
（４）当該パケットに対して算出した前記複数の第２の確率の対数の総和を前記ペイロードのペイロード長で規定される規定値で除算することでスコアを算出し、
（５）当該パケットに対して算出した前記スコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが異常であることを出力する
請求項１から４のいずれか１項に記載の異常検知方法。
【請求項６】
前記メモリは、前記全ての第１の組み合わせのそれぞれにおける前記第１の数に基づく第４の数を前記異常検知モデルとして記憶しており、
前記異常検知方法では、前記プロセッサが、さらに、
カウントした前記第３の数を用いて、前記異常検知モデルに含まれる前記第４の数を更新する
請求項５に記載の異常検知方法。
【請求項７】
前記異常検知方法では、前記プロセッサが、さらに、
取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットが有するヘッダに応じて当該学習用パケットを複数のモデルのいずれか１つに分類し、
前記複数のモデルのそれぞれについて、
（１）さらに、カウントした前記第１の数を用いて、前記複数の学習用パケットのうち当該モデルに分類された複数の学習用パケットにおいて、前記全ての第１の組み合わせのそれぞれが出現する回数である第５の数を算出し、
（２）当該モデルに分類された前記複数の学習用パケットから抽出した前記全ての第１の組み合わせのそれぞれについて、算出した前記第５の数の全てに、正の数を加算することで前記複数の第６の数を算出し、
（３）抽出した前記全ての第１の組み合わせのそれぞれについて、算出した前記複数の第６の数に基づいて、当該モデルに分類された前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出する
請求項５に記載の異常検知方法。
【請求項８】
前記メモリは、前記複数のモデル毎に、前記所定の閾値を記憶しており、
前記異常検知方法では、前記プロセッサが、さらに、
取得した前記複数のパケットのそれぞれを、当該パケットが有するヘッダに応じて複数のモデルのいずれか１つに分類し、
前記出力では、算出した前記スコアが、当該スコアが算出されたパケットが分類されたモデルに対応する前記所定の閾値を超えている場合、当該パケットが異常であることを出力する
請求項７に記載の異常検知方法。
【請求項９】
前記複数のモデルのそれぞれは、前記パケットの宛先ＩＰ、宛先ポート、送信元ＩＰ、及びプロトコルの少なくとも１つにより分類されるモデルである
請求項７または８に記載の異常検知方法。
【請求項１０】
前記メモリは、前記複数のモデル毎における、前記全ての第１の組み合わせのそれぞれにおける前記第５の数を前記異常検知モデルとして記憶しており、
前記異常検知方法では、前記プロセッサが、さらに、
カウントした前記第３の数を用いて、前記異常検知モデルに含まれる前記第５の数を更新する
請求項７から９のいずれか１項に記載の異常検知方法。
【請求項１１】
監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知するための異常検知モデルを学習する学習装置が実行する学習方法であって、
前記学習装置は、プロセッサおよびメモリを備え、
前記学習方法では、前記プロセッサが、
複数の学習用パケットを取得し、
取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、
前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、
抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、
算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させる
学習方法。
【請求項１２】
監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知する異常検知装置であって、
前記異常検知装置は、プロセッサおよびメモリを備え、
前記メモリは、複数の学習用パケットを用いた学習により生成された異常検知モデルを記憶しており、
前記プロセッサは、
前記複数の学習用パケットを取得し、
取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、
前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、
抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、
算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させ、
複数のパケットを取得し、
取得した複数のパケットのそれぞれについて、当該パケットに対して算出したスコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが以上であることを出力する
異常検知装置。
【請求項１３】
監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知するための異常検知モデルを学習する学習装置であって、
前記学習装置は、プロセッサおよびメモリを備え、
前記プロセッサは、
複数の学習用パケットを取得し、
取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、
前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、
抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、
算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させる
学習装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、学習モデルを用いて複数のパケットにおける異常を検知する異常検知方法および異常検知装置、並びに、当該学習モデルの学習方法および学習装置に関する。
【背景技術】
【０００２】
特許文献１では、Ｎグラムを用いてデータの異常検知を行う方法が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００９−５２３２７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本開示は、異常なパケットを、精度よく特定することができる異常検知方法、または、精度よく特定するための異常検知モデルを学習する学習方法などを提供する。
【課題を解決するための手段】
【０００５】
本開示の一態様に係る異常検知方法は、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知する異常検知装置が実行する異常検知方法であって、前記異常検知装置は、プロセッサおよびメモリを備え、前記メモリは、複数の学習用パケットを用いた学習により生成された異常検知モデルを記憶しており、前記異常検知方法では、前記プロセッサが、前記複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させ、複数のパケットを取得し、取得した複数のパケットのそれぞれについて、当該パケットに対して算出したスコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが以上であることを出力する。
【０００６】
また、本開示の一態様に係る学習方法は、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知するための異常検知モデルを学習する学習装置が実行する学習方法であって、前記学習装置は、プロセッサおよびメモリを備え、前記学習方法では、前記プロセッサが、複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させる。
【０００７】
なお、これらの全般的または具体的な態様は、システム、装置、集積回路、コンピュータプログラムまたはコンピュータ読み取り可能なＣＤ−ＲＯＭなどの記録媒体で実現されてもよく、システム、装置、集積回路、コンピュータプログラムおよび記録媒体の任意な組み合わせで実現されてもよい。
【発明の効果】
【０００８】
本開示における異常検知方法、学習方法、異常検知装置、および、学習装置を用いることで、異常なパケットを精度よく特定することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態に係る異常検知システムの概略図である。
【図２】図２は、実施の形態に係る異常検知装置のハードウェア構成の一例を示すブロック図である。
【図３】図３は、本実施の形態における異常検知装置の機能構成の一例を示すブロック図である。
【図４Ａ】図４Ａは、Ｅｔｈｅｒｎｅｔフレームの構造を示す図である。
【図４Ｂ】図４Ｂは、ＴＣＰプロトコルのパケット構造の一例を示す図である。
【図５】図５は、異常検知モデルＤＢが保持する異常検知モデルの例を示す図である。
【図６】図６は、異常検知モデルＤＢが保持する異常検知モデルの例を示す図である。
【図７】図７は、異常検知モデルＤＢが保持する異常検知モデルの例を示す図である。
【図８】図８は、異常検知モデルＤＢが保持する異常検知モデルの例を示す図である。
【図９】図９は、宛先ポートとアラート閾値とが対応付けられた対応情報を示す図である。
【図１０】図１０は、異常検知装置における動作の概要を示すフローチャートである。
【図１１】図１１は、異常検知装置における学習処理の詳細の一例を示すフローチャートである。
【図１２】図１２は、アラート閾値決定処理の詳細の一例を示すフローチャートである。
【図１３】図１３は、アラート閾値決定処理の詳細の他の一例を示すフローチャートである。
【図１４】図１４は、異常検知装置における検査処理の詳細の一例を示すフローチャートである。
【図１５】図１５は、ＦＴＰプロトコルにおいて評価を行った場合の本実施の形態に係る異常検知方法と他の手法とを比較した実験結果を示す図である。
【図１６】図１６は、ＴＥＬＮＥＴプロトコルにおいて評価を行った場合の本実施の形態に係る異常検知方法と他の手法とを比較した実験結果を示す図である。
【発明を実施するための形態】
【００１０】
（本発明の基礎となった知見）
［１−１  背景］
近年、制御システム（工場、プラント、重要インフラなど）に対するサイバー攻撃の脅威が高まり、サイバー攻撃による被害が増加傾向にある。上記のような制御システムの被害が増加してきた理由として、下記の事項が指摘される。
【００１１】
（１）信頼性や制御の利便性を向上させるために、制御システムを含むシステム間は、相互接続されるようになった。このため、制御システムは、外部にさらされることとなり、サイバーセキュリティの脅威を増加させることに至ったと考えられる。
【００１２】
（２）システムの相互接続性、汎用性を上げるために、制御システムの内部ネットワークは、Ｍｏｄｂｕｓ、ＥｔｈｅｒＣＡＴ、ＢＡＣｎｅｔなどのオープンプロトコルを用いた通信を行うようになった。このため、制御システムは、マルウェアの感染などのような攻撃の可能性を飛躍的に高めることに繋がったと考えられる。
【００１３】
（３）制御システムには、セキュリティ対策が施されていない場合が多く、制御システムでは、１つのシステムを何十年にも渡って使用することが多い。このため、このような制御システムでは、使用期間中にＯＳ等のサポートが終了してＰＣ端末にセキュリティパッチの適用が出来ないケース、または、ウィルス対策ソフトを導入できないケースがたびたび見受けられる。
【００１４】
上記（１）及び（２）については、産業的なメリットが非常に大きいことから、これらの傾向は今後ますます拡大していくものと考えられている。本開示では、上記（３）に示すようにセキュリティ対策の導入や設備の変更が容易ではない制御システムのセキュリティを確保するため、ネットワークレベルでの侵入検知技術に着目する。ネットワーク侵入検知システム（ＮＩＤＳ：Network-based Intrusion Detection System）は、対象とするネットワークをパッシブにモニタリングするシステムであり、設備に直接的な変更を加える必要がない。このため、可用性が重視される制御システムにおいても導入しやすいという利点がある。
【００１５】
［１−１−１  侵入検知システムの種類と性質］
侵入検知システム（ＩＤＳ：Intrusion Detection System）は一般にホストベースＩＤＳ（ＨＩＤＳ：Host-based Intrusion Detection System）とネットワークベースＩＤＳ（ＮＩＤＳ）に分類される。制御システムにおいては、ＮＩＤＳを利用することが一般的である。制御システムにおいてＮＩＤＳの利用が好ましい点として、生産設備に直接手を加えずに済む点が挙げられる。ＮＩＤＳであれば、監視対象となる制御機器のＯＳ、リソースなどに無関係に導入できる。一方で、ウィルス検知ソフトなどのＨＩＤＳでは、ウィルスのスキャン時に端末に大きな負荷がかかり、生産に関わるソフトウェアの処理速度が下がって生産活動への影響が発生する可能性などが存在する。
【００１６】
またＮＩＤＳは更にシグネチャ／ルール方式とアノマリ方式とに大別され、アノマリ方式のＮＩＤＳは更にフローベースとペイロードベースとに分類される。シグネチャ／ルール方式のＮＩＤＳは、一般によく利用されているものであり、ペイロードに含まれる特定のバイト列のパターンを見つけ出した場合、または、通信量が予め定められた闘値を超えた場合にアラートを発するものである。フローペースのＮＩＤＳではパケットのヘッダのみを観測し、当該ネットワークにおけるトラフィックのサイズや周期などのフロー情報に関して定常状態のモデルを生成し、定常状態から逸脱するようなトラフィックを検知した場合にアラートを発する。フローペースのＮＩＤＳではパケットのヘッダ情報しか用いないため、暗号化された通信、または、ペイロードを伴わない通信に対しても異常を検知できる。一方で、ペイロードベースのＮＩＤＳでは、パケットのペイロード情報を観測し、そのペイロードが通常の通信内容から逸脱していないかどうかを判断する。フローベースの方式ではシステムのメンテナンス、非定常的なファイル転送など、検知したくない状態の変化に対して敏感に反応してしまう恐れがあるが、ペイロードベースの方式はその恐れが少ないし、フロー情報には反映されない巧妙な攻撃を検知できる可能性がある。
【００１７】
［１−１−２  本開示の概要と効果］
本開示では新たなペイロードベースの異常検知方法を説明する。本開示の異常検知方法に、ペイロードベースの異常検知技術を採用した理由として、下記の点が挙げられる。
【００１８】
・制御システムが用いられる環境では多くのオペレーションは自動化されている。しかし、制御システムには、人間による操作時、メンテナンス時、製造物の変更時などには多くの非定常的なオペレーションが入る。フローベースＮＩＤＳでは、このような非定常的なオペレーションが多く検知されてしまう恐れがある。一方で、ペイロードベースＮＩＤＳでは、オペレーションの内容自体に普遍性があれば誤検知を防ぐことができるという利点がある。
【００１９】
・非常に精巧に作りこまれたマルウェアの場合、フロー情報に現れないような巧妙な攻撃が仕掛けられた場合に、制御システムでは、パケットのペイロードを監視しないとパケットの異常を検知できない恐れがある。
【００２０】
・フローベースのＮＩＤＳでは、制御システムが悪意を持った正規のオペレータにより操作される場合の異常、また正規のオペレータにより誤って異常パラメータが入力される場合の異常を、フローとしては正常なものと一致するため検知できない。ペイロードベースＮＩＤＳではこのような異常を検知することも可能である。
【００２１】
本開示の異常検知方法などでは以下の効果が奏される。
【００２２】
・本開示の異常検知方法は、パケットのペイロードのＮ−ｇｒａｍ情報を利用することで、高い性能（低誤検知率、高検知率）を実現できる。
【００２３】
・本開示の異常検知方法は、デプロイする環境に応じてチューニングが行う必要性が無く、膨大なネットワーク環境においても自動で異常検知システムを構成するのに適している。
【００２４】
・本開示の異常検知方法は、比較的チューニングの手間が少ない既存手法であるＰＡＹＬ、ＡＮＡＧＲＡＭよりも、１９９９  ＤＡＲＰＡ  ＩＤＳ  Ｄａｔａ  ＳｅｔのＦＴＰプロトコル、ＴＥＬ−ＮＥＴプロトコルの異常検知性能において優れた性能を発揮することができる。
【００２５】
［１−２  基本的な技術］
本開示の異常検知方法を説明する前に、本開示で用いられている基本的な技術についての説明を行う。
【００２６】
［１−２−１  Ｎ−ｇｒａｍ］
Ｎ−ｇｒａｍは与えられた文字、単語などの要素から成る系列データに対し、Ｎ個の連続する並びのことである。例えばＤＮＡの塩基配列において、・・・ＡＧＣＴＴＣＧＡ・・・という列が与えられた場合、この列に現れる１−ｇｒａｍは・・・、Ａ，Ｇ，Ｃ，Ｔ，Ｔ，Ｃ，Ｇ，Ａ，・・・であり、２−ｇｒａｍは・・・，ＡＧ，ＧＣ，ＣＴ，ＴＴ，ＴＣ，ＣＧ，ＧＡ，・・・であり、３−ｇｒａｍは・・・，ＡＧＣ，ＧＣＴ，ＣＴＴ，ＴＴＣ，ＴＣＧ，ＣＧＡ，・・・である。例えば文中に・・・ｔｏ  ｂｅ  ｏｒ  ｎｏｔ  ｔｏ  ｂｅ・・・という列が現れたとき、各要素を単語とみなすと、この列に現れる１−ｇｒａｍは・・・，ｔｏ，ｂｅ，ｏｒ，ｎｏｔ，ｔｏ，ｂｅ，・・・であり、２−ｇｒａｍは・・・，ｔｏ  ｂｅ，ｂｅ  ｏｒ，ｏｒ  ｎｏｔ，ｎｏｔ  ｔｏ，ｔｏ  ｂｅ，・・・であり、３−ｇｒａｍは・・・，ｔｏ  ｂｅ  ｏｒ，ｂｅ  ｏｒ  ｎｏｔ，ｏｒ  ｎｏｔ  ｔｏ，ｎｏｔ  ｔｏ  ｂｅ，・・・である。
【００２７】
例えばＮ−ｇｒａｍを利用すると、単にＮ−ｇｒａｍの出現回数をベクトル化することで系列データを特徴抽出することができる。ある系列データに対して、それぞれの要素が取り得る値の数をＭ個、系列データの長さをＬ個とした場合、この系列データとして考えられるパターンはＭＬ通り存在する。しかし、例えば２−ｇｒａｍの出現回数を特徴として用いると、この系列データをＭ２次元のべクトルとして扱うことができるため、扱いやすいデータとなる。Ｎ−ｇｒａｍは自然言語処理の分野または生命科学の分野で用いられることが多いが、ペイロード異常検知においても有効なことが過去の研究によって示されている。
【００２８】
［１−２−２  Ｎ−ｇｒａｍを用いた系列生成モデル］
上述の通り、Ｎ−ｇｒａｍは系列情報を扱う際に有用なモデルである。Ｎ−ｇｒａｍを用いると非常にシンプルな系列の生成モデルを構築することができる。Ｎ−ｇｒａｍを用いた系列の生成モデルでは、Ｐｒ（ｘｉ｜ｘｉ−（ｎ−１），．．．，ｘｉ−１）と扱う。すなわち、ある要素が出力される確率は、直前のＮ−１個の要素だけで決定されると仮定する。もちろんこの仮定はほとんどの場合正しくないが、系列が与えられた場合に、その系列が発生する尤度を得ること等ができる点で便利である。例えばｘ１，ｘ２，．．．，ｘｌを対象の系列データとするとき，このデータが生成される確率はＰｒ（ｘ１，ｘ２，．．．，ｘｌ）で表現されるが、２−ｇｒａｍを用いた生成モデルでは、これは下記のように確率の積に分解できる。
【００２９】
Ｐｒ（ｘ１，ｘ２，．．．，ｘｌ）  （式１）
＝Ｐｒ（ｘ１）・Ｐｒ（ｘ２｜ｘ１）・Ｐｒ（ｘ３｜ｘ１，ｘ２）      
・・・Ｐｒ（ｘｌｘ１，ｘ２，．．．，ｘｌ−１）  （式２）
＝Ｐ（ｘ１｜ｓｔａｒｔ）・Ｐｒ（ｘ２｜ｘ１）・Ｐｒ（ｘ３｜ｘ２）      
・・・Ｐｒ（ｘｌ｜ｘｌ−１）  （式３）
【００３０】
先頭の要素のみ、先頭にｘ１が出現する確率を利用し、以降の文字が出現する確率は、その直前の要素が出現する確率のみに依存するという性質を用いて確率を算出する。最も単純な手法では、取りうる要素の数をＭ，２−ｇｒａｍ  ｘｉ，ｘｊが出現した回数をｋｘｉ，ｘｊとすると、次の式４で各項の確率を定める。
【００３１】
【数１】
2019110513.tif 000003
【００３２】
本開示の異常検知方法はペイロードに含まれるバイト列のＮ−ｇｒａｍを用いてモデリングを行ない異常なペイロード列を検知する方法であり、検知性能の高さとチューニングの容易さの点で従来技術に対して優位性がある。
【００３３】
［１−３  既存手法］
既存のペイロードベース異常検知方法の紹介を行う。ここで挙げる異常検知方法は、例えばＴＣＰ（Transmission Control Protocol）／ＵＤＰ（User Datagram Protocol）レイヤーのペイロード（図４Ａの構造をしたパケットのＴＣＰ／ＵＤＰペイロード部）を利用して異常検知を行う。しかし勿論、検知対象はＴＣＰ／ＵＤＰ上のプロトコルに限定されるわけではなく、他のプロトコルのペイロードを用いても同様に異常検知を行うことができる。また、各方法は事前の知識を必要としない。すなわち、プロトコル専用のパーサを利用して、ペイロードの特定の要素を抽出する等の操作を行わない。Ｎ−ｇｒａｍをペイロードベースの異常検知方法として利用した代表的な先行例として、下記のＰＡＹＬ、ＰＯＳＥＩＤＯＮ、ＡＮＡＧＲＡＭが存在する。ＰＡＹＬ、ＰＯＳＥＩＤＯＮはともにｕｎｉｇｒａｍを用いて識別を行う例である。ＡＮＡＧＲＡＭはＮ−ｇｒａｍ（Ｎ＝３，５，７など）を用いて識別を行う例である。以下、３つの方法について順に説明する。
【００３４】
［１−３−１  ＰＡＹＬ］
ＰＡＹＬはペイロード列のｕｎｉｇｒａｍ情報を用いる手法であり、２００４年のＫｅ  Ｗａｎｇらによって提案された。ＰＡＹＬでは異常検知モデルを、パケットの宛先ＩＰ、パケットの宛先ポート、パケットペイロード長（１ｂｙｔｅ単位）でモデルを別々に学習する。学習フェーズでは、学習用のペイロード列全てを２５６次元のｕｎｉｇｒａｍのべクトルに変換し、各次元の平均と標準偏差の情報とを蓄積する。検知フェーズにおいても検査対象となるペイロードを２５６次元（１ｂｙｔｅ）のｕｎｉｇｒａｍベクトルに変換し、変換されたペクトルと学習時に蓄積した平均ベクトルとの間の簡易化されたマハラノビス距離を異常スコアとして算出する。異常スコアの算出には、下記の式５が用いられる。
【００３５】
【数２】
2019110513.tif 000004
【００３６】
ナイーブなＰＡＹＬの実装においては、ハイパーパラメータ（学習の前段階で人間が定める必要のあるパラメータ）は上式のαしか存在しないため、チューニングの必要性が少ない。また、データの追加学習は容易に可能である。ＰＡＹＬは、シンプルで優れた識別器であるが、ｕｎｉｇｒａｍを使うという性質上、並びに関する情報が一切失われてしまい、それが精度の悪化に繋がっていると考えられる。その後、ｕｎｉｇｒａｍを使うことによる弱点を克服するため、Ｎ−ｇｒａｍ（Ｎ≧２）を用いる手法が様々に考案されている。
【００３７】
つまり、ＰＡＹＬの問題点は、ｕｎｉｇｒａｍを使うため識別精度がその後提案された各種手法に比べてやや低い点である。
【００３８】
［１−３−２  ＰＯＳＥＩＤＯＮ］
ＰＡＹＬでは、パケットの役割ごとに異常検知モデルを切り分けたいという意図があったため、パケットのペイロード長ごとにモデルを分割していた。しかし、ペイロード長ではパケットの役割ごとにモデルを切り分けられない場合があると考え、別の情報を用いてモデルの分割を試みた手法が２００６年にＤａｍｉａｎｏ  Ｂｏｌｚｏｎｉらによって提案されたＰＯＳＥＩＤＯＮである。ＰＯＳＥＩＤＯＮでは、ペイロード間の距離尺度を定め、その距離尺度の下で近いパケット同士をクラスタリングし、そのクラスタ情報をペイロード長の代わりにモデルを分割するための情報として用いた。クラスタリングの手法としては自己組織化マップを用いている。このクラスタ情報をペイロード長の代わりに用いる点を除けばＰＯＳＥＩＤＯＮはＰＡＹＬと同一の異常検知手法である。ＰＯＳＥＩＤＯＮは適切な自己組織化マップを学習できた場合には高い識別精度を発揮する。しかし、自己組織化マップは非常に数多くのハイパーパラメータを持つ。このため、ＰＯＳＥＩＤＯＮでは、パケットが好ましいクラスタに分かれるようになるために、多くの試行や交差検証法によるチューニングが必要となるため、実用性は乏しい。
【００３９】
つまり、ＰＯＳＥＩＤＯＮの間題点は、下記の２点である。１点目は、自己組織化マップに多くのハイパーパラメータが存在するため、チューニングが非常に困難である点である。２点目は、自己組織化マップの学習に多くの時間や計算リソースが必要であり、実環境での利用に不向きである点である。
【００４０】
［１−３−３  ＡＮＡＧＲＡＭ］
ＡＮＡＧＲＡＭは、ＰＡＹＬを改良すべく２００６年にＫｅ  Ｗａｎｇらによって提案された手法である。ＰＡＹＬはＭｉｍｉｃｒｙ  Ａｔｔａｃｋ（モデルによる検知を回避しようとする攻撃）に対して脆弱であるという問題点が指摘されたが、この問題を回避するため、ＡＮＡＧＲＡＭではより大きなＮに対するＮ−ｇｒａｍモデリングを行っている。論文中では、各Ｎ−ｇｒａｍの出現回数情報も利用するｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄの手法と、各Ｎ−ｇｒａｍが出現したか否かのみを利用するｂｉｎａｒｙ−ｂａｓｅｄの手法が紹介されている。この２つの手法のうち、学習データのスパース性が高いためＢｉｎａｒｙ−ｂａｓｅｄのＡＮＡＧＲＡＭの方が、精度が良いとされている（以降単にＡＮＡＧＲＡＭと記述した場合はｂｉｎａｒｙ−ｂａｓｅｄのＡＮＡＧＲＡＭを指し示すこととする）。Ｎ−ｇｒａｍ情報は、Ｎの大きさに対し指数関数的に情報量が増加するため、ＡＮＡＧＲＡＭではブルームフィルタを使って効率的に学習対象のペイロード中に現れたＮ−ｇｒａｍ情報を保持している。ブルームフィルタは高速に動作し、メモリ利用量も膨大にはならないが、予め対象データに応じてフィルタサイズを決定する必要がある。フィルタサイズが小さすぎれば、これまでに観測していないＮ−ｇｒａｍを観測したものだと誤る恐れがあり、フィルタサイズが大きければメモリを大量に占有してしまう。またＡＮＡＧＲＡＭは、その性質上一度でも不正なＮ−ｇｒａｍを含むパケットを観測してしまうと、以降そのパケットに含まれていたＮ−ｇｒａｍを全て正常なものだと解釈してしまうため、著しく精度が劣化してしまう。これは例えば学習データ中に暗号化された文字列や、データのバイナリ列のようなランダム性の高いバイト列が含まれている場合に間題となる。ＡＮＡＧＲＡＭ（ｂｉｎａｒｙ−ｂａｓｅｄ）における異常スコアは、下記の式６により算出される。
【００４１】
【数３】
2019110513.tif 000005
【００４２】
一方、ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）における異常スコアは、下記の式７により算出される。
【００４３】
【数４】
2019110513.tif 000006
【００４４】
これらの式からもわかるように、ＡＮＡＧＲＡＭはｂｉｎａｒｙ−ｂａｓｅｄ版、ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ版ともに非常にシンプルな手法であり、ハイパーパラメータもほとんど存在しないため扱いやすい。
【００４５】
つまり、ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ、ｂｉｎａｒｙ−ｂａｓｅｄ）の問題点は、下記の３点である。１点目は、ＡＮＡＧＲＡＭでは、頻度に関する情報を落としてしまっているため、不正なパケットやランダム性の高いパケットの影響で正常でないパケットのＮ−ｇｒａｍを観測してしまった場合に、著しい精度の劣化に繋がる点である。２点目は、Ｎ≧４程度の大きなＮに対してＡＮＡＧＲＡＭを用いる場合、ブルームフィルタの利用が不可欠となるため、ブルームフィルタのサイズ設計を行う必要がある点である。３点目は、ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）のスコア算出の関数は経験的なものであり、確率論的な妥当性が無い点である。
【００４６】
以上のことから、本発明者らは、鋭意検討の上、異常なパケットを精度よく特定することができる異常検知方法、学習方法、異常検知装置、および、学習装置を見出すに至った。
【００４７】
本開示の一態様に係る異常検知方法は、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知する異常検知装置が実行する異常検知方法であって、前記異常検知装置は、プロセッサおよびメモリを備え、前記メモリは、複数の学習用パケットを用いた学習により生成された異常検知モデルを記憶しており、前記異常検知方法では、前記プロセッサが、前記複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させ、複数のパケットを取得し、取得した複数のパケットのそれぞれについて、当該パケットに対して算出したスコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが以上であることを出力する。
【００４８】
これによれば、ペイロードにおけるデータ単位の並び情報を考慮して異常検知モデルを学習しているため、異常なパケットを精度よく特定することができる。
【００４９】
また、学習において、スムージング処理を行うことで算出した第１の確率を用いているため、ノイズに対する頑健性を向上させることができる。
【００５０】
また、前記第１の確率の算出では、前記スムージング処理として、前記第１の数の全てに、正の数を加算することで複数の第２の数を算出し、抽出した前記全ての第１の組み合わせのそれぞれについて算出した前記複数の第２の数に基づいて、前記第１に確率を算出してもよい。
【００５１】
また、学習において、複数の第１の数の全てに正の数を加算することで算出した複数の第２の数に基づく第１の確率を用いているため、ノイズに対する頑健性を向上させることができる。
【００５２】
また、前記抽出では、Ｎ−ｇｒａｍを用いることで、前記Ｎ個のデータ単位の前記第１の組み合わせを抽出してもよい。
【００５３】
また、前記Ｎは、２または３であってもよい。
【００５４】
また、前記出力では、取得した前記複数のパケットのそれぞれについて、（１）当該パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第２の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第２の組み合わせを抽出し、（２）当該パケットから抽出した前記全ての第２の組み合わせのそれぞれについて、当該第２の組み合わせが、取得した当該パケットが有する前記ペイロードにおいて出現する回数である第３の数をカウントし、（３）当該パケットにおける前記全ての第２の組み合わせのそれぞれについてカウントすることで得られた複数の前記第３の数に基づいて、当該パケットにおいて当該第２の組み合わせが出現する確率である複数の第２の確率を算出し、（４）当該パケットに対して算出した前記複数の第２の確率の対数の総和を前記ペイロードのペイロード長で規定される規定値で除算することでスコアを算出し、（５）当該パケットに対して算出した前記スコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが異常であることを出力してもよい。
【００５５】
これによれば、ペイロードにおけるデータ単位の並び情報を考慮してスコアを算出しているため、異常なパケットを精度よく特定することができる。
【００５６】
また、前記メモリは、前記全ての第１の組み合わせのそれぞれにおける前記第１の数に基づく第４の数を前記異常検知モデルとして記憶しており、前記異常検知方法では、前記プロセッサが、さらに、カウントした前記第３の数を用いて、前記異常検知モデルに含まれる前記第４の数を更新してもよい。
【００５７】
このため、異常検知モデルを追加学習すること、または、古いデータを削除した異常検知モデルに更新することができる。よって、異常なパケットを精度よく特定することができる。
【００５８】
また、前記異常検知方法では、前記プロセッサが、さらに、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットが有するヘッダに応じて当該学習用パケットを複数のモデルのいずれか１つに分類し、前記複数のモデルのそれぞれについて、（１）さらに、カウントした前記第１の数を用いて、前記複数の学習用パケットのうち当該モデルに分類された複数の学習用パケットにおいて、前記全ての第１の組み合わせのそれぞれが出現する回数である第５の数を算出し、（２）当該モデルに分類された前記複数の学習用パケットから抽出した前記全ての第１の組み合わせのそれぞれについて、算出した前記第５の数の全てに、正の数を加算することで前記複数の第６の数を算出し、（３）抽出した前記全ての第１の組み合わせのそれぞれについて、算出した前記複数の第６の数に基づいて、当該モデルに分類された前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出してもよい。
【００５９】
また、前記メモリは、前記複数のモデル毎に、前記所定の閾値を記憶しており、前記異常検知方法では、前記プロセッサが、さらに、取得した前記複数のパケットのそれぞれを、当該パケットが有するヘッダに応じて複数のモデルのいずれか１つに分類し、前記出力では、算出した前記スコアが、当該スコアが算出されたパケットが分類されたモデルに対応する前記所定の閾値を超えている場合、当該パケットが異常であることを出力してもよい。
【００６０】
また、前記複数のモデルのそれぞれは、前記パケットの宛先ＩＰ、宛先ポート、送信元ＩＰ、及びプロトコルの少なくとも１つにより分類されるモデルであってもよい。
【００６１】
また、前記メモリは、前記複数のモデル毎における、前記全ての第１の組み合わせのそれぞれにおける前記第５の数を前記異常検知モデルとして記憶しており、前記異常検知方法では、前記プロセッサが、さらに、カウントした前記第３の数を用いて、前記異常検知モデルに含まれる前記第５の数を更新してもよい。
【００６２】
本開示の一態様に係る学習方法は、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知するための異常検知モデルを学習する学習装置が実行する学習方法であって、前記学習装置は、プロセッサおよびメモリを備え、前記学習方法では、前記プロセッサが、複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させる。
【００６３】
これによれば、ペイロードにおけるデータ単位の並び情報を考慮して異常検知モデルを学習しているため、異常なパケットを精度よく特定することができる。
【００６４】
また、学習において、複数の第１の数の全てに正の数を加算することで算出した複数の第１の数に基づく第１の確率を用いているため、ノイズに対する頑健性を向上させることができる。
【００６５】
なお、これらの全般的または具体的な態様は、システム、方法、集積回路、コンピュータプログラムまたはコンピュータ読み取り可能なＣＤ−ＲＯＭなどの記録媒体で実現されてもよく、システム、方法、集積回路、コンピュータプログラムまたは記録媒体の任意な組み合わせで実現されてもよい。
【００６６】
以下、本発明の一態様に係る異常検知方法、学習方法、異常検知装置、および、学習装置について、図面を参照しながら具体的に説明する。
【００６７】
なお、以下で説明する実施の形態は、いずれも本発明の一具体例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置及び接続形態、ステップ、ステップの順序などは、一例であり、本発明を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。
【００６８】
（実施の形態１）
［２−１  異常検知システムの構成］
まず、本実施の形態における異常検知システムの概略構成について説明する。
【００６９】
図１は、実施の形態に係る異常検知システムの概略図である。
【００７０】
具体的には、図１において、異常検知システム１は、異常検知装置１００、パケット収集装置２００、および、外部のネットワーク５００に通信接続されている監視対象３００を備える。異常検知システム１では、異常検知装置１００が監視対象３００内での通信、または、監視対象とネットワーク５００との間での通信に異常があるか否かを検知する。
【００７１】
監視対象３００は、異常検知の対象となるシステムである。監視対象３００は、例えば、化学プラント、制御システム、車載ネットワークシステムなどである。監視対象３００は、ハブ３１１、３１２、３２１、３２２と、ＳＣＡＤＡ（Supervisory Control And Data Acquisition）３１３と、ＰＬＣ（Programmable Logic Controller）３１４と、ＰＣ（Personal Computer）３１５、３２３、３２４と、ルータ４００とを備える制御システムである。
【００７２】
ルータ４００は、監視対象３００と外部のネットワーク５００との間において、データの送受信を中継する通信機器である。ルータ４００は、受信したデータを解析し、解析した結果に基づいてデータの転送経路を選択するなどのデータの転送制御を行う。
【００７３】
ハブ３１１、３２１は、例えば、スイッチングハブである。ハブ３１１は、ルータ４００、ハブ３１２、ＳＣＡＤＡ３１３、ハブ３２１、および、パケット収集装置２００と通信接続される。ハブ３２１は、ハブ３１１、ハブ３２２、および、パケット収集装置２００と通信接続される。ハブ３１１、３２１は、受信したデータを接続された機器のうち、受信したデータに含まれる宛先情報に基づく機器に転送する。ハブ３１１、３２１は、例えば、受信したデータをコピーし、コピーしたデータを出力するミラーポートを有する。ハブ３１１、３２１は、ミラーポートにおいて、パケット収集装置２００と接続されている。監視対象３００と外部のネットワーク５００との間で送受信される複数のパケットは、ハブ３１１、３２１のミラーポート経由で抽出され、パケット収集装置２００に送信される。
【００７４】
ハブ３１２、３２２は、例えば、スイッチングハブである。ハブ３１２は、ハブ３１１、ＰＬＣ３１４、および、ＰＣ３１５と通信接続される。ハブ３２２は、ハブ３２１およびＰＣ３２３、３２４と通信接続される。ハブ３１２、３２２は、ハブ３１１、３２１と同様に、受信したデータを接続された機器のうち、受信したデータに含まれる宛先情報に基づく機器に転送する。
【００７５】
ＳＣＡＤＡ３１３は、監視対象３００である制御システムのシステム監視、プロセス制御などを行うコンピュータである。
【００７６】
ＰＬＣ３１４は、各種機械を制御するための制御装置である。
【００７７】
ＰＣ３１５は、汎用のコンピュータである。
【００７８】
パケット収集装置２００は、監視対象３００のハブ３１１、３２１から送信された複数のパケットを受信し、受信した複数のパケットを記憶する装置である。パケット収集装置２００は、例えば、サーバである。パケット収集装置２００は、例えば１週間などの所定期間にわたって、監視対象３００から複数のパケットを受信し、所定期間分の複数のパケットを記憶する。パケット収集装置２００は、記憶した複数のパケットを異常検知装置１００に送信する。パケット収集装置２００は、また、異常検知装置１００が異常検知モデルを生成するための複数の学習用パケットを記憶していてもよい。複数の学習用パケットは、異常を有していない、正常なパケットにより構成される。
【００７９】
［２−２  異常検知装置の構成］
次に、異常検知装置１００のハードウェア構成について図２を用いて説明する。
【００８０】
図２は、実施の形態に係る異常検知装置のハードウェア構成の一例を示すブロック図である。
【００８１】
図２に示すように、異常検知装置１００は、ハードウェア構成として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、メインメモリ１０２と、ストレージ１０３と、通信ＩＦ（Ｉｎｔｅｒｆａｃｅ）１０４と、入力ＩＦ（Ｉｎｔｅｒｆａｃｅ）１０５と、ディスプレイ１０６とを備える。
【００８２】
ＣＰＵ１０１は、ストレージ１０３等に記憶された制御プログラムを実行するプロセッサの一例である。
【００８３】
メインメモリ１０２は、ＣＰＵ１０１が制御プログラムを実行するときに使用するワークエリアとして用いられる揮発性の記憶領域、つまりメモリの一例である。
【００８４】
ストレージ１０３は、制御プログラム、コンテンツなどを保持する不揮発性の記憶領域、つまり、メモリの一例である。
【００８５】
通信ＩＦ１０４は、通信ネットワークを介してパケット収集装置２００と通信する通信インタフェースである。通信ＩＦ１０４は、例えば、有線ＬＡＮインタフェースである。なお、通信ＩＦ１０４は、無線ＬＡＮインタフェースであってもよい。また、通信ＩＦ１０４は、ＬＡＮインタフェースに限らずに、パケット収集装置２００との間で通信接続を確立できる通信インタフェースであれば、どのような通信インタフェースであってもよい。
【００８６】
入力ＩＦ１０５は、例えば、テンキー、キーボード、マウスなどの入力装置である。
【００８７】
ディスプレイ１０６は、ＣＰＵ１０１での処理結果を表示する表示装置である。ディスプレイ１０６は、例えば、液晶ディスプレイ、有機ＥＬディスプレイである。
【００８８】
［２−３  異常検知装置の機能構成］
次に、異常検知装置１００の機能構成について、図３を用いて説明する。なお、異常検知装置１００は、異常を検知するための異常検知モデルの学習処理も行う学習装置の一例でもある。
【００８９】
図３は、本実施の形態における異常検知装置の機能構成の一例を示すブロック図である。
【００９０】
パケット収集装置２００に蓄積されている複数のパケットからなるデータ２１０は、学習用データ２１１と検査用データ２１２とを含む。
【００９１】
学習用データ２１１は、取得されたデータ２１０のうちで、機械学習による異常検知モデルを生成するためのデータである。検査用データ２１２は、取得されたデータ２１０のうちで、生成された異常検知モデルを用いて監視対象３００から得られたデータ２１０が異常か否かを判断する異常診断の対象となるデータである。なお、学習用データ２１１には、正常なデータだけでなく、異常なデータも含む取得された複数のパケットを用いることができる。例えば、学習用データ２１１は、データ２１０の始めの所定期間で取得されたデータであり、検査用データ２１２は、学習用データ２１１を取得した所定期間より後の期間において取得されたデータとしてもよい。また、検査用データ２１２は、異常検知モデルを更新するための学習用のデータとして用いられてもよい。
【００９２】
なお、複数のパケットは、例えば、図４Ｂに示すような、ＴＣＰプロトコルのパケットである。図４Ｂは、ＴＣＰプロトコルのパケット構造の一例を示す図である。ＴＣＰプロトコルの構造は、ＲＦＣ７９３により規定されている。
【００９３】
異常検知装置１００は、取得部１１０と、検知モデル学習部１２０と、異常検知モデルＤＢ（Ｄａｔａｂａｓｅ）１３０と、入力受付部１４０と、アラート閾値算出部１５０と、検知部１６０と、提示部１７０とを備える。
【００９４】
取得部１１０は、パケット収集装置２００から学習用データ２１１としての複数のパケットである複数の学習用パケットを取得する。取得部１１０は、パケット収集装置２００から検査用データ２１２としての複数のパケットを取得してもよい。取得部１１０は、例えば、ＣＰＵ１０１、メインメモリ１０２、ストレージ１０３、および、通信ＩＦ１０４などにより実現される。
【００９５】
検知モデル学習部１２０は、取得部１１０により取得された複数の学習用パケットを用いて学習処理を行うことで、異常検知モデルを生成する。具体的には、検知モデル学習部１２０は、取得部１１０により取得され複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての組み合わせであって、当該ペイロードにおける互いに連続している並び順でのＮ個のデータ単位の組み合わせを抽出する。ここで、抽出される組み合わせは、第１の組み合わせの一例である。ここで、Ａビット単位は、例えば、８ビット単位、つまり、１バイト単位である。なお、Ａは、８に限らずに、８以外の他の数値であってもよい。検知モデル学習部１２０は、Ｎ−ｇｒａｍを用いることで、Ｎ個のデータ単位の組み合わせを抽出する。ここで、Ｎは、例えば、２または３である。つまり、検知モデル学習部１２０は、２−ｇｒａｍまたは３−ｇｒａｍを用いることで、２個のデータ単位の組み合わせ、または、３個のデータ単位の組み合わせを抽出する。なお、検知モデル学習部１２０は、Ｎ−ｇｒａｍのように互いに連続している並び順でのＮ個のデータ単位の組み合わせに限らずに、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の組み合わせを抽出してもよい。
【００９６】
次に、検知モデル学習部１２０は、取得部１１０により取得された複数の学習用パケットの複数のペイロードを構成するデータ列から抽出した全ての組み合わせのそれぞれについて、当該組み合わせが当該学習用パケットにおいて出現する回数である第１の数をカウントする。検知モデル学習部１２０は、抽出した全ての組み合わせのそれぞれについて、カウントすることで得られた複数の第１の数の全てに、正の数を加算することで複数の第２の数を算出する。検知モデル学習部１２０は、抽出した全ての組み合わせのそれぞれについて算出した複数の第２の数に基づいて、複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出する。
【００９７】
なお、検知モデル学習部１２０は、複数の第１の数の全てに、正の数を加算することで複数の第２の数を算出し、複数の第２の数に基づいて、複数の第１の確率を算出するとしたが、これに限らない。検知モデル学習部１２０は、例えば、抽出した全ての組み合わせのそれぞれについて算出した複数の第１の数に基づいて、複数の学習用パケットにおいて当該組み合わせが出現する複数の確率を算出し、算出した複数の確率に正の数を加算することで複数の第１の確率を算出してもよい。
【００９８】
検知モデル学習部１２０は、取得部１１０により取得された複数の学習用パケットのそれぞれについて、さらに、当該学習用パケットが有するヘッダに応じて当該学習用パケットを複数のモデルのいずれか１つに分類してもよい。検知モデル学習部１２０は、複数の異常検知モデルを保持または学習しても良い。この場合、検知モデル学習部１２０は、この複数の異常検知モデルを、例えばパケットのヘッダに含まれる情報である、宛先ＩＰ、宛先ポート、送信元ＩＰ、及びプロトコルの少なくとも１つの値に応じて切り替えて学習または検査の処理を行う。
【００９９】
複数の学習用パケットを複数のモデルに分類する場合、検知モデル学習部１２０は、複数のモデルのそれぞれについて、カウントした第１の数を用いて、複数の学習用パケットのうち当該モデルに分類された複数の学習用パケットにおいて、全ての組み合わせのそれぞれが出現する回数である第５の数を算出してもよい。そして、検知モデル学習部１２０は、複数のモデルのそれぞれについて、当該モデルに分類された複数の学習用パケットから抽出した全ての組み合わせのそれぞれについて、算出した第５の数の全てに、正の数を加算することで複数の第６の数を算出する。その後、検知モデル学習部１２０は、複数のモデルのそれぞれについて抽出した全ての組み合わせのそれぞれについて、算出した複数の第６の数に基づいて、当該モデルに分類された複数の学習用パケットにおいて当該組み合わせが出現する確率を第１の確率として算出してもよい。
【０１００】
検知モデル学習部１２０は、例えば、ＣＰＵ１０１、メインメモリ１０２、ストレージ１０３などにより実現される。
【０１０１】
例えば、検知モデル学習部１２０は、次のような処理を行うことで学習を実行する。
【０１０２】
異常検知方法における学習方法では、パケットの宛先ＩＰ、宛先ポートごとにモデルを分割することになるため、学習フェーズにおいては、ユニークな（宛先ＩＰ、宛先ポート）ペアの数だけモデル
【数５】
2019110513.tif 000007
を初期化しておく。各モデルは、ペイロードの２−ｇｒａｍを記録する
【数６】
2019110513.tif 000008
を保持しており、その初期値は６５５３６次元の零ベクトルである。その後、学習対象となる全パケットに対し、学習対象のパケットの（宛先ＩＰ、宛先ポート）のペアが（ｉｐｉ，Ｐｏｒｔｊ）の場合、各パケットを、下記の方法で２−ｇｒａｍのベクトル（∈Ｎ６５５３６）に変換し、
【数７】
2019110513.tif 000009
に加算する。各バケットの２−ｇｒａｍベクトルへの変換法は下記の通りである：パケットのペイロードのバイト列が｛Ｘ１，Ｘ２，Ｘ３，．．．，ＸＬ｝であったとする（Ｌはペイロード長）。ここで各Ｘｋ（ｋ＝１，．．．，Ｌ）∈｛０，．．．，２５５｝である。２−ｇｒａｍを取得する場合、上記バイト列から次の２−ｇｒａｍの列を得る。｛Ｘ１Ｘ２，Ｘ２Ｘ３，．．．，ＸＬ−１ＸＬ｝。この２−ｇｒａｍの列から、次のルールで２−ｇｒａｍベクトルを生成する：
１．空のベクトルｙ（∈Ｎ６５５３６）を準備する。
２．各２−ｇｒａｍ  ＸｉＸｉ＋１（ｉ＝１，．．．，Ｌ一１）に対して、ｔｉ＝２５６＊Ｘｉ＋Ｘｉ＋１を計算する。（ｔｉ∈｛０，．．．，６５５３５｝）
３．全てのｉ＝１，．．．，Ｌ一１に対してｙ［ｔｉ］＋１を実行する（ここでｙ［ｔｉ］はベクトルｙのｔｉ番目の要素を表す）。
４．パケットの２−ｇｒａｍベクトルへの変換結果ｙを得る。
【０１０３】
全パケットの学習が完了した段階で、各モデル
【数８】
2019110513.tif 000010
は、どの２−ｇｒａｍが何回出現したかを表すベクトル
【数９】
2019110513.tif 000011
を保持している。この２−ｇｒａｍが何回出現したかを表すベクトルは、全ての組み合わせのそれぞれについて、カウントされることにより得られた第１の数の一例である。このベクトルを用いて、各２−ｇｒａｍの出現確率を算出する。最も単純に考えると、２−ｇｒａｍのインデックスをｋ∈｛０，１，．．．，６５５３５｝としたとき、２−ｇｒａｍ  ｇｋが出現する確率ｐ（ｇｋ）は、学習対象バケットに現れた２−ｇｒａｍ  ｇｋの出現回数をｘｉ，ｊ［ｋ］としたとき、下記の式８で表すことができる。式８で表される出現確率は、複数の第１の確率の一例である。
【０１０４】
【数１０】
2019110513.tif 000012
【０１０５】
しかし、この式で確率を表現した場合、学習対象パケットに１度も現れなかった２−ｇｒａｍの確率を０とすることになり、後述するスコアリング手法を用いるとスコアが発散してしまう。この事象を回避するために、既にいくつかの方法が提案されているが、本実施の形態ではスムージング処理の１つであるＬａｐｌａｃｅ  ｓｍｏｏｔｈｉｎｇと呼ばれる手法を採用する。Ｌａｐｌａｃｅ  ｓｍｏｏｔｈｉｎｇとは、カテゴリデータをスムージングする手法の１種で、Ｎ回の試行の多項分布から得られたデータｘ＝（ｘ１，．．．，ｘｄ）があるとき、この多項分布のパラメータθ＝（θ１，．．．，θｄ）を下記の式９により推定する手法のことである。
【０１０６】
【数１１】
2019110513.tif 000013
【０１０７】
すなわち全てのカテゴリに対し、出現回数ｘｉをα回分水増しして式１０を適用することに相当する。通常αは１，０．１，０．０１などの値を選ぶ。この方法を提案手法に適用すると、下記の式を得る。ここで、αは、加算する正の数の一例である。
【０１０８】
【数１２】
2019110513.tif 000014
【０１０９】
この式により得られたｐ（ｇｋ）を２−ｇｒａｍ  ｇｋの出現確率とみなす。つまり、式１０により得られた出現確率は、第１の確率の一例である。
【０１１０】
なお、スムージング処理としては、Ｌａｐｌａｃｅ  ｓｍｏｏｔｈｉｎｇに限らずに、Ｋｎｅｓｅｒ−Ｎｅｙ  ｓｍｏｏｔｈｉｎｇなど他のスムージング処理を行ってもよい。
【０１１１】
異常検知モデルＤＢ１３０は、検知モデル学習部１２０により生成された、つまり算出された複数の第１の確率を異常検知モデルとして記憶する。異常検知モデルＤＢ１３０は、全ての第１の組み合わせのそれぞれにおける第１の数に基づく第４の数を異常検知モデルとして記憶していてもよい。なお、異常検知モデルにおいて記憶される第１の数に基づく第４の数は、第１の数であってもよいし、第２の数であってもよいし、第５の数であってもよいし、第６の数であってもよい。
【０１１２】
図５〜図８は、異常検知モデルＤＢが保持する異常検知モデルの例を示す図である。
【０１１３】
図５に示す異常検知モデル１３１は、モデルＩＤ、宛先ＩＰ、宛先ポート、Ｎ−ｇｒａｍ取得対象データ、Ｎ−ｇｒａｍ出現回数、および、Ｎ−ｇｒａｍ出現確率の各項目のデータにより構成される。モデルＩＤは、複数のモデルのそれぞれを識別するための、当該モデルに一意に付与された識別子である。宛先ＩＰは、当該モデルに対応付けられたパケットの宛先ＩＰを示す情報である。宛先ポートは、当該モデルに対応付けられたパケットの宛先ポートを示す情報である。Ｎ−ｇｒａｍ取得対象データは、当該モデルに対応付けられたＮ−ｇｒａｍ取得の対象となるデータを示す情報であり、例えば各プロトコルのパケットのデータ部を示すペイロードである。Ｎ−ｇｒａｍ出現回数ｎ１〜ｎ６は、当該モデルに対応付けられたパケットのＮ−ｇｒａｍの出現回数、つまり、第６の数の一例である。Ｎ−ｇｒａｍ出現回数ｎ１〜ｎ６は、全てのＮ−ｇｒａｍのそれぞれの出現回数で表されるため、全てのＮ−ｇｒａｍの数に対応する次元のベクトルデータである。つまり、ｎ１は、例えば、［００：５１回，０１：１２回，．．．，ＦＦ：３１回］で表される。よって、ｎｋ（ｋは、１〜６の整数）は、例えば、［ｎｋ１、ｎｋ２、・・・、ｎｋＬ］で表される。Ｎ−ｇｒａｍ出現確率Ｐｒ１〜Ｐｒ６は、当該モデルに対応付けられたパケットにおけるＮ−ｇｒａｍの出現確率、つまり、第１の確率の一例である。Ｎ−ｇｒａｍ出現確率Ｐｒ１〜Ｐｒ６も、Ｎ−ｇｒａｍ出現回数ｎ１〜ｎ６と同様に、全てのＮ−ｇｒａｍの数に対応する次元のベクトルデータである。つまり、Ｐｒ１は、例えば、［００：０．１，０１：０．０２，．．．，ＦＦ：０．０６］で表される。よって、Ｐｒｋ（ｋは、１〜６の整数）は、例えば、｛Ｐｒｋ１、Ｐｒｋ２、・・・、ＰｒｋＬ｝で表される。このように、異常検知モデル１３１では、宛先ＩＰおよび宛先ポートの組み合わせに応じて複数のモデルが分類される。
【０１１４】
つまり、検知モデル学習部１２０は、宛先のＩＰ、宛先ポートごとに学習し、学習した結果を異常検知モデル１３１として生成する。宛先ＩＰ、宛先ポートごとに異常検知モデルを学習する理由は、宛先ＩＰ、宛先ポートが同一のバケットには、似た役割を持つパケットが多いからである。
【０１１５】
図６に示す異常検知モデル１３２は、図５で示した異常検知モデル１３１に、さらに、Ｓｏｒｃｅ  ＩＰの項目を加えたモデルである。Ｓｏｒｃｅ  ＩＰは、当該モデルに対応付けられたパケットの送信元ＩＰを示す情報である。このように、異常検知モデル１３２では、宛先ＩＰおよび宛先ポートに加えて送信元ＩＰの組み合わせに応じて複数のモデルが分類される。
【０１１６】
図７に示す異常検知モデル１３３は、図６で示した異常検知モデル１３２の宛先ポートの項目を対象プロトコルの項目で置き換えたモデルである。対象プロトコルは、当該モデルに対応付けられたパケットのプロトコルを示す情報である。このように、異常検知モデル１３３では、宛先ＩＰ、送信元ＩＰおよび対象プロトコルの組み合わせに応じて複数のモデルが分類される。
【０１１７】
図８に示す異常検知モデル１３４は、図５で示した異常検知モデル１３１に、さらに、アラート閾値の項目を加えたモデルである。アラート閾値は、後述するが、例えばユーザの入力に応じて決定される閾値であって、パケットの異常を検知するための閾値である。アラート閾値は、パケットにおいて算出されるスコアとの比較対象となる閾値である。このように、異常検知モデル１３４は、モデルの分類に加えて、パケットの異常を検知するためのアラート閾値が対応付けられていてもよい。
【０１１８】
なお、図８に示す異常検知モデル１３４のように、モデルの分類にアラート閾値は必ずしも対応付けられていなくてもよい。
【０１１９】
なお、図５〜図８に示す異常検知モデル１３１〜１３４では、モデルの数は６つであるが、６つに限らずに、２以上の６以外の数であってもよい。
【０１２０】
図９は、宛先ポートとアラート閾値とが対応付けられた対応情報を示す図である。
【０１２１】
図９に示す対応情報１３５に示すように、アラート閾値は、モデル毎に対応付けられていなくてもよく、宛先ポートごとに対応付けられていてもよい。つまり、異常検知モデル１３１〜１３３のいずれか１つと、対応情報１３５とに応じて、各モデルにアラート閾値が対応付けられてもよい。
【０１２２】
異常検知モデルＤＢ１３０は、異常検知モデル１３１〜１３３のいずれか１つと、対応情報１３５とをセットで保持していてもよいし、異常検知モデル１３４のみを保持していてもよい。
【０１２３】
異常検知モデルＤＢ１３０は、例えば、ストレージ１０３などにより実現される。
【０１２４】
入力受付部１４０は、ユーザからの入力を受け付ける。入力受付部１４０は、ユーザから、例えば、監視対象３００から得られる複数のパケットのうち、監視対象のＩＰの範囲、および、ポートの範囲の少なくとも一方と、Ｎ−ｇｒａｍを抽出する範囲とを示す入力を受け付ける。ここでＮ−ｇｒａｍを抽出する範囲とは、例えば、異常検知モデル１３１〜１３４においてＮ−ｇｒａｍ取得対象データで示されるパケットの検査の対象とするデータ部のことであり、例えば、各プロトコルに対応するペイロードである。また、入力受付部１４０は、アラートを発生するためのアラート発生率に関するパラメータの入力を受け付ける。アラート発生率とは、例えば、ａ個のパケットに１つ、１日にｂ回など全ての組み合わせが発生する発生率について、当該発生率に基づく通常状態からの乖離が大きいと判断するため、つまり、当該パケットに異常が含まれると判断するための閾値である。ここで、入力受付部１４０は、上記パラメータを、複数のモデルにそれぞれ対応する複数のパラメータを受け付ける。なお、入力受付部１４０は、上記パラメータを、複数のモデルに共通する１つのパラメータとして受け付けてもよい。入力受付部１４０は、アラート閾値を示す入力を受け付けてもよい。アラート閾値は、例えば、後述するスコアについて、当該スコアに基づく通常状態からの乖離が大きいと判断するため、つまり、当該パケットに異常が含まれると判断するための全ての組み合わせの出現確率を基準として決定される閾値である。
【０１２５】
入力受付部１４０は、例えば、ＣＰＵ１０１、メインメモリ１０２、ストレージ１０３、入力ＩＦ１０５などにより実現される。
【０１２６】
アラート閾値算出部１５０は、入力受付部１４０により受け付けられた、アラート発生率に関するパラメータと、学習用パケットに対して算出されたスコアとに基づいてアラート閾値を算出する。アラート閾値算出部１５０は、学習用パケットにおいて算出された複数の第１の確率を後述する式１２に適用することで、学習用パケットに対するスコアを算出する。アラート閾値算出部１５０は、例えば、パラメータにより指定されたアラート発生率以下となるように、アラート閾値を算出する。アラート閾値算出部１５０は、複数のモデルにそれぞれ複数のパラメータが入力された場合には、複数のモデル毎のパラメータに基づいてアラート閾値を算出する。アラート閾値算出部１５０により算出された複数のモデル毎にアラート閾値は、異常検知モデルＤＢ１３０の異常検知モデルとして記憶される。アラート閾値算出部１５０は、例えば、ＣＰＵ１０１、メインメモリ１０２、ストレージ１０３などにより実現される。
【０１２７】
検知部１６０は、取得部１１０により取得された複数のパケットのそれぞれについて、異常があるか否かを検知する。具体的には、検知部１６０は、取得部１１０により取得された複数のパケットのそれぞれについて、以下の（１）〜（６）の処理を順に行う。
【０１２８】
（１）検知部１６０は、当該パケットに含まれるペイロードを構成するデータ列をＡビット単位で区切ることにより得られる複数個のデータ単位のうちＮ個のデータ単位の取り得る全ての第２の組み合わせであって、当該ペイロードにおける互いに連続している並び順でのＮ個のデータ単位の組み合わせを抽出する。ここで抽出される組み合わせは、第２の組み合わせの一例である。検知部１６０は、具体的には、検知モデル学習部１２０と同様にＮ−ｇｒａｍを用いることで、Ｎ個のデータ単位の組み合わせを抽出する。ここで、Ｎは、例えば、２または３である。つまり、検知部１６０は、２−ｇｒａｍまたは３−ｇｒａｍを用いることで、２個のデータ単位の組み合わせ、または、３個のデータ単位の組み合わせを抽出する。なお、検知部１６０は、Ｎ−ｇｒａｍのように互いに連続している並び順でのＮ個のデータ単位の組み合わせに限らずに、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の組み合わせを抽出してもよい。
【０１２９】
（２）検知部１６０は、当該パケットから抽出した全ての組み合わせのそれぞれについて、当該組み合わせが、取得した当該パケットが有するペイロードにおいて出現する回数である第３の数をカウントする。
【０１３０】
（３）検知部１６０は、当該パケットから抽出した全ての組み合わせのそれぞれについて、カウントすることで得られた複数の第３の数に基づいて、当該パケットにおいて当該組み合わせが出現する確率である複数の第２の確率を算出する。
【０１３１】
（４）検知部１６０は、当該パケットに対して算出した複数の第２の確率の対数の総和をペイロードのペイロード長で規定される規定値で除算することでスコアを算出する。
【０１３２】
（５）検知部１６０は、当該パケットに対して算出したスコアが、異常検知モデルＤＢ１３０に記憶されている異常検知モデルに基づく所定の閾値としてのアラート閾値を超えているか否かを判定する。検知部１６０は、アラート閾値を超えるスコアが算出されたパケットに異常があることを検知し、アラート閾値以下のスコアが算出されたパケットに異常が無いことを検知する。
【０１３３】
なお、検知部１６０は、検知モデル学習部１２０と同様に、取得部１１０において取得された複数のパケットのそれぞれを、当該パケットが有するヘッダに応じて複数のモデルのいずれか１つに分類してもよい。この場合、検知部１６０は、算出したスコアが、当該スコアが算出されたパケットが分類されたモデルに対応する所定の閾値を超えているか否かを判定してもよい。
【０１３４】
検知部１６０は、例えば、ＣＰＵ１０１、メインメモリ１０２、ストレージ１０３などにより実現される。
【０１３５】
例えば、検知部１６０は、次のような処理を行うことで検査を実行する。
【０１３６】
本実施の形態に係る異常検知方法では、検知部１６０は、ＰＡＹＬやＡＮＡＧＲＡＭと同様、検査フェーズでは各パケットに対して異常スコアを算出する。異常スコアの算出対象となる各パケットは、学習フェーズに行った変換法と同様に２−ｇｒａｍのベクトルｙ（∈Ｎ６５５３６）に変換する。変換されたベクトルに対し、次の式を使ってスコアリングを行う。
【０１３７】
【数１３】
2019110513.tif 000015
【０１３８】
式１１において、Ｌ乗根を採るのは、異なる長さのペイロードに対して平等なスコアの比較が行なえるようにするためである。このスコアを直接計算するのは指数演算が入ってしまい負荷が高いため、またスコアが大きなパケットほど異常度が高いパケットとして扱うため、上記ｓｃｏｒｅ’の負の対数をスコアとして扱うことにする。すなわち、ｓｃｏｒｅの算出は下記の式１２によって行われる。
【０１３９】
【数１４】
2019110513.tif 000016
【０１４０】
ｓｃｏｒｅは値が大きければ大きいほど異常度が高いとみなせる。このスコアリングの仕方はＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）のものと比較して合理的なものであり、後述の評価結果からもわかるように、ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）よりも高い性能を発揮する。
【０１４１】
提示部１７０は、検知部１６０において異常があることを検知されたパケットについて、当該パケットに異常があることを示す情報であるアラートを出力する。なお、提示部１７０は、算出されたスコアを出力してもよい。提示部１７０は、スコアを提示する場合、アラートを出力するか否かにかかわらずスコアを出力してもよく、スコアを出力し、アラートを出力しなくてもよい。提示部１７０は、例えば、ディスプレイ１０６にアラートを示す画像を表示させることで、ユーザにアラートを提示する。提示部１７０は、例えば、ＣＰＵ１０１、メインメモリ１０２、ストレージ１０３、ディスプレイ１０６などにより実現される。
【０１４２】
なお、提示部１７０は、異常検知装置１００がスピーカを有している場合には、音によってスピーカからユーザにアラートを提示してもよい。また、提示部１７０は、アラートを示す情報をスマートフォンなどの情報端末に出力することにより、情報端末にアラートを提示させてもよい。
【０１４３】
［２−４  動作］
次に、異常検知装置１００における動作について説明する。
【０１４４】
図１０は、異常検知装置における動作の概要を示すフローチャートである。
【０１４５】
異常検知装置１００は、まず、取得部１１０により取得された学習用データ２１１である複数の学習用パケットを用いて、学習処理を実行する（Ｓ１）。これにより、異常検知装置１００では、複数のモデル毎に異常検知モデルが生成される。学習処理の詳細は、後述する。
【０１４６】
次に、異常検知装置１００は、アラート閾値決定処理を実行する（Ｓ２）。ここれにより、異常検知装置１００では、アラート閾値が異常検知モデルのモデル毎に対応付けられる。アラート閾値決定処理の詳細は、後述する。
【０１４７】
最後に、異常検知装置１００は、取得部１１０により取得された検査用データ２１２である複数のパケットを用いて、検査処理を実行する（Ｓ３）。これにより、異常検知装置１００は、複数のパケットのそれぞれについて、異常があるか否かを検知する。検査処理の詳細は、後述する。
【０１４８】
次に、学習処理、つまり学習方法の詳細について説明する。
【０１４９】
図１１は、異常検知装置における学習処理の詳細の一例を示すフローチャートである。
【０１５０】
まず、異常検知装置１００では、入力受付部１４０が監視対象３００から得られる複数のパケットのうち、監視対象のＩＰの範囲、および、ポートの範囲の少なくとも一方と、Ｎ−ｇｒａｍを抽出する範囲とを示す入力を受け付ける（Ｓ１１）。また、入力受付部１４０は、このとき、学習用パケットのプロトコルの識別が必要か否かを示す情報の入力をユーザから受け付けてもよい。ステップＳ１１の処理は、一度実行されればよく、学習の度に実行されなくてもよい。
【０１５１】
次に、取得部１１０は、学習用データ２１１である複数の学習用パケットを取得する（Ｓ１２）。
【０１５２】
以下、検知モデル学習部１２０は、複数の学習用パケットのそれぞれについて、ステップＳ１３〜ステップＳ２０の処理を繰り返す。
【０１５３】
検知モデル学習部１２０は、学習を実行するのに、学習用パケットのプロトコルの識別が必要であるか否かを判定する（Ｓ１３）。検知モデル学習部１２０は、例えば、ステップＳ１１において入力受付部１４０がプロトコルの識別が必要であることを示す情報の入力を受け付けていれば、プロトコルの識別が必要であると判定し、そうでなければ、プロトコルの識別が不要であると判定する。検知モデル学習部１２０は、プロトコルの識別が必要であると判定すれば（Ｓ１３でＹｅｓ）、ステップＳ１４に進み、プロトコルの識別が不要である判定すれば（Ｓ１３でＮｏ）、ステップＳ１５に進む。
【０１５４】
検知モデル学習部１２０は、ステップＳ１４において、処理対象の学習用パケットのヘッダに基づいてプロトコルの識別処理を実行し、ステップＳ１５に進む。
【０１５５】
検知モデル学習部１２０は、ステップＳ１５において、処理対象の学習用パケットが該当するモデルを特定する。検知モデル学習部１２０は、処理対象の学習用パケットのヘッダを読み取ることで得られる、宛先ＩＰ、宛先ポート、プロトコル、および送信元ＩＰ少なくとも１つに応じたモデルを特定する。ここで、検知モデル学習部１２０は、ステップＳ１１において受け付けられた監視対象のＩＰの範囲、および、ポートの範囲の少なくとも一方と、Ｎ−ｇｒａｍを抽出する範囲とに応じて、特定するモデルの分類を決定する。
【０１５６】
検知モデル学習部１２０は、特定したモデルが既に存在しているか否かを判定する（Ｓ１６）。つまり、検知モデル学習部１２０は、特定したモデルに属する学習用パケットが既に存在しているか否かを判定する。検知モデル学習部１２０は、特定したモデルがまだ存在していないと判定すれば（Ｓ１６でＮｏ）、ステップＳ１７に進み、特定したモデルが既に存在すると判定すれば（Ｓ１６でＹｅｓ）、ステップＳ１８に進む。
【０１５７】
検知モデル学習部１２０は、ステップＳ１７において、特定したモデルを新規モデルとして追加し、ステップＳ１８に進む。
【０１５８】
検知モデル学習部１２０は、ステップＳ１８において、処理対象の学習用パケット中の対象データ部を抽出する。具体的には、検知モデル学習部１２０は、ステップＳ１１において受け付けられたＮ−ｇｒａｍを抽出する範囲を示す入力に基づいて特定される対象データ部であって、各モデルに対応付けられた検査の対象となる対象データ部を抽出する。
【０１５９】
検知モデル学習部１２０は、処理対象の学習用パケットが属するモデルのＮ−ｇｒａｍ出現回数ｎ１〜ｎ６をカウントする（Ｓ１９）。ここで、検知モデル学習部１２０は、Ｎ−ｇｒａｍ出現回数ｎ１〜ｎ６として、第５の数をカウントし、第５の数から第６の数を算出する。これにより、検知モデル学習部１２０は、処理対象のパケットにおける学習処理を終了する。
【０１６０】
検知モデル学習部１２０は、複数の学習用パケットのうち、未学習のパケットが存在するか否かを判定し（Ｓ２０）、未学習のパケットが存在すれば（Ｓ２０でＹｅｓ）、未学習のパケットについてステップＳ１３〜ステップＳ１９の処理を実行する。検知モデル学習部１２０は、未学習のパケットが存在しなければ（Ｓ２０でＮｏ）、つまり、全ての学習用パケットについてステップＳ１３〜ステップＳ１９の処理が終了していれば、学習処理を終了する。
【０１６１】
なお、取得部１１０は、複数の学習用パケットを一度に全て取得しなくてもよく、複数回に分けて取得してもよく、例えば、複数の学習用パケットを１つずつ取得してもよい。このように、取得部１１０が複数回に分けて複数の学習用パケットを取得する場合、異常検知装置１００は、ステップＳ１２〜ステップＳ２０を繰り返すこととなる。
【０１６２】
次に、アラート閾値決定処理の詳細について説明する。
【０１６３】
図１２は、アラート閾値決定処理の詳細の一例を示すフローチャートである。
【０１６４】
異常検知装置１００では、入力受付部１４０がアラートを発生するためのアラート発生率に関するパラメータの入力を受け付け、受け付けたパラメータを設定する（Ｓ２１）。
【０１６５】
次に、アラート閾値算出部１５０は、学習用パケットにおいて算出された複数の第１の確率を式１２に適用することで学習用パケットに対するスコアを算出する（Ｓ２２）。
【０１６６】
そして、アラート閾値算出部１５０は、入力受付部１４０により受け付けられた、アラート発生率に関するパラメータと、学習用パケットに対して算出されたスコアとに基づいてアラート閾値を算出する（Ｓ２３）。アラート閾値算出部１５０は、例えば、パラメータにより指定されたアラート発生率以下となるように、アラート閾値を算出する。
【０１６７】
図１２の例では、異常検知装置１００は、パラメータからアラート閾値を算出するとしたが、次のようにアラート閾値をユーザから直接受け付けてもよい。
【０１６８】
図１３は、アラート閾値決定処理の詳細の他の一例を示すフローチャートである。
【０１６９】
異常検知装置１００では、入力受付部１４０がアラート閾値を示す入力を受け付ける（Ｓ２１Ａ）。
【０１７０】
アラート閾値算出部１５０は、入力受付部１４０により受け付けられた入力が示すアラート閾値を、アラート閾値として設定する（Ｓ２２Ａ）。
【０１７１】
次に、検査処理、つまり異常検知方法の詳細について説明する。
【０１７２】
図１４は、異常検知装置における検査処理の詳細の一例を示すフローチャートである。
【０１７３】
異常検知装置１００では、検知モデル学習部１２０が異常検知モデルにおける複数のモデルのそれぞれのＮ−ｇｒａｍ出現回数ｎ１〜ｎ６からＮ−ｇｒａｍ出現確率Ｐｒ１〜Ｐｒ６を算出する（Ｓ３１）。
【０１７４】
次に、取得部１１０は、検査用データ２１２である複数のパケットを取得する（Ｓ３２）。
【０１７５】
以下、検知部１６０は、複数のパケットのそれぞれについて、ステップＳ３３〜ステップＳ４１の処理を繰り返す。
【０１７６】
なお、検知部１６０が実行するステップＳ３３〜ステップＳ３６は、検知モデル学習部１２０が実行するステップＳ１３〜ステップＳ１６と同様であるので説明を省略する。
【０１７７】
検知部１６０は、特定したモデルが既に存在すると判定すれば（Ｓ３６でＹｅｓ）、ステップＳ３７に進み、特定したモデルがまだ存在していないと判定すれば（Ｓ３６でＮｏ）、ステップＳ４１に進む。
【０１７８】
検知部１６０は、ステップＳ３７において、処理対象のパケット中の対象データ部を抽出する。この処理は、学習処理のステップＳ１８と同様であるので説明を省略する。
【０１７９】
検知部１６０は、処理対象のパケットのスコアを算出する（Ｓ３８）。具体的には、検知部１６０は、上述した検知部１６０の説明における（１）〜（６）の処理を行うことにより、処理対象のパケットのスコアを算出する。
【０１８０】
検知部１６０は、処理対象のパケットに対して算出したスコアが、異常検知モデルＤＢ１３０に記憶されている異常検知モデルで、当該処理対象のパケットのモデルに対応付けられているアラート閾値を超えているか否かを判定する（Ｓ３９）。検知部１６０は、算出したスコアが対応するアラート閾値を超えていれば（Ｓ３９でＹｅｓ）、提示部１７０は、アラートを提示し（Ｓ４０）、算出したスコアが対応するアラート閾値以下であれば（Ｓ３９でＮｏ）、ステップＳ４１に進む。
【０１８１】
検知部１６０は、複数のパケットのうち、未検査のパケットが存在するか否かを判定し（Ｓ４１）、未検査のパケットが存在すれば（Ｓ４１でＹｅｓ）、未検査のパケットについてステップＳ３３〜ステップＳ４０の処理を実行する。検知部１６０は、未検査のパケットが存在しなければ（Ｓ４１でＮｏ）、つまり、全てのパケットについてステップＳ３３〜ステップＳ４０の処理が終了していれば、検査処理を終了する。
【０１８２】
なお、取得部１１０は、複数のパケットを一度に全て取得しなくてもよく、複数回に分けて取得してもよく、例えば、複数のパケットを１つずつ取得してもよい。このように、取得部１１０が複数回に分けて複数の学習用パケットを取得する場合、異常検知装置１００は、ステップＳ３２〜ステップＳ４１を繰り返すこととなる。
【０１８３】
［３  効果など］
本実施の形態に係る異常検知方法によれば、パケットに含まれるペイロードのうち、Ａビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ個のデータ単位の当該ペイロードにおける並びを含む当該Ｎ個のデータ単位の組み合わせであって、取り得る全ての組み合わせを抽出し、全ての組み合わせのそれぞれが出現する第２の確率を算出し、算出した複数の第２の確率に基づいてスコアを算出する。このように、Ｎ個のデータ単位の当該ペイロードにおける並びを含む組み合わせが出現する確率に基づいてスコアを算出するため、並び情報を考慮した精度のよいスコアを算出することができる。
【０１８４】
また、本実施の形態に係る学習方法によれば、異常検知モデルを追加学習すること、または、古いデータを削除した異常検知モデルに更新することができる。よって、異常なパケットを精度よく特定することができる。
【０１８５】
このように、本実施の形態に係る異常検知方法は、既存手法に見られる欠点を克服していると考えられる。まず、ＰＡＹＬはバイト列の並び情報を無視しているという欠点があったが、本実施の形態に係る異常検知方法はＮ−ｇｒａｍ（Ｎ＝２、３）の情報を利用することでこの欠点を回避している。また、ＡＮＡＧＲＡＭは、Ｎ−ｇｒａｍの出現回数に関する情報を完全に捨ててしまっていたが、提案手法ではＮ−ｇｒａｍの出現回数も考慮したモデルを考える。ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）は、Ｎ−ｇｒａｍの頻度情報を利用してはいたものの、スコアの算出法が経験的な方法であったため、提案手法ではＬａｐｌａｃｅ  ｓｍｏｏｔｈｉｎｇの利用と、対数尤度を使った自然なスコアリングを用いてこの間題を回避している。
【０１８６】
また、本実施の形態に係る異常検知方法は各モデルに関して出現するＮ−ｇｒａｍ（Ｎ＝２、３）の出現回数を保持しておけば良いため、メモリ効率もよく、ＡＮＡＧＲＡＭのようにブルームフィルタのサイズの見積りの必要などはない。
【０１８７】
また、本実施の形態に係る異常検知方法におけるハイパーパラメータはＬａｐｌａｃｅ  ｓｍｏｏｔｈｉｎｇの際に利用される底上げパラメータβのみであり、このパラメータは例えばβ＝０．０１などに固定してしまっても良く、経験的にこの値を少々変動させたところで、異常検知モデルの性能にほとんど影響を与えないことがわかっている。
【０１８８】
また、本実施の形態に係る異常検知方法では各モデルにおける２−ｇｒａｍの出現回数ベクトルｘさえ記憶しておけば、既に学習したモデルに追加で学習を行うこと（追加学習）や、逆に既にモデルが学習したデータを学習していない状態に戻すこと（忘却）が可能である。特に忘却の機能は他の手法に見られない特徴である。忘却機能を利用することで、常に１ヶ月分のデータのみ学習された状態にしておくことや、通常データとして好ましくないデータが得られた日時のデータを選択的にモデルから忘却させることができる。この性質は異常検知システムを実際に運用していく上で有用な性質である。つまり、検知部１６０は、カウントした第３の数を用いて、異常検知モデルに含まれる第４の数を更新してもよい。例えば、検知部１６０は、第４の数に第３の数を追加することで異常検知モデルに学習データを追加することができる。また、新たにカウントすることで得られた第３の数を追加すると共に、過去の所定期間においてカウントした数を異常検知モデルの第４の数から削除することで、異常検知モデルを最新の状態とすることができる。なお、異常検知モデルの第４の数に、新たにカウントした数を追加することなく、当該第４の数から過去の所定期間においてカウントした数を削除してもよい。
【０１８９】
（その他）
以上のように、異常検知装置１００では、以下の異常検知方法を実行している。
【０１９０】
１．ｕｎｉｇｒａｍを用いるとバイト列の並びに関する情報が完全に失われてしまうため、Ｎ−ｇｒａｍ（Ｎ≧２）を特徴量として用いている。
【０１９１】
２．ＡＮＡＧＲＡＭのようにＮ−ｇｒａｍの出現頻度に関する情報を完全に落としてしまわずに、Ｎ−ｇｒａｍの出現回数の情報を利用する。
【０１９２】
３．ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）の手法は異常スコアの計算が単純な算出平均を用いる方法であったことに着目し、確率的なモデルを仮定し、より理論的に妥当性のある異常スコアの算出法を利用している。
【０１９３】
４．実環境ではハイパーパラメータのチューニングを適切に行えるような教師データの入手が困難であるため、ハイパーパラメータが少ないモデルを利用している。
【０１９４】
１つ目は明らかに、ｕｎｉｇｒａｍよりもＮ−ｇｒａｍ（Ｎ≧２）の持つリッチな情報を持つことを利用したいためである。これはＰＡＹＬの精度がＡＮＡＧＲＡＭと比較して低い理由がｕｎｉｇｒａｍを利用していることが原因だと思われるからである。
【０１９５】
２つ目に関しても同様で、あるＮ−ｇｒａｍが何回出現したか、という情報は、あるＮ−ｇｒａｍが出現したことがあるか、という情報より多くの情報を含んでいるからである。また、ランダム性の高いバイナリ列が多く含まれていると考えられる制御システムネットワークのパケットにおいては、あるＮ−ｇｒａｍが出現したことがあるかどうかだけで判断してしまっては、たまたまランダムなバイナリ中に含まれたＮ−ｇｒａｍを正常な列とみなしてしまうおそれがあるからである。
【０１９６】
この１つ目、２つ目の特性は、ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄのＡＮＡＧＲＡＭが持つ特性と同一である。しかしＡＮＡＧＲＡＭの論文中では、ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄのＡＮＡＧＲＡＭは、ｂｉｎａｒｙ−ｂａｓｅｄのＡＮＡＧＲＡＭに明確に劣ると記述されていた。３つ目の特性に述べたとおりだが、本稿では、ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄのＡＮＡＧＲＡＭの異常スコアの算出手法に問題があったことを示し、適切な異常スコア算出法の下では、ｂｉｇｒａｍ（Ｎ＝２のときのＮ−ｇｒａｍ）を用いれば、ＰＡＹＬやＡＮＡＧＲＡＭを凌ぐ精度となり得る。
【０１９７】
本実施の形態に係る異常検知方法も、過去のＮ−ｇｒａｍを用いた手法と同様に、ペイロード列のＮ−ｇｒａｍ情報を特徴として利用する。本実施の形態ではＮ＝２の場合、すなわち２−ｇｒａｍを特徴として利用する。Ｎ≧３となるＮを使わない理由は、Ｎ≧３の場合、各Ｎ−ｇｒａｍの情報がスパースになってしまい、出現回数情報の信頼性が落ちてしまうからである（これがＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）の検知性能が低い一因とされている）が、データが豊富に存在する場合、Ｎ＝３として本手法を適用しても高い精度を発揮することが期待される。Ｎ≧４の場合、現実的な場面ではＮ−ｇｒａｍデータがスパースになってしまい実用的ではないと考えられる。
【０１９８】
アノマリベースの異常検知技術手法の多くは学習フェーズを持ち、学習期間として与えられたデータを使って正常な通信のふるまいを学習する。検査フェーズでは、与えられたパケットが正常であるか異常であるかを、学習フェーズに得られた検知モデルを使って判断することになる。本実施の形態に係る異常検知方法はペイロードベースの手法であるが、ヘッダの情報も利用している。これは提案手法が宛先ＩＰアドレスや宛先ポートに応じて学習／検査に利用する異常検知モデルを変えているためである。例えばＨＴＴＰプロトコルとＦＴＰプロトコルでは、観測されるペイロードが全く異なるためである。
【０１９９】
［４  変形例］
上記実施の形態に係る異常検知方法において、Ｎ−ｇｒａｍを用いた系列生成モデルに従ったスコアリングを行うこともできる。ここでｘｉ，ｊ［ＸＴ，ＸＴ＋１］を、そのモデルにおける２−ｇｒａｍＸＴ，ＸＴ＋１の出現回数とする。このときｐ（ＸＴ＋１｜ＸＴ）を下記の式により定める。
【０２００】
【数１５】
2019110513.tif 000017
【０２０１】
また、ｐ（Ｘ１）は別途下記の式により定める。ただしｓｔａｒｔはデータの開始を意味する記号である。
【０２０２】
【数１６】
2019110513.tif 000018
【０２０３】
この値を取得するため、学習時にはペイロード中の最初の文字の出現回数をモデルごとに保持しておく必要がある。
【０２０４】
また、検査の処理では式４から自然に下記の式１５により導出できる。
【０２０５】
【数１７】
2019110513.tif 000019
【０２０６】
［５  実験と評価結果］
本実験では、既存手法として挙げたＰＡＹＬ、ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）、ＡＮＡＧＲＡＭ（ｂｉｎａｒｙ−ｂａｓｅｄ）を比較対象として本実施の形態に係る異常検知方法を評価している。ＡＮＡＧＲＡＭ（ｂｉｎａｒｙ−ｂａｓｅｄ）は３−ｇｒａｍを評価対象とし、ＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）は２−ｇｒａｍと３−ｇｒａｍをともに評価している。本実施の形態に係る異常検知方法としては２−ｇｒａｍを利用している。
【０２０７】
［５−１  実験に用いるデータセットと評価の仕方］
ここでは、データセットとして１９９９ＤＡＲＰＡ  ＩＤＳ  Ｄａｔａ  Ｓｅｔ（以降ＤＡＲＰＡ９９データセット）を用いている。ＤＡＲＰＡ９９データセットはＭＩＴ  Ｌｉｎｃｏｌｎ  ＬａｂｓでＩＤＳ評価用に収集されたデータセットであり、それぞれのパケットのペイロードを含む全てのネットワークトラフィックがｔｃｐｄｕｍｐのフォーマットで提供されている。データは３週間の学習用データと、２週間のテスト用データから成っており、学習用データは２週間分の攻撃が含まれて居ないデータと、１週間の攻撃を含むデータから成っている。テスト用データには全ての日付において攻撃が含まれている。また、攻撃データはそれぞれ一連の攻撃をまとめたインスタンスと呼ばれる単位に集約されており、ＤＡＲＰＡ９９データセットでは各攻撃インスタンスが発生した期間や対象ＩＰ、対象ポートなどの情報が公開されている。本評価実験において、各手法は学習用データのうち、攻撃データが含まれていない２週間分のデータを用いて学習を行い、２週間分のテスト用データに現れるパケットに対して異常スコアを算出した。また、今回評価した手怯は、Ｎ＝１，２，３のＮ−ｇｒａｍを用いているため、平等な評価結果となるようペイロード長が３ｂｙｔｅ以上のパケットのみを学習とテストの対象とした。
【０２０８】
本実験ではＰＡＹＬ論文に従って、ＤＡＲＰＡ９９データセットのうち、ペイロードに情報が現れる攻撃インスタンスに絞って、プロトコルごとにインスタンスベースの検知率（縦軸）とパケットベースの誤検知率（横軸）のグラフで各手法を評価する。各手法は各パケットに対して異常スコア（スカラー値）を算出するのみであるため、あるパケットを異常と判定するか正常と判定するかは、定められたスコアの闘値に依存することになる。すなわち定められた闘値を上回る異常スコアのパケットを異常、そうでないパケットを正常と判定する。闘値を大きくすればするほど誤検知率は低下するが、検知率も低下する。逆に闘値を小さくすればするほど検知率は増加するが、誤検知率も増加してしまうというトレードオフの関係にある。
【０２０９】
（インスタンスベースの検知率）
ある特定の攻撃インスタンスに含まれるパケット群のうち、１つ以上のパケットを検知した場合にそのインスタンスを検知したものと判定する。インスタンスベースの検知率とは、この判断基準の下で、全インスタンスの中で検知されたインスタンスの割合を示す。
【０２１０】
（パケットベースの誤検知率）
異常検知モデルが異常と判断したもののうち、攻撃インスタンスに含まれるパケットを除いたものを正常パケットと呼ぶ。パケットベースの誤検知率とは、この正常パケットのうち、誤って異常と判定してしまったパケットの割合である。
【０２１１】
ＤＡＲＰＡ９９のデータには複数のプロトコルのパケットが含まれているが、それぞれのプロトコルに含まれるパケット数や攻撃インスタンス数には大きなバラつきがあるため、評価用のデータとして使える程度に多くのデータが存在するのは、ＨＴＴＰ、ＦＴＰ、ＴＥＬＮＥＴ、ＳＭＴＰの４種類程度であると考えられる。本技術は特に制御システムにおける利用を想定しているが、ＤＡＲＰＡ９９のデータには制御システム用のプロトコルのパケットデータが存在しない。そのため、ＤＡＲＰＡ９９のデータの中では比較的制御システム用のプロトコルで見られる制御コマンドに近いと考えられるＦＴＰプロトコルとＴＥＬＮＥＴプロトコルにおいて評価を行った。
【０２１２】
［５−２  実験結果］
図１５は、ＦＴＰプロトコルにおいて評価を行った場合の本実施の形態に係る異常検知方法と他の手法とを比較した実験結果を示す図である。図１６は、ＴＥＬＮＥＴプロトコルにおいて評価を行った場合の本実施の形態に係る異常検知方法と他の手法とを比較した実験結果を示す図である。
【０２１３】
各手法の結果は右上がりの線となっているが、これは闘値を小さな値に定めたものから大きな値に定めたものまでの変動をプロットしたものである。ＦＴＰプロトコルの評価結果が示す通り、提案手法は既存の３−ｇｒａｍを利用したＡＮＡＧＲＡＭ（ｂｉｎａｒｙ−ｂａｓｅｄ、ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）と同等以上の性能を発揮していることがわかる。ＰＡＹＬや２−ｇｒａｍのＡＮＡＧＲＡＭ（ｆｒｅｑｕｅｎｃｙ−ｂａｓｅｄ）より明らかに良い性能を発揮している。また、ＴＥＬＮＥＴプロトコルの評価結果では、実施の形態に係る異常検知方法は他のどの手法よりも優れた検知性能を発揮している。このことから実施の形態に係る異常検知方法はチューニングの必要性が少ない異常検知手法の中でも比較的良い性能を示すアルゴリズムであることがわかる。
【０２１４】
なお、上記各実施の形態において、各構成要素は、専用のハードウェアで構成されるか、各構成要素に適したソフトウェアプログラムを実行することによって実現されてもよい。各構成要素は、ＣＰＵまたはプロセッサなどのプログラム実行部が、ハードディスクまたは半導体メモリなどの記録媒体に記録されたソフトウェアプログラムを読み出して実行することによって実現されてもよい。ここで、上記各実施の形態の異常検知方法、学習方法などを実現するソフトウェアは、次のようなプログラムである。
【０２１５】
すなわち、このプログラムは、コンピュータに、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知する異常検知装置が実行する異常検知方法であって、前記異常検知装置は、プロセッサおよびメモリを備え、前記メモリは、複数の学習用パケットを用いた学習により生成された異常検知モデルを記憶しており、前記異常検知方法では、前記プロセッサが、前記複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させ、複数のパケットを取得し、取得した複数のパケットのそれぞれについて、当該パケットに対して算出したスコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが以上であることを出力する異常検知方法を実行させる。
【０２１６】
また、このプログラムは、コンピュータに、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知するための異常検知モデルを学習する学習装置が実行する学習方法であって、前記学習装置は、プロセッサおよびメモリを備え、前記学習方法では、前記プロセッサが、複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をＡ（Ａは１以上の整数）ビット単位で区切ることにより得られる複数個のデータ単位のうちのＮ（Ｎは２以上の整数）個のデータ単位の取り得る全ての第１の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、Ｂ（Ｂは１以上の整数）個飛ばしの並び順でのＮ個のデータ単位の第１の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第１の組み合わせのそれぞれについて、当該第１の組み合わせが前記複数の学習用パケットにおいて出現する回数である第１の数をカウントし、抽出した前記全ての第１の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第１の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第１の組み合わせが出現する確率である複数の第１の確率を算出し、算出した前記複数の第１の確率を前記異常検知モデルとして前記メモリに記憶させる学習方法を実行させる。
【０２１７】
以上、本発明の一つまたは複数の態様に係る異常検知方法、異常検知装置、学習方法、および、学習装置について、実施の形態に基づいて説明したが、本発明は、この実施の形態に限定されるものではない。本発明の趣旨を逸脱しない限り、当業者が思いつく各種変形を本実施の形態に施したものや、異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の一つまたは複数の態様の範囲内に含まれてもよい。
【産業上の利用可能性】
【０２１８】
本開示は、異常なパケットを、精度よく特定することができる異常検知方法、または、精度よく特定するための異常検知モデルを学習する学習方法などとして有用である。
【符号の説明】
【０２１９】
１    異常検知システム
１００    異常検知装置
１０１    ＣＰＵ
１０２    メインメモリ
１０３    ストレージ
１０４    通信ＩＦ
１０５    入力ＩＦ
１０６    ディスプレイ
１１０    取得部
１２０    検知モデル学習部
１３０    異常検知モデルＤＢ
１３１〜１３４    異常検知モデル
１３５    対応情報
１４０    入力受付部
１５０    アラート閾値算出部
１６０    検知部
１７０    提示部
２００    パケット収集装置
２１０    データ
２１１    学習用データ
２１２    検査用データ
３００    監視対象
３１１、３１２、３２１、３２２    ハブ
３１３    ＳＣＡＤＡ
３１４    ＰＬＣ
３１５、３２３、３２４    ＰＣ
４００    ルータ
５００    ネットワーク
【図１】
2019110513.tif 000020
【図２】
2019110513.tif 000021
【図３】
2019110513.tif 000022
【図４Ａ】
2019110513.tif 000023
【図４Ｂ】
2019110513.tif 000024
【図５】
2019110513.tif 000025
【図６】
2019110513.tif 000026
【図７】
2019110513.tif 000027
【図８】
2019110513.tif 000028
【図９】
2019110513.tif 000029
【図１０】
2019110513.tif 000030
【図１１】
2019110513.tif 000031
【図１２】
2019110513.tif 000032
【図１３】
2019110513.tif 000033
【図１４】
2019110513.tif 000034
【図１５】
2019110513.tif 000035
【図１６】
2019110513.tif 000036