(本発明の基礎となった知見)
[1-1 背景]
近年、制御システム(工場、プラント、重要インフラなど)に対するサイバー攻撃の脅威が高まり、サイバー攻撃による被害が増加傾向にある。上記のような制御システムの被害が増加してきた理由として、下記の事項が指摘される。
(1)信頼性や制御の利便性を向上させるために、制御システムを含むシステム間は、相互接続されるようになった。このため、制御システムは、外部にさらされることとなり、サイバーセキュリティの脅威を増加させることに至ったと考えられる。
(2)システムの相互接続性、汎用性を上げるために、制御システムの内部ネットワークは、Modbus、EtherCAT、BACnetなどのオープンプロトコルを用いた通信を行うようになった。このため、制御システムは、マルウェアの感染などのような攻撃の可能性を飛躍的に高めることに繋がったと考えられる。
(3)制御システムには、セキュリティ対策が施されていない場合が多く、制御システムでは、1つのシステムを何十年にも渡って使用することが多い。このため、このような制御システムでは、使用期間中にOS等のサポートが終了してPC端末にセキュリティパッチの適用が出来ないケース、または、ウィルス対策ソフトを導入できないケースがたびたび見受けられる。
上記(1)及び(2)については、産業的なメリットが非常に大きいことから、これらの傾向は今後ますます拡大していくものと考えられている。本開示では、上記(3)に示すようにセキュリティ対策の導入や設備の変更が容易ではない制御システムのセキュリティを確保するため、ネットワークレベルでの侵入検知技術に着目する。ネットワーク侵入検知システム(NIDS:Network-based Intrusion Detection System)は、対象とするネットワークをパッシブにモニタリングするシステムであり、設備に直接的な変更を加える必要がない。このため、可用性が重視される制御システムにおいても導入しやすいという利点がある。
[1-1-1 侵入検知システムの種類と性質]
侵入検知システム(IDS:Intrusion Detection System)は一般にホストベースIDS(HIDS:Host-based Intrusion Detection System)とネットワークベースIDS(NIDS)に分類される。制御システムにおいては、NIDSを利用することが一般的である。制御システムにおいてNIDSの利用が好ましい点として、生産設備に直接手を加えずに済む点が挙げられる。NIDSであれば、監視対象となる制御機器のOS、リソースなどに無関係に導入できる。一方で、ウィルス検知ソフトなどのHIDSでは、ウィルスのスキャン時に端末に大きな負荷がかかり、生産に関わるソフトウェアの処理速度が下がって生産活動への影響が発生する可能性などが存在する。
またNIDSは更にシグネチャ/ルール方式とアノマリ方式とに大別され、アノマリ方式のNIDSは更にフローベースとペイロードベースとに分類される。シグネチャ/ルール方式のNIDSは、一般によく利用されているものであり、ペイロードに含まれる特定のバイト列のパターンを見つけ出した場合、または、通信量が予め定められた闘値を超えた場合にアラートを発するものである。フローペースのNIDSではパケットのヘッダのみを観測し、当該ネットワークにおけるトラフィックのサイズや周期などのフロー情報に関して定常状態のモデルを生成し、定常状態から逸脱するようなトラフィックを検知した場合にアラートを発する。フローペースのNIDSではパケットのヘッダ情報しか用いないため、暗号化された通信、または、ペイロードを伴わない通信に対しても異常を検知できる。一方で、ペイロードベースのNIDSでは、パケットのペイロード情報を観測し、そのペイロードが通常の通信内容から逸脱していないかどうかを判断する。フローベースの方式ではシステムのメンテナンス、非定常的なファイル転送など、検知したくない状態の変化に対して敏感に反応してしまう恐れがあるが、ペイロードベースの方式はその恐れが少ないし、フロー情報には反映されない巧妙な攻撃を検知できる可能性がある。
[1-1-2 本開示の概要と効果]
本開示では新たなペイロードベースの異常検知方法を説明する。本開示の異常検知方法に、ペイロードベースの異常検知技術を採用した理由として、下記の点が挙げられる。
・制御システムが用いられる環境では多くのオペレーションは自動化されている。しかし、制御システムには、人間による操作時、メンテナンス時、製造物の変更時などには多くの非定常的なオペレーションが入る。フローベースNIDSでは、このような非定常的なオペレーションが多く検知されてしまう恐れがある。一方で、ペイロードベースNIDSでは、オペレーションの内容自体に普遍性があれば誤検知を防ぐことができるという利点がある。
・非常に精巧に作りこまれたマルウェアの場合、フロー情報に現れないような巧妙な攻撃が仕掛けられた場合に、制御システムでは、パケットのペイロードを監視しないとパケットの異常を検知できない恐れがある。
・フローベースのNIDSでは、制御システムが悪意を持った正規のオペレータにより操作される場合の異常、また正規のオペレータにより誤って異常パラメータが入力される場合の異常を、フローとしては正常なものと一致するため検知できない。ペイロードベースNIDSではこのような異常を検知することも可能である。
本開示の異常検知方法などでは以下の効果が奏される。
・本開示の異常検知方法は、パケットのペイロードのN-gram情報を利用することで、高い性能(低誤検知率、高検知率)を実現できる。
・本開示の異常検知方法は、デプロイする環境に応じてチューニングが行う必要性が無く、膨大なネットワーク環境においても自動で異常検知システムを構成するのに適している。
・本開示の異常検知方法は、比較的チューニングの手間が少ない既存手法であるPAYL、ANAGRAMよりも、1999 DARPA IDS Data SetのFTPプロトコル、TEL-NETプロトコルの異常検知性能において優れた性能を発揮することができる。
[1-2 基本的な技術]
本開示の異常検知方法を説明する前に、本開示で用いられている基本的な技術についての説明を行う。
[1-2-1 N-gram]
N-gramは与えられた文字、単語などの要素から成る系列データに対し、N個の連続する並びのことである。例えばDNAの塩基配列において、・・・AGCTTCGA・・・という列が与えられた場合、この列に現れる1-gramは・・・、A,G,C,T,T,C,G,A,・・・であり、2-gramは・・・,AG,GC,CT,TT,TC,CG,GA,・・・であり、3-gramは・・・,AGC,GCT,CTT,TTC,TCG,CGA,・・・である。例えば文中に・・・to be or not to be・・・という列が現れたとき、各要素を単語とみなすと、この列に現れる1-gramは・・・,to,be,or,not,to,be,・・・であり、2-gramは・・・,to be,be or,or not,not to,to be,・・・であり、3-gramは・・・,to be or,be or not,or not to,not to be,・・・である。
例えばN-gramを利用すると、単にN-gramの出現回数をベクトル化することで系列データを特徴抽出することができる。ある系列データに対して、それぞれの要素が取り得る値の数をM個、系列データの長さをL個とした場合、この系列データとして考えられるパターンはML通り存在する。しかし、例えば2-gramの出現回数を特徴として用いると、この系列データをM2次元のべクトルとして扱うことができるため、扱いやすいデータとなる。N-gramは自然言語処理の分野または生命科学の分野で用いられることが多いが、ペイロード異常検知においても有効なことが過去の研究によって示されている。
[1-2-2 N-gramを用いた系列生成モデル]
上述の通り、N-gramは系列情報を扱う際に有用なモデルである。N-gramを用いると非常にシンプルな系列の生成モデルを構築することができる。N-gramを用いた系列の生成モデルでは、Pr(xi|xi-(n-1),...,xi-1)と扱う。すなわち、ある要素が出力される確率は、直前のN-1個の要素だけで決定されると仮定する。もちろんこの仮定はほとんどの場合正しくないが、系列が与えられた場合に、その系列が発生する尤度を得ること等ができる点で便利である。例えばx1,x2,...,xlを対象の系列データとするとき,このデータが生成される確率はPr(x1,x2,...,xl)で表現されるが、2-gramを用いた生成モデルでは、これは下記のように確率の積に分解できる。
Pr(x1,x2,...,xl) (式1)
=Pr(x1)・Pr(x2|x1)・Pr(x3|x1,x2)
・・・Pr(xlx1,x2,...,xl-1) (式2)
=P(x1|start)・Pr(x2|x1)・Pr(x3|x2)
・・・Pr(xl|xl-1) (式3)
先頭の要素のみ、先頭にx1が出現する確率を利用し、以降の文字が出現する確率は、その直前の要素が出現する確率のみに依存するという性質を用いて確率を算出する。最も単純な手法では、取りうる要素の数をM,2-gram xi,xjが出現した回数をkxi,xjとすると、次の式4で各項の確率を定める。
本開示の異常検知方法はペイロードに含まれるバイト列のN-gramを用いてモデリングを行ない異常なペイロード列を検知する方法であり、検知性能の高さとチューニングの容易さの点で従来技術に対して優位性がある。
[1-3 既存手法]
既存のペイロードベース異常検知方法の紹介を行う。ここで挙げる異常検知方法は、例えばTCP(Transmission Control Protocol)/UDP(User Datagram Protocol)レイヤーのペイロード(図4Aの構造をしたパケットのTCP/UDPペイロード部)を利用して異常検知を行う。しかし勿論、検知対象はTCP/UDP上のプロトコルに限定されるわけではなく、他のプロトコルのペイロードを用いても同様に異常検知を行うことができる。また、各方法は事前の知識を必要としない。すなわち、プロトコル専用のパーサを利用して、ペイロードの特定の要素を抽出する等の操作を行わない。N-gramをペイロードベースの異常検知方法として利用した代表的な先行例として、下記のPAYL、POSEIDON、ANAGRAMが存在する。PAYL、POSEIDONはともにunigramを用いて識別を行う例である。ANAGRAMはN-gram(N=3,5,7など)を用いて識別を行う例である。以下、3つの方法について順に説明する。
[1-3-1 PAYL]
PAYLはペイロード列のunigram情報を用いる手法であり、2004年のKe Wangらによって提案された。PAYLでは異常検知モデルを、パケットの宛先IP、パケットの宛先ポート、パケットペイロード長(1byte単位)でモデルを別々に学習する。学習フェーズでは、学習用のペイロード列全てを256次元のunigramのべクトルに変換し、各次元の平均と標準偏差の情報とを蓄積する。検知フェーズにおいても検査対象となるペイロードを256次元(1byte)のunigramベクトルに変換し、変換されたペクトルと学習時に蓄積した平均ベクトルとの間の簡易化されたマハラノビス距離を異常スコアとして算出する。異常スコアの算出には、下記の式5が用いられる。
ナイーブなPAYLの実装においては、ハイパーパラメータ(学習の前段階で人間が定める必要のあるパラメータ)は上式のαしか存在しないため、チューニングの必要性が少ない。また、データの追加学習は容易に可能である。PAYLは、シンプルで優れた識別器であるが、unigramを使うという性質上、並びに関する情報が一切失われてしまい、それが精度の悪化に繋がっていると考えられる。その後、unigramを使うことによる弱点を克服するため、N-gram(N≧2)を用いる手法が様々に考案されている。
つまり、PAYLの問題点は、unigramを使うため識別精度がその後提案された各種手法に比べてやや低い点である。
[1-3-2 POSEIDON]
PAYLでは、パケットの役割ごとに異常検知モデルを切り分けたいという意図があったため、パケットのペイロード長ごとにモデルを分割していた。しかし、ペイロード長ではパケットの役割ごとにモデルを切り分けられない場合があると考え、別の情報を用いてモデルの分割を試みた手法が2006年にDamiano Bolzoniらによって提案されたPOSEIDONである。POSEIDONでは、ペイロード間の距離尺度を定め、その距離尺度の下で近いパケット同士をクラスタリングし、そのクラスタ情報をペイロード長の代わりにモデルを分割するための情報として用いた。クラスタリングの手法としては自己組織化マップを用いている。このクラスタ情報をペイロード長の代わりに用いる点を除けばPOSEIDONはPAYLと同一の異常検知手法である。POSEIDONは適切な自己組織化マップを学習できた場合には高い識別精度を発揮する。しかし、自己組織化マップは非常に数多くのハイパーパラメータを持つ。このため、POSEIDONでは、パケットが好ましいクラスタに分かれるようになるために、多くの試行や交差検証法によるチューニングが必要となるため、実用性は乏しい。
つまり、POSEIDONの間題点は、下記の2点である。1点目は、自己組織化マップに多くのハイパーパラメータが存在するため、チューニングが非常に困難である点である。2点目は、自己組織化マップの学習に多くの時間や計算リソースが必要であり、実環境での利用に不向きである点である。
[1-3-3 ANAGRAM]
ANAGRAMは、PAYLを改良すべく2006年にKe Wangらによって提案された手法である。PAYLはMimicry Attack(モデルによる検知を回避しようとする攻撃)に対して脆弱であるという問題点が指摘されたが、この問題を回避するため、ANAGRAMではより大きなNに対するN-gramモデリングを行っている。論文中では、各N-gramの出現回数情報も利用するfrequency-basedの手法と、各N-gramが出現したか否かのみを利用するbinary-basedの手法が紹介されている。この2つの手法のうち、学習データのスパース性が高いためBinary-basedのANAGRAMの方が、精度が良いとされている(以降単にANAGRAMと記述した場合はbinary-basedのANAGRAMを指し示すこととする)。N-gram情報は、Nの大きさに対し指数関数的に情報量が増加するため、ANAGRAMではブルームフィルタを使って効率的に学習対象のペイロード中に現れたN-gram情報を保持している。ブルームフィルタは高速に動作し、メモリ利用量も膨大にはならないが、予め対象データに応じてフィルタサイズを決定する必要がある。フィルタサイズが小さすぎれば、これまでに観測していないN-gramを観測したものだと誤る恐れがあり、フィルタサイズが大きければメモリを大量に占有してしまう。またANAGRAMは、その性質上一度でも不正なN-gramを含むパケットを観測してしまうと、以降そのパケットに含まれていたN-gramを全て正常なものだと解釈してしまうため、著しく精度が劣化してしまう。これは例えば学習データ中に暗号化された文字列や、データのバイナリ列のようなランダム性の高いバイト列が含まれている場合に間題となる。ANAGRAM(binary-based)における異常スコアは、下記の式6により算出される。
一方、ANAGRAM(frequency-based)における異常スコアは、下記の式7により算出される。
これらの式からもわかるように、ANAGRAMはbinary-based版、frequency-based版ともに非常にシンプルな手法であり、ハイパーパラメータもほとんど存在しないため扱いやすい。
つまり、ANAGRAM(frequency-based、binary-based)の問題点は、下記の3点である。1点目は、ANAGRAMでは、頻度に関する情報を落としてしまっているため、不正なパケットやランダム性の高いパケットの影響で正常でないパケットのN-gramを観測してしまった場合に、著しい精度の劣化に繋がる点である。2点目は、N≧4程度の大きなNに対してANAGRAMを用いる場合、ブルームフィルタの利用が不可欠となるため、ブルームフィルタのサイズ設計を行う必要がある点である。3点目は、ANAGRAM(frequency-based)のスコア算出の関数は経験的なものであり、確率論的な妥当性が無い点である。
以上のことから、本発明者らは、鋭意検討の上、異常なパケットを精度よく特定することができる異常検知方法、学習方法、異常検知装置、および、学習装置を見出すに至った。
本開示の一態様に係る異常検知方法は、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知する異常検知装置が実行する異常検知方法であって、前記異常検知装置は、プロセッサおよびメモリを備え、前記メモリは、複数の学習用パケットを用いた学習により生成された異常検知モデルを記憶しており、前記異常検知方法では、前記プロセッサが、前記複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をA(Aは1以上の整数)ビット単位で区切ることにより得られる複数個のデータ単位のうちのN(Nは2以上の整数)個のデータ単位の取り得る全ての第1の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、B(Bは1以上の整数)個飛ばしの並び順でのN個のデータ単位の第1の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第1の組み合わせのそれぞれについて、当該第1の組み合わせが前記複数の学習用パケットにおいて出現する回数である第1の数をカウントし、抽出した前記全ての第1の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第1の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第1の組み合わせが出現する確率である複数の第1の確率を算出し、算出した前記複数の第1の確率を前記異常検知モデルとして前記メモリに記憶させ、複数のパケットを取得し、取得した複数のパケットのそれぞれについて、当該パケットに対して算出したスコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが以上であることを出力する。
これによれば、ペイロードにおけるデータ単位の並び情報を考慮して異常検知モデルを学習しているため、異常なパケットを精度よく特定することができる。
また、学習において、スムージング処理を行うことで算出した第1の確率を用いているため、ノイズに対する頑健性を向上させることができる。
また、前記第1の確率の算出では、前記スムージング処理として、前記第1の数の全てに、正の数を加算することで複数の第2の数を算出し、抽出した前記全ての第1の組み合わせのそれぞれについて算出した前記複数の第2の数に基づいて、前記第1に確率を算出してもよい。
また、学習において、複数の第1の数の全てに正の数を加算することで算出した複数の第2の数に基づく第1の確率を用いているため、ノイズに対する頑健性を向上させることができる。
また、前記抽出では、N-gramを用いることで、前記N個のデータ単位の前記第1の組み合わせを抽出してもよい。
また、前記Nは、2または3であってもよい。
また、前記出力では、取得した前記複数のパケットのそれぞれについて、(1)当該パケットに含まれるペイロードを構成するデータ列をA(Aは1以上の整数)ビット単位で区切ることにより得られる複数個のデータ単位のうちのN(Nは2以上の整数)個のデータ単位の取り得る全ての第2の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、B(Bは1以上の整数)個飛ばしの並び順でのN個のデータ単位の第2の組み合わせを抽出し、(2)当該パケットから抽出した前記全ての第2の組み合わせのそれぞれについて、当該第2の組み合わせが、取得した当該パケットが有する前記ペイロードにおいて出現する回数である第3の数をカウントし、(3)当該パケットにおける前記全ての第2の組み合わせのそれぞれについてカウントすることで得られた複数の前記第3の数に基づいて、当該パケットにおいて当該第2の組み合わせが出現する確率である複数の第2の確率を算出し、(4)当該パケットに対して算出した前記複数の第2の確率の対数の総和を前記ペイロードのペイロード長で規定される規定値で除算することでスコアを算出し、(5)当該パケットに対して算出した前記スコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが異常であることを出力してもよい。
これによれば、ペイロードにおけるデータ単位の並び情報を考慮してスコアを算出しているため、異常なパケットを精度よく特定することができる。
また、前記メモリは、前記全ての第1の組み合わせのそれぞれにおける前記第1の数に基づく第4の数を前記異常検知モデルとして記憶しており、前記異常検知方法では、前記プロセッサが、さらに、カウントした前記第3の数を用いて、前記異常検知モデルに含まれる前記第4の数を更新してもよい。
このため、異常検知モデルを追加学習すること、または、古いデータを削除した異常検知モデルに更新することができる。よって、異常なパケットを精度よく特定することができる。
また、前記異常検知方法では、前記プロセッサが、さらに、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットが有するヘッダに応じて当該学習用パケットを複数のモデルのいずれか1つに分類し、前記複数のモデルのそれぞれについて、(1)さらに、カウントした前記第1の数を用いて、前記複数の学習用パケットのうち当該モデルに分類された複数の学習用パケットにおいて、前記全ての第1の組み合わせのそれぞれが出現する回数である第5の数を算出し、(2)当該モデルに分類された前記複数の学習用パケットから抽出した前記全ての第1の組み合わせのそれぞれについて、算出した前記第5の数の全てに、正の数を加算することで前記複数の第6の数を算出し、(3)抽出した前記全ての第1の組み合わせのそれぞれについて、算出した前記複数の第6の数に基づいて、当該モデルに分類された前記複数の学習用パケットにおいて当該第1の組み合わせが出現する確率である複数の第1の確率を算出してもよい。
また、前記メモリは、前記複数のモデル毎に、前記所定の閾値を記憶しており、前記異常検知方法では、前記プロセッサが、さらに、取得した前記複数のパケットのそれぞれを、当該パケットが有するヘッダに応じて複数のモデルのいずれか1つに分類し、前記出力では、算出した前記スコアが、当該スコアが算出されたパケットが分類されたモデルに対応する前記所定の閾値を超えている場合、当該パケットが異常であることを出力してもよい。
また、前記複数のモデルのそれぞれは、前記パケットの宛先IP、宛先ポート、送信元IP、及びプロトコルの少なくとも1つにより分類されるモデルであってもよい。
また、前記メモリは、前記複数のモデル毎における、前記全ての第1の組み合わせのそれぞれにおける前記第5の数を前記異常検知モデルとして記憶しており、前記異常検知方法では、前記プロセッサが、さらに、カウントした前記第3の数を用いて、前記異常検知モデルに含まれる前記第5の数を更新してもよい。
本開示の一態様に係る学習方法は、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知するための異常検知モデルを学習する学習装置が実行する学習方法であって、前記学習装置は、プロセッサおよびメモリを備え、前記学習方法では、前記プロセッサが、複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をA(Aは1以上の整数)ビット単位で区切ることにより得られる複数個のデータ単位のうちのN(Nは2以上の整数)個のデータ単位の取り得る全ての第1の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、B(Bは1以上の整数)個飛ばしの並び順でのN個のデータ単位の第1の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第1の組み合わせのそれぞれについて、当該第1の組み合わせが前記複数の学習用パケットにおいて出現する回数である第1の数をカウントし、抽出した前記全ての第1の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第1の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第1の組み合わせが出現する確率である複数の第1の確率を算出し、算出した前記複数の第1の確率を前記異常検知モデルとして前記メモリに記憶させる。
これによれば、ペイロードにおけるデータ単位の並び情報を考慮して異常検知モデルを学習しているため、異常なパケットを精度よく特定することができる。
また、学習において、複数の第1の数の全てに正の数を加算することで算出した複数の第1の数に基づく第1の確率を用いているため、ノイズに対する頑健性を向上させることができる。
なお、これらの全般的または具体的な態様は、システム、方法、集積回路、コンピュータプログラムまたはコンピュータ読み取り可能なCD-ROMなどの記録媒体で実現されてもよく、システム、方法、集積回路、コンピュータプログラムまたは記録媒体の任意な組み合わせで実現されてもよい。
以下、本発明の一態様に係る異常検知方法、学習方法、異常検知装置、および、学習装置について、図面を参照しながら具体的に説明する。
なお、以下で説明する実施の形態は、いずれも本発明の一具体例を示すものである。以下の実施の形態で示される数値、形状、材料、構成要素、構成要素の配置位置及び接続形態、ステップ、ステップの順序などは、一例であり、本発明を限定する主旨ではない。また、以下の実施の形態における構成要素のうち、最上位概念を示す独立請求項に記載されていない構成要素については、任意の構成要素として説明される。
(実施の形態1)
[2-1 異常検知システムの構成]
まず、本実施の形態における異常検知システムの概略構成について説明する。
図1は、実施の形態に係る異常検知システムの概略図である。
具体的には、図1において、異常検知システム1は、異常検知装置100、パケット収集装置200、および、外部のネットワーク500に通信接続されている監視対象300を備える。異常検知システム1では、異常検知装置100が監視対象300内での通信、または、監視対象とネットワーク500との間での通信に異常があるか否かを検知する。
監視対象300は、異常検知の対象となるシステムである。監視対象300は、例えば、化学プラント、制御システム、車載ネットワークシステムなどである。監視対象300は、ハブ311、312、321、322と、SCADA(Supervisory Control And Data Acquisition)313と、PLC(Programmable Logic Controller)314と、PC(Personal Computer)315、323、324と、ルータ400とを備える制御システムである。
ルータ400は、監視対象300と外部のネットワーク500との間において、データの送受信を中継する通信機器である。ルータ400は、受信したデータを解析し、解析した結果に基づいてデータの転送経路を選択するなどのデータの転送制御を行う。
ハブ311、321は、例えば、スイッチングハブである。ハブ311は、ルータ400、ハブ312、SCADA313、ハブ321、および、パケット収集装置200と通信接続される。ハブ321は、ハブ311、ハブ322、および、パケット収集装置200と通信接続される。ハブ311、321は、受信したデータを接続された機器のうち、受信したデータに含まれる宛先情報に基づく機器に転送する。ハブ311、321は、例えば、受信したデータをコピーし、コピーしたデータを出力するミラーポートを有する。ハブ311、321は、ミラーポートにおいて、パケット収集装置200と接続されている。監視対象300と外部のネットワーク500との間で送受信される複数のパケットは、ハブ311、321のミラーポート経由で抽出され、パケット収集装置200に送信される。
ハブ312、322は、例えば、スイッチングハブである。ハブ312は、ハブ311、PLC314、および、PC315と通信接続される。ハブ322は、ハブ321およびPC323、324と通信接続される。ハブ312、322は、ハブ311、321と同様に、受信したデータを接続された機器のうち、受信したデータに含まれる宛先情報に基づく機器に転送する。
SCADA313は、監視対象300である制御システムのシステム監視、プロセス制御などを行うコンピュータである。
PLC314は、各種機械を制御するための制御装置である。
PC315は、汎用のコンピュータである。
パケット収集装置200は、監視対象300のハブ311、321から送信された複数のパケットを受信し、受信した複数のパケットを記憶する装置である。パケット収集装置200は、例えば、サーバである。パケット収集装置200は、例えば1週間などの所定期間にわたって、監視対象300から複数のパケットを受信し、所定期間分の複数のパケットを記憶する。パケット収集装置200は、記憶した複数のパケットを異常検知装置100に送信する。パケット収集装置200は、また、異常検知装置100が異常検知モデルを生成するための複数の学習用パケットを記憶していてもよい。複数の学習用パケットは、異常を有していない、正常なパケットにより構成される。
[2-2 異常検知装置の構成]
次に、異常検知装置100のハードウェア構成について図2を用いて説明する。
図2は、実施の形態に係る異常検知装置のハードウェア構成の一例を示すブロック図である。
図2に示すように、異常検知装置100は、ハードウェア構成として、CPU(Central Processing Unit)101と、メインメモリ102と、ストレージ103と、通信IF(Interface)104と、入力IF(Interface)105と、ディスプレイ106とを備える。
CPU101は、ストレージ103等に記憶された制御プログラムを実行するプロセッサの一例である。
メインメモリ102は、CPU101が制御プログラムを実行するときに使用するワークエリアとして用いられる揮発性の記憶領域、つまりメモリの一例である。
ストレージ103は、制御プログラム、コンテンツなどを保持する不揮発性の記憶領域、つまり、メモリの一例である。
通信IF104は、通信ネットワークを介してパケット収集装置200と通信する通信インタフェースである。通信IF104は、例えば、有線LANインタフェースである。なお、通信IF104は、無線LANインタフェースであってもよい。また、通信IF104は、LANインタフェースに限らずに、パケット収集装置200との間で通信接続を確立できる通信インタフェースであれば、どのような通信インタフェースであってもよい。
入力IF105は、例えば、テンキー、キーボード、マウスなどの入力装置である。
ディスプレイ106は、CPU101での処理結果を表示する表示装置である。ディスプレイ106は、例えば、液晶ディスプレイ、有機ELディスプレイである。
[2-3 異常検知装置の機能構成]
次に、異常検知装置100の機能構成について、図3を用いて説明する。なお、異常検知装置100は、異常を検知するための異常検知モデルの学習処理も行う学習装置の一例でもある。
図3は、本実施の形態における異常検知装置の機能構成の一例を示すブロック図である。
パケット収集装置200に蓄積されている複数のパケットからなるデータ210は、学習用データ211と検査用データ212とを含む。
学習用データ211は、取得されたデータ210のうちで、機械学習による異常検知モデルを生成するためのデータである。検査用データ212は、取得されたデータ210のうちで、生成された異常検知モデルを用いて監視対象300から得られたデータ210が異常か否かを判断する異常診断の対象となるデータである。なお、学習用データ211には、正常なデータだけでなく、異常なデータも含む取得された複数のパケットを用いることができる。例えば、学習用データ211は、データ210の始めの所定期間で取得されたデータであり、検査用データ212は、学習用データ211を取得した所定期間より後の期間において取得されたデータとしてもよい。また、検査用データ212は、異常検知モデルを更新するための学習用のデータとして用いられてもよい。
なお、複数のパケットは、例えば、図4Bに示すような、TCPプロトコルのパケットである。図4Bは、TCPプロトコルのパケット構造の一例を示す図である。TCPプロトコルの構造は、RFC793により規定されている。
異常検知装置100は、取得部110と、検知モデル学習部120と、異常検知モデルDB(Database)130と、入力受付部140と、アラート閾値算出部150と、検知部160と、提示部170とを備える。
取得部110は、パケット収集装置200から学習用データ211としての複数のパケットである複数の学習用パケットを取得する。取得部110は、パケット収集装置200から検査用データ212としての複数のパケットを取得してもよい。取得部110は、例えば、CPU101、メインメモリ102、ストレージ103、および、通信IF104などにより実現される。
検知モデル学習部120は、取得部110により取得された複数の学習用パケットを用いて学習処理を行うことで、異常検知モデルを生成する。具体的には、検知モデル学習部120は、取得部110により取得され複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をA(Aは1以上の整数)ビット単位で区切ることにより得られる複数個のデータ単位のうちのN(Nは2以上の整数)個のデータ単位の取り得る全ての組み合わせであって、当該ペイロードにおける互いに連続している並び順でのN個のデータ単位の組み合わせを抽出する。ここで、抽出される組み合わせは、第1の組み合わせの一例である。ここで、Aビット単位は、例えば、8ビット単位、つまり、1バイト単位である。なお、Aは、8に限らずに、8以外の他の数値であってもよい。検知モデル学習部120は、N-gramを用いることで、N個のデータ単位の組み合わせを抽出する。ここで、Nは、例えば、2または3である。つまり、検知モデル学習部120は、2-gramまたは3-gramを用いることで、2個のデータ単位の組み合わせ、または、3個のデータ単位の組み合わせを抽出する。なお、検知モデル学習部120は、N-gramのように互いに連続している並び順でのN個のデータ単位の組み合わせに限らずに、B(Bは1以上の整数)個飛ばしの並び順でのN個のデータ単位の組み合わせを抽出してもよい。
次に、検知モデル学習部120は、取得部110により取得された複数の学習用パケットの複数のペイロードを構成するデータ列から抽出した全ての組み合わせのそれぞれについて、当該組み合わせが当該学習用パケットにおいて出現する回数である第1の数をカウントする。検知モデル学習部120は、抽出した全ての組み合わせのそれぞれについて、カウントすることで得られた複数の第1の数の全てに、正の数を加算することで複数の第2の数を算出する。検知モデル学習部120は、抽出した全ての組み合わせのそれぞれについて算出した複数の第2の数に基づいて、複数の学習用パケットにおいて当該第1の組み合わせが出現する確率である複数の第1の確率を算出する。
なお、検知モデル学習部120は、複数の第1の数の全てに、正の数を加算することで複数の第2の数を算出し、複数の第2の数に基づいて、複数の第1の確率を算出するとしたが、これに限らない。検知モデル学習部120は、例えば、抽出した全ての組み合わせのそれぞれについて算出した複数の第1の数に基づいて、複数の学習用パケットにおいて当該組み合わせが出現する複数の確率を算出し、算出した複数の確率に正の数を加算することで複数の第1の確率を算出してもよい。
検知モデル学習部120は、取得部110により取得された複数の学習用パケットのそれぞれについて、さらに、当該学習用パケットが有するヘッダに応じて当該学習用パケットを複数のモデルのいずれか1つに分類してもよい。検知モデル学習部120は、複数の異常検知モデルを保持または学習しても良い。この場合、検知モデル学習部120は、この複数の異常検知モデルを、例えばパケットのヘッダに含まれる情報である、宛先IP、宛先ポート、送信元IP、及びプロトコルの少なくとも1つの値に応じて切り替えて学習または検査の処理を行う。
複数の学習用パケットを複数のモデルに分類する場合、検知モデル学習部120は、複数のモデルのそれぞれについて、カウントした第1の数を用いて、複数の学習用パケットのうち当該モデルに分類された複数の学習用パケットにおいて、全ての組み合わせのそれぞれが出現する回数である第5の数を算出してもよい。そして、検知モデル学習部120は、複数のモデルのそれぞれについて、当該モデルに分類された複数の学習用パケットから抽出した全ての組み合わせのそれぞれについて、算出した第5の数の全てに、正の数を加算することで複数の第6の数を算出する。その後、検知モデル学習部120は、複数のモデルのそれぞれについて抽出した全ての組み合わせのそれぞれについて、算出した複数の第6の数に基づいて、当該モデルに分類された複数の学習用パケットにおいて当該組み合わせが出現する確率を第1の確率として算出してもよい。
検知モデル学習部120は、例えば、CPU101、メインメモリ102、ストレージ103などにより実現される。
例えば、検知モデル学習部120は、次のような処理を行うことで学習を実行する。
異常検知方法における学習方法では、パケットの宛先IP、宛先ポートごとにモデルを分割することになるため、学習フェーズにおいては、ユニークな(宛先IP、宛先ポート)ペアの数だけモデル
を初期化しておく。各モデルは、ペイロードの2-gramを記録する
を保持しており、その初期値は65536次元の零ベクトルである。その後、学習対象となる全パケットに対し、学習対象のパケットの(宛先IP、宛先ポート)のペアが(ip
i,Port
j)の場合、各パケットを、下記の方法で2-gramのベクトル(∈N
65536)に変換し、
に加算する。各バケットの2-gramベクトルへの変換法は下記の通りである:パケットのペイロードのバイト列が{X
1,X
2,X
3,...,X
L}であったとする(Lはペイロード長)。ここで各X
k(k=1,...,L)∈{0,...,255}である。2-gramを取得する場合、上記バイト列から次の2-gramの列を得る。{X
1X
2,X
2X
3,...,X
L-1X
L}。この2-gramの列から、次のルールで2-gramベクトルを生成する:
1.空のベクトルy(∈N
65536)を準備する。
2.各2-gram X
iX
i+1(i=1,...,L一1)に対して、t
i=256*X
i+X
i+1を計算する。(t
i∈{0,...,65535})
3.全てのi=1,...,L一1に対してy[t
i]+1を実行する(ここでy[t
i]はベクトルyのt
i番目の要素を表す)。
4.パケットの2-gramベクトルへの変換結果yを得る。
全パケットの学習が完了した段階で、各モデル
は、どの2-gramが何回出現したかを表すベクトル
を保持している。この2-gramが何回出現したかを表すベクトルは、全ての組み合わせのそれぞれについて、カウントされることにより得られた第1の数の一例である。このベクトルを用いて、各2-gramの出現確率を算出する。最も単純に考えると、2-gramのインデックスをk∈{0,1,...,65535}としたとき、2-gram g
kが出現する確率p(g
k)は、学習対象バケットに現れた2-gram g
kの出現回数をx
i,j[k]としたとき、下記の式8で表すことができる。式8で表される出現確率は、複数の第1の確率の一例である。
しかし、この式で確率を表現した場合、学習対象パケットに1度も現れなかった2-gramの確率を0とすることになり、後述するスコアリング手法を用いるとスコアが発散してしまう。この事象を回避するために、既にいくつかの方法が提案されているが、本実施の形態ではスムージング処理の1つであるLaplace smoothingと呼ばれる手法を採用する。Laplace smoothingとは、カテゴリデータをスムージングする手法の1種で、N回の試行の多項分布から得られたデータx=(x1,...,xd)があるとき、この多項分布のパラメータθ=(θ1,...,θd)を下記の式9により推定する手法のことである。
すなわち全てのカテゴリに対し、出現回数xiをα回分水増しして式10を適用することに相当する。通常αは1,0.1,0.01などの値を選ぶ。この方法を提案手法に適用すると、下記の式を得る。ここで、αは、加算する正の数の一例である。
この式により得られたp(gk)を2-gram gkの出現確率とみなす。つまり、式10により得られた出現確率は、第1の確率の一例である。
なお、スムージング処理としては、Laplace smoothingに限らずに、Kneser-Ney smoothingなど他のスムージング処理を行ってもよい。
異常検知モデルDB130は、検知モデル学習部120により生成された、つまり算出された複数の第1の確率を異常検知モデルとして記憶する。異常検知モデルDB130は、全ての第1の組み合わせのそれぞれにおける第1の数に基づく第4の数を異常検知モデルとして記憶していてもよい。なお、異常検知モデルにおいて記憶される第1の数に基づく第4の数は、第1の数であってもよいし、第2の数であってもよいし、第5の数であってもよいし、第6の数であってもよい。
図5~図8は、異常検知モデルDBが保持する異常検知モデルの例を示す図である。
図5に示す異常検知モデル131は、モデルID、宛先IP、宛先ポート、N-gram取得対象データ、N-gram出現回数、および、N-gram出現確率の各項目のデータにより構成される。モデルIDは、複数のモデルのそれぞれを識別するための、当該モデルに一意に付与された識別子である。宛先IPは、当該モデルに対応付けられたパケットの宛先IPを示す情報である。宛先ポートは、当該モデルに対応付けられたパケットの宛先ポートを示す情報である。N-gram取得対象データは、当該モデルに対応付けられたN-gram取得の対象となるデータを示す情報であり、例えば各プロトコルのパケットのデータ部を示すペイロードである。N-gram出現回数n1~n6は、当該モデルに対応付けられたパケットのN-gramの出現回数、つまり、第6の数の一例である。N-gram出現回数n1~n6は、全てのN-gramのそれぞれの出現回数で表されるため、全てのN-gramの数に対応する次元のベクトルデータである。つまり、n1は、例えば、[00:51回,01:12回,...,FF:31回]で表される。よって、nk(kは、1~6の整数)は、例えば、[nk1、nk2、・・・、nkL]で表される。N-gram出現確率Pr1~Pr6は、当該モデルに対応付けられたパケットにおけるN-gramの出現確率、つまり、第1の確率の一例である。N-gram出現確率Pr1~Pr6も、N-gram出現回数n1~n6と同様に、全てのN-gramの数に対応する次元のベクトルデータである。つまり、Pr1は、例えば、[00:0.1,01:0.02,...,FF:0.06]で表される。よって、Prk(kは、1~6の整数)は、例えば、{Prk1、Prk2、・・・、PrkL}で表される。このように、異常検知モデル131では、宛先IPおよび宛先ポートの組み合わせに応じて複数のモデルが分類される。
つまり、検知モデル学習部120は、宛先のIP、宛先ポートごとに学習し、学習した結果を異常検知モデル131として生成する。宛先IP、宛先ポートごとに異常検知モデルを学習する理由は、宛先IP、宛先ポートが同一のバケットには、似た役割を持つパケットが多いからである。
図6に示す異常検知モデル132は、図5で示した異常検知モデル131に、さらに、Sorce IPの項目を加えたモデルである。Sorce IPは、当該モデルに対応付けられたパケットの送信元IPを示す情報である。このように、異常検知モデル132では、宛先IPおよび宛先ポートに加えて送信元IPの組み合わせに応じて複数のモデルが分類される。
図7に示す異常検知モデル133は、図6で示した異常検知モデル132の宛先ポートの項目を対象プロトコルの項目で置き換えたモデルである。対象プロトコルは、当該モデルに対応付けられたパケットのプロトコルを示す情報である。このように、異常検知モデル133では、宛先IP、送信元IPおよび対象プロトコルの組み合わせに応じて複数のモデルが分類される。
図8に示す異常検知モデル134は、図5で示した異常検知モデル131に、さらに、アラート閾値の項目を加えたモデルである。アラート閾値は、後述するが、例えばユーザの入力に応じて決定される閾値であって、パケットの異常を検知するための閾値である。アラート閾値は、パケットにおいて算出されるスコアとの比較対象となる閾値である。このように、異常検知モデル134は、モデルの分類に加えて、パケットの異常を検知するためのアラート閾値が対応付けられていてもよい。
なお、図8に示す異常検知モデル134のように、モデルの分類にアラート閾値は必ずしも対応付けられていなくてもよい。
なお、図5~図8に示す異常検知モデル131~134では、モデルの数は6つであるが、6つに限らずに、2以上の6以外の数であってもよい。
図9は、宛先ポートとアラート閾値とが対応付けられた対応情報を示す図である。
図9に示す対応情報135に示すように、アラート閾値は、モデル毎に対応付けられていなくてもよく、宛先ポートごとに対応付けられていてもよい。つまり、異常検知モデル131~133のいずれか1つと、対応情報135とに応じて、各モデルにアラート閾値が対応付けられてもよい。
異常検知モデルDB130は、異常検知モデル131~133のいずれか1つと、対応情報135とをセットで保持していてもよいし、異常検知モデル134のみを保持していてもよい。
異常検知モデルDB130は、例えば、ストレージ103などにより実現される。
入力受付部140は、ユーザからの入力を受け付ける。入力受付部140は、ユーザから、例えば、監視対象300から得られる複数のパケットのうち、監視対象のIPの範囲、および、ポートの範囲の少なくとも一方と、N-gramを抽出する範囲とを示す入力を受け付ける。ここでN-gramを抽出する範囲とは、例えば、異常検知モデル131~134においてN-gram取得対象データで示されるパケットの検査の対象とするデータ部のことであり、例えば、各プロトコルに対応するペイロードである。また、入力受付部140は、アラートを発生するためのアラート発生率に関するパラメータの入力を受け付ける。アラート発生率とは、例えば、a個のパケットに1つ、1日にb回など全ての組み合わせが発生する発生率について、当該発生率に基づく通常状態からの乖離が大きいと判断するため、つまり、当該パケットに異常が含まれると判断するための閾値である。ここで、入力受付部140は、上記パラメータを、複数のモデルにそれぞれ対応する複数のパラメータを受け付ける。なお、入力受付部140は、上記パラメータを、複数のモデルに共通する1つのパラメータとして受け付けてもよい。入力受付部140は、アラート閾値を示す入力を受け付けてもよい。アラート閾値は、例えば、後述するスコアについて、当該スコアに基づく通常状態からの乖離が大きいと判断するため、つまり、当該パケットに異常が含まれると判断するための全ての組み合わせの出現確率を基準として決定される閾値である。
入力受付部140は、例えば、CPU101、メインメモリ102、ストレージ103、入力IF105などにより実現される。
アラート閾値算出部150は、入力受付部140により受け付けられた、アラート発生率に関するパラメータと、学習用パケットに対して算出されたスコアとに基づいてアラート閾値を算出する。アラート閾値算出部150は、学習用パケットにおいて算出された複数の第1の確率を後述する式12に適用することで、学習用パケットに対するスコアを算出する。アラート閾値算出部150は、例えば、パラメータにより指定されたアラート発生率以下となるように、アラート閾値を算出する。アラート閾値算出部150は、複数のモデルにそれぞれ複数のパラメータが入力された場合には、複数のモデル毎のパラメータに基づいてアラート閾値を算出する。アラート閾値算出部150により算出された複数のモデル毎にアラート閾値は、異常検知モデルDB130の異常検知モデルとして記憶される。アラート閾値算出部150は、例えば、CPU101、メインメモリ102、ストレージ103などにより実現される。
検知部160は、取得部110により取得された複数のパケットのそれぞれについて、異常があるか否かを検知する。具体的には、検知部160は、取得部110により取得された複数のパケットのそれぞれについて、以下の(1)~(6)の処理を順に行う。
(1)検知部160は、当該パケットに含まれるペイロードを構成するデータ列をAビット単位で区切ることにより得られる複数個のデータ単位のうちN個のデータ単位の取り得る全ての第2の組み合わせであって、当該ペイロードにおける互いに連続している並び順でのN個のデータ単位の組み合わせを抽出する。ここで抽出される組み合わせは、第2の組み合わせの一例である。検知部160は、具体的には、検知モデル学習部120と同様にN-gramを用いることで、N個のデータ単位の組み合わせを抽出する。ここで、Nは、例えば、2または3である。つまり、検知部160は、2-gramまたは3-gramを用いることで、2個のデータ単位の組み合わせ、または、3個のデータ単位の組み合わせを抽出する。なお、検知部160は、N-gramのように互いに連続している並び順でのN個のデータ単位の組み合わせに限らずに、B(Bは1以上の整数)個飛ばしの並び順でのN個のデータ単位の組み合わせを抽出してもよい。
(2)検知部160は、当該パケットから抽出した全ての組み合わせのそれぞれについて、当該組み合わせが、取得した当該パケットが有するペイロードにおいて出現する回数である第3の数をカウントする。
(3)検知部160は、当該パケットから抽出した全ての組み合わせのそれぞれについて、カウントすることで得られた複数の第3の数に基づいて、当該パケットにおいて当該組み合わせが出現する確率である複数の第2の確率を算出する。
(4)検知部160は、当該パケットに対して算出した複数の第2の確率の対数の総和をペイロードのペイロード長で規定される規定値で除算することでスコアを算出する。
(5)検知部160は、当該パケットに対して算出したスコアが、異常検知モデルDB130に記憶されている異常検知モデルに基づく所定の閾値としてのアラート閾値を超えているか否かを判定する。検知部160は、アラート閾値を超えるスコアが算出されたパケットに異常があることを検知し、アラート閾値以下のスコアが算出されたパケットに異常が無いことを検知する。
なお、検知部160は、検知モデル学習部120と同様に、取得部110において取得された複数のパケットのそれぞれを、当該パケットが有するヘッダに応じて複数のモデルのいずれか1つに分類してもよい。この場合、検知部160は、算出したスコアが、当該スコアが算出されたパケットが分類されたモデルに対応する所定の閾値を超えているか否かを判定してもよい。
検知部160は、例えば、CPU101、メインメモリ102、ストレージ103などにより実現される。
例えば、検知部160は、次のような処理を行うことで検査を実行する。
本実施の形態に係る異常検知方法では、検知部160は、PAYLやANAGRAMと同様、検査フェーズでは各パケットに対して異常スコアを算出する。異常スコアの算出対象となる各パケットは、学習フェーズに行った変換法と同様に2-gramのベクトルy(∈N65536)に変換する。変換されたベクトルに対し、次の式を使ってスコアリングを行う。
式11において、L乗根を採るのは、異なる長さのペイロードに対して平等なスコアの比較が行なえるようにするためである。このスコアを直接計算するのは指数演算が入ってしまい負荷が高いため、またスコアが大きなパケットほど異常度が高いパケットとして扱うため、上記score’の負の対数をスコアとして扱うことにする。すなわち、scoreの算出は下記の式12によって行われる。
scoreは値が大きければ大きいほど異常度が高いとみなせる。このスコアリングの仕方はANAGRAM(frequency-based)のものと比較して合理的なものであり、後述の評価結果からもわかるように、ANAGRAM(frequency-based)よりも高い性能を発揮する。
提示部170は、検知部160において異常があることを検知されたパケットについて、当該パケットに異常があることを示す情報であるアラートを出力する。なお、提示部170は、算出されたスコアを出力してもよい。提示部170は、スコアを提示する場合、アラートを出力するか否かにかかわらずスコアを出力してもよく、スコアを出力し、アラートを出力しなくてもよい。提示部170は、例えば、ディスプレイ106にアラートを示す画像を表示させることで、ユーザにアラートを提示する。提示部170は、例えば、CPU101、メインメモリ102、ストレージ103、ディスプレイ106などにより実現される。
なお、提示部170は、異常検知装置100がスピーカを有している場合には、音によってスピーカからユーザにアラートを提示してもよい。また、提示部170は、アラートを示す情報をスマートフォンなどの情報端末に出力することにより、情報端末にアラートを提示させてもよい。
[2-4 動作]
次に、異常検知装置100における動作について説明する。
図10は、異常検知装置における動作の概要を示すフローチャートである。
異常検知装置100は、まず、取得部110により取得された学習用データ211である複数の学習用パケットを用いて、学習処理を実行する(S1)。これにより、異常検知装置100では、複数のモデル毎に異常検知モデルが生成される。学習処理の詳細は、後述する。
次に、異常検知装置100は、アラート閾値決定処理を実行する(S2)。ここれにより、異常検知装置100では、アラート閾値が異常検知モデルのモデル毎に対応付けられる。アラート閾値決定処理の詳細は、後述する。
最後に、異常検知装置100は、取得部110により取得された検査用データ212である複数のパケットを用いて、検査処理を実行する(S3)。これにより、異常検知装置100は、複数のパケットのそれぞれについて、異常があるか否かを検知する。検査処理の詳細は、後述する。
次に、学習処理、つまり学習方法の詳細について説明する。
図11は、異常検知装置における学習処理の詳細の一例を示すフローチャートである。
まず、異常検知装置100では、入力受付部140が監視対象300から得られる複数のパケットのうち、監視対象のIPの範囲、および、ポートの範囲の少なくとも一方と、N-gramを抽出する範囲とを示す入力を受け付ける(S11)。また、入力受付部140は、このとき、学習用パケットのプロトコルの識別が必要か否かを示す情報の入力をユーザから受け付けてもよい。ステップS11の処理は、一度実行されればよく、学習の度に実行されなくてもよい。
次に、取得部110は、学習用データ211である複数の学習用パケットを取得する(S12)。
以下、検知モデル学習部120は、複数の学習用パケットのそれぞれについて、ステップS13~ステップS20の処理を繰り返す。
検知モデル学習部120は、学習を実行するのに、学習用パケットのプロトコルの識別が必要であるか否かを判定する(S13)。検知モデル学習部120は、例えば、ステップS11において入力受付部140がプロトコルの識別が必要であることを示す情報の入力を受け付けていれば、プロトコルの識別が必要であると判定し、そうでなければ、プロトコルの識別が不要であると判定する。検知モデル学習部120は、プロトコルの識別が必要であると判定すれば(S13でYes)、ステップS14に進み、プロトコルの識別が不要である判定すれば(S13でNo)、ステップS15に進む。
検知モデル学習部120は、ステップS14において、処理対象の学習用パケットのヘッダに基づいてプロトコルの識別処理を実行し、ステップS15に進む。
検知モデル学習部120は、ステップS15において、処理対象の学習用パケットが該当するモデルを特定する。検知モデル学習部120は、処理対象の学習用パケットのヘッダを読み取ることで得られる、宛先IP、宛先ポート、プロトコル、および送信元IP少なくとも1つに応じたモデルを特定する。ここで、検知モデル学習部120は、ステップS11において受け付けられた監視対象のIPの範囲、および、ポートの範囲の少なくとも一方と、N-gramを抽出する範囲とに応じて、特定するモデルの分類を決定する。
検知モデル学習部120は、特定したモデルが既に存在しているか否かを判定する(S16)。つまり、検知モデル学習部120は、特定したモデルに属する学習用パケットが既に存在しているか否かを判定する。検知モデル学習部120は、特定したモデルがまだ存在していないと判定すれば(S16でNo)、ステップS17に進み、特定したモデルが既に存在すると判定すれば(S16でYes)、ステップS18に進む。
検知モデル学習部120は、ステップS17において、特定したモデルを新規モデルとして追加し、ステップS18に進む。
検知モデル学習部120は、ステップS18において、処理対象の学習用パケット中の対象データ部を抽出する。具体的には、検知モデル学習部120は、ステップS11において受け付けられたN-gramを抽出する範囲を示す入力に基づいて特定される対象データ部であって、各モデルに対応付けられた検査の対象となる対象データ部を抽出する。
検知モデル学習部120は、処理対象の学習用パケットが属するモデルのN-gram出現回数n1~n6をカウントする(S19)。ここで、検知モデル学習部120は、N-gram出現回数n1~n6として、第5の数をカウントし、第5の数から第6の数を算出する。これにより、検知モデル学習部120は、処理対象のパケットにおける学習処理を終了する。
検知モデル学習部120は、複数の学習用パケットのうち、未学習のパケットが存在するか否かを判定し(S20)、未学習のパケットが存在すれば(S20でYes)、未学習のパケットについてステップS13~ステップS19の処理を実行する。検知モデル学習部120は、未学習のパケットが存在しなければ(S20でNo)、つまり、全ての学習用パケットについてステップS13~ステップS19の処理が終了していれば、学習処理を終了する。
なお、取得部110は、複数の学習用パケットを一度に全て取得しなくてもよく、複数回に分けて取得してもよく、例えば、複数の学習用パケットを1つずつ取得してもよい。このように、取得部110が複数回に分けて複数の学習用パケットを取得する場合、異常検知装置100は、ステップS12~ステップS20を繰り返すこととなる。
次に、アラート閾値決定処理の詳細について説明する。
図12は、アラート閾値決定処理の詳細の一例を示すフローチャートである。
異常検知装置100では、入力受付部140がアラートを発生するためのアラート発生率に関するパラメータの入力を受け付け、受け付けたパラメータを設定する(S21)。
次に、アラート閾値算出部150は、学習用パケットにおいて算出された複数の第1の確率を式12に適用することで学習用パケットに対するスコアを算出する(S22)。
そして、アラート閾値算出部150は、入力受付部140により受け付けられた、アラート発生率に関するパラメータと、学習用パケットに対して算出されたスコアとに基づいてアラート閾値を算出する(S23)。アラート閾値算出部150は、例えば、パラメータにより指定されたアラート発生率以下となるように、アラート閾値を算出する。
図12の例では、異常検知装置100は、パラメータからアラート閾値を算出するとしたが、次のようにアラート閾値をユーザから直接受け付けてもよい。
図13は、アラート閾値決定処理の詳細の他の一例を示すフローチャートである。
異常検知装置100では、入力受付部140がアラート閾値を示す入力を受け付ける(S21A)。
アラート閾値算出部150は、入力受付部140により受け付けられた入力が示すアラート閾値を、アラート閾値として設定する(S22A)。
次に、検査処理、つまり異常検知方法の詳細について説明する。
図14は、異常検知装置における検査処理の詳細の一例を示すフローチャートである。
異常検知装置100では、検知モデル学習部120が異常検知モデルにおける複数のモデルのそれぞれのN-gram出現回数n1~n6からN-gram出現確率Pr1~Pr6を算出する(S31)。
次に、取得部110は、検査用データ212である複数のパケットを取得する(S32)。
以下、検知部160は、複数のパケットのそれぞれについて、ステップS33~ステップS41の処理を繰り返す。
なお、検知部160が実行するステップS33~ステップS36は、検知モデル学習部120が実行するステップS13~ステップS16と同様であるので説明を省略する。
検知部160は、特定したモデルが既に存在すると判定すれば(S36でYes)、ステップS37に進み、特定したモデルがまだ存在していないと判定すれば(S36でNo)、ステップS41に進む。
検知部160は、ステップS37において、処理対象のパケット中の対象データ部を抽出する。この処理は、学習処理のステップS18と同様であるので説明を省略する。
検知部160は、処理対象のパケットのスコアを算出する(S38)。具体的には、検知部160は、上述した検知部160の説明における(1)~(6)の処理を行うことにより、処理対象のパケットのスコアを算出する。
検知部160は、処理対象のパケットに対して算出したスコアが、異常検知モデルDB130に記憶されている異常検知モデルで、当該処理対象のパケットのモデルに対応付けられているアラート閾値を超えているか否かを判定する(S39)。検知部160は、算出したスコアが対応するアラート閾値を超えていれば(S39でYes)、提示部170は、アラートを提示し(S40)、算出したスコアが対応するアラート閾値以下であれば(S39でNo)、ステップS41に進む。
検知部160は、複数のパケットのうち、未検査のパケットが存在するか否かを判定し(S41)、未検査のパケットが存在すれば(S41でYes)、未検査のパケットについてステップS33~ステップS40の処理を実行する。検知部160は、未検査のパケットが存在しなければ(S41でNo)、つまり、全てのパケットについてステップS33~ステップS40の処理が終了していれば、検査処理を終了する。
なお、取得部110は、複数のパケットを一度に全て取得しなくてもよく、複数回に分けて取得してもよく、例えば、複数のパケットを1つずつ取得してもよい。このように、取得部110が複数回に分けて複数の学習用パケットを取得する場合、異常検知装置100は、ステップS32~ステップS41を繰り返すこととなる。
[3 効果など]
本実施の形態に係る異常検知方法によれば、パケットに含まれるペイロードのうち、Aビット単位で区切ることにより得られる複数個のデータ単位のうちのN個のデータ単位の当該ペイロードにおける並びを含む当該N個のデータ単位の組み合わせであって、取り得る全ての組み合わせを抽出し、全ての組み合わせのそれぞれが出現する第2の確率を算出し、算出した複数の第2の確率に基づいてスコアを算出する。このように、N個のデータ単位の当該ペイロードにおける並びを含む組み合わせが出現する確率に基づいてスコアを算出するため、並び情報を考慮した精度のよいスコアを算出することができる。
また、本実施の形態に係る学習方法によれば、異常検知モデルを追加学習すること、または、古いデータを削除した異常検知モデルに更新することができる。よって、異常なパケットを精度よく特定することができる。
このように、本実施の形態に係る異常検知方法は、既存手法に見られる欠点を克服していると考えられる。まず、PAYLはバイト列の並び情報を無視しているという欠点があったが、本実施の形態に係る異常検知方法はN-gram(N=2、3)の情報を利用することでこの欠点を回避している。また、ANAGRAMは、N-gramの出現回数に関する情報を完全に捨ててしまっていたが、提案手法ではN-gramの出現回数も考慮したモデルを考える。ANAGRAM(frequency-based)は、N-gramの頻度情報を利用してはいたものの、スコアの算出法が経験的な方法であったため、提案手法ではLaplace smoothingの利用と、対数尤度を使った自然なスコアリングを用いてこの間題を回避している。
また、本実施の形態に係る異常検知方法は各モデルに関して出現するN-gram(N=2、3)の出現回数を保持しておけば良いため、メモリ効率もよく、ANAGRAMのようにブルームフィルタのサイズの見積りの必要などはない。
また、本実施の形態に係る異常検知方法におけるハイパーパラメータはLaplace smoothingの際に利用される底上げパラメータβのみであり、このパラメータは例えばβ=0.01などに固定してしまっても良く、経験的にこの値を少々変動させたところで、異常検知モデルの性能にほとんど影響を与えないことがわかっている。
また、本実施の形態に係る異常検知方法では各モデルにおける2-gramの出現回数ベクトルxさえ記憶しておけば、既に学習したモデルに追加で学習を行うこと(追加学習)や、逆に既にモデルが学習したデータを学習していない状態に戻すこと(忘却)が可能である。特に忘却の機能は他の手法に見られない特徴である。忘却機能を利用することで、常に1ヶ月分のデータのみ学習された状態にしておくことや、通常データとして好ましくないデータが得られた日時のデータを選択的にモデルから忘却させることができる。この性質は異常検知システムを実際に運用していく上で有用な性質である。つまり、検知部160は、カウントした第3の数を用いて、異常検知モデルに含まれる第4の数を更新してもよい。例えば、検知部160は、第4の数に第3の数を追加することで異常検知モデルに学習データを追加することができる。また、新たにカウントすることで得られた第3の数を追加すると共に、過去の所定期間においてカウントした数を異常検知モデルの第4の数から削除することで、異常検知モデルを最新の状態とすることができる。なお、異常検知モデルの第4の数に、新たにカウントした数を追加することなく、当該第4の数から過去の所定期間においてカウントした数を削除してもよい。
(その他)
以上のように、異常検知装置100では、以下の異常検知方法を実行している。
1.unigramを用いるとバイト列の並びに関する情報が完全に失われてしまうため、N-gram(N≧2)を特徴量として用いている。
2.ANAGRAMのようにN-gramの出現頻度に関する情報を完全に落としてしまわずに、N-gramの出現回数の情報を利用する。
3.ANAGRAM(frequency-based)の手法は異常スコアの計算が単純な算出平均を用いる方法であったことに着目し、確率的なモデルを仮定し、より理論的に妥当性のある異常スコアの算出法を利用している。
4.実環境ではハイパーパラメータのチューニングを適切に行えるような教師データの入手が困難であるため、ハイパーパラメータが少ないモデルを利用している。
1つ目は明らかに、unigramよりもN-gram(N≧2)の持つリッチな情報を持つことを利用したいためである。これはPAYLの精度がANAGRAMと比較して低い理由がunigramを利用していることが原因だと思われるからである。
2つ目に関しても同様で、あるN-gramが何回出現したか、という情報は、あるN-gramが出現したことがあるか、という情報より多くの情報を含んでいるからである。また、ランダム性の高いバイナリ列が多く含まれていると考えられる制御システムネットワークのパケットにおいては、あるN-gramが出現したことがあるかどうかだけで判断してしまっては、たまたまランダムなバイナリ中に含まれたN-gramを正常な列とみなしてしまうおそれがあるからである。
この1つ目、2つ目の特性は、frequency-basedのANAGRAMが持つ特性と同一である。しかしANAGRAMの論文中では、frequency-basedのANAGRAMは、binary-basedのANAGRAMに明確に劣ると記述されていた。3つ目の特性に述べたとおりだが、本稿では、frequency-basedのANAGRAMの異常スコアの算出手法に問題があったことを示し、適切な異常スコア算出法の下では、bigram(N=2のときのN-gram)を用いれば、PAYLやANAGRAMを凌ぐ精度となり得る。
本実施の形態に係る異常検知方法も、過去のN-gramを用いた手法と同様に、ペイロード列のN-gram情報を特徴として利用する。本実施の形態ではN=2の場合、すなわち2-gramを特徴として利用する。N≧3となるNを使わない理由は、N≧3の場合、各N-gramの情報がスパースになってしまい、出現回数情報の信頼性が落ちてしまうからである(これがANAGRAM(frequency-based)の検知性能が低い一因とされている)が、データが豊富に存在する場合、N=3として本手法を適用しても高い精度を発揮することが期待される。N≧4の場合、現実的な場面ではN-gramデータがスパースになってしまい実用的ではないと考えられる。
アノマリベースの異常検知技術手法の多くは学習フェーズを持ち、学習期間として与えられたデータを使って正常な通信のふるまいを学習する。検査フェーズでは、与えられたパケットが正常であるか異常であるかを、学習フェーズに得られた検知モデルを使って判断することになる。本実施の形態に係る異常検知方法はペイロードベースの手法であるが、ヘッダの情報も利用している。これは提案手法が宛先IPアドレスや宛先ポートに応じて学習/検査に利用する異常検知モデルを変えているためである。例えばHTTPプロトコルとFTPプロトコルでは、観測されるペイロードが全く異なるためである。
[4 変形例]
上記実施の形態に係る異常検知方法において、N-gramを用いた系列生成モデルに従ったスコアリングを行うこともできる。ここでxi,j[XT,XT+1]を、そのモデルにおける2-gramXT,XT+1の出現回数とする。このときp(XT+1|XT)を下記の式により定める。
また、p(X1)は別途下記の式により定める。ただしstartはデータの開始を意味する記号である。
この値を取得するため、学習時にはペイロード中の最初の文字の出現回数をモデルごとに保持しておく必要がある。
また、検査の処理では式4から自然に下記の式15により導出できる。
[5 実験と評価結果]
本実験では、既存手法として挙げたPAYL、ANAGRAM(frequency-based)、ANAGRAM(binary-based)を比較対象として本実施の形態に係る異常検知方法を評価している。ANAGRAM(binary-based)は3-gramを評価対象とし、ANAGRAM(frequency-based)は2-gramと3-gramをともに評価している。本実施の形態に係る異常検知方法としては2-gramを利用している。
[5-1 実験に用いるデータセットと評価の仕方]
ここでは、データセットとして1999DARPA IDS Data Set(以降DARPA99データセット)を用いている。DARPA99データセットはMIT Lincoln LabsでIDS評価用に収集されたデータセットであり、それぞれのパケットのペイロードを含む全てのネットワークトラフィックがtcpdumpのフォーマットで提供されている。データは3週間の学習用データと、2週間のテスト用データから成っており、学習用データは2週間分の攻撃が含まれて居ないデータと、1週間の攻撃を含むデータから成っている。テスト用データには全ての日付において攻撃が含まれている。また、攻撃データはそれぞれ一連の攻撃をまとめたインスタンスと呼ばれる単位に集約されており、DARPA99データセットでは各攻撃インスタンスが発生した期間や対象IP、対象ポートなどの情報が公開されている。本評価実験において、各手法は学習用データのうち、攻撃データが含まれていない2週間分のデータを用いて学習を行い、2週間分のテスト用データに現れるパケットに対して異常スコアを算出した。また、今回評価した手怯は、N=1,2,3のN-gramを用いているため、平等な評価結果となるようペイロード長が3byte以上のパケットのみを学習とテストの対象とした。
本実験ではPAYL論文に従って、DARPA99データセットのうち、ペイロードに情報が現れる攻撃インスタンスに絞って、プロトコルごとにインスタンスベースの検知率(縦軸)とパケットベースの誤検知率(横軸)のグラフで各手法を評価する。各手法は各パケットに対して異常スコア(スカラー値)を算出するのみであるため、あるパケットを異常と判定するか正常と判定するかは、定められたスコアの闘値に依存することになる。すなわち定められた闘値を上回る異常スコアのパケットを異常、そうでないパケットを正常と判定する。闘値を大きくすればするほど誤検知率は低下するが、検知率も低下する。逆に闘値を小さくすればするほど検知率は増加するが、誤検知率も増加してしまうというトレードオフの関係にある。
(インスタンスベースの検知率)
ある特定の攻撃インスタンスに含まれるパケット群のうち、1つ以上のパケットを検知した場合にそのインスタンスを検知したものと判定する。インスタンスベースの検知率とは、この判断基準の下で、全インスタンスの中で検知されたインスタンスの割合を示す。
(パケットベースの誤検知率)
異常検知モデルが異常と判断したもののうち、攻撃インスタンスに含まれるパケットを除いたものを正常パケットと呼ぶ。パケットベースの誤検知率とは、この正常パケットのうち、誤って異常と判定してしまったパケットの割合である。
DARPA99のデータには複数のプロトコルのパケットが含まれているが、それぞれのプロトコルに含まれるパケット数や攻撃インスタンス数には大きなバラつきがあるため、評価用のデータとして使える程度に多くのデータが存在するのは、HTTP、FTP、TELNET、SMTPの4種類程度であると考えられる。本技術は特に制御システムにおける利用を想定しているが、DARPA99のデータには制御システム用のプロトコルのパケットデータが存在しない。そのため、DARPA99のデータの中では比較的制御システム用のプロトコルで見られる制御コマンドに近いと考えられるFTPプロトコルとTELNETプロトコルにおいて評価を行った。
[5-2 実験結果]
図15は、FTPプロトコルにおいて評価を行った場合の本実施の形態に係る異常検知方法と他の手法とを比較した実験結果を示す図である。図16は、TELNETプロトコルにおいて評価を行った場合の本実施の形態に係る異常検知方法と他の手法とを比較した実験結果を示す図である。
各手法の結果は右上がりの線となっているが、これは闘値を小さな値に定めたものから大きな値に定めたものまでの変動をプロットしたものである。FTPプロトコルの評価結果が示す通り、提案手法は既存の3-gramを利用したANAGRAM(binary-based、frequency-based)と同等以上の性能を発揮していることがわかる。PAYLや2-gramのANAGRAM(frequency-based)より明らかに良い性能を発揮している。また、TELNETプロトコルの評価結果では、実施の形態に係る異常検知方法は他のどの手法よりも優れた検知性能を発揮している。このことから実施の形態に係る異常検知方法はチューニングの必要性が少ない異常検知手法の中でも比較的良い性能を示すアルゴリズムであることがわかる。
なお、上記各実施の形態において、各構成要素は、専用のハードウェアで構成されるか、各構成要素に適したソフトウェアプログラムを実行することによって実現されてもよい。各構成要素は、CPUまたはプロセッサなどのプログラム実行部が、ハードディスクまたは半導体メモリなどの記録媒体に記録されたソフトウェアプログラムを読み出して実行することによって実現されてもよい。ここで、上記各実施の形態の異常検知方法、学習方法などを実現するソフトウェアは、次のようなプログラムである。
すなわち、このプログラムは、コンピュータに、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知する異常検知装置が実行する異常検知方法であって、前記異常検知装置は、プロセッサおよびメモリを備え、前記メモリは、複数の学習用パケットを用いた学習により生成された異常検知モデルを記憶しており、前記異常検知方法では、前記プロセッサが、前記複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をA(Aは1以上の整数)ビット単位で区切ることにより得られる複数個のデータ単位のうちのN(Nは2以上の整数)個のデータ単位の取り得る全ての第1の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、B(Bは1以上の整数)個飛ばしの並び順でのN個のデータ単位の第1の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第1の組み合わせのそれぞれについて、当該第1の組み合わせが前記複数の学習用パケットにおいて出現する回数である第1の数をカウントし、抽出した前記全ての第1の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第1の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第1の組み合わせが出現する確率である複数の第1の確率を算出し、算出した前記複数の第1の確率を前記異常検知モデルとして前記メモリに記憶させ、複数のパケットを取得し、取得した複数のパケットのそれぞれについて、当該パケットに対して算出したスコアが、前記メモリに記憶されている前記異常検知モデルに基づく所定の閾値を超えている場合、当該スコアが算出されたパケットが以上であることを出力する異常検知方法を実行させる。
また、このプログラムは、コンピュータに、監視対象内での通信、または、前記監視対象と前記監視対象が接続されているネットワークとの間での通信に異常があるか否かを検知するための異常検知モデルを学習する学習装置が実行する学習方法であって、前記学習装置は、プロセッサおよびメモリを備え、前記学習方法では、前記プロセッサが、複数の学習用パケットを取得し、取得した前記複数の学習用パケットのそれぞれについて、当該学習用パケットに含まれるペイロードを構成するデータ列をA(Aは1以上の整数)ビット単位で区切ることにより得られる複数個のデータ単位のうちのN(Nは2以上の整数)個のデータ単位の取り得る全ての第1の組み合わせであって、当該ペイロードにおける互いに連続している並び順、または、B(Bは1以上の整数)個飛ばしの並び順でのN個のデータ単位の第1の組み合わせを抽出し、前記複数の学習用パケットについて抽出した前記全ての第1の組み合わせのそれぞれについて、当該第1の組み合わせが前記複数の学習用パケットにおいて出現する回数である第1の数をカウントし、抽出した前記全ての第1の組み合わせのそれぞれについて、カウントすることで得られた複数の前記第1の数に基づいて、スムージング処理を行うことで前記複数の学習用パケットにおいて当該第1の組み合わせが出現する確率である複数の第1の確率を算出し、算出した前記複数の第1の確率を前記異常検知モデルとして前記メモリに記憶させる学習方法を実行させる。
以上、本発明の一つまたは複数の態様に係る異常検知方法、異常検知装置、学習方法、および、学習装置について、実施の形態に基づいて説明したが、本発明は、この実施の形態に限定されるものではない。本発明の趣旨を逸脱しない限り、当業者が思いつく各種変形を本実施の形態に施したものや、異なる実施の形態における構成要素を組み合わせて構築される形態も、本発明の一つまたは複数の態様の範囲内に含まれてもよい。