(57)【要約】【課題】ネットワークへの攻撃を検知する能力を向上させる。【解決手段】メッセージ処理装置は、カウント部、抽出部、判定部と備え、識別情報を含むメッセージを処理する。カウント部は、所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントする。抽出部は、カウント部によりカウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出する。判定部は、第１のビット列において所定の事象の中の第１の事象が発生したタイミングと、第２のビット列において所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、第１のビット列と第２のビット列との間の関連性を判定する。【選択図】図１０
2020113893.tif 000002
【特許請求の範囲】
【請求項１】
ネットワーク内で送信される識別情報を含むメッセージを処理するメッセージ処理装置であって、
所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントするカウント部と、
前記カウント部によりカウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出する抽出部と、
前記第１のビット列において前記所定の事象の中の第１の事象が発生したタイミングと、前記第２のビット列において前記所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する判定部と、
を備えるメッセージ処理装置。
【請求項２】
前記抽出部は、第１の識別情報を含むメッセージから前記第１のビット列を抽出し、前記第１の識別情報と異なる第２の識別情報を含むメッセージから前記第２のビット列を抽出する
ことを特徴とする請求項１に記載のメッセージ処理装置。
【請求項３】
前記所定の事象は、ビット列に特定値が出現すること、又は、ビット列の値が直前の受信メッセージ中の対応するビット列の値に対して変化することであり、
前記カウント部は、受信メッセージに含まれる識別情報ごとに、各ビット列について、特定値が出現する回数を表す出現回数または直前の受信メッセージ中の対応するビット列に対して値が変化する回数を表す変化回数をカウントする
ことを特徴とする請求項１または２に記載のメッセージ処理装置。
【請求項４】
前記カウント部は、単一ビットのビット列から順番にビット長を１ビットずつ長くしながら各ビット列の変化回数をカウントするときに、前記モニタ期間における変化回数がゼロであるビット列を含むビット列については、カウント動作を行わない
ことを特徴とする請求項３に記載のメッセージ処理装置。
【請求項５】
前記カウント部は、単一ビットのビット列から順番にビット長を１ビットずつ長くしながら各ビット列の変化回数をカウントするときに、前記モニタ期間における変化回数が所定数より多いビット列を含むビット列については、カウント動作を行わない
ことを特徴とする請求項４に記載のメッセージ処理装置。
【請求項６】
前記カウント部は、
前記メッセージのデータ領域の長さと同じ長さのビット列において出現した値ごとにそれぞれ出現回数をカウントし、
前記値ごとの出現回数に基づいて、前記データ領域の長さより短い各ビット列において特定値が出現した回数を計算する
ことを特徴とする請求項３に記載のメッセージ処理装置。
【請求項７】
前記判定部は、前記第１のビット列において最初に前記第１の事象が発生したタイミングと、前記第２のビット列において最初に前記第２の事象が発生したタイミングとの差分に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
ことを特徴とする請求項１〜６のいずれか１つに記載のメッセージ処理装置。
【請求項８】
前記判定部は、前記第１のビット列において前記第１の事象が発生したタイミングから次に前記第１の事象が発生したタイミングまでの時間間隔と、前記第２のビット列において前記第２の事象が発生したタイミングから次に前記第２の事象が発生したタイミングまでの時間間隔との差分に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
ことを特徴とする請求項１〜７のいずれか１つに記載のメッセージ処理装置。
【請求項９】
ネットワーク内で送信される識別情報を含むメッセージを処理するメッセージ処理方法であって、
所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントし、
カウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出し、
前記第１のビット列において前記所定の事象の中の第１の事象が発生したタイミングと、前記第２のビット列において前記所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
ことを特徴とするメッセージ処理方法。
【請求項１０】
ネットワーク内で送信される識別情報を含むメッセージを処理するメッセージ処理装置において、
所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントし、
カウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出し、
前記第１のビット列において前記所定の事象の中の第１の事象が発生したタイミングと、前記第２のビット列において前記所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
処理をプロセッサに実行させるメッセージ処理プログラム。
【請求項１１】
識別情報を含むメッセージが送信されるネットワークへの攻撃を検知する攻撃検知装置であって、
第１のビット列において第１の事象が発生することと第２のビット列において第２の事象が発生することとの間の関連性に基づいて、前記ネットワークへの攻撃を検知する検知部を備える攻撃検知装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メッセージ処理装置、メッセージ処理方法、及びネットワークへの攻撃を検知する方法に係わる。
【背景技術】
【０００２】
自動車の車載ネットワークにおいて、ＣＡＮ（Controller Area Network）と呼ばれるネットワーク技術が使用されることがある。ＣＡＮを使用するネットワークにおいては、各ノードにＥＣＵ（electronic control unit）が実装される。
【０００３】
ＥＣＵから送信されるメッセージには、識別情報（ＩＤ）が付与されている。このメッセージは、ネットワーク内のＥＣＵにブロードキャストされる。ここで、各ＥＣＵは、自分が取得すべきメッセージのＩＤを認識している。そして、各ＥＣＵは、受信メッセージのＩＤをチェックすることにより、必要なメッセージを取得する。
【０００４】
上記構成のＣＡＮシステムにおいて、悪意ある第３者によりＥＣＵが乗っ取られ、そのＥＣＵから悪意あるメッセージが出力される攻撃が行われることがある。例えば、ＣＡＮシステムにおいて使用されるＩＤが、悪意あるメッセージに付与される。そうすると、そのメッセージを受信したＥＣＵは、意図しない処理を実行するおそれがある。
【０００５】
ところで、多くのＣＡＮシステムにおいて、ＥＣＵは、所定の周期でメッセージを出力する。したがって、メッセージが出力される周期が既知であるケースでは、各ＥＣＵは、メッセージの到着予定時刻と実際の到着時刻とを比較することにより、悪意のあるメッセージを検出できる。
【０００６】
なお、車載ネットワークに流れるデータフレームを処理する情報処理方法が提案されている（例えば、特許文献１、２）。一例としては、情報処理方法は、複数のデータフレームを順次受信する受信ステップと、複数のデータフレーム間の受信間隔を示す受信間隔情報をフレーム情報として記録するフレーム収集ステップと、受信間隔情報から、複数のデータフレーム間の受信間隔の分布に関する特徴量を取得する特徴量取得ステップと、特徴量を用いて、複数のデータフレームの中の不正なデータフレームの存否を判定する不正データ存否判定ステップとを含む。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２０１８／１６８２９１号
【特許文献２】国際公開第２０１８／１０５３３０号
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述したように、各メッセージが周期的に送信されるケースでは、到着予定時刻と実際の到着時刻とを比較することで、悪意のあるメッセージによるネットワークへの攻撃を検知できる。ところが、非周期的に送信されるメッセージが存在するときは、この方法でネットワークへの攻撃を検知することは困難である。
【０００９】
他の攻撃検知方法としては、例えば、正規に送信されるメッセージの内容の規則性を予め取得しておき、この規則性に従わないメッセージをモニタすることでネットワークへの攻撃を検知する手順が考えられる。ただし、このような規則性を発見することは容易ではない。
【００１０】
本発明の１つの側面に係わる目的は、ネットワークへの攻撃を検知する能力を向上させることである。
【課題を解決するための手段】
【００１１】
本発明の１つの態様のメッセージ処理装置は、ネットワーク内で送信される識別情報を含むメッセージを処理する。このメッセージ処理装置は、所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントするカウント部と、前記カウント部によりカウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出する抽出部と、前記第１のビット列において前記所定の事象の中の第１の事象が発生したタイミングと、前記第２のビット列において前記所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する判定部と、を備える。
【発明の効果】
【００１２】
上述の態様によれば、ネットワークへの攻撃を検知する能力が向上する。
【図面の簡単な説明】
【００１３】
【図１】攻撃検知装置が実装されるネットワークの一例を示す図である。
【図２】メッセージを伝送するフレームのフォーマットの例を示す図である。
【図３Ａ】本発明の実施形態に係わる攻撃検知装置の一例を示す図である。
【図３Ｂ】メッセージ処理装置および攻撃検知装置の一例を示す図である。
【図３Ｃ】ログ収集装置および攻撃検知装置の一例を示す図である。
【図４】ログ情報の一例を示す図である。
【図５Ａ】ＥＣＵのハードウェア構成の一例を示す図である。
【図５Ｂ】コンピュータのハードウェア構成の一例を示す図である。
【図６】メッセージ処理装置の処理の一例を示すフローチャートである。
【図７】特定値の出現回数をカウントする処理の一例を示す図である。
【図８】特定値の出現回数をカウントする処理を高速化する方法の一例を示す図である。
【図９】ビット列の値の変化をカウントする処理を高速化する方法の一例を示す図である。
【図１０】近傍探索の一例を示す図である。
【図１１】変化回数および出現回数をカウントする処理の実施例を示す図（その１）である。
【図１２】変化回数および出現回数をカウントする処理の実施例を示す図（その２）である。
【図１３】攻撃を検知する方法の実施例を示す図（その１）である。
【図１４】攻撃を検知する方法の実施例を示す図（その２）である。
【図１５】攻撃を検知する方法の実施例を示す図（その３）である。
【図１６】攻撃を検知する方法の実施例を示す図（その４）である。
【発明を実施するための形態】
【００１４】
図１は、本発明の実施形態に係わる攻撃検知装置が実装されるネットワークの一例を示す。図１に示すネットワーク１００は、複数のＥＣＵ（ＥＣＵ０〜ＥＣＵｋ）を備える。複数のＥＣＵは、バスを介して互いに接続されている。なお、この実施例では、複数のＥＣＵは、ＣＡＮ（Controller Area Network）システムを構成する。
【００１５】
各ＥＣＵは、バスを介してメッセージを送信することができる。このメッセージは、ネットワーク１００の全てのＥＣＵにブロードキャストされる。また、各メッセージは、識別情報（ＩＤ）を含んでいる。ここで、各ＥＣＵは、自分が取得すべきメッセージのＩＤを認識している。そして、各ＥＣＵは、受信メッセージのＩＤをチェックすることにより必要なメッセージを取得する。
【００１６】
上記ネットワーク１００において、複数のＥＣＵの中の１つに攻撃検知装置が実装される。図１に示す例では、ＥＣＵ０に攻撃検知装置が実装されるものとする。攻撃検知装置は、ネットワーク１００に対する攻撃を検知する。なお、以下の記載では、悪意あるメッセージを「攻撃メッセージ」と呼ぶことがある。
【００１７】
ＥＣＵ１〜ＥＣＵｋのうちの少なくとも１つのＥＣＵは、所定の周期でメッセージを送信する機能を備えている。図１に示す例では、ＥＣＵ１は、識別情報ID_Aを含むメッセージを所定の周期で送信し、ＥＣＵ２は、識別情報ID_Bを含むメッセージを所定の周期で送信し、ＥＣＵ３は、識別情報ID_Cを含むメッセージを所定の周期で送信する。メッセージの送信周期は、ＩＤごとに予め決められている。たとえば、ＩＤ＝0x123を含むメッセージは１０ｍ秒間隔で送信され、ＩＤ＝0x456を含むメッセージは２０ｍ秒間隔で送信される。
【００１８】
また、ＥＣＵ１〜ＥＣＵｋのうちの少なくとも１つのＥＣＵは、周期的でないメッセージを送信することができる。例えば、少なくとも１つのＥＣＵは、所定の周期でメッセージを送信しながら、指定されたイベントの発生に応じてメッセージを送信してもよい。この場合、送信周期が乱れる。
【００１９】
なお、車載ネットワークにおいては、複数のＥＣＵは、車両を制御するために使用される。例えば、ＩＤ＝0x123を含むメッセージは、アクセル開度を表すデータを伝送し、ＩＤ＝0x456を含むメッセージは、ブレーキ踏込み角度を表すデータを伝送するものとする。
【００２０】
ネットワーク１００において送信される各メッセージは、上述したように、ブロードキャストされる。よって、すべてのメッセージが各ＥＣＵに到着する。なお、図１のタイミングチャートは、ＥＣＵ１〜ＥＣＵ３から送信されるメッセージがＥＣＵ０に到着する状況を示している。
【００２１】
図２は、メッセージを伝送するフレームのフォーマットの例を示す。なお、Ｆ１は、一般仕様のフレームのフォーマット例を示し、Ｆ２は、拡張仕様で使用されるフレームのフォーマット例を示す。
【００２２】
一般仕様のフレームＦ１は、ＳＯＦ（Start of Frame）、調停（arbitration）フィールド、コントロールフィールド、データフィールド、ＣＲＣフィールド、ＡＣＫフィールド、およびＥＯＦ（End of Frame）を含む。調停フィールドは、ＩＤおよびＲＴＲ（Remote Transmission Request）を含む。ＩＤは、メッセージを識別するための識別情報を表す。コントロールフィールドは、ＩＤＥ（Identifier Extension）、予約ビット、ＤＬＣ（Data Length Code）を含む。ＣＲＣフィールドは、ＣＲＣシーケンスおよびＣＲＣデリミタを含む。ＡＣＫフィールドは、ＡＣＫスロットおよびＡＣＫデリミタを含む。なお、図２において各情報要素に対して表記されている値は、ビット長を表す。例えば、ＩＤの長さは１１ビットであり、データフィールドの長さは０〜６４ビットの可変長である。
【００２３】
一般仕様のフレームＦ１と同様に、拡張仕様で使用されるフレームＦ２も、ＳＯＦ、調停フィールド、コントロールフィールド、データフィールド、ＣＲＣフィールド、ＡＣＫフィールド、ＥＯＦを含む。ただし、拡張仕様では、より多くのビット数で識別情報が表される。
【００２４】
以下の記載では、一般仕様のフレームを利用してメッセージが伝送されるものとする。ただし、本発明の実施形態に係わるメッセージ処理方法は、拡張仕様のフレームを利用してメッセージが伝送されるケースにも適用される。また、ＣＡＮ−ＦＤと呼ばれる規格にも対応可能である。
【００２５】
図３Ａは、本発明の実施形態に係わる攻撃検知装置の一例を示す。攻撃検知装置１は、図３Ａに示すように、受信部２、ログ情報格納部３、メッセージ処理装置４、関連性データベース９、検知部１０を備える。なお、攻撃検知装置１は、図３Ａに示していない他の機能を備えてもよい。
【００２６】
受信部２は、ネットワーク１００に実装されるＥＣＵから送信されるメッセージを受信する。なお、攻撃検知装置１は、各メッセージに付与されているＩＤ毎に受信時刻を検出できる。メッセージの受信時刻は、例えば、攻撃検知装置１に実装される不図示のタイマを利用して検出される。
【００２７】
ログ情報格納部３は、受信部２により受信されるメッセージについてのログ情報を格納する。ログ情報は、この例では、図４に示すように、各受信メッセージについてタイムスタンプ、ＩＤ、データを記録する。タイムスタンプは、受信部２がメッセージを受信した時刻を表す。ＩＤは、各受信メッセージに付与されている識別情報を表す。データは、各受信メッセージのデータ領域から抽出される。なお、ログ情報は、図４に示してない他の情報要素を含んでもよい。
【００２８】
メッセージ処理装置４は、ネットワーク１００への攻撃を検知するために使用される関連性情報を生成する。メッセージ処理装置４は、関連性情報を生成するために、カウント部５および関連性分析部６を備える。なお、メッセージ処理装置４は、ログ情報格納部３を含んでもよい。また、メッセージ処理装置４は、図３Ａに示していない他の機能を備えてもよい。
【００２９】
カウント部５は、ログ情報格納部３に格納されているログ情報を参照し、所定のモニタ期間内に受信部２が受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントする。カウント部５によりカウントされる事象は、例えば、ビット列に特定値が出現すること、及び／又は、ビット列の値が直前の受信メッセージ中の対応するビット列の値に対して変化することである。この場合、カウント部５は、各ビット列について、特定値が出現する回数を表す出現回数または直前の対応するビット列に対して値が変化する回数を表す変化回数をカウントする。関連性分析部６は、カウント部５によるカウント値に基づいて、関連性情報を生成する。
【００３０】
関連性分析部６は、抽出部７および判定部８を備える。抽出部７は、出現回数または変化回数が互いに一致する第１のビット列および第２のビット列を抽出する。このとき、抽出部７は、異なるＩＤ間で出現回数または変化回数が互いに一致するビット列を抽出してもよい。判定部８は、第１のビット列において第１の事象が発生したタイミングと、第２のビット列において第２の事象が発生したタイミングとの近似性に基づいて、第１のビット列と第２のビット列との間の関連性の有無を判定する。或いは、判定部８は、第１のビット列において発生する第１の事象と第２のビット列において発生する第２の事象との間の関連性の有無を判定する。そして、関連性が存在すると判定されたときは、関連性分析部６は、その関連性を表す関連性情報を生成する。
【００３１】
関連性データベース９は、メッセージ処理装置４により生成される関連性情報を格納する。検知部１０は、ログ情報格納部３に格納されているログ情報および関連性データベース９に格納されている関連性情報を利用して、ネットワーク１００への攻撃を検知する。
【００３２】
ただし、攻撃検知装置１として動作するＥＣＵの演算能力が十分でない場合には、コンピュータ５００を用いて関連性分析を行ってもよい。この場合、コンピュータ５００は、攻撃検知装置１として動作するＥＣＵと接続するためのインタフェースを有する。また、コンピュータ５００は、図３Ｂに示すように、メッセージ処理装置４と同等の機能を備える。すなわち、コンピュータ５００は、メッセージ処理装置４として動作する。また、攻撃検知装置１は、受信部２、ログ情報格納部３、関連性データベース９、検知部１０を備えるが、メッセージ処理装置４を備えなくてもよい。
【００３３】
この場合、コンピュータ５００および攻撃検知装置１は、下記の処理を実行する。
（１）コンピュータ５００は、攻撃検知装置１により収集されたログ情報を取得する。攻撃検知装置１がＯＢＤ２ポートを備える場合は、コンピュータ５００は、ＯＢＤ２ポートを介してログ情報を取得してもよい。
（２）コンピュータ５００は、取得したログ情報に基づいて関連性分析を行い、関連性データベースを作成する。
（３）コンピュータ５００は、作成した関連性データベースを攻撃検知装置１にインストールする。
（４）攻撃検知装置１は、コンピュータ５００によりインストールされた関連性データベースを用いて攻撃メッセージの検知を行う。
【００３４】
或いは、コンピュータ５００は、関連性分析および攻撃検知を実行してもよい。この場合、コンピュータ５００は、図３Ｃに示すように、メッセージ処理装置４、関連性データベース９、および検知部１０と同等の機能を備える。すなわち、コンピュータ５００は、攻撃検知装置として動作する。また、図１に示すＥＣＵ０は、受信メッセージのログを収集するログ収集装置３００として動作する。なお、ログ収集装置３００は、受信部２およびログ情報格納部３を備える。
【００３５】
コンピュータ５００は、下記の処理を実行する。
（１）コンピュータ５００は、ログ収集装置３００からログ情報を取得する。ログ収集装置３００がＯＢＤ２ポートを備える場合は、コンピュータ５００は、ＯＢＤ２ポートを介してログ情報を取得してもよい。
（２）コンピュータ５００は、取得したログ情報に基づいて関連性分析を行い、関連性データベースを作成する。
（３）コンピュータ５００は、ログ収集装置からログ情報を取得する。
（４）コンピュータ５００は、（３）で取得したログ情報に基づいて、（２）で作成した関連性データベースを用いて攻撃メッセージの検知を行う。
【００３６】
図５Ａは、攻撃検知装置またはメッセージ収集装置が実装されるＥＣＵのハードウェア構成の一例を示す。ＥＣＵ２０は、この例では、ＣＡＮトランシーバ２１、ＣＡＮコントローラ２２、処理回路２３を含む。処理回路２３は、プロセッサ２４およびメモリ２５を含む。
【００３７】
ＣＡＮトランシーバ２１は、図２に示すフレームを送信および受信する機能を備える。ＣＡＮコントローラ２２は、ＣＡＮトランシーバ２１が受信したフレームからＩＤおよびデータを抽出すると共に、そのフレームの受信時刻を測定する。なお、ＣＡＮコントローラ２２は、受信フレームに対してＣＲＣチェックを実行してもよい。また、ＣＡＮコントローラ２２は、送信フレームにＩＤおよびデータを設定することができる。
【００３８】
ＥＣＵが図３Ａに示す攻撃検知装置１として動作するときは、プロセッサ２４は、メモリ２５に格納されているプログラムを実行することにより、攻撃検知を実現する。この場合、メモリ２５には、図３Ａに示すメッセージ処理装置４および検知部１０の機能を記述したプログラムが格納される。そして、プロセッサ２４は、このプログラムを実行することによりメッセージ処理装置４および検知部１０の機能を提供する。また、ＥＣＵが図３Ｂに示す攻撃検知装置１として動作するときは、プロセッサ２４は、メモリ２５に格納されているプログラムを実行することにより検知部１０の機能を提供する。
【００３９】
なお、図３Ａ〜図３Ｃに示す受信部２は、例えば、ＣＡＮトランシーバ１１により実現される。また、ログ情報格納部３および関連性データベース９は、メモリ２５を用いて実現してもよいし、図５Ａに示していない記憶装置を用いて実現してもよい。
【００４０】
図５Ｂは、メッセージ処理装置または攻撃検知装置が実装されるコンピュータのハードウェア構成の一例を示す。コンピュータ５００は、プロセッサ５０１、メモリ５０２、記憶装置５０３、Ｉ／Ｏデバイス５０４、記録媒体デバイス５０５、通信インタフェース５０６を備える。
【００４１】
プロセッサ５０１は、記憶装置５０３に格納されているメッセージ処理プログラムを実行することにより、コンピュータ５００の機能を提供することができる。すなわち、コンピュータ５００が図３Ｂに示すメッセージ処理装置４として動作するときは、プロセッサ５０１は、記憶装置５０３に格納されているメッセージ処理プログラムを実行することにより、カウント部５および関連性分析部６の機能を提供する。また、コンピュータ５００が図３Ｃに示す攻撃検知装置として動作するときは、プロセッサ５０１は、記憶装置５０３に格納されているメッセージ処理プログラムを実行することにより、カウント部５、関連性分析部６、および検知部１０の機能を提供する。
【００４２】
メモリ５０２は、例えば半導体メモリであり、プロセッサ５０１の作業領域として使用される。記憶装置５０３は、コンピュータ５００内に実装されていてもよいし、コンピュータ５００に接続されてもよい。図３Ｃに示す関連性データベース９は、メモリ５０２または記憶装置５０３に保存される。Ｉ／Ｏデバイス５０４は、ユーザまたはネットワーク管理者の指示を受け付ける。また、Ｉ／Ｏデバイス５０４は、プロセッサ５０１による処理結果を出力する。記録媒体デバイス５０５は、可搬型記録媒体５０７に記録されている信号を読み取る。なお、上述したメッセージ処理プログラムは、可搬型記録媒体５０７に記録されていてもよい。通信インタフェース５０６は、データ通信のためのインタフェースおよび制御情報を通信するためのインタフェースを含む。
【００４３】
なお、以下の記載では、「メッセージ処理装置（または、メッセージ処理装置４）」は、図１に示す任意のＥＣＵまたは図３Ｂに示すコンピュータ５００より実現される。また、「攻撃検知装置（または、攻撃検知装置１）」は、図１に示す任意のＥＣＵまたは図３Ｃに示すコンピュータ５００より実現される。
【００４４】
上述したように、攻撃検知装置１は、関連性データベース９に格納されている関連性情報を利用して、ネットワーク１００への攻撃を検知する。関連性情報は、例えば、あるＩＤを含むメッセージの送信における規則性と他のＩＤを含むメッセージの送信における規則性との関連性を表す。下記に関連性情報の例を示す。なお、この実施例では、関連性情報は「ルール」により表される。
ルール１：所定のモニタ期間において、ＩＤ＿Ｘを含むメッセージの第ｘビットの値が変化する回数と、ＩＤ＿Ｙを含むメッセージの第ｙビットの値が変化する回数とが互いに一致する。
ルール２：所定のモニタ期間において、ＩＤ＿Ａを含むメッセージの第ａバイトが「００００００００」となる回数と、ＩＤ＿Ｂを含むメッセージの第ｂビットが「１」となる回数とが互いに一致する。
ルール３：所定のモニタ期間において、ＩＤ＿Ｇを含むメッセージを受信した回数と、ＩＤ＿Ｈを含むメッセージの第ｈビットの値が変化する回数とが互いに一致する。
【００４５】
検知部１０は、上述のルールから逸脱するメッセージをモニタすることによりネットワーク１００への攻撃を検知する。例えば、モニタ期間内に、ＩＤ＿Ｘを含むメッセージの第ｘビットの値が５回変化したが、ＩＤ＿Ｙを含むメッセージの第ｙビットの値は４回しか変化していないものとする。この場合、検知部１０は、ＩＤ＿Ｘを含む攻撃メッセージがネットワーク１００に入力された可能性があると判定する。また、モニタ期間内に、ＩＤ＿Ａを含むメッセージの第ａバイトが「００００００００」となる回数が１０回であったが、ＩＤ＿Ｂを含むメッセージの第ｂビットが「１」となる回数は９回であったものとする。この場合、検知部１０は、ＩＤ＿Ａを含む攻撃メッセージがネットワーク１００に入力された可能性があると判定する。さらに、モニタ期間内に、ＩＤ＿Ｇを含むメッセージを３０個受信したが、ＩＤ＿Ｈを含むメッセージの第ｈビットの値は３１回変化したものとする。この場合、検知部１０は、ＩＤ＿Ｈを含む攻撃メッセージがネットワーク１００に入力された可能性があると判定する。
【００４６】
攻撃検知の他の例を示す。ここでは、ログ情報格納部３に下記のログ情報が格納されているものとする。なお、ログ情報は、受信メッセージのタイムスタンプ、ＩＤ、データを時系列に表す。また、下記の例では、ネットワーク１００において正規のメッセージのみが送信されたものとする。
ログ情報（攻撃なし）：
TIME=0.500001  ID=0x100  DATA=00 01 12 13
TIME=0.600005  ID=0x200  DATA=00 F2 E3 C5
TIME=0.800005  ID=0x100  DATA=00 01 12 13
TIME=0.900002  ID=0x200  DATA=00 F2 E3 C5
TIME=1.100004  ID=0x100  DATA=00 01 12 13
TIME=1.200000  ID=0x200  DATA=00 F2 E3 C5
TIME=1.200003  ID=0x100  DATA=80 01 12 13
TIME=1.300009  ID=0x200  DATA=00 F2 E3 45
TIME=1.500003  ID=0x100  DATA=00 01 12 13
TIME=1.600001  ID=0x200  DATA=00 F2 E3 45
TIME=1.600003  ID=0x100  DATA=80 01 12 13
TIME=1.700005  ID=0x200  DATA=00 F2 E3 79
TIME=1.900002  ID=0x100  DATA=00 01 12 13
TIME=2.000004  ID=0x200  DATA=00 F2 E3 79
【００４７】
このログ情報をＩＤ毎に整理すると、下記の時系列データが得られる。
ＩＤ＝0x100について：
TIME=0.500001  ID=0x100  DATA=00 01 12 13
TIME=0.800005  ID=0x100  DATA=00 01 12 13
TIME=1.100004  ID=0x100  DATA=00 01 12 13
TIME=1.200003  ID=0x100  DATA=80 01 12 13
TIME=1.500003  ID=0x100  DATA=00 01 12 13
TIME=1.600003  ID=0x100  DATA=80 01 12 13
TIME=1.900002  ID=0x100  DATA=00 01 12 13
ＩＤ＝0x200について：
TIME=0.600005  ID=0x200  DATA=00 F2 E3 C5
TIME=0.900002  ID=0x200  DATA=00 F2 E3 C5
TIME=1.200000  ID=0x200  DATA=00 F2 E3 C5
TIME=1.300009  ID=0x200  DATA=00 F2 E3 45
TIME=1.600001  ID=0x200  DATA=00 F2 E3 45
TIME=1.700005  ID=0x200  DATA=00 F2 E3 79
TIME=2.000004  ID=0x200  DATA=00 F2 E3 79
【００４８】
これらの時系列データを分析すると、下記の規則性が得られる。
（１）いずれのＩＤについても、メッセージの送信周期は、基本的には約0.3秒である。
（２）いずれのＩＤについても、周期を逸脱したタイミングで次のメッセージが到着することがある。
（３）ＩＤ＝0x100については、データの先頭ビットが「１」であるときに、通常よりも短い時間間隔でメッセージが送信される。
（４）ＩＤ＝0x200については、データの最終バイトの値が変化したときに、通常よりも短い時間間隔でメッセージが送信される。
【００４９】
ここで、上記１４個のメッセージに加えて、１個の攻撃メッセージがネットワーク１００に入力されるケースについて検討する。攻撃メッセージは、ＩＤ＝0x200を含み、時刻＝1.400004に攻撃検知装置１に到着するものとする。この場合、下記のログ情報が得られる。
ログ情報（攻撃あり）：
TIME=0.500001  ID=0x100  DATA=00 01 12 13
TIME=0.600005  ID=0x200  DATA=00 F2 E3 C5
TIME=0.800005  ID=0x100  DATA=00 01 12 13
TIME=0.900002  ID=0x200  DATA=00 F2 E3 C5
TIME=1.100004  ID=0x100  DATA=00 01 12 13
TIME=1.200000  ID=0x200  DATA=00 F2 E3 C5
TIME=1.200003  ID=0x100  DATA=80 01 12 13
TIME=1.300009  ID=0x200  DATA=00 F2 E3 45
TIME=1.400004  ID=0x200  DATA=00 F2 E3 91（攻撃）
TIME=1.500003  ID=0x100  DATA=00 01 12 13
TIME=1.600001  ID=0x200  DATA=00 F2 E3 45
TIME=1.600003  ID=0x100  DATA=80 01 12 13
TIME=1.700005  ID=0x200  DATA=00 F2 E3 79
TIME=1.900002  ID=0x100  DATA=00 01 12 13
TIME=2.000004  ID=0x200  DATA=00 F2 E3 79
【００５０】
このログ情報をＩＤ毎に整理すると、下記の時系列データが得られる。
ＩＤ＝0x100について
TIME=0.500001  ID=0x100  DATA=00 01 12 13
TIME=0.800005  ID=0x100  DATA=00 01 12 13
TIME=1.100004  ID=0x100  DATA=00 01 12 13
TIME=1.200003  ID=0x100  DATA=80 01 12 13
TIME=1.500003  ID=0x100  DATA=00 01 12 13
TIME=1.600003  ID=0x100  DATA=80 01 12 13
TIME=1.900002  ID=0x100  DATA=00 01 12 13
ＩＤ＝0x200について
TIME=0.600005  ID=0x200  DATA=00 F2 E3 C5
TIME=0.900002  ID=0x200  DATA=00 F2 E3 C5
TIME=1.200000  ID=0x200  DATA=00 F2 E3 C5
TIME=1.300009  ID=0x200  DATA=00 F2 E3 45
TIME=1.400004  ID=0x200  DATA=00 F2 E3 91（攻撃）
TIME=1.600001  ID=0x200  DATA=00 F2 E3 45
TIME=1.700005  ID=0x200  DATA=00 F2 E3 79
TIME=2.000004  ID=0x200  DATA=00 F2 E3 79
【００５１】
ここで、ＩＤ＝0x200について得られている時系列データに注目すると、攻撃メッセージが入力されたときのメッセージの受信間隔は約0.1秒であり、通常の送信周期よりも短くなっている。ここで、この攻撃メッセージの最終バイトの値は、直前の受信メッセージの最終バイトの値に対して変化している。すなわち、上述した規則性（４）が満たされている。よって、この規則性を利用しただけでは、攻撃は検知されない。
【００５２】
ただし、攻撃メッセージが存在しないケースでは、上記した「ログ情報（攻撃なし）」に示すように、ＩＤ＝0x200を含む受信メッセージのデータの最終バイトの値が変化したときには、その受信時刻の約0.1秒前に、ＩＤ＝0x100を含み、且つ、データの先頭ビットの値が「１」であるメッセージが攻撃検知装置１に到着しているはずである。例えば、時刻＝1.400004に攻撃検知装置１に到着したＩＤ＝0x200を含むメッセージの最終バイトの値「45」は、その直前に攻撃検知装置１に到着したＩＤ＝0x200を含むメッセージの最終バイトの値「C5」に対して変化している。そして、時刻＝1.400004の約0.1秒前に、ＩＤ＝0x100を含み、且つ、データの先頭ビットの値が「１」であるメッセージが攻撃検知装置１に到着している。しかしながら、「ログ情報（攻撃あり）」においては、そのようなメッセージは存在しない。すなわち、攻撃メッセージが存在しないときに得られる規則性から逸脱した事象が発生している。これにより、ネットワーク１００への攻撃が検知される。
【００５３】
このように、攻撃検知装置１は、メッセージの受信タイミングだけでなく、メッセージの内容に係わる規則性を利用してネットワーク１００への攻撃を検知する。ただし、このような検知を行うためには、ネットワーク１００への攻撃がないときに、予め通信の規則性を検出しておくことが求められる。
【００５４】
通信の規則性は、例えば、以下の手順で検出される。
（１）ＩＤ毎に、メッセージの受信間隔が所定の周期から外れているメッセージの個数を測定する。
（２）ＩＤ毎に、単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、特定値が出現する回数および／または直前の対応するビット列に対して値が変化する回数をカウントする。
（３）上記（１）〜（２）に基づいて、互いに関係する事象を発見する。例えば、所定のモニタ期間において、所定のビット列の値が変化する回数がＮ回であり、かつ、その変化したタイミングにおいてメッセージの受信間隔が、所定の周期から外れていたものとする。この場合、メッセージの受信間隔が所定の周期から外れることと、所定のビット列の値が変化することとの間に関係性があると推定される。
【００５５】
ところが、上記（１）の測定を精度よく行うことは困難である。この理由は、以下の通りである。即ち、周期的に送信されるメッセージであっても、実際には、その送信間隔は誤差を有する。このため、メッセージの受信間隔が所定の周期から外れているか否かを判定する場合、予定受信時刻に対して所定の許容誤差範囲が設定される。しかし、この許容誤差範囲の決定は容易ではない。例えば、許容誤差範囲が小さ過ぎると、正規の周期メッセージの受信時に周期はずれが検出されることがある。一方、許容誤差範囲が大き過ぎると、非周期メッセージが周期メッセージと判定されるおそれがある。そして、上記（１）の測定結果が正しくないときは、通信の規則性を正しく検出することができない。また、上記（１）に関連し、非周期メッセージにおいては周期が存在しないため、メッセージ間隔に基づく外れ箇所の特定はそもそも困難である。
【００５６】
＜実施形態＞
図６は、メッセージ処理装置４の処理の一例を示すフローチャートである。なお、ログ情報格納部３には、ネットワーク１００への攻撃が存在しない期間における受信メッセージについてのログ情報が格納されているものとする。
【００５７】
Ｓ１において、メッセージ処理装置４は、ログ情報格納部３に格納されているログ情報を取得する。このとき、メッセージ処理装置４は、所定のモニタ期間において記録されたログ情報を取得する。
【００５８】
Ｓ２において、カウント部５は、ログ情報を参照し、所定のモニタ期間内に受信したメッセージに含まれるＩＤごとに、所定の事象が発生した回数をカウントする。所定の事象は、メッセージ内のビット列に所定値が出現すること、及び／又は、メッセージ内のビット列の値が直前の受信メッセージ内の同一ビット列の値に対して変化すること、と含む。すなわち、カウント部５は、特定値が出現する回数を表す出現回数、及び／又は、直前のメッセージに対して値が変化する回数を表す変化回数をカウントする。以下の記載では、Ｓ２のカウント動作により得られる値をカウント値と呼ぶことがある。
【００５９】
Ｓ３において、関連性分析部６は、Ｓ２で得られたカウント値を利用して、ビット列間での近傍探索を実行する。例えば、ＩＤ＿Ｘを含むメッセージにおいて事象Ｘが発生した回数と、ＩＤ＿Ｙを含むメッセージにおいて事象Ｙが発生した回数とが一致する場合、近傍探索が実行される。この場合、事象Ｘが発生した各タイミングおよび事象Ｙが発生した各タイミングが時間領域においてそれぞれ互いに近接していれば、ＩＤ＿Ｘを含むメッセージにおいて発生する事象ＸとＩＤ＿Ｙを含むメッセージにおいて発生する事象Ｙとの間に関連性（或いは、相関または因果関係）が存在すると判定される。
【００６０】
Ｓ４において、関連性分析部６は、一致判定を行う。例えば、モニタ期間において、ＩＤ＿Ｘを含むメッセージの各受信タイミングとＩＤ＿Ｙを含むメッセージの各受信タイミングとがそれぞれ互いに一致するときは、ＩＤ＿ＸとＩＤ＿Ｙとの間に関連性が存在すると判定される。或いは、モニタ期間において、ＩＤ＿Ｘを含むメッセージの各受信間隔とＩＤ＿Ｙを含むメッセージの各受信間隔とがそれぞれ互いに一致するときは、ＩＤ＿ＸとＩＤ＿Ｙとの間に関連性が存在すると判定される。
【００６１】
メッセージ処理装置４は、上述の関連性を表す関連性情報を出力する。なお、Ｓ４は必須の処理ではなく、メッセージ処理装置４は、Ｓ１〜Ｓ３のみを実行してもよい。
【００６２】
このように、本発明の実施形態に係わるメッセージ処理方法においては、まず、所定の事象の発生回数が互いに一致するビット列が抽出される。ここで、所定の事象の発生回数は、メッセージが周期的に送信されるか否かに異存しない。よって、メッセージが周期的に送信されるか否かによらず、互いに関連するビット列の候補が正しく抽出される。
【００６３】
この後、抽出された２個以上のビット列間で、上述の事象の発生タイミングの近似性に基づいてビット列間の関連性の有無が判定される。ここで、ＩＤ毎のメッセージの受信間隔については、ログ情報を参照することにより、精度のよい情報が得られる。よって、本発明の実施形態に係わるメッセージ処理方法は、メッセージの送信周期の逸脱をモニタするのではなく、所定の事象が発生しているメッセージの受信間隔の近似性をモニタし、このモニタ結果に基づいてビット列間の関連性の有無を判定する。この結果、互いに関連するビット列を精度よく発見できる。
【００６４】
＜特定値の出現回数のカウント＞
カウント部５は、ＩＤ毎に、受信メッセージのデータ領域の各ビット列の値を検出する。この実施例では、図７に示すように、各メッセージのデータ領域は６４ビットである。また、モニタ期間内に５０個のメッセージが攻撃検知装置１に到着する。
【００６５】
カウント部５は、１ビットのビット列について特定値が出現する回数をカウントする。ここで、ビット列の長さが１ビットである場合、特定値は「０」または「１」である。そして、カウント部５は、各受信メッセージの各ビットの値を検出する。図７に示す実施例では、攻撃検知装置１に到着した５０個のメッセージのうち、第０ビットの値が「０」であるメッセージは３５個であり、第０ビットの値が「１」であるメッセージは１５個である。この場合、第０ビットにおいて「０」が出現する回数は３５回であり、第０ビットにおいて「１」が出現する回数は１５回である。また、第１ビットにおいて「０」および「１」が出現する回数は、それぞれ１０回および４０回である。さらに、第２ビットにおいて「０」および「１」が出現する回数は、それぞれ２０回および３０回である。以下、同様に、第６３ビットまでそれぞれ特定値の出現回数がカウントされる。この結果、６４箇所でデータが得られる。
【００６６】
続いて、カウント部５は、２ビットのビット列について特定値が出現する回数をカウントする。ここで、ビット列の長さが２ビットである場合、特定値は「００」「０１」「１０」または「１１」である。そして、図７に示す実施例では、第０〜第１ビットにおいて「００」「０１」「１０」「１１」が出現する回数は、それぞれ８回、２７回、２回、１３回である。また、第１〜第２ビットにおいて「００」「０１」「１０」「１１」が出現する回数は、それぞれ６回、４回、１４回、２６回である。以下、同様に、第６２〜第６３ビットまでそれぞれ特定値の出現回数がカウントされる。この結果、６３箇所でのデータが得られる。
【００６７】
さらに、カウント部５は、３ビットのビット列〜６４ビットのビット列についても同様のカウント動作を行う。この結果、合計で２０８０（＝６４＋６３＋・・・＋１）箇所のデータが得られる。
【００６８】
図８は、特定値の出現回数をカウントする処理を高速化する方法の一例を示す。この高速化方法では、カウント部５は、ログ情報を参照して各受信メッセージの６４ビットデータの値を検出し、検出した値に対応するカウンタをインクリメントする。例えば、受信メッセージのデータの値が「０００・・・０００」であったときは、「０００・・・０００」に対応するカウンタがインクリメントされる。この結果、モニタ期間内に受信した各メッセージから検出される６４ビットデータの各値の出現回数が検出される。なお、カウント部５は、受信メッセージから検出された値に対してのみカウンタを用意するようにしてもよい。すなわち、受信メッセージから検出されなかった値に対応するカウントは、用意しなくてもよい。
【００６９】
１ビットデータ〜６３ビットデータの各値の出現回数は、６４ビットデータの各値の出現回数から計算される。例えば、第０〜第６２ビットの６３ビットデータの値が「０００・・・００（６３ビット）」である回数は、「０００・・・０００（６４ビット）」の出現回数と「０００・・・００１（６４ビット）」の出現回数との和により得られる。図８に示す例では、１３０回である。同様に、第１〜第６３ビットの６３ビットデータの値が「００・・・０００（６３ビット）」である回数は、「０００・・・０００（６４ビット）」の出現回数と「１００・・・０００（６４ビット）」の出現回数との和により得られる。図８に示す例では、１５０回である。
【００７０】
このように、１ビットデータ〜６３ビットデータの各値の出現回数は、６４ビットデータの各値の出現回数から計算される。この方法によれば、カウント部５は、６４ビットデータの各値の出現回数をカウントするためにログ情報をリードする必要があるが、１ビットデータ〜６３ビットデータの各値の出現回数をカウントするためにログ情報を繰り返しリードする必要はない。したがって、この高速化方法は、特に、ログ情報のサイズが大きいときに有効である。
【００７１】
＜変化回数のカウント＞
カウント部５は、ＩＤ毎に、受信メッセージのデータ領域の各ビット列の値とその直前の受信メッセージ中の同じビット列の値とを比較する。そして、比較結果が一致しないときは、ビット列の値が変化したと判定される。なお、カウント部５は、特定値の出現回数のカウントと同様に、１ビット〜６４ビットのデータ列のそれぞれについて変化回数をカウントする。
【００７２】
図９は、ビット列の値の変化をカウントする処理を高速化する方法の一例を示す。この例では、あるＩＤを含む１５００個のメッセージがモニタ期間内に攻撃検知装置１に到着したものとする。
【００７３】
この高速化方法では、カウント部５は、ログ情報を参照し、データ領域内の各１ビットデータがそれぞれ変化した回数をカウントする。例えば、第０ビットの変化回数は３５回であり、第１ビットの変化回数は１２回である。また、第６０ビット、第６１ビット、第６２ビット、第６３ビットの変化回数は、それぞれ、９５０回、８回、１２回、０回である。
【００７４】
次に、カウント部５は、各２ビットデータがそれぞれ変化した回数をカウントする。すなわち、第０〜第１ビットの２ビットデータから第６２〜第６３ビットの２ビットデータの変化回数がそれぞれカウントされる。
【００７５】
ただし、変化回数がゼロであるビット（以下、無変化ビット）を含むビット列の変化回数は、無変化ビットの変化回数に依存しない。例えば、第６３ビットの変化回数はゼロである。この場合、第６２〜第６３ビットの２ビットデータの変化回数は、第６２ビットの変化回数のみに依存し、第６３ビットの変化回数には依存しない。すなわち、第６２〜第６３ビットの２ビットデータの規則性は、第６２ビットの規則性と実質的に同じである。したがって、カウント部５は、複数ビットのビット列の変化回数をカウントする処理において、無変化ビットを含むビット列を除外する。図９に示す例では、第６２〜第６３ビットの２ビットデータの変化回数は、カウントされない。この結果、プロセッサの演算量が削減される。
【００７６】
また、高い頻度で値が変化するビット（以下、高頻度変化ビット）について規則性を検出することは困難である。加えて、図６のＳ３の近傍判定において高頻度変化ビットを含むビット列を使用すると、その判定精度が低下するおそれがある。よって、カウント部５は、複数ビットのビット列の変化回数をカウントする処理において、高頻度変化ビットを含むビット列を除外してもよい。図９に示す例では、第６０ビットの変化回数は非常に多い。したがって、図９に示す例では、第６０〜第６１ビットの２ビットデータの変化回数は、カウントされない。この結果、プロセッサの演算量が削減される。なお、一例としては、モニタ期間において、あるビットの変化回数が受信メッセージ数に対して所定の割合（例えば、２分の１）を超えたときに、そのビットが高頻度変化ビットと判定される。
【００７７】
同様に、カウント部５は、３ビットデータ〜６４ビットデータの変化回数をそれぞれカウントする。但し、無変化ビットまたは高頻度変化ビットを含むビット列の変化回数はカウントされない。例えば、第６１〜第６３ビットの３ビットデータは、無変化ビット（即ち、第６３ビット）を含むので、変化回数のカウントは行われない。
【００７８】
このように、カウント部５は、ＩＤ毎に、特定値が出現する回数およびビット列が変化する回数をカウントする。そして、関連性分析部６は、図６のＳ３において、これらのカウント結果を利用してビット列間の関連性を検出する。
【００７９】
＜近傍探索＞
上述したように、カウント部５は、ＩＤ毎に、特定値が出現する回数を表す出現回数および直前の受信メッセージに対して値が変化する回数を表す変化回数を検出する。そうすると、抽出部７は、出現回数または変化回数が互いに一致するビット列を抽出する。そして、判定部８は、抽出部７により抽出された２個以上のビット列に対して近傍探索を実行する。すなわち、判定部８は、抽出部７により抽出されたビット列間で、特定値が出現したタイミングまたは値が変化したタイミングの近似性を判定する。
【００８０】
図１０は、近傍探索の一例を示す。この例では、モニタ期間内に、ＩＤ＝0x100を含むメッセージＭ１１〜Ｍ１７およびＩＤ＝0x200を含むメッセージＭ２１〜Ｍ２７が攻撃検知装置１に到着したものとする。なお、図１０においては、各メッセージの受信時刻およびデータの値が例示されている。例えば、「0.500001」は、メッセージＭ１１の受信時刻を表し、「00 01 12 13」は、メッセージＭ１１のデータの値を表す。
【００８１】
この実施例では、メッセージＭ１３、Ｍ１５、Ｍ１７の先頭バイトに「08」が出現している。すなわち、メッセージＭ１１〜Ｍ１７の先頭バイトに「08」が出現する回数は３回である。一方、メッセージＭ２３の最終バイトの値は、メッセージＭ２２の最終バイトの値に対して変化している。同様に、メッセージＭ２５の最終バイトの値はメッセージＭ２４の最終バイトの値に対して変化し、メッセージＭ２７の最終バイトの値はメッセージＭ２６の最終バイトの値に対して変化している。すなわち、メッセージＭ２１〜Ｍ２７の最終バイトの値が変化する回数は３回である。したがって、抽出部７は、互いに関連する可能性があるビット列を含むＩＤとして、ＩＤ＝0x100およびＩＤ＝0x200を抽出する。具体的には、抽出部７は、互いに関連する可能性があるビット列として、ＩＤ＝0x100を含むメッセージの先頭バイトおよびＩＤ＝0x200を含むメッセージの最終バイトを抽出する。以下の記載では、抽出部７により抽出されたビット列を「注目ビット列」と呼ぶことがある。
【００８２】
判定部８は、抽出部７により抽出された各注目ビット列について、最初に特定値が出現したタイミングまたは最初に値が変化したタイミングを検出する。この実施例では、ＩＤ＝0x100において、注目ビット列に最初に特定値「08」が出現したタイミングＡ０として、メッセージＭ１３の受信時刻が得られる。また、ＩＤ＝0x200において、注目ビット列の値が最初に変化したタイミングＢ０として、メッセージＭ２３の受信時刻が得られる。
【００８３】
さらに、判定部８は、注目ビット列に特定値が出現する時間間隔または注目ビット列の値が変化する時間間隔を検出する。この実施例では、ＩＤ＝0x100において、時間間隔ΔＡ１として、メッセージＭ１３の受信時刻とメッセージＭ１５の受信時刻との差分が計算され、時間間隔ΔＡ２として、メッセージＭ１５の受信時刻とメッセージＭ１７の受信時刻との差分が計算される。また、ＩＤ＝0x200においては、時間間隔ΔＢ１として、メッセージＭ２３の受信時刻とメッセージＭ２５の受信時刻との差分が計算され、時間間隔ΔＢ２として、メッセージＭ２５の受信時刻とメッセージＭ２７の受信時刻との差分が計算される。
【００８４】
そして、判定部８は、判定１〜判定３に基づいてビット列の関連性を判定する。
判定１：判定部８は、Ａ０とＢ０との差分の自乗値と所定の閾値ＴＨ１とを比較する。そして、Ａ０とＢ０との差分の自乗値が閾値ＴＨ１以上であれば、１組のビット列間に関連性がないと判定される。なお、判定部８は、Ａ０とＢ０との差分の絶対値と閾値ＴＨ１とを比較してもよい。
【００８５】
判定２：判定部８は、時間間隔ΔＡｉと時間間隔ΔＢｉとの差分の自乗値Ｘｉと所定の閾値ＴＨ２とを比較する。このとき、各自乗値Ｘｉ（ｉ＝１、２、．．．）がそれぞれ閾値ＴＨ２と比較される。この結果、１つ以上の自乗値Ｘｉが閾値ＴＨ２以上であれば、１組のビット列間に関連性がないと判定される。尚、判定部８は、自乗値Ｘｉの代わりに、時間間隔ΔＡｉと時間間隔ΔＢｉとの差分の絶対値と閾値ＴＨ２とを比較してもよい。
【００８６】
判定３：判定部８は、判定２で使用した自乗値Ｘｉの総和と所定の閾値ＴＨ３とを比較する。この結果、自乗値Ｘｉの総和が閾値ＴＨ３以上であれば、１組のビット列間に関連性がないと判定される。なお、判定部８は、判定２で使用した自乗値Ｘｉの総和の代わりに、時間間隔ΔＡｉと時間間隔ΔＢｉとの差分の絶対値の総和と閾値ＴＨ３とを比較してもよい。また、判定部８は、総和値を「サンプル数−１」で割算した結果と閾値ＴＨ３とを比較してもよい。
【００８７】
このように、判定部８は、判定１〜判定３に基づいてビット列間の関連性を判定する。具体的には、例えば、Ａ０とＢ０との差分の自乗値が閾値ＴＨ１より小さく、且つ、時間間隔ΔＡｉと時間間隔ΔＢｉとの差分の自乗値Ｘｉがいずれも閾値ＴＨ２より小さく、且つ、自乗値Ｘｉの総和が閾値ＴＨ３より小さいときに、判定部８は、上記１組のビット列が互いに関連していると判定する。
【００８８】
ただし、本発明の実施形態は、この方法に限定されるものではない。例えば、判定部８は、判定３を行わず、判定１〜判定２に基づいてビット列間の関連性を判定してもよい。或いは、判定部８は、判定１〜判定３のうちのいずれか１つに基づいてビット列間の関連性を判定してもよい。
【００８９】
図１０に示す例では、下記の判定結果が得られる。なお、閾値ＴＨ１〜ＴＨ３は、以下の値であるものとする。
TH1＝0.2
TH2＝0.04
TH3＝0.000001
【００９０】
ＩＤ＝0x100を含むメッセージＭ１１〜Ｍ１７において以下の値が得られる。
A0＝0.900002
ΔA1＝1.300003−0.900002＝0.400001
ΔA2＝1.700001−1.300003＝0.399998
【００９１】
ＩＤ＝0x200を含むメッセージＭ２１〜Ｍ２７において以下の値が得られる。
B0＝1.000009
ΔB1＝1.400009−1.000009＝0.400000
ΔB2＝1.800009−1.400009＝0.400000
【００９２】
判定１の結果は以下の通りである。
|A0−B0|＝0.100007＜TH1
判定２の結果は以下の通りである。
(ΔA1−ΔB1)2＝0.000000000001＜TH2
(ΔA2−ΔB2)2＝0.000000000004＜TH2
【００９３】
判定３の結果は以下の通りである。なお、図１０に示す例では、サンプル数は「２」である。
(ΔA1−ΔB1)2＋(ΔA2−ΔB2)2／(2−1)＝0.000000000005＜TH3
【００９４】
よって、判定部８は、ＩＤ＝0x100を含むメッセージの先頭バイトとＩＤ＝0x200を含むメッセージの最終バイトとが関連性を有すると判定する。
【００９５】
そうすると、関連性分析部６は、この関連性を表すルールを作成する。具体的には、関連性分析部６は、下記のルールを作成する。
「ＩＤ＝0x100を含むメッセージの先頭バイトにおいて「08」が出現すると、それに近いタイミングでＩＤ＝0x200を含むメッセージの最終バイトの値が変化する」
関連性分析部６により作成されたルールは、関連性データベース９に記録される。そして、検知部１０は、このルールから逸脱するメッセージをモニタすることにより、ネットワーク１００への攻撃を検知する。
【００９６】
なお、上述の実施例では、２つのビット列間での関連性が検出されるが、関連性分析部６は、３以上のビット列間での関連性を検出してもよい。また、ビット列間の近似性を分析するときに、差分の自乗値を使用してもよいし、差分の絶対値を使用してもよい。
【００９７】
関連性分析部６は、同一ＩＤ内でビット列間の関連性を検出してもよい。例えば、あるＩＤを含むメッセージにおいて「受信メッセージの先頭バイトに「xx」が出現すると、0.2秒後に受信するメッセージの第２バイトの値が変化する」という規則性が検出されたときは、この規則性を表すルールが作成される。
【００９８】
＜実施例＞
メッセージ処理装置４の処理についてのより具体的な実施例を記載する。この実施例では、ＩＤ＝0x100を含むメッセージおよびＩＤ＝0x200を含むメッセージがネットワーク１００に入力される。各メッセージは、４ビットのデータを格納する。ＩＤ＝0x100を含むメッセージは、通常、約１秒間隔で送信される。ただし、送信間隔が約0.3秒となることがある。ＩＤ＝0x200を含むメッセージも同様である。そして、所定のモニタ期間内に下記の１８個のメッセージが攻撃検知装置１に到着したものとする。なお、受信メッセージを表すログ情報は、ログ情報格納部３に格納される。
TIME=1.000000   ID=0x100   DATA=0100
TIME=1.100000   ID=0x200   DATA=1001
TIME=1.300000   ID=0x100   DATA=0110
TIME=1.400000   ID=0x200   DATA=0110
TIME=2.300000   ID=0x100   DATA=0000
TIME=2.400000   ID=0x200   DATA=1110
TIME=3.300000   ID=0x100   DATA=1100
TIME=3.400000   ID=0x200   DATA=1110
TIME=4.300000   ID=0x100   DATA=1000
TIME=4.400000   ID=0x200   DATA=0010
TIME=5.300000   ID=0x100   DATA=0000
TIME=5.400000   ID=0x200   DATA=0110
TIME=5.600000   ID=0x100   DATA=1010
TIME=5.700000   ID=0x200   DATA=1011
TIME=6.600000   ID=0x100   DATA=1100
TIME=6.700000   ID=0x200   DATA=1111
TIME=6.900000   ID=0x100   DATA=0010
TIME=7.000000   ID=0x200   DATA=0001
【００９９】
メッセージ処理装置４は、モニタ期間内に記録されたログ情報をＩＤ毎に整理する。ＩＤ＝0x100を含むメッセージについてのログ情報を図１１に示し、ＩＤ＝0x200を含むメッセージについてのログ情報を図１２に示す。なお、以下の記載では、モニタ期間内に攻撃検知装置１に到着したＩＤ＝0x100を含む９個のメッセージを「メッセージＭ１１〜Ｍ１９」と呼ぶことがある。モニタ期間内に攻撃検知装置１に到着したＩＤ＝0x200を含む９個のメッセージを「メッセージＭ２１〜Ｍ２９」と呼ぶことがある。
【０１００】
カウント部５は、ＩＤ毎に、変化回数および出現回数をカウントする。以下では、一例として、図１１を参照しながら、ＩＤ＝0x100を含むメッセージＭ１１〜Ｍ１９について変化回数および出現回数をカウントする処理を記載する。
【０１０１】
カウント部５は、メッセージＭ１１〜Ｍ１９の第０ビットの値の変化を探索する。この実施例では、メッセージＭ１３、Ｍ１４間で第０ビットの値が「０」から「１」に変化している。同様に、メッセージＭ１５、Ｍ１６間で値が「１」から「０」に変化し、メッセージＭ１６、Ｍ１７間で値が「０」から「１」に変化し、メッセージＭ１８、Ｍ１９間で値が「１」から「０」に変化している。よって、メッセージＭ１１〜Ｍ１９の第０ビットの値の変化回数は、４回である。
【０１０２】
同様に、第１ビットの値の変化回数は５回であり、第２ビットの値の変化回数も５回である。ただし、第３ビットの値の変化回数はゼロである。この場合、カウント部５は、第３ビットの値の変化回数を表すデータを出力しなくてもよい。また、ビット列の変化を探索する以降の処理において、第３ビットを含むビット列は除外される。
【０１０３】
カウント部５は、２ビットのビット列の変化回数をカウントする。この実施例では、メッセージＭ１２、Ｍ１３間で第０〜第１ビットの値が「０１」から「００」に変化している。同様に、メッセージＭ１３、Ｍ１４間、メッセージＭ１４、Ｍ１５間、メッセージＭ１５、Ｍ１６間、メッセージＭ１６、Ｍ１７間、メッセージＭ１７、Ｍ１８間、メッセージＭ１８、Ｍ１９間でそれぞれ第０〜第１ビットの値が変化している。よって、メッセージＭ１１〜Ｍ１９の第０〜第１ビットの値の変化回数は７回である。同様に、第１〜第２ビットの値の変化回数も７回である。
【０１０４】
なお、上述しように、ビット列の変化を探索する処理において、第３ビットを含むビット列は除外される。よって、カウント部５は、第２〜第３ビットの変化回数をカウントしない。
【０１０５】
また、カウント部５は、変化回数が所定の閾値よりも多いときに、そのカウント結果を出力しなくてもよい。例えば、変化回数が受信メッセージ数の８０パーセントよりも多いときは、カウント部５は、そのカウント結果を出力しなくてもよい。加えて、ビット列の変化を探索する以降の処理において、第０〜第１ビットを含むビット列、および第１〜第２ビットを含むビット列は除外される。したがって、カウント部５は、３ビットデータの変化回数および４ビットデータの変化回数をカウントしない。
【０１０６】
次に、カウント部５は、各ビット列について特定値の出現回数をカウントする。なお、以下の記載では、図８を参照しながら説明した高速化処理を行わないものとする。
【０１０７】
カウント部５は、メッセージＭ１１〜Ｍ１９の第０ビットに「０」及び「１」が出現する回数をそれぞれカウントする。この実施例では、メッセージＭ１１、Ｍ１２、Ｍ１３、Ｍ１６、Ｍ１９の第０ビットの値が「０」である。また、メッセージＭ１４、Ｍ１５、Ｍ１７、Ｍ１８の第０ビットの値が「１」である。よって、メッセージＭ１１〜Ｍ１９の第０ビットに「０」及び「１」が出現する回数は、それぞれ５回および４回である。
【０１０８】
同様に、カウント部５は、第１ビット、第２ビット、第３ビットに「０」及び「１」が出現する回数をそれぞれカウントする。なお、第３ビットに「１」が出現する回数はゼロである。この場合、カウント部５は、このカウント結果を出力しなくてもよい。
【０１０９】
カウント部５は、メッセージＭ１１〜Ｍ１９の第０〜第１ビットにおいて「００」「０１」「１０」「１１」が出現する回数をそれぞれカウントする。この実施例では、メッセージＭ１３、Ｍ１６、Ｍ１９の第０〜第１ビットの値が「００」である。メッセージＭ１１、Ｍ１２の第０〜第１ビットの値が「０１」である。メッセージＭ１５、Ｍ１７の第０〜第１ビットの値が「１０」である。メッセージＭ１４、Ｍ１８の第０〜第１ビットの値が「１１」である。よって、第０〜第１ビットに「００」「０１」「１０」「１１」が出現する回数は、それぞれ３回、２回、２回、２回である。
【０１１０】
同様に、カウント部５は、第１〜第２ビットおよび第２〜第３ビットにおいて「００」「０１」「１０」「１１」が出現する回数をそれぞれカウントする。また、カウント部５は、第０〜第２ビットおよび第１〜第３ビットにおいて「０００」〜「１１１」が出現する回数をそれぞれカウントする。更に、カウント部５は、第０〜第３ビットにおいて「００００」〜「１１１１」が出現する回数をそれぞれカウントする。
【０１１１】
さらに、カウント部５は、ＩＤ＝0x200を含むメッセージＭ２１〜Ｍ２９について変化回数および出現回数をそれぞれカウントする。このカウント結果は、図１２に示す通りである。
【０１１２】
抽出部７は、カウント部５によるカウント結果に基づいて、変化回数または出現回数が一致するビット列を抽出する。以下、変化回数または出現回数が１回〜６回であったビット列を列挙する。なお、以下の表記において、例えば「特定値＝11、ビット位置＝１、長さ＝２」は、第１〜第２ビットの値が「11」である状態を表す。また「特定値＝001、ビット位置＝０、長さ＝３」は、第０〜第２ビットの値が「001」である状態を表す。
【０１１３】
変化回数または出現回数：１回
ＩＤ＝0x100
特定値＝11、ビット位置＝１、長さ＝２
特定値＝001、ビット位置＝０、長さ＝３
特定値＝010、ビット位置＝０、長さ＝３
特定値＝011、ビット位置＝０、長さ＝３
特定値＝100、ビット位置＝０、長さ＝３
特定値＝101、ビット位置＝０、長さ＝３
特定値＝110、ビット位置＝１、長さ＝３
特定値＝0010、ビット位置＝０、長さ＝４
特定値＝0100、ビット位置＝０、長さ＝４
特定値＝0110、ビット位置＝０、長さ＝４
特定値＝1000、ビット位置＝０、長さ＝４
特定値＝1010、ビット位置＝０、長さ＝４
ＩＤ＝0x200
特定値＝000、ビット位置＝０、長さ＝３
特定値＝001、ビット位置＝０、長さ＝３
特定値＝010、ビット位置＝１、長さ＝３
特定値＝011、ビット位置＝１、長さ＝３
特定値＝100、ビット位置＝０、長さ＝３
特定値＝101、ビット位置＝０、長さ＝３
特定値＝111、ビット位置＝１、長さ＝３
特定値＝0001、ビット位置＝０、長さ＝４
特定値＝0010、ビット位置＝０、長さ＝４
特定値＝1001、ビット位置＝０、長さ＝４
特定値＝1011、ビット位置＝０、長さ＝４
特定値＝1111、ビット位置＝０、長さ＝４
【０１１４】
変化回数または出現回数：２回
ＩＤ＝0x100
特定値＝01、ビット位置＝０、長さ＝２
特定値＝01、ビット位置＝１、長さ＝２
特定値＝10、ビット位置＝０、長さ＝２
特定値＝11、ビット位置＝０、長さ＝２
特定値＝000、ビット位置＝０、長さ＝３
特定値＝010、ビット位置＝１、長さ＝３
特定値＝110、ビット位置＝０、長さ＝３
特定値＝0000、ビット位置＝０、長さ＝４
特定値＝1100、ビット位置＝０、長さ＝４
ＩＤ＝0x200
変化回数、ビット位置＝２、長さ＝１
変化回数、ビット位置＝３、長さ＝１
特定値＝00、ビット位置＝０、長さ＝２
特定値＝00、ビット位置＝１、長さ＝２
特定値＝0、ビット位置＝２、長さ＝１
特定値＝01、ビット位置＝０、長さ＝２
特定値＝01、ビット位置＝１、長さ＝２
特定値＝01、ビット位置＝２、長さ＝２
特定値＝10、ビット位置＝０、長さ＝２
特定値＝11、ビット位置＝２、長さ＝２
特定値＝001、ビット位置＝１、長さ＝３
特定値＝011、ビット位置＝０、長さ＝３
特定値＝0110、ビット位置＝０、長さ＝４
特定値＝1110、ビット位置＝０、長さ＝４
【０１１５】
変化回数または出現回数：３回
ＩＤ＝0x100
特定値＝1、ビット位置＝２、長さ＝１
特定値＝00、ビット位置＝０、長さ＝２
特定値＝00、ビット位置＝１、長さ＝２
特定値＝10、ビット位置＝１、長さ＝２
特定値＝10、ビット位置＝２、長さ＝２
特定値＝000、ビット位置＝１、長さ＝３
特定値＝100、ビット位置＝１、長さ＝３
ＩＤ＝0x200
変化回数、ビット位置＝２、長さ＝２
特定値＝11、ビット位置＝０、長さ＝２
特定値＝111、ビット位置＝０、長さ＝３
【０１１６】
変化回数または出現回数：４回
ＩＤ＝0x100
変化回数、ビット位置＝０、長さ＝１
特定値＝1、ビット位置＝０、長さ＝１
特定値＝1、ビット位置＝１、長さ＝１
ＩＤ＝0x200
特定値＝0、ビット位置＝０、長さ＝１
特定値＝0、ビット位置＝１、長さ＝１
特定値＝1、ビット位置＝３、長さ＝１
特定値＝110、ビット位置＝１、長さ＝３
【０１１７】
変化回数または出現回数：５回
ＩＤ＝0x100
変化回数、ビット位置＝１、長さ＝１
変化回数、ビット位置＝２、長さ＝１
特定値＝0、ビット位置＝０、長さ＝１
特定値＝0、ビット位置＝１、長さ＝１
ＩＤ＝0x200
変化回数、ビット位置＝０、長さ＝１
特定値＝1、ビット位置＝０、長さ＝１
特定値＝1、ビット位置＝１、長さ＝１
特定値＝10、ビット位置＝２、長さ＝２
【０１１８】
変化回数または出現回数：６回
ＩＤ＝0x100
特定値＝0、ビット位置＝２、長さ＝１
特定値＝00、ビット位置＝２、長さ＝２
ＩＤ＝0x200
変化回数、ビット位置＝１、長さ＝１
変化回数、ビット位置＝１、長さ＝３
【０１１９】
そして、抽出部７は、変化回数または出現回数が互いに一致するビット列を抽出する。以下では、一例として、変化回数または出現回数が３回であるビット列について記載する。なお、変化回数または出現回数が３回であるビット列は、以下の通りである。
ＩＤ＝0x100
ビット列Ａ：特定値＝1、ビット位置＝２、長さ＝１
ビット列Ｂ：特定値＝00、ビット位置＝０、長さ＝２
ビット列Ｃ：特定値＝00、ビット位置＝１、長さ＝２
ビット列Ｄ：特定値＝10、ビット位置＝１、長さ＝２
ビット列Ｅ：特定値＝10、ビット位置＝２、長さ＝２
ビット列Ｆ：特定値＝000、ビット位置＝１、長さ＝３
ビット列Ｇ：特定値＝100、ビット位置＝１、長さ＝３
ＩＤ＝0x200
ビット列α：変化回数、ビット位置＝２、長さ＝２
ビット列β：特定値＝11、ビット位置＝０、長さ＝２
ビット列γ：特定値＝111、ビット位置＝０、長さ＝３
【０１２０】
判定部８は、特定値が出現したタイミングまたは値が変化したタイミングの近似性に基づいて、抽出部７により抽出されたビット列間の関連性を判定する。このとき、判定部８は、抽出された各ビット列について、差分系列を作成する。差分系列は、初回受信時刻および差分情報から構成される。差分情報は、この実施例では、あるＩＤを含むメッセージにおいてある事象（すなわち、特定値の出現または値の変化）が発生したタイミングから次に同じ事象が発生したタイミングまでの時間間隔を表す。
【０１２１】
例えば、ビット列Ａは、ＩＤ＝0x100を含むメッセージの第２ビットから開始され、ビット長が１ビット列であり、且つ、値が「１」であるビット列を表す。ここで、ビット列Ａを含むメッセージ（即ち、第２ビットの値が「１」となっている、ＩＤ＝0x100を含むメッセージ）は、図１１に示すように、Ｍ１２、Ｍ１７、Ｍ１９である。また、これら３個のメッセージのうちで最初に攻撃検知装置１（または、ログ取得機能）に到着したメッセージの受信時刻が、初回受信時刻TA0に相当する。さらに、これら３個のメッセージの受信時刻の時間間隔が、差分情報に相当する。したがって、ビット列Ａに対して得られる差分系列Ａは以下の通りである。
【０１２２】
ビット列Ａ（特定値＝1、ビット位置＝２、長さ＝１）
Ｍ１２：TIME＝1.300000（＝初回受信時刻TA0）
Ｍ１７：TIME＝5.600000
Ｍ１９：TIME＝6.900000
ΔTA1＝5.600000−1.300000＝4.300000
ΔTA2＝6.900000−5.600000＝1.300000
【０１２３】
同様に、ビット列Ｂ〜Ｇおよびビット列α〜γに対して得られる差分系列Ｂ〜Ｇおよび差分系列α〜γは以下の通りである。
【０１２４】
ビット列Ｂ（特定値＝00、ビット位置＝０、長さ＝２）
Ｍ１３：TIME＝2.300000（＝初回受信時刻TB0）
Ｍ１６：TIME＝5.300000
Ｍ１９：TIME＝6.900000
ΔTB1＝5.300000−2.300000＝3.000000
ΔTB2＝6.900000−5.300000＝1.600000
【０１２５】
ビット列Ｃ（特定値＝00、ビット位置＝１、長さ＝２）
Ｍ１３：TIME＝2.300000（＝初回受信時刻TC0）
Ｍ１５：TIME＝4.300000
Ｍ１６：TIME＝5.300000
ΔTC1＝4.300000−2.300000＝2.000000
ΔTC2＝5.300000−4.300000＝1.000000
【０１２６】
ビット列Ｄ（特定値＝10、ビット位置＝１、長さ＝２）
Ｍ１１：TIME＝1.000000（＝初回受信時刻TD0）
Ｍ１４：TIME＝3.300000
Ｍ１８：TIME＝6.600000
ΔTD1＝3.300000−1.000000＝2.300000
ΔTD2＝6.600000−3.300000＝3.300000
【０１２７】
ビット列Ｅ（特定値＝10、ビット位置＝２、長さ＝２）
Ｍ１２：TIME＝1.300000（＝初回受信時刻TE0）
Ｍ１７：TIME＝5.600000
Ｍ１９：TIME＝6.900000
ΔTE1＝5.600000−1.300000＝4.300000
ΔTE2＝6.900000−5.600000＝1.300000
【０１２８】
ビット列Ｆ（特定値＝000、ビット位置＝１、長さ＝３）
Ｍ１３：TIME＝2.300000（＝初回受信時刻TF0）
Ｍ１５：TIME＝4.300000
Ｍ１６：TIME＝5.300000
ΔTF1＝4.300000−2.300000＝2.000000
ΔTF2＝5.300000−4.300000＝1.000000
【０１２９】
ビット列Ｇ（特定値＝100、ビット位置＝１、長さ＝３）
Ｍ１１：TIME＝1.000000（＝初回受信時刻TG0）
Ｍ１４：TIME＝3.300000
Ｍ１８：TIME＝6.600000
ΔTG1＝3.300000−1.000000＝2.300000
ΔTG2＝6.600000−3.300000＝3.000000
【０１３０】
ビット列α（変化回数、ビット位置＝２、長さ＝２）
Ｍ２２：TIME＝1.400000（＝初回受信時刻Tα0）
Ｍ２７：TIME＝5.700000
Ｍ２９：TIME＝7.000000
ΔTα1＝5.700000−1.400000＝4.300000
ΔTα2＝7.000000−5.700000＝1.300000
【０１３１】
ビット列β（特定値＝11、ビット位置＝０、長さ＝２）
Ｍ２３：TIME＝2.400000（＝初回受信時刻Tβ0）
Ｍ２４：TIME＝3.400000
Ｍ２８：TIME＝6.7000000
ΔTβ1＝3.400000−2.400000＝1.000000
ΔTβ2＝6.700000−3.400000＝3.300000
【０１３２】
ビット列γ（特定値＝111、ビット位置＝０、長さ＝３）
Ｍ２３：TIME＝2.400000（＝初回受信時刻Tγ0）
Ｍ２４：TIME＝3.400000
Ｍ２８：TIME＝6.7000000
ΔTγ1＝3.400000−2.400000＝1.000000
ΔTγ2＝6.700000−3.400000＝3.300000
【０１３３】
なお、差分系列Ａおよび差分系列Ｅは、互いに同じである。差分系列Ｃおよび差分系列Ｆは、互いに同じである。差分系列Ｄおよび差分系列Ｇは、互いに同じである。差分系列βおよび差分系列γは、互いに同じである。
【０１３４】
この後、判定部８は、差分系列間の相関を計算することにより、任意の２つのビット列間の関連性を判定する。具体的には、上述した判定１〜判定３を実行することにより、任意の２つのビット列間の関連性が判定される。なお、この実施例では、判定１〜判定３において使用される閾値ＴＨ１〜ＴＨ３は、以下の通りである。
TH1＝0.2
TH2＝0.04
TH3＝0.1
【０１３５】
ビット列Ａとビット列αとの関連性を判定するときは、判定部８は、例えば、下記の計算を実行する。なお、この例では、判定１において差分の絶対値が使用される。また、判定２および判定３において差分の自乗値が使用される。
判定１：|TA0−Tα0|＝|1.300000−1.400000|＝0.1＜TH1
判定２ａ：(ΔTA1−ΔTα1)2＝(4.300000−4.300000)2＝0＜TH2
判定２ｂ：(ΔTA2−ΔTα2)2＝(1.300000−1.300000)2＝0＜TH2
判定３：(ΔTA1−ΔTα1)2＋(ΔTA2−ΔTα2)2＝0＜TH3
【０１３６】
判定１において、初回受信時刻の差分が閾値ＴＨ１より小さい。よって、ビット列Ａとビット列αとが関連する可能性があると判定される。また、判定２において、ビット列Ａに特定値の出現するタイミングとビット列αの値が変化するタイミングとの差分の自乗値は、いずれも閾値ＴＨ２より小さい。よって、この評価においても、ビット列Ａとビット列αとが関連する可能性があると判定される。さらに、判定３において、判定２で使用した自乗値の総和が閾値ＴＨ３より小さい。よって、この評価においても、ビット列Ａとビット列αとが関連する可能性があると判定される。そして、判定１〜判定３のそれぞれにおいてビット列Ａとビット列αとが関連する可能性があると判定されると、判定部８は、ビット列Ａとビット列αとが関連すると判定する。
【０１３７】
そうすると、関連性分析部６は、この関連性を表すルールを作成する。ここで、ビット列Ａに特定値が出現する各タイミングと、ビット列αの値が変化する対応するタイミングとの差分は、それぞれ約0.1秒である。また、ビット列Ａは、ＩＤ＝0x100を含むメッセージの第２ビットであり、その特定値は「１」である。ビット列αは、ＩＤ＝0x200を含むメッセージの第２〜第３ビットであり、その値が変化する。したがって、関連性分析部６は、下記のルールを作成する。
「ＩＤ＝0x100を含み、第２ビットが「１」であるメッセージが送信されたときは、その約0.1秒後に、ＩＤ＝0x200を含み、直前のメッセージに対して第２〜第３ビットの値が変化したメッセージが送信される」
そして、このルールは、関連性データベース９に記録される。
【０１３８】
ビット列Ａとビット列βとの関連性を判定するときは、判定部８は、下記の計算を実行する。
判定１：|TA0−Tβ0|＝|1.300000−2.400000|＝1.1＞TH1
判定２ａ：(ΔTA1−ΔTβ1)2＝(4.300000−1.000000)2＝10.890000＞TH2
判定２ｂ：(ΔTA2−ΔTβ2)2＝(1.300000−3.300000)2＝4.000000＞TH2
判定３：(ΔTA1−ΔTβ1)2＋(ΔTA2−ΔTβ2)2＝14.890000＞TH3
【０１３９】
この例では、判定１〜判定３の計算結果は、いずれも対応する閾値より大きい。したがって、この場合、判定部８は、ビット列Ａとビット列βとの間に関連性が存在しないと判定する。
【０１４０】
同様に、判定部８は、任意の２つのビット列間の関連性を判定する。このとき、判定部８は、異なるＩＤ間でビット列の関連性を判定することに加えて、同一ＩＤ内のビット列間の関連性を判定してもよい。
【０１４１】
また、特定値の出現または値の変化のタイミングが互いに完全に一致する２以上のビット列をグループ化してもよい。例えば、上述の実施例では、差分系列Ａおよび差分系列Ｅは互いに同じなので、ビット列Ａおよびビット列Ｅはグループ化される。ここで、ビット列Ａおよびビット列αは、互いに関連すると判定されている。よって、ビット列Ｅおよびビット列αも、互いに関連すると判定される。そして、この関連性に基づいて下記のルールが作成される。
「ＩＤ＝0x100を含み、第２〜第３ビットが「11」であるメッセージが送信されたときは、その約0.1秒後に、ＩＤ＝0x200を含み、直前のメッセージに対して第２〜第３ビットの値が変化したメッセージが送信される」
そして、このルールも、関連性データベース９に記録される。
【０１４２】
なお、上述の実施例では、各ＩＤの送信周期が同じであるものとして説明したが、ネットワーク１００において、各ＩＤの送信周期は互いに同じである必要はない。そして、各ＩＤの送信周期が互いに同じでないときは、カウント部５によりカウントされるカウント値（出現回数または変化回数）を正規化することが好ましいことがある。
【０１４３】
例えば、ＩＤ＿Ａの送信周期が２０ｍ秒であり、ＩＤ＿Ｂの送信周期が１０ｍ秒であるものとする。そして、ＩＤ＿Ａのメッセージに起因してＩＤ＿Ｂのメッセージのデータの値が影響を受けるものとする。この場合、ＩＤ＿Ｂのメッセージと比較すると、ＩＤ＿Ａのメッセージの受信回数は２分の１である。よって、カウント部５は、各ＩＤの送信周期に基づいてカウント値を正規化してよい。具体的には、カウント部５は、ＩＤ＿Ａにおいて得られたカウント値に、正規化係数として「２」を乗算する。あるいは、カウント部５は、ＩＤ＿Ｂにおいて得られたカウント値に、正規化係数として「0.5」を乗算してもよい。
【０１４４】
また、別の例として、ＩＤ＿Ｃのメッセージの所定のビットが反転したときに、ＩＤ＿Ｄのメッセージが２個送信されるものとする。この場合、ＩＤ＿Ｃの変化回数を２倍にする正規化を行ってもよいし、ＩＤ＿Ｄのメッセージに係わるカウント値を２分の１にする正規化を行ってもよい。
【０１４５】
＜攻撃の検知＞
上述したように、攻撃検知装置１は、何らかの事象の発生に起因してメッセージ中のデータの値が変化する状態および／またはメッセージ中に特定値が出現する状態を利用してネットワークへの攻撃を検知する。この検知方法は、ネットワークが攻撃されていないときにデータの値が変化する回数および／または特定値が出現する回数を調べておき、その結果に基づいて検知ルールを作成しておくことで実現される。したがって、この方法によれば、非周期的にメッセージが送信され得るネットワークにおいても、攻撃検知装置１はネットワークへの攻撃を検知できる。以下では、検知ルールを利用してネットワークへの攻撃を検知する方法の例を記載する。
【０１４６】
図１３に示す例では、ＩＤ間でメッセージ内の所定のデータ領域に相関が存在する。すなわち、ネットワーク１００に対する攻撃がないときは、図１３（ａ）に示すように、ＩＤ＝0x100を含むメッセージが送信されると、約0.1秒後に、ＩＤ＝0x200を含むメッセージが送信される。例えば、メッセージＭ１１が送信されると、その約0.1秒後にメッセージＭ２１が送信される。また、ＩＤ＝0x100を含むメッセージおよびＩＤ＝0x200を含むメッセージそれぞれにおいて、常時、先頭バイトが変化する。例えば、メッセージＭ１１〜Ｍ１４の先頭バイトの値は、順番に、００、１５、３２、Ｆ４と変化している。この場合、以下の検知ルールが作成される。
ルール１：ＩＤ＝0x100を含むメッセージが送信されると、約0.1秒後にＩＤ＝0x200を含むメッセージが送信される。
ルール２：各ＩＤにおいて先頭バイトの値が常に変化する。
【０１４７】
このケースにおいて、図１３（ｂ）に示すように、ＩＤ＝0x200を含むメッセージＭ３１がネットワーク１００に入力されるものとする。なお、攻撃者は、メッセージＭ２２をコピーすることによりメッセージＭ３１を生成している。ここで、メッセージＭ１３の受信時刻とメッセージＭ３１の受信時刻との差分は約0.1秒であり、検知ルール１は満たされている。しかし、メッセージＭ３１の先頭ビットの値は、メッセージＭ２２に対して変化していない。すなわち、検知ルール２は満たされていない。したがって、攻撃検知装置１は、メッセージＭ３１を用いたネットワーク１００への攻撃を検知できる。
【０１４８】
図１４に示す例では、メッセージの送信タイミングとデータの変化との間に相関が存在する。すなわち、ネットワーク１００に対する攻撃がないときは、図１４（ａ）に示すように、基本的には、約0.3秒周期でメッセージが送信される。そして、メッセージの送信周期が変化するときは、最終バイトの値が変化する。例えば、メッセージＭ１１〜Ｍ１３は、約0.3秒周期で送信されており、その最終バイトの値はそれぞれ「13」である。そして、メッセージＭ１３から約0.1秒後にメッセージＭ１４が送信されたとき、メッセージＭ１４の最終バイトの値は「56」に変化している。この場合、以下の検知ルールが作成される。
ルール１：メッセージの送信周期が約0.3秒であるときは、最終バイトの値は、直前のメッセージの最終バイトの値と同じである。
ルール２：メッセージの送信周期が約0.3秒でないときは、最終バイトの値は、直前のメッセージの最終バイトの値に対して変化する。
【０１４９】
このケースにおいて、図１４（ｂ）に示すように、メッセージＭ３２がネットワーク１００に入力されるものとする。ここで、メッセージＭ１３の受信時刻とメッセージＭ３２の受信時刻との差分は約0.05秒である。しかし、メッセージＭ３２の最終バイトの値は、メッセージＭ１３の最終バイトの値と同じであり、ルール２は満たされていない。したがって、攻撃検知装置１は、メッセージＭ３２を用いたネットワーク１００への攻撃を検知できる。
【０１５０】
図１５に示す例では、メッセージの送信タイミングと特定値の出現との間に相関が存在する。すなわち、ネットワーク１００に対する攻撃がないときは、図１５（ａ）に示すように、基本的には、約0.3秒周期でメッセージが送信される。そして、メッセージの送信周期が変化するときは、先頭バイト（または、先頭ビット）に特定値が出現する。たとえば、メッセージＭ１１〜Ｍ１３は、約0.3秒周期で送信されており、その先頭バイトの値はそれぞれ「00」である。そして、メッセージＭ１３から約0.1秒後にメッセージＭ１４が送信されたとき、メッセージＭ１４の先頭バイトに「80」が出現（或いは、先頭ビットに「１」が出現）している。この場合、以下の検知ルールが作成される。
ルール１：メッセージの送信周期が約0.3秒であるときは、先頭バイトに「00」が出現（或いは、先頭ビットに「０」が出現）する。
ルール２：メッセージの送信周期が約0.3秒でないときは、先頭バイトに「80」が出現（或いは、先頭ビットに「１」が出現）する。
【０１５１】
このケースにおいて、図１５（ｂ）に示すように、メッセージＭ３３がネットワーク１００に入力されるものとする。ここで、メッセージＭ１３の受信時刻とメッセージＭ３３の受信時刻との差分は約0.05秒である。しかし、メッセージＭ３３の先頭バイトまたは先頭ビットに特定値は出現しておらず、ルール２は満たされていない。したがって、攻撃検知装置１は、メッセージＭ３３を用いたネットワーク１００への攻撃を検知できる。
【０１５２】
図１６に示す例では、図１３〜図１５に示す規則性が組み合わされている。すなわち、ネットワーク１００に対する攻撃がないときは、図１６（ａ）に示すように、ＩＤ毎に、約0.3秒周期でメッセージが送信される。ＩＤ＝0x100を含むメッセージが送信されると、約0.1秒後に、ＩＤ＝0x200を含むメッセージが送信される。ＩＤ＝0x200を含むメッセージにおいて、メッセージの送信周期が変化するときは、先頭バイトに「00」が出現（先頭ビットに「０」が出現）し、且つ、直前の受信メッセージに対して最終バイトの値が変化する。この場合、以下の検知ルールが作成される。
ルール１：ＩＤ＝0x100を含むメッセージが送信されると、約0.1秒後にＩＤ＝0x200を含むメッセージが送信される。
ルール２：メッセージの送信周期が約0.3秒でないときは、先頭バイトに「00」が出現（或いは、先頭ビットに「０」が出現）する。
ルール３：ＩＤ＝0x200を含むメッセージの送信周期が約0.3秒でないときは、最終バイトの値は、直前のメッセージの最終バイトの値に対して変化する。
【０１５３】
このケースにおいて、図１６（ｂ）に示すように、ＩＤ＝0x200を含むメッセージＭ３４がネットワーク１００に入力されるものとする。ここで、メッセージＭ２４の受信時刻とメッセージＭ３４の受信時刻との差分は約0.05秒である。また、メッセージＭ３４の先頭バイトに「00」が出現（或いは、先頭ビットに「０」が出現）している。さらに、メッセージＭ３４の最終バイトの値は、直前のメッセージの最終バイトの値に対して変化している。よって、ルール２およびルール３は満たされている。しかし、メッセージＭ３４の受信時刻の約0.1秒前に、ＩＤ＝0x100を含むメッセージが攻撃検知装置１に到着していない。すなわち、ルール１は満たされていない。したがって、攻撃検知装置１は、メッセージＭ３４を用いたネットワーク１００への攻撃を検知できる。
【０１５４】
このように、攻撃検知装置１は、メッセージ処理装置４により作成された検知ルールを利用してネットワーク１００への攻撃を検知する。ここで、メッセージ処理装置４は、上述したように、互いに関連するビット列を精度よく発見できるので、正確な検知ルールを作成できる。したがって、攻撃検知装置１は、ネットワーク１００への攻撃を精度よく検知できる。
【０１５５】
上述の実施例を含む実施形態に関し、さらに下記の付記を開示する。
（付記１）
ネットワーク内で送信される識別情報を含むメッセージを処理するメッセージ処理装置であって、
所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントするカウント部と、
前記カウント部によりカウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出する抽出部と、
前記第１のビット列において前記所定の事象の中の第１の事象が発生したタイミングと、前記第２のビット列において前記所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する判定部と、
を備えるメッセージ処理装置。
（付記２）
前記抽出部は、第１の識別情報を含むメッセージから前記第１のビット列を抽出し、前記第１の識別情報と異なる第２の識別情報を含むメッセージから前記第２のビット列を抽出する
ことを特徴とする付記１に記載のメッセージ処理装置。
（付記３）
前記所定の事象は、ビット列に特定値が出現すること、又は、ビット列の値が直前の受信メッセージ中の対応するビット列の値に対して変化することであり、
前記カウント部は、受信メッセージに含まれる識別情報ごとに、各ビット列について、特定値が出現する回数を表す出現回数または直前の受信メッセージ中の対応するビット列に対して値が変化する回数を表す変化回数をカウントする
ことを特徴とする付記１または２に記載のメッセージ処理装置。
（付記４）
前記カウント部は、単一ビットのビット列から順番にビット長を１ビットずつ長くしながら各ビット列の変化回数をカウントするときに、前記モニタ期間における変化回数がゼロであるビット列を含むビット列については、カウント動作を行わない
ことを特徴とする付記３に記載のメッセージ処理装置。
（付記５）
前記カウント部は、単一ビットのビット列から順番にビット長を１ビットずつ長くしながら各ビット列の変化回数をカウントするときに、前記モニタ期間における変化回数が所定数より多いビット列を含むビット列については、カウント動作を行わない
ことを特徴とする付記４に記載のメッセージ処理装置。
（付記６）
前記カウント部は、
前記メッセージのデータ領域の長さと同じ長さのビット列において出現した値ごとにそれぞれ出現回数をカウントし、
前記値ごとの出現回数に基づいて、前記データ領域の長さより短い各ビット列において特定値が出現した回数を計算する
ことを特徴とする付記３に記載のメッセージ処理装置。
（付記７）
前記判定部は、前記第１のビット列において最初に前記第１の事象が発生したタイミングと、前記第２のビット列において最初に前記第２の事象が発生したタイミングとの差分に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
ことを特徴とする付記１〜６のいずれか１つに記載のメッセージ処理装置。
（付記８）
前記判定部は、前記差分の絶対値または前記差分の自乗値が第１の閾値以上であるときは、前記第１のビット列と前記第２のビット列との間に関連性がないと判定する
ことを特徴とする付記７に記載のメッセージ処理装置。
（付記９）
前記判定部は、前記第１のビット列において前記第１の事象が発生したタイミングから次に前記第１の事象が発生したタイミングまでの時間間隔と、前記第２のビット列において前記第２の事象が発生したタイミングから次に前記第２の事象が発生したタイミングまでの時間間隔との差分に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
ことを特徴とする付記１〜８のいずれか１つに記載のメッセージ処理装置。
（付記１０）
前記判定部は、前記差分の絶対値または前記差分の自乗値が第２の閾値以上であるときは、前記第１のビット列と前記第２のビット列との間に関連性がないと判定する
ことを特徴とする付記９に記載のメッセージ処理装置。
（付記１１）
前記判定部は、前記モニタ期間内での前記差分の総和が第３の閾値以上であるときは、前記第１のビット列と前記第２のビット列との間に関連性がないと判定する
ことを特徴とする付記９に記載のメッセージ処理装置。
（付記１２）
ネットワーク内で送信される識別情報を含むメッセージを処理するメッセージ処理方法であって、
所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントし、
カウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出し、
前記第１のビット列において前記所定の事象の中の第１の事象が発生したタイミングと、前記第２のビット列において前記所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
ことを特徴とするメッセージ処理方法。
（付記１３）
ネットワーク内で送信される識別情報を含むメッセージを処理するメッセージ処理装置において、
所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、所定の事象が発生した回数をカウントし、
カウントされた回数が互いに一致する第１のビット列および第２のビット列を抽出し、
前記第１のビット列において前記所定の事象の中の第１の事象が発生したタイミングと、前記第２のビット列において前記所定の事象の中の第２の事象が発生したタイミングとの近似性に基づいて、前記第１のビット列と前記第２のビット列との間の関連性を判定する
処理をプロセッサに実行させるメッセージ処理プログラム。
（付記１４）
識別情報を含むメッセージが送信されるネットワークへの攻撃を検知する攻撃検知装置であって、
第１のビット列において第１の事象が発生することと第２のビット列において第２の事象が発生することとの間の関連性に基づいて、前記ネットワークへの攻撃を検知する検知部を備える攻撃検知装置。
（付記１５）
所定のモニタ期間内に受信したメッセージに含まれる識別情報ごとに、メッセージ中の単一ビットまたは連続する複数ビットで定義されるビット列それぞれについて、前記第１の事象および前記第２の事象が発生した回数をそれぞれカウントするカウント部と、
前記カウント部によりカウントされた回数が互いに一致する前記第１のビット列および前記第２のビット列を抽出する抽出部と、
前記第１のビット列において前記第１の事象が発生したタイミングと、前記第２のビット列において前記第２の事象が発生したタイミングとが互いに近似しているときに、前記第１のビット列において前記第１の事象が発生することと前記第２のビット列において前記第２の事象が発生することとの間に関連性が存在すると判定する判定部と、
をさらに備え、
前記検知部は、前記第１のビット列において前記第１の事象が発生することと前記第２のビット列において前記第２の事象が発生することとの間の関連性に基づいて、前記ネットワークへの攻撃を検知する
ことを特徴とする付記１４に記載の攻撃検知装置。
【符号の説明】
【０１５６】
１  攻撃検知装置
２  受信部
３  ログ情報格納部
４  メッセージ処理装置
５  カウント部
６  関連性分析部
７  抽出部
８  判定部
９  関連性データベース
１０  検知部
２４  プロセッサ
１００  ネットワーク
５００  コンピュータ
【図１】
2020113893.tif 000003
【図２】
2020113893.tif 000004
【図３Ａ】
2020113893.tif 000005
【図３Ｂ】
2020113893.tif 000006
【図３Ｃ】
2020113893.tif 000007
【図４】
2020113893.tif 000008
【図５Ａ】
2020113893.tif 000009
【図５Ｂ】
2020113893.tif 000010
【図６】
2020113893.tif 000011
【図７】
2020113893.tif 000012
【図８】
2020113893.tif 000013
【図９】
2020113893.tif 000014
【図１０】
2020113893.tif 000015
【図１１】
2020113893.tif 000016
【図１２】
2020113893.tif 000017
【図１３】
2020113893.tif 000018
【図１４】
2020113893.tif 000019
【図１５】
2020113893.tif 000020
【図１６】
2020113893.tif 000021