(57)【特許請求の範囲】
【請求項１】
リクエストを行う第一装置と該リクエストに対するレスポンスを行う第二装置との間に、ネットワークを介して接続される通信装置の制御方法であって、該通信装置が、
前記第一装置および前記第二装置の各々から送信された複数のパケットから、該第一の装置と該第二の装置との間の通信における一のセッションに係るパケットを複数抽出し、
複数抽出された前記一のセッションに係るパケット各々について、前記第一装置と前記第二装置との間の通信を制御する為の制御情報に含まれるデータ内を所定の単位で区切り、
前記一のセッションに係るパケット間で、前記所定の単位で区切られたデータ同士を比較し、
比較した結果に基づいて、前記一のセッションにおける不正なネゴシエーションを通知する処理を実行することを特徴とする制御方法。
【請求項２】
リクエストを行う第一装置と該リクエストに対するレスポンスを行う第二装置との間に、ネットワークを介して接続される通信装置であって、
前記第一装置および前記第二装置の各々から送信された複数のパケットから、該第一の装置と該第二の装置との間の通信における一のセッションに係るパケットを複数抽出し、複数抽出された前記一のセッションに係るパケット各々について、前記第一装置と前記第二装置との間の通信を制御する為の制御情報に含まれるデータ内を所定の単位で区切り、前記一のセッションに係るパケット間で、前記所定の単位で区切られたデータ同士を比較する制御部と、
比較した結果に基づいて、前記一のセッションにおける不正なネゴシエーションを通知する処理を実行する通信部とを有することを特徴とする通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不正な通信（不正通信）を検知する技術に関する。
【背景技術】
【０００２】
不正通信を実現する技術として、ウェブサーバーとクライアントの間でデータをやり取りする際に使われるハイパーテキスト  トランスファー  プロトコル（ＨＴＴＰ）を利用する方法がある。ＨＴＴＰは、クライアントがウェブサーバーに通信するときに使用するため、不正通信を防ぐシステムであるファイアウォールにおいても通信が許容されている。このため、ＨＴＴＰを利用することでファイアウォールを越えて不正通信が実現されるという問題がある。不正通信の手順は公開されていないため、その手順は不明である。しかし、ＨＴＴＰの内容やＨＴＴＰを含むパケットの大きさに着目して不正通信かどうかを類推することができる。以下にその根拠を説明する。
【０００３】
ＨＴＴＰを利用した正当な通信は、以下の手順で行う。先ず、クライアントとウェブサーバーは、ＨＴＴＰを利用した通信（ＨＴＴＰ通信）を行うためのセッション（仮想通信路）を確立する。次に、クライアントとウェブサーバーは、先に確立したセッションを利用してリクエスト・メッセージとレスポンス・メッセージを一つずつ交換する。このリクエスト・メッセージには、クライントがウェブサーバーに望む処理が記載されている。このレスポンス・メッセージには、先に受信したリクエスト・メッセージに応答するための情報が記載されている。最後に、クライアントとウェブサーバーは、先に確立したセッションを切断する。ＨＴＴＰには、一つのセッションで、複数のリクエスト・メッセージとレスポンス・メッセージを交換する機能（キープ  アライブ機能）を持つ仕様もある。しかし、この機能は普及していないため、リクエスト・メッセージとレスポンス・メッセージは、通常、一つのセッションで一つずつ交換される。また、リクエスト・メッセージとレスポンス・メッセージは、ＨＴＴＰに基づいて記載される。ＨＴＴＰにおいて、両者は全く別のものとして定義されている。このため、両者に同じ内容のデータが含まれることや、両者を含むパケットが同じ大きさになることは通常有り得ない。このため、ＨＴＴＰを利用した正当な通信は、一つのセッションで同じ内容のデータや同じ大きさのパケットが交換されることは通常有り得ない。
【０００４】
一方、ＨＴＴＰを利用した不正な通信は、以下の手順で行う。この手順は、既存の通信プロトコルや通信ログから類推したものである。先ず、クライアントとウェブサーバーは、ＨＴＴＰを利用した通信（ＨＴＴＰ通信）を行うためのセッション（仮想通信路）を確立する。次に、クライアントとウェブサーバーは、先に確立したセッションを利用して不正通信を行うためのネゴシエーションや不正通信を維持するためのハートビートを交換する。ここでいうネゴシエーションとは、先に確立したセッション上に不正通信用セッションを確立する処理を指す。この処理は、複数回の問いかけと返答によりを行う。ネゴシエーションは、ＨＴＴＰに係る領域に不正通信を実現する不正通信情報を設定したパケットを用いて行われる。不正通信情報は、不正通信を制御するための制御情報を含む。この制御情報は、制御動作毎に存在し、それぞれの制御情報は、同じ内容のデータが使用される。また、ここでいうハートビートとは、一定期間パケットのやり取りがなかった場合に切断されるセッションを維持するための処理を指す。ハートビートもＨＴＴＰに係る領域に不正通信を実現する不正通信情報を設定したパケットを用いて行われる。ハートビート用のパケットは、同じ大きさである。最後に、クライアントとウェブサーバーは、先に確立したセッションを切断する。
【０００５】
また、不正通信を検知する技術として下記のものがある。
【特許文献１】特開２００６−２７９９３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
受信したパケットから類推される特徴に基づいて不正通信を検知する。
【課題を解決するための手段】
【０００７】
上記課題を解決するための第一の手段として、リクエストを行う第一装置と該リクエストに対するレスポンスを行う第二装置との間に、ネットワークを介して接続される通信装置の制御方法であって、該通信装置が、前記第一装置および前記第二装置の各々から送信された複数のパケットから、該第一の装置と該第二の装置との間の通信における一のセッションに係るパケットを複数抽出し、複数抽出された前記一のセッションに係るパケット各々について、前記第一装置と前記第二装置との間の通信を制御する為の制御情報に含まれるデータ内を所定の単位で区切り、前記一のセッションに係るパケット間で、前記所定の単位で区切られたデータ同士を比較し、比較した結果に基づいて、前記一のセッションにおける不正なネゴシエーションを通知する処理を実行することを特徴とする制御方法を提供する。 
【０００８】
上記課題を解決するための第二の手段として、リクエストを行う第一装置と該リクエストに対するレスポンスを行う第二装置との間に、ネットワークを介して接続される通信装置であって、前記第一装置および前記第二装置の各々から送信された複数のパケットから、該第一の装置と該第二の装置との間の通信における一のセッションに係るパケットを複数抽出し、複数抽出された前記一のセッションに係るパケット各々について、前記第一装置と前記第二装置との間の通信を制御する為の制御情報に含まれるデータ内を所定の単位で区切り、前記一のセッションに係るパケット間で、前記所定の単位で区切られたデータ同士を比較する制御部と、比較した結果に基づいて、前記一のセッションにおける不正なネゴシエーションを通知する処理を実行する通信部とを有することを特徴とする通信装置を提供する。 
【発明の効果】
【００１２】
受信したパケットや受信したパケットを記憶した通信ログから類推される特徴に基づいて不正通信を検知できる効果がある。また、検知した不正通信に係る情報をネットワークの管理者に通知できる効果がある。
【発明を実施するための最良の形態】
【００１３】
以下に図面を用いて本発明の実施形態を説明する。先ず、本実施例が対象とする不正通信の例を説明し、その後、その不正通信を検知する方法を具体的に説明する。
【００１４】
[１．不正通信の例]
図１は、本実施形態が対象とする不正通信の例である。不正通信は、以下の手順で実現される。
【００１５】
（１）クライアント１とサーバー６は、ＨＴＴＰを利用した通信（ＨＴＴＰ通信）を行うためのセッション（仮想通信路）を確立する。セッションの確立は、クライアント１とサーバー６の間で、通信を開始することを表すＴＣＰフラグ（ＳＹＮ）を含むパケット又は、ＴＣＰフラグ（ＳＹＮ）と送信側から受信側にデータが正しく届いたことを表すＴＣＰフラグ（ＡＣＫ）を含むパケットを交換することで実現する。
【００１６】
（２）クライアント１とサーバー６は、ネゴシエーションを行う。一般的に、ネゴシエーションとは、複数の処理単位の間で一定の手順に従って問いかけと返答により情報の交換を行い、必要な状態を確立するための対話的な処理を指す。しかし、ここでいうネゴシエーションとは、（１）で確立したＴＣＰのセッション上に不正通信用セッションを確立するためにクライアント１とサーバー６の間で行う対話的な処理を指す。このネゴシエーションは、ＨＴＴＰで使用する領域に不正通信を実現する不正通信情報を設定したパケットを用いて行われる。不正通信情報は、不正通信を制御するための制御情報を含む。この制御情報は制御動作毎に存在する。同じ制御動作の制御情報は、同じ内容である。また、その制御情報は、ＨＴＴＰで使用する領域の一部に存在する。
【００１７】
（３）クライアント１とサーバー６は、（２）で確立した不正通信用セッションを用いて不正な通信に係るデータを交換する。
【００１８】
（４）クライアント１とサーバー６は、ハートビートを行う。一般的にハートビートとは、ネットワーク上で情報処理装置が、自身が正常に稼動していることを外部に知らせる信号を指す。しかし、ここでいうハートビートとは、クライアント１とサーバー６の間で一定期間パケットのやり取りがなかった場合に切断されるセッションを維持するため処理を指す。ハートビートもＨＴＴＰで使用する領域に不正通信を実現する不正通信情報を設定したパケットを用いて行われる。ハートビートで用いられるパケットは、同じ大きさである。
【００１９】
（５）クライアント１とサーバー６は、（１）で確立したセッションを切断する。セッションの切断は、クライアント１とサーバー６の間で、通信を切断することを表すＴＣＰフラグ（ＦＩＮ）と送信側から受信側にデータが正しく届いたことを表すＴＣＰフラグ（ＡＣＫ）を含むパケットを交換することで実現する。
【００２０】
上述した不正通信の手順は、受信したパケットや受信したパケットを記憶した通信ログに基づいて類推したものである。従って、上述の（２）で説明したネゴシエーションや（４）で説明したハートビートを検出できる通信装置をクライアント１とサーバー６の間に設置することで不正通信を見つけることができる。
【００２１】
[２．全体構成図]
図２は、本発明の実施形態に係る通信システムの全体構成図である。本実施形態に係る通信システムは、サーバー１とインターネット２、ファイアウォール３、イントラネット４、プロクシ５、クライアント６、通信装置７、通信監視装置８で構成される。
【００２２】
サーバー１は、ＨＴＴＰに対応した情報処理装置であり、不正通信を試みる利用者が操作するクライント６の通信先となる装置である。サーバー１は、第一装置と称することもある。インターネット２は、個々の情報処理装置を結んで情報をやり取りする世界的規模のネットワークシステムである。ファイアウォール３は、不正なパケットがイントラネット４に侵入することを防ぐシステムである。イントラネット４は、インターネット２の標準技術を用いて企業内に構築されたネットワークである。プロクシ５は、直接インターネット２に接続できないイントラネット４に接続されている情報処理装置に代わって、「代理」としてインターネット２との接続を行なう情報処理装置である。クライアント６は、ＨＴＴＰに対応した情報処理装置であり、不正通信を試みる利用者が操作する装置である。クライアント６は、第二装置と称することもある。通信装置７は、サーバー１とクライアント６の間で行われる不正通信を検知するための装置である。通信装置７は、上述のネゴシエーションやハートビートを検知した場合、その旨を表す不正通信メッセージを通信監視装置８に通知する。通信監視装置８は、通信装置７が送信した不正通信通知を受信するための装置である。
【００２３】
[３．通信装置のハードウェア構成図]
図３は、通信装置７のハードウェア構成の一例を示すブロック図である。通信装置７は、セントラル  プロセッシング  ユニット（ＣＰＵ）７１とランダム  アクセス  メモリー（ＲＡＭ）７２、リード  オンリー  メモリー（ＲＯＭ）７３、通信部７４、記憶領域７５で構成する。
【００２４】
ＣＰＵ７１は、通信プログラム７５１を実行する装置である。ＲＡＭ７２は、通信プログラム７５１を実行するためのデータや通信プログラム７５１が一時的に必要とするデータを記憶する装置である。上述の一時的に必要とするデータを記憶する領域は、一時記憶領域と称することがある。ＲＯＭ７３は、一度書き込まれたデータを記憶する装置である。ＲＯＭ７３は、通信プログラム７５１を記憶している場合もある。通信部７４は、サーバー１やファイアウォール３、プロクシ５、クライアント６、通信監視装置８との通信を担当する装置である。通信部７４は、インターネット２の標準技術であるトランスミッション  コントロール  プロトコル（ＴＣＰ）／インターネット  プロトコル（ＩＰ）やＨＴＴＰなどのプロトコルに対応したものである。記憶領域７５は、通信プログラム７５１とネゴシエーション検知用データ７５２、ハートビート検知用データ７５３を記憶する領域である。記憶領域７５は、図示していないハードディスクなどの外部記憶装置の中に存在する領域である。通信プログラム７５１は、通信ログから不正通信に係るパケットを検知するように通信装置７を動作させる命令を記述したものである。ネゴシエーション検知用データ７５２は、上述のネゴシエーションを検知するために通信プログラム７５１が使用するデータである。ハートビート検知用データ７５３は、上述のハートビートを検知するために通信プログラム７５１が使用するデータである。
【００２５】
[４．ネゴシエーション検知用データの構成図]
図４は、図３のネゴシエーション検知用データ７５２を表す。ネゴシエーション検知用データ７５２は、ＣＰＵ７１が通信プログラム７５１を実行するときにＲＡＭ７２上に生成する。ネゴシエーション検知用データ７５２の構成要素は、先頭位置７５２１とデータ列７５２２、出現回数７５２３である。先頭位置７５２１は、通信装置７が通信ログに含まれるパケットから上述のネゴシエーションの特徴を表すデータを抽出する位置を表す。データ列７５２２は、通信装置７が通信ログに含まれるパケットから抽出した上述のネゴシエーションの特徴を表すデータを表す。データ列７５２２の大きさは、通信装置７の製造元又は利用者が任意に設定できる。出現回数７５２３は、通信装置７が、通信ログに含まれるパケット中に存在するデータ列７５２２と同じデータ列を検出した回数を表す。
【００２６】
[５．ハートビート検知用データの構成図]
図５は、図３のハートビート検知用データ７５３を表す。ハートビート検知用データ７５３は、ＣＰＵ７１が通信プログラム７５１を実行するときにＲＡＭ７２上に生成する。ハートビート検知用データ７５３の構成要素は、データサイズ７５３１と出現回数７５３２である。データサイズ７５３１は、通信装置７が通信ログに含まれるパケットから抽出した一つのパケットの大きさを表す。出現回数７５３２は、通信装置７が、通信ログに含まれるパケット中に存在する同じ大きさのパケットを検出した回数を表す。
【００２７】
[６．パケット構成図]
図６は、通信装置７がサーバー１又はファイアウォール３、プロクシ５、クライアント６から受信するパケットを表す。その情報要素は、ディーエスティ  マック４１とエスアールシー  マック４２、タイプ４３、バージョン＋ヘッダーレングス４４、テーオーエス４５、データレングス４６、アイディー４７、フラグメント４８、ティーティーエル４９、プロトコル５０、ヘッダーチェックサム５１、エスアールシーアイピー５２、ディーエスティーアイピー５３、エスアールシーポート５４、ディーエスティーポート５５、シーケンスナンバー５６、アックナンバー５７、データオフセット＋テーシーピーフラグ５８、ウィンドウサイズ５９、チェックサム６０、アージェントポインター６１、ＨＴＴＰメッセージ６２である。ディーエスティ  マック４１からタイプ４３は、ＭＡＣヘッダーを表す。バージョン＋ヘッダーレングス４４からディーエスティーアイピー５３は、ＩＰヘッダーを表す。エスアールシーポート５４からアージェントポインター６１は、ＴＣＰヘッダーを表す。
【００２８】
ディーエスティ  マック４１は、このパケットの宛先のＭＡＣアドレスを表す。ここでいうＭＡＣとは、メディア  アクセス  コントロールを指す。エスアールシー  マック４２は、このパケットの送信元のＭＡＣアドレスを表す。タイプ４３は、プロトコルの種類を表す。バージョン＋ヘッダーレングス４４は、ＩＰプロトコルのバージョンとＩＰヘッダーの長さを表す。テーオーエス４５は、パケット送信時の優先度を表す。データレングス４６は、パケット全体の長さを表す。データレングス４６は、パケットの長さを表す長さ情報である。アイディー４７は、個々のパケットを識別する番号を表す。フラグメント４８は、パケットが分割されたものかどうかを表す。ティーティーエル４９は、パケットの生存時間を表す。プロトコル５０は、プロトコルの番号を表す。ヘッダーチェックサム５１は、誤り検出用のデータを表す。但し、ヘッダーチェックサム５１は現在使用されていない。エスアールシーアイピー５２は、このパケットの送信元のＩＰアドレスを表す。ディーエスティーアイピー５３は、このパケットの宛先のＩＰアドレスを表す。エスアールシーポート５４は、このパケットの送信元のポート番号を表す。ディーエスティーポート５５は、このパケットの宛先のポート番号を表す。エスアールシーアイピー５２及びディーエスティーアイピー５３、エスアールシーポート５４、ディーエスティーポート５５は、識別情報になる。シーケンスナンバー５６は、受信側が送信データを識別する番号を表す。アックナンバー５７は、送信側が受信データを識別する番号を表す。データオフセット＋テーシーピーフラグ５８は、データが格納されている位置と通信制御情報（テーシーピーフラグ）を表す。通信制御情報は、セッションを確立する確立情報又はセッションを切断する切断情報になる。ここでいうデータとは、ＨＴＴＰメッセージ６２を指す。また、通信制御情報とは、通信確立を表す確立情報「ＳＹＮ」や受信側からの応答を表す応答情報「ＡＣＫ」、強制終了を表す強制終了情報「ＲＳＴ」、切断を表す切断情報「ＦＩＮ」などを指す。ウィンドウサイズ５９は、受信確認を待たずにまとめて送信可能なデータ量を表す。チェックサム６０は、誤りの有無を検査するためのデータを表す。アージェントポインター６１は、緊急に処理すべきデータの位置を表す。ＨＴＴＰメッセージ６２は、ＨＴＴＰで使用するデータを表す。抽出ＨＴＴＰメッセージ６３から６５は、ネゴシエーションを検知するために使用するＨＴＴＰメッセージ６３の一部分を指す。
【００２９】
[７．不正通信検知処理のフローチャート（その１）]
図７は、通信装置７が通信ログから上述のネゴシエーションを検知する手順を表したフローチャートである。通信装置７のＣＰＵ７１は、通信プログラム７５１を実行することにより、ネゴシエーションを検知する手順を実現する。
【００３０】
Ｓ３０１において、ＣＰＵ７１は、通信ログを取得する。ここでいう通信ログとは、通信装置７がサーバー１又はファイアウォール３、プロクシ５、クライアント６のいずれかから受信したパケットをそのパケットを受信した日時と共に記憶領域７５に蓄積したものである。上述の日時は、図示していないが通信装置７が持つ時計管理機能から取得する。この通信ログの取得契機は、通信装置７の製造元又は利用者が任意に設定できる。ＣＰＵ７１は、記憶領域７５から通信ログを取得し、取得した通信ログを一時記憶領域に格納する。
【００３１】
Ｓ３０２において、ＣＰＵ７１は、Ｓ３０１で一時記憶領域に格納した通信ログから同一の通信先を持つパケットを抽出する。この抽出は、ＣＰＵ７１が、通信ログ中のそれぞれのパケットが持つエスアールシーアイピー５２とディーエスティーアイピー５３、エスアールシーポート５４、ディーエスティーポート５５を調べて、同一のエスアールシーアイピー５２とディーエスティーアイピー５３、エスアールシーポート５４、ディーエスティーポート５５を持つパケットを抜き出す。そして、ＣＰＵ７１は、抜き出したパケットを一時記憶領域に格納する。
【００３２】
Ｓ３０３において、ＣＰＵ７１は、Ｓ３０２で抽出した同一の通信先を持つパケットから同一のセッションに関係するパケットを抽出する。この抽出は、ＣＰＵ７１が、同一の通信先を持つそれぞれのパケットが持つテーシーピーフラグ５８を調べて、セッションを確立する確立情報「ＳＹＮ」又はセッションを強制終了する強制終了情報「ＲＳＴ」、セッションを切断する切断情報「ＦＩＮ」を持つパケットを見つける。そして、ＣＰＵ７１が、同一の通信先を持つそれぞれのパケットからテーシーピーフラグが確立情報「ＳＹＮ」のパケットと、テーシーピーフラグが強制終了情報「ＲＳＴ」又は切断情報「ＦＩＮ」のパケットの間に存在するパケットを抜き出す。そして、ＣＰＵ７１は、抜き出したパケットを一時記憶領域に格納する。また、抜き出したパケットの数をパケット数として一時
記憶領域に格納する。
【００３３】
Ｓ３０４において、ＣＰＵ７１は、Ｓ３０３で抽出した同一のセッションに関係するパケットからＨＴＴＰメッセージを抽出する。この抽出は、ＣＰＵ７１が、ＨＴＴＰメッセージ６２の開始アドレスと最終アドレスを算出し、開始アドレスから終了アドレスの間のデータを抜き出す。開始アドレスは、１４バイトにバージョン＋ヘッダーレングス４４とデータオフセット＋テーシーピーフラグ５８と１バイトを加えて算出する。終了アドレスは、１４バイトにデータレングス４６を加えて算出する。１４バイトは、ディーエスティ  マック４１とエスアールシー  マック４２、タイプ４３を合計した長さである。そして、ＣＰＵ７１は、抜き出したパケットを一時記憶領域に格納する。
【００３４】
Ｓ３０５において、ＣＰＵ７１は、Ｓ３０４で抽出したＨＴＴＰメッセージ６２から単位データを抽出する。単位データとは、ネゴシエーションの特徴を表すデータである。この単位データは、通信装置７の製造元又は利用者が任意に設定できる。この抽出は、単位データを抜き出す位置を変えながら行う。単位データを抜き出す位置の変更は、抽出位置情報を用いて行う。抽出位置情報は、通信装置７の製造元又は利用者が任意に設定できる。初めてこの処理を行う場合、ＣＰＵ７１は、ＨＴＴＰメッセージ６２の先頭から単位データ分の情報を抜き出す。抽出ＨＴＴＰメッセージ６３は、ＣＰＵ７１がＨＴＴＰメッセージ６２の先頭から単位データを３バイトとして抜き出したデータを表す。そして、ＣＰＵ７１が、抜き出したデータを一時記憶領域に格納する。また、ＣＰＵ７１は、単位データを抜き出した位置を表す先頭位置を一時記憶領域に格納する。ここでは、先頭位置として「０」を一時記憶領域に格納する。二回目にこの処理を行う場合、ＣＰＵ７１は、ＨＴＴＰメッセージ６２の先頭に抽出位置情報を加算した位置から単位データ分の情報を抜き出す。そして、ＣＰＵ７１が、抜き出したデータを一時記憶領域に格納する。また、ＣＰＵ７１は、単位データを抜き出した位置を表す先頭位置を一時記憶領域に格納する。抽出ＨＴＴＰメッセージ６４は、ＣＰＵ７１が単位データを３バイト、抽出位置情報を１バイトとして二回目に抜き出したデータを表す。ここでは、先頭位置として「１」を一時記憶領域に格納する。以降この処理を行う場合、ＣＰＵ７１は、ＨＴＴＰメッセージ６２の先頭に先に格納した先頭情報に更に抽出位置情報を加算した位置から単位データ分の情報を抜き出す。そして、ＣＰＵ７１が、抜き出したデータを一時記憶領域に格納する。抽出ＨＴＴＰメッセージ６５は、ＣＰＵ７１が単位データを３バイト、抽出位置情報を１バイトとして三回目に抜き出したデータを表す。また、ＣＰＵ７１は、単位データを抜き出した位置を表す先頭位置を一時記憶領域に格納する。ここでは、先頭位置として「２」を一時記憶領域に格納する。
【００３５】
Ｓ３０６において、ＣＰＵ７１は、Ｓ３０５で抽出した単位データをネゴシエーション検知用データ７５２に格納する。この格納は、一時記憶領域中の先頭位置及び単位データと、ネゴシエーション検知用データ７５２を比較した結果に基づいて行う。初めてこの処理を行う場合、ＣＰＵ７１は、一時記憶領域中の先頭位置及び単位データをネゴシエーション検知用データ７５２中の先頭位置７５２１とデータ列７５２２に格納する。そして、ＣＰＵ７１は、上述の先頭位置及び単位データを格納した先頭位置７５２１とデータ列７５２２に対応する出現回数７５２３に「１」を格納する。二回目以降にこの処理を行う場合、ＣＰＵ７１は、一時記憶領域中の先頭位置及び単位データと、ネゴシエーション検知用データ７５２中の先頭位置７５２１とデータ列７５２２を比較する。この比較の結果、一時記憶領域中の先頭位置及び単位データと同じ組み合わせの先頭位置７５２１及びデータ列７５２２が存在していた場合、ＣＰＵ７１は、上述の同じ組み合わせの先頭位置７５２１及びデータ列７５２２に対応する出現回数７５２３に「１」を加算した値を格納する。この比較の結果、一時記憶領域中の先頭位置及び単位データと同じ組み合わせの先頭位置７５２１及びデータ列７５２２が存在していない場合、ＣＰＵ７１は、一時記憶領域中の先頭位置及び単位データをネゴシエーション検知用データ７５２中の先頭位置７５２１とデータ列７５２２に格納する。そして、ＣＰＵ７１は、上述の先頭位置及び単位データを格納した先頭位置７５２１とデータ列７５２２に対応する出現回数７５２３に「１」を格納する。
【００３６】
Ｓ３０７において、ＣＰＵ７１は、ネゴシエーション検知用データ７５２に格納する対象となる対象データがあるかどうかを判別する。ＣＰＵ７１は、Ｓ３０４で算出した最終アドレスから開始アドレスを引いたＨＴＴＰメッセージ長を算出する。そして、ＣＰＵ７１は、上述の「単位データ」の値に直前のＳ３０５で一時記憶領域に格納した「先頭位置」の値を足した格納済みデータ長として算出する。更に、ＣＰＵ７１が格納済みデータの長さがＨＴＴＰメッセージ６２の長さを超過したかどうかを判別する。この判別の結果、格納済みデータ長がＨＴＴＰメッセージ長を超過していた場合、ＣＰＵ７１はＳ３０３で格納したパケット数を一つ減算した後、Ｓ３０８の処理を行う。この判別の結果、格納済みデータ長がＨＴＴＰメッセージ長を超過していなかった場合、ＣＰＵ７１はＳ３０５の処理を行う。
【００３７】
Ｓ３０８において、ＣＰＵ７１は、未処理のＨＴＴＰメッセージがあるかどうかを判別する。この判別は、ＣＰＵ７１が一時記憶領域中のパケット数が０かどうかを判別する。この判別の結果、パケット数が０の場合、ＣＰＵ７１はＳ３０９の処理を行う。この判別の結果、パケット数が０でない場合、Ｓ３０５の処理を行う。
【００３８】
Ｓ３０９において、ＣＰＵ７１は、Ｓ３０６で比較したデータの中の出現回数が閾値かどうかを判別する。この閾値は図示していないが、記憶領域７５に存在する。また、この閾値は、通信装置７の製造元又は利用者が任意に設定できる。閾値は例えば２以上の値である。上述の通り、ＨＴＴＰを利用した正当な通信は、一つのセッションで同じ内容のデータや同じ大きさのパケットが交換されることは通常有り得ない。このため、出現回数が２以上の値である場合、それを含むパケットは、ＨＴＴＰを利用した不正な通信に関連する。しかし、まれに再送を行う通信システムがある。これに対応したのが、閾値が例えば３である。この値は、再送回数の最小単位である２よりも１大きい数を意味する。閾値３は所定の再送回数より大きい数である。再送回数は通信システムの仕様により決定される。このため、再送回数は一概には決定できない。しかし、閾値に３を設定した場合、通信システムの仕様により発生した一回の再送を不正として検出することを防ぐ効果がある。この判別の結果、出現回数が閾値以上の場合、Ｓ３１０の処理を行う。この判定の結果、出現回数が閾値未満の場合、処理を終了する。
【００３９】
Ｓ３１０において、ＣＰＵ７１は、不正通信を意味するメッセージを含むパケットを生成し、そのパケットを通信監視装置８に送信する。ＣＰＵ７１は、通信ログからセッション開始時間と、宛先ＵＲＬ、クライアントＩＰアドレスを抽出する。セッション開始時間は、閾値以上の出現回数を検知したパケットのセッションを確立した日時である。この日時は、閾値以上の出現回数を検知したパケットの直前のテーシーピーフラグに確立情報「ＳＹＮ」が設定されたパケットを受信した日時である。宛先ＵＲＬとクライアントＩＰアドレスは、閾値以上の出現回数を検知したパケットのＨＴＴＰメッセージ６２の中に存在する。ＣＰＵ７１は、検知理由として設定する「同じバイト列を含む通信が繰り返される」というデータを生成する。ＣＰＵ７１は、記憶領域７５に格納されている通信監視装置８のＩＰアドレスを抽出する。ＣＰＵ７１は、セッション開始時間と、宛先ＵＲＬ、クライアントＩＰアドレス、検知理由を含むパケットを生成する。ＣＰＵ７１は、生成したパケットを通信監視装置８に向けて送信する。
【００４０】
図９は、不正な通信を意味するメッセージの例を表す。セッション開始時間４１は、閾値以上の出現回数を検知したパケットの直前に存在するテーシーピーフラグに確立情報「ＳＹＮ」が設定されたパケットを受信した日時である。宛先ＵＲＬ４２は、閾値以上の出現回数を検知したパケットのＨＴＴＰメッセージ６２の中に存在する宛先ＵＲＬを表す。クライアントＩＰアドレス４３は、閾値以上の出現回数を検知したパケットのＨＴＴＰメッセージ６２の中に存在するクライアントＩＰアドレスを表す。
【００４１】
[８．不正通信検知処理のフローチャート（その２）]
図８は、通信装置７が通信ログから上述のハートビートを検知する手順を表したフローチャートである。通信装置７のＣＰＵ７１は、通信プログラム７５１を実行することにより、ハートビートを検知する手順を実現する。
【００４２】
Ｓ３２１からＳ３２３までの処理は、Ｓ３０１からＳ３０３までの処理と同じである。
【００４３】
Ｓ３２５において、ＣＰＵ７１は、Ｓ３２３で抽出した同一のセッションに関係するパケットからパケットの大きさを抽出する。ＣＰＵ７１は、同一のセッションに関係するパケットからデータレングス４６を抜き出す。そして、抜き出したデータレングス４６を一時記憶領域に格納する。
【００４４】
Ｓ３２６において、ＣＰＵ７１は、Ｓ３２５で抽出したデータレングス４６をハートビート検知用データ７５３に格納する。この格納は、一時記憶領域中のデータレングス４６と、ハートビート検知用データ７５３を比較した結果に基づいて行う。初めてこの処理を行う場合、ＣＰＵ７１は、一時記憶領域中のデータレングス４６をハートビート検知用データ７５３中のデータサイズ７５３１に格納する。そして、ＣＰＵ７１は、上述のデータレングス４６を格納したデータサイズ７５３１に対応する出現回数７５２３に「１」を格納する。二回目以降にこの処理を行う場合、ＣＰＵ７１は、一時記憶領域中のデータレングス４６と、ハートビート検知用データ７５３中のデータサイズ７５３１を比較する。この比較の結果、一時記憶領域中のデータレングス４６と同じ大きさのデータサイズ７５３１が存在していた場合、ＣＰＵ７１は、上述の同じ大きさのデータサイズ７５３１に対応する出現回数７５３３に「１」を加算した値を格納する。この比較の結果、一時記憶領域中のデータレングス４６と同じ大きさのデータサイズ７５３１が存在していない場合、ＣＰＵ７１は、一時記憶領域中のデータレングス４６をデータサイズ７５３１に格納する。そして、ＣＰＵ７１は、データレングス４６を格納したデータサイズ７５３１に対応する出現回数７５３３に「１」を格納する。最後に、ＣＰＵ７１は、Ｓ３２３で一時記憶領域７５に格納したパケット数を一つ減算する。
【００４５】
Ｓ３２８において、ＣＰＵ７１は、未処理のパケットがあるかどうかを判別する。ＣＰＵ７１は、一時記憶領域中のパケット数が０かどうかを判別する。この判別の結果、パケット数が０の場合、ＣＰＵ７１はＳ３２９の処理を行う。この判別の結果、パケット数が０でない場合、ＣＰＵ７１はＳ３２５の処理を行う。
【００４６】
Ｓ３２９において、ＣＰＵ７１は、Ｓ３２６で比較したデータの中の出現回数が閾値かどうかを判別する。この閾値は図示していないが、記憶領域７５に存在する。また、この閾値は、通信装置７の製造元又は利用者が任意に設定できる。閾値は例えば２以上の値である。上述の通り、ＨＴＴＰを利用した正当な通信は、一つのセッションで同じ内容のデータや同じ大きさのパケットが交換されることは通常有り得ない。このため、出現回数が２以上の値である場合、それを含むパケットは、ＨＴＴＰを利用した不正な通信に関連する。しかし、まれに再送を行う通信システムがある。これに対応したのが、閾値が例えば３である。この値は、再送回数の最小単位である２よりも１大きい数を意味する。閾値３は所定の再送回数より大きい数である。再送回数は通信システムの仕様により決定される。このため、再送回数は一概には決定できない。しかし、閾値に３を設定した場合、通信システムの仕様により発生した一回の再送を不正として検出することを防ぐ効果がある。この判別の結果、出現回数が閾値以上の場合、Ｓ３３０の処理を行う。この判定の結果、出現回数が閾値未満の場合、処理を終了する。
【００４７】
Ｓ３３０において、ＣＰＵ７１は、不正通信を意味するメッセージを生成し、通信監視装置８に通知する。この処理は、Ｓ３１０と同等のものである。異なるのは、検知理由の内容だけである。ここでいう検知理由は、同じバイト数の通信が繰り返されるというものである。
〔９．先頭パケットのみを抽出する方法〕
次に、不正通信か否かを判別する処理の効率を高める方法について説明する。ＣＰＵ７１は、図７の処理において、通信ログの全てのパケットの中から不正なパケットを検出する処理を実行する。具体的には、ＣＰＵ７１は、一時記憶領域の同一のセッションに関係する全てのパケットから単位データが同じパケットを検出する。
【００４８】
まず、一般的なＨＴＴＰメッセージを含むパケットを送受信する場合を説明する。パケットは、ＭＡＣヘッダー、ＴＣＰヘッダーおよびＩＰヘッダーが付加されたＨＴＴＰメッセージを有する。ＨＴＴＰメッセージは、ヘッダ情報とヘッダ情報に対応するデータ情報とからなる。ＨＴＴＰメッセージの先頭にヘッダ情報があり、ヘッダ情報の後にデータ情報がある。一つのパケットで送信できるデータ量は、クライアント１およびサーバ６の間で送信可能なサイズを決定する。送信側となるクライアント１あるいはサーバ６は、一つのＨＴＴＰメッセージのデータ量が一つのパケットで送信できるデータ量よりも大きい場合、ＨＴＴＰメッセージを分割する。送信側となるクライアント１あるいはサーバ６は、分割したＨＴＴＰメッセージを複数のパケットによって相手先に送信する。クライアント１あるいはサーバ６が、ＨＴＴＰメッセージを複数のパケットに分割した場合、ＨＴＴＰメッセージのヘッダ情報は複数のパケットの内、最初のパケットに含まれる。
【００４９】
一方、一つの長い不正通信データを送信する場合を説明する。不正通信データは、ＨＴＴＰメッセージではない、不正通信の情報であるとする。不正通信データは、例えば、アプリケーションを実行するための制御情報を有する。制御情報は、不正通信データの先頭付近にある場合が多い。不正通信データの先頭付近は、分割された複数のパケットの内、最初のパケットに含まれる。よって、単位データが同じになるか否かを検出する対象は、分割された複数のパケットの内、最初のパケットのみでよい。以降の説明では、通信データを複数のＴＣＰ／ＩＰパケットに分割したときの最初のパケットを先頭パケットとする。先頭パケットは、ヘッダ情報を有するため、単位データを取得する対象となる。
【００５０】
ここで、先頭パケットを判別する原理を説明する。先頭パケットは、アックナンバー５７が増加し、通信データを有するパケットである。通信データはＨＴＴＰメッセージの領域のデータである。クライアント１とサーバ６との間でＴＣＰの接続が確立されると、それらの間にはストリーム型の通信路が形成される。ストリーム型とは、パケットが送信された順番に受信側が組み立てることができる方式である。クライアント１あるいはサーバ６からパケットを送信すると、受信側は通信データが送信された順番に読み出すことができる。
【００５１】
ストリーム型通信を実現するため、ＴＣＰでは、セッション内の通信データの位置を特定するためのシーケンスナンバー５６およびアックナンバー５７が定義される。ＣＰＵは、シーケンスナンバー５６に基づいて通信データを整列する。クライアント１およびサーバ６のパケットのシーケンスナンバー５６は、整数値であり、以下の状態で変化する。シーケンスナンバー５６は、ＴＣＰのコネクションの開設時にランダムな初期値が与えられる。シーケンスナンバー５６は、クライアント１およびサーバ６が双方向通信の場合、２種類となる。シーケンスナンバー５６は、通信データの所定のデータ長ごとに増加する。
【００５２】
アックナンバー５７は、パケットを相手に送信する際、送信側が次に送信すべきパケットのシーケンスナンバー５６の値を示す。アックナンバー５７は、受信したパケットのシーケンスナンバー５６に受信したパケットのデータ部のバイト数を加算した値になる。アックナンバー５７を含むパケットを送信する側は、アックナンバー５７によって、通信データの受信を確認したデータ位置を、パケットを受信する側に知らせることが可能となる。例えば、通信データを送信した送信側は、所定時間経過しても送信した通信データに対応するシーケンスナンバー５６を満たすアックナンバー５７を含むパケットを検出できなかった場合に、パケットが到達しなかったと判定する。通信データを送信した送信側は、アックナンバー５７によって到達の確認ができた以降の通信データを再送する。
【００５３】
よって、先頭パケットは、通信データを有するパケットの内、アックナンバー５７が増加するパケットになる。アックナンバー５７が増加するとは、検索対象のパケット群の直前のパケットのアックナンバー５７と比較して増加することである。なお、クライアント１およびサーバ６は、双方向の通信の場合、それぞれ別のアックナンバー５７を有する。先頭パケットは、クライアント１が送信側装置であるときのパケット群およびサーバ６が送信側装置であるときのパケット群の二種類のパケット群からそれぞれ抽出する。
【００５４】
図１０は、パケットのシーケンスナンバー５６とアックナンバー５７との関係を説明する図である。図１０では、ＴＣＰ／ＩＰのコネクションの開設時にシーケンスナンバー５６およびアックナンバー５７に設定される乱数の値は「０」であるとする。乱数の値は、受信済みの意味を持つため、ＴＣＰ／ＩＰコネクション開設時に「１」が加算される。よって、シーケンスナンバー５６およびアックナンバー５７の初期値は共に「１」になる。図１０のＤＡＴＡ（データ）は、通信データを示す。通信データはＨＴＴＰメッセージのデータである。またＬＥＮは通信データの大きさを示す。
【００５５】
クライアント１は、２つのパケットＰ１およびＰ２をサーバ６に送信するとする。パケットＰ１のシーケンスナンバー５６の値は、初期値「１」になる。パケットＰ１のデータ長は「２」である。パケットＰ２のシーケンスナンバー５６は、パケットＰ１のシーケンスナンバー５６の値「１」にパケットＰ１のデータ長の大きさ「２」を加算した値「３」になる。パケットＰ１は、アックナンバー５７が増加し、データ長の大きさが「２」であるため、先頭パケットである。パケットＰ２は、パケットＰ１とアックナンバー５７が等しいため、先頭パケットではない。
【００５６】
サーバ６は、パケットＰ１およびパケットＰ２を受信した後、パケットＰ３およびパケットＰ４をクライアント１に送信するとする。パケットＰ３のアックナンバー５７の値は、パケットＰ２のシーケンスナンバー５６の値「３」にパケットＰ２のデータ長の値「１」を加算した値「４」になる。パケットＰ３のシーケンスナンバー５６は、サーバ６が初めて送信する場合、初期値「１」になる。パケットＰ３は、サーバ６がパケットＰ２までを受信したことをクライアント１に通知するためのパケットである。パケットＰ３はパケット２までを受信したことを通知するのみであるため、データを有さない。パケットＰ４のアックナンバー５７の値は、パケットＰ２のシーケンスナンバー５６の値「３」にパケットＰ２のデータ長の値「１」を加算した値「４」になる。パケットＰ４のシーケンスナンバー５６は、パケットＰ３のシーケンスナンバー５６の値「１」にパケットＰ３のデータ長の値「０」を加算した値「１」になる。パケットＰ３は、アックナンバー５７が増加するが、データ長の大きさが「０」であるため、先頭パケットではない。パケットＰ４は、データ長の大きさが「０」ではないパケットの中で、アックナンバー５７が増加する最初のパケットであるため、先頭パケットである。
【００５７】
クライアント１は、パケットＰ３およびパケットＰ４を受信した後、パケットＰ５およびパケットＰ６をサーバ６に送信するとする。パケットＰ５は、クライアント１がパケットＰ４までを受信したことをサーバ６に通知するためのパケットである。パケットＰ５は受信したことを確認するのみであるため、データを有さない。パケットＰ５のアックナンバー５７の値は、パケットＰ４のシーケンスナンバー５６の値「１」にパケットＰ４のデータ長の値「１」を加算した値「２」になる。パケットＰ５のシーケンスナンバー５６は、パケットＰ２のシーケンスナンバー５６の値「３」にパケットＰ２のデータ長の値「１」を加算した値「４」になる。パケットＰ６のアックナンバー５７の値は、パケットＰ４のシーケンスナンバー５６の値「１」にパケットＰ４のデータ長の値「１」を加算した値「２」になる。パケットＰ６のシーケンスナンバー５６は、パケットＰ５のシーケンスナンバー５６の値「４」にパケットＰ５のデータ長の値「０」を加算した値「４」になる。パケットＰ５は、アックナンバー５７が増加するが、データ長の大きさが「０」であるため、先頭パケットではない。パケットＰ６は、データ長の大きさが「０」ではないパケットの中で、アックナンバー５７が増加する最初のパケットであるため、先頭パケットである。
【００５８】
次に、先頭パケットの判別について説明する。図１１は、先頭パケットの条件を説明する図である。図１１は、図１０のセッションのパケットのシーケンスナンバー５６、アックナンバー５７、及びデータ長を時間に沿って縦に並べた図である。また、クライアント１がサーバ６に送信するパケット群を左側に並べ（ＰＡＣＫＥＴ  ＴＯ  ＳＥＲＶＥＲ）、サーバ６がクライアント１に送信するパケット群を右側に並べた（ＰＡＣＫＥＴ  ＴＯ  ＣＬＩＥＮＴ）。ＳＥＱはシーケンスナンバー５６を示し、ＡＣＫはアックナンバー５７を示し、ＬＥＮは通信データの大きさを示す。Ｐ０１、Ｐ０２、Ｐ０３、Ｐ１、Ｐ２、Ｐ３、Ｐ４、Ｐ５、およびＰ６は、パケットを示す。Ｐ０１、Ｐ０２、およびＰ０３は、ＴＣＰ／ＩＰのハンドシェイク時にクライアント１とサーバ６との間で送受信するパケットである。Ｐ１、Ｐ２、Ｐ３、Ｐ４、Ｐ５、およびＰ６は、図１０のパケットに対応する。
【００５９】
先頭パケットは、クライアント１からサーバ６に送信するパケットおよびサーバ６からクライアント１に送信するパケットのそれぞれから検出する。先頭パケットは、パケットに通信データを有し、アックナンバー５７が増加する条件を満たす。
【００６０】
検出する場合、セッション内のパケット群からデータ長が「０」のパケットを検索の対象から外す。図１１でデータ長が「０」のパケットはＰ０１、Ｐ０２、Ｐ２、Ｐ３、およびＰ５である。図１１の実線の矩形で囲まれたパケットは、データ長が「０」である。
【００６１】
次に、残りの検索対象となったパケット群からアックナンバー５７が増加するパケットを検索する。なお、アックナンバー５７が初めて出たときも増加したものとみなす。図１１で残りの検索対象となったパケット群からアックナンバー５７が増加するパケットは、Ｐ１、Ｐ４、およびＰ６である。図１１の実線の楕円で囲まれたパケットは、アックナンバー５７が増加する。
【００６２】
図１２は、先頭パケットを抽出する処理のフローチャートである。ＣＰＵ７１は、全てのパケットから分割されたパケットの先頭パケットを抽出する処理を実行する。ＣＰＵ７１は、例えば、図７のＳ３０３とＳ３０４の処理の間で先頭パケットを検出する処理を実行する。Ｓ３０１で一時記憶領域に格納され、Ｓ３０２で抽出された同一の通信先を持つパケットは、情報要素として、シーケンスナンバー５６、アックナンバー５７、およびデータレングス４７を含む。ＣＰＵ７１は、クライアント１からサーバ６に送信するパケットの中の先頭パケットおよびサーバ６からクライアント１に送信するパケットの中の先頭パケットを、一時記憶領域に格納されたパケット群から、それぞれ検出する。
【００６３】
先頭パケットは以下の２の条件を満たすパケットである。第一の条件は通信データの大きさが「０」以外であることであり、第二の条件は前のパケットのアックナンバー５７に対して増加するアックナンバー５７を有することである。なお、初めてアックナンバー５７が付されたパケットは、アックナンバー５７が増加したとみなす。ＣＰＵ７１は、第一の条件および第二の条件を満たすパケットを抽出する。
【００６４】
一時領域に格納されたパケット群は、先頭パケットの検索対象である。ＣＰＵ７１は、パケット群内の各パケットを、サーバ６からクライアント１に送信するパケットとクライアント１からサーバ６に送信するパケットとに分類する（Ｓ４０１）。例えば、ＣＰＵ７１は、パケット内のエスアールシーアイピー５２およびディーエスティーアイピー５３によって分類する。以降の処理は、サーバ６からクライアント１に送信するパケットおよびクライアント１からサーバ６に送信するパケットのそれぞれについて実行するものとする。
【００６５】
ＣＰＵ７１は、データ長が「０」のパケットを先頭パケットの選択対象から除外する（Ｓ４０２）。Ｓ４０２の後、先頭パケットの検索対象となるパケット群（第二のパケット群）は、通信データの大きさが「０」以外である。次に、ＣＰＵ７１は、第二のパケット群からパケットを読み出す（Ｓ４０３）。
【００６６】
ＣＰＵ７１は、第二のパケット群から読み出したパケットのアックナンバー５７は、直前に読み出したパケットのアックナンバー５７から増加するか否かを判別する（Ｓ４０４）。
【００６７】
アックナンバー５７が増加するパケットである場合（Ｓ４０４：Ｙｅｓ）、ＣＰＵ７１は先頭パケットであると判定する（Ｓ４０５）。Ｓ４０５でＣＰＵ７１が先頭パケットであると判定した後、あるいはＳ４０４でＣＰＵ７１がアックナンバー５７の増加するパケットではないと判定した場合（Ｓ４０４：Ｎｏ）、ＣＰＵ７１は、第二のパケット群の全てのパケットについて判別処理が完了したか否かを判別する（Ｓ４０６）。
【００６８】
全パケットについての判別処理が完了していない場合（Ｓ４０６：Ｎｏ）、ＣＰＵ７１は、Ｓ４０３以降の処理を実行する。一方、全パケットについての判別処理が完了した場合（Ｓ４０６：Ｙｅｓ）、ＣＰＵ７１は、Ｓ３０４以降の処理を実行する。ＣＰＵ７１は、一時記憶領域の全パケットから抽出した先頭パケットについてＳ３０４以降の処理を実行する。Ｓ３０４以降の処理の対象が先頭パケットのみとなるため、ＣＰＵ７１が処理するパケットの数が減少し、処理時間の短縮が可能となる。
〔１０．セッションのパケット数に応じて検索対象を決定する方法〕
次に、不正通信の検索対象となるセッションか否かをセッションでのパケット数で決定する方法について説明する。図７および図８の処理では、ＣＰＵ７１は通信ログの全てのセッションから不正なパケットを検出する処理を実行する。具体的には、ＣＰＵ７１は、一時記憶領域の同一のセッションに関係する全てのパケットから単位データが同じパケットを検出する。
【００６９】
しかし、データの送受信を行うパケットの数が少ないセッションでは、不正通信の検出率は下がる。例えば、パケットが一往復するのみのセッションでは、通信データに同じ制御データを有するパケットは存在せず、検索処理を行う必要はない。
【００７０】
そこで、データの送受信を行うパケット数が少ないセッションについては、不正通信か否かを判別する判別処理の対象外とする処理を行う。通信回数の少ないセッションについて判別処理を行わないため、処理対象のパケット数が減少する。この結果、ＣＰＵ７１で処理に要する時間が減少する効果がある。
【００７１】
図１３は、検索対象となるセッションか否かを判別する処理のフローチャートである。ＣＰＵ７１は、例えば、図７のＳ３０３とＳ３０４の処理の間で検索対象となるセッションを検出する処理を実行する。ＣＰＵ７１はＳ３０３で抽出された同一セッション内の通信データを含むパケットの数を抽出する（Ｓ５０１）。ＣＰＵ７１は、通信データを含むか否かを、例えばデータレングス４６によって判別する。
【００７２】
ＣＰＵ７１は、セッション内のパケットの数が所定値以上か否かを判別する（Ｓ５０２）。所定値は、「２」より大きい値になる。所定値は、ＣＰＵ７１の処理速度、処理対象のパケット数、検出精度に応じて適宜変更される。セッション内のパケットの数が所定値未満の場合（Ｓ５０２：ｎｏ）、ＣＰＵ７１は、セッションを判別処理の対象外にする（Ｓ５０４）。セッション内のパケットの数が所定値以上の場合（Ｓ５０２：ｎｏ）、ＣＰＵ７１は、セッションを判別処理の対象にする（Ｓ５０３）。ＣＰＵ７１は、セッションを判定対象にした場合は、図７のＳ３０4以降の処理を実行する。一方、ＣＰＵ７１は、セッションを判定対象外にした場合は、図７の処理を終了する。
【００７３】
なお、先頭パケットを検出した後で、本処理を実行しても良い。先頭パケットを検出した後の場合、ＣＰＵ７１は、先頭パケットの数が閾値以上か否かをＳ５０２で判別すればよい。
〔１１．通信データに付加される共通の情報を検索対象から除外する方法〕
次に、通信データに付加される共通の情報を検索対象から除外する方法について説明する。通信データをカプセル化し、カプセル化した通信データにＴＣＰ／ＩＰヘッダを付加して送信する場合がある。通信データをカプセル化するプロトコルは、例えば、セキュア・ソケット・レイヤ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ（以下ＳＳＬとする））、トランスポート・レイヤ・セキュリティ（Ｔｒａｎｓｐｏｒｔ  Ｌａｙｅｒ  Ｓｅｃｕｒｉｔｙ（以下ＴＬＳとする））、ブイピーエヌ（Ｖｉｒｔｕａｌ  Ｐｒｉｖａｔｅ  Ｎｅｔｗｏｒｋ（以下ＶＰＮとする））等がある。通信データをカプセル化するプロトコルにおいて、カプセル化した通信データにはヘッダ情報が付加される。例えば、ＶＰＮ等のプロトコルにおいて、通信データにＶＰＮであることを認識可能なヘッダ情報が付加される。ＶＰＮであることを認識可能なヘッダ情報はセッション内で同様になる。ネットワークの管理者が、不正通信ではないＶＰＮを予め認識してある場合がある。しかし、図７のフローチャートでは、不正通信か否かを判別する単位データの抽出位置にＶＰＮであることを示すヘッダ情報がある。この結果、ＣＰＵ７１は、ＶＰＮのヘッダ情報から抽出した単位データが同一になるため、不正通信であると誤って検出することになる。
【００７４】
一方、不正通信ではないＶＰＮであっても、ＶＰＮ内に含まれる通信データは不正通信を目的としている場合がある。
【００７５】
そこで、ＣＰＵ７１は、通信データをカプセル化したパケットでかつ不正通信データではない種類に該当するパケットについては、カプセル化するプロトコルのヘッダ情報より後の通信データを、不正通信か否かを判別する対象にする。
【００７６】
図１４は、通信データをカプセル化したパケットの構造の説明図である。９００は、通信データを示す。通信データ９００はヘッダ情報９０１とデータ９０２とを有する構造である。９１０は、通信データ９００がカプセル化されたデータである。データ９１０は、通信データ９００に通信データをカプセル化するプロトコルによるヘッダ９１１が付加された状態である。なお、通信データをカプセル化するプロトコルは、通信データ９００を暗号化するものもある。通信データ９００が暗号化された場合は、通信データ９００のヘッダ９０１およびデータ９０２は暗号化される。９２０および９３０は、データ９１０をＴＣＰ／ＩＰで定められた大きさに分割し、ＴＣＰ／ＩＰヘッダ９２１および９３１を付加したパケットである。通信データをカプセル化するプロトコルによるヘッダ９１１および通信データ９００をあわせたデータの量がＴＣＰ／ＩＰで定められたデータの量よりも大きい場合、複数のパケットに分割される。このときパケット９２０は、先頭パケットになる。
【００７７】
パケット９２０は、不正通信か否かを判別する対象のパケットである。しかし、図７の処理の場合、通信データをカプセル化するプロトコルによるヘッダ９１１が不正通信か否かを判別するデータになる。セッション内では、通信データをカプセル化するプロトコルによるヘッダ９１１は、セッション内で同一となるため、不正通信か否かを誤って検出することになる。
【００７８】
そこで、ＣＰＵ７１は、通信データ９００をカプセル化するプロトコルを適用したパケットか否かを判別する。そして、通信データ９００をカプセル化するプロトコルの場合、ＣＰＵ７１は、通信データ９００をカプセル化したヘッダ９１１より後の部分を不正通信か否かを検出する対象とする処理を行う。通信データ９００をカプセル化したヘッダ９１１より後の部分は、通信データ９００のヘッダ情報９０１である。
【００７９】
図１５は、通信データをカプセル化するプロトコルを適用したパケットを検出する処理のフローチャートである。図１５の処理は、例えば、図７のＳ３０３とＳ３０４の間で実行する。通信装置７は予め規約情報を有する。規約情報は、セッションにおいて、通信データをカプセル化するプロトコルのヘッダ情報である。通信データをカプセル化するプロトコルは、予め管理者が登録する。
【００８０】
ＣＰＵ７１は、Ｓ３０３で抽出したパケットの通信データのヘッダ部分のデータが、通信装置７が有する通信データをカプセル化するプロトコルのヘッダ情報と合致するか否かを判定する（Ｓ６０１）。通信装置７が有するヘッダの情報と合致する場合（Ｓ６０２：Ｙｅｓ）、ＣＰＵ７１は、不正通信か否かを判別するための単位データの抽出を行う領域を変更する（Ｓ６０３）。例えば、ＣＰＵ７１は、通信データをカプセル化する領域の後のデータから単位データを決定する。一方、通信装置７が有する通信データをカプセル化するプロトコルのヘッダ情報と合致しない場合（Ｓ６０２：Ｎｏ）、ＣＰＵ７１は、ＨＴＴＰメッセージのヘッダ部分のデータを、不正通信か否かを判別する単位データに決定する。
【００８１】
なお、ＳＳＬおよびＴＬＳは、インターネット上で情報を暗号化して送受信するプロトコルである。ＳＳＬおよびＴＬＳは、通信データをカプセル化するとともに暗号化する。通信データが暗号化されると、通信データのヘッダの同一性を判別できない場合がある。そこで、ＣＰＵ７１は、ＳＳＬで暗号化されたパケットの場合、不正通信か否かを判別する作業を行わない判定をすることも可能である。この結果、処理対象のパケット数が減少するため、処理時間が短縮される効果がある。
【００８２】
以上、本発明を実施例に基づいて説明したが、本発明は前記の実施例に限定されるものではなく、特許請求の範囲に記載した構成を変更しない限りどのようにでも実施することができる。
【図面の簡単な説明】
【００８３】
【図１】不正通信の例である。
【図２】本実施形態の全体構成図である。
【図３】通信装置のハードウェア構成図である。
【図４】ネゴシエーション検知用データの構成図である。
【図５】ハートビート検知用データの構成図である。
【図６】パケット構成図である。
【図７】不正通信検知処理のフローチャート（その１）である。
【図８】不正通信検知処理のフローチャート（その２）である。
【図９】不正通信を意味するメッセージの例である。
【図１０】パケットのシーケンスナンバー５６とアックナンバー５７との関係を説明する図である。
【図１１】セッションのパケットのシーケンスナンバー５６、アックナンバー５７、及びデータ長を時間に沿って縦に並べた図である。
【図１２】先頭パケットを抽出する処理のフローチャートである。
【図１３】検索対象となるセッションか否かを判別する処理のフローチャートである。
【図１４】通信データをカプセル化したパケットの構造の説明図である。
【図１５】通信データをカプセル化するプロトコルを適用したパケットを検出する処理のフローチャートである。
【符号の説明】
【００８４】
１  サーバー
２  インターネット
３  ＦｉｒｅＷａｌｌ（ファイアウォール）
４  イントラネット
５  Ｐｒｏｘｙ（プロクシ）
６  クライアント
７  通信装置
８  通信監視装置
【図１０】
0005035006.tif 000002
【図１１】
0005035006.tif 000003
【図１２】
0005035006.tif 000004
【図１３】
0005035006.tif 000005
【図１４】
0005035006.tif 000006
【図１５】
0005035006.tif 000007
【図１】
0005035006.tif 000008
【図２】
0005035006.tif 000009
【図３】
0005035006.tif 000010
【図４】
0005035006.tif 000011
【図５】
0005035006.tif 000012
【図６】
0005035006.tif 000013
【図７】
0005035006.tif 000014
【図８】
0005035006.tif 000015
【図９】
0005035006.tif 000016