説明

プロトコルスタックにおいて下位層から上位層まで受信データセグメントを送信する方法、プロトコルスタック製品、及びプロトコルスタック製品の端末

【課題】プロトコルスタックの下位層でフラグメンテーションが発生し、セグメントが分割された場合でもアプリケーション層(IDSやIPS)での内容チェックを可能とする。
【解決手段】下位層において分割されたPDUをバッファリングし、セグメントを順序づけるシーケンス番号をつけてアプリケーション層に渡す。その後、未受信分のフラグメンテーションパケットを受信した時点でこれらを連結可能な固有情報と共にアプリケーション層に渡す。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、包括的には、ネットワークを通じて受信データセグメントを処理することに関し、より詳細には、受信データセグメントをアプリケーションに送信するために、該受信データセグメントを管理することに関する。
【背景技術】
【0002】
ネットワーク分析に基づくアプリケーションのような幾つかのアプリケーションを端末レベルで実行するために、ネットワークスタックの様々なレベルにおけるプロトコルデータユニット(Protocol Data Unit)(PDU)の事前のコンテンツ分析が必要とされ得る。
【0003】
これらのアプリケーションは、IDS(「侵入検知システム(Intrusion Detection System)」を表す)アプリケーション又はIPS(「侵入防止システム(Intrusion Prevention System)」を表す)アプリケーションに対応し得る。これらのアプリケーションは、ウィルス又は攻撃シグネチャ(attacks signatures)を探すのに有用である。これらのアプリケーションは、たとえば、コネクション指向型プロトコルのようなトランスポートプロトコルスタック(「伝送制御プロトコル(Transmission Control Protocol)」を表すTCP)又はコネクションレス型プロトコル(「ユーザデータグラムプロトコル(User Datagram Protocol)」を表すUDP)の上位に位置することができる。
【0004】
ネットワークを通じて送信される任意のアプリケーションに関連する幾つかのデータは、TCPセグメンテーション及び/又はIPフラグメンテーションに起因して幾つかのデータセグメントに分散される可能性がある。実際、送信されるデータのサイズに応じて、IP層はIPデータグラムをフラグメント化(細分化)することができ、そして、該IPデータグラムは幾つかのイーサネット(登録商標)パケット内で移送される。このようなフラグメンテーションは、中間機器によるルーティング中に発生し得る。
【0005】
ネットワークを通じて送信されるデータにセグメンテーション又はフラグメンテーション法が適用されるとき、順序付けられたシーケンス番号がデータセグメントにそれぞれ関連付けられる。しかし、データセグメントは、それらのシーケンス番号によって示される順序とは異なる順序で受信され得る。送信側と受信側との間でのデータセグメントの順序違いは、例えばTCPプロトコルが使用されるときの肯定応答されていないデータセグメント(non acknowledged data segments)の再放出、又はネットワーク内部のパスに依存する運搬時間の違いに起因して発生する場合がある。さらに、受信データセグメントの数が、送信データセグメントの数と異なる場合がある。
【0006】
これらの全ての特性は、受信されるPDUのコンテンツ分析を非常に複雑にする可能性がある。これは、特に、最初に送信されたメッセージ、つまりTCPストリーム又はUDPデータグラムを形成することが要求され得るためである。このために、特にTCPプロトコルが使用されるとき、受信データセグメントに対し、IPデフラグメンテーションステップ及びデータ再組み立てステップが実施され得る。
【0007】
IPデフラグメンテーションステップによって、IPデータグラム全体を再構築することが可能になり、該IPデータグラムを上位層(TCP又はUDP)に送信することができる。同様に、データ再組み立てステップによって、データセグメントを配送し、それによって最初の送信データストリームを再構成することが可能になる。
【0008】
受信側において、そのようなデフラグメンテーションステップ及び再組み立てステップは、メモリ使用に関してコストがかかる。さらに、一般的に、再組み立てステップは連続した全てのデータセグメントを待ち、その後、それらを上位層に送信することを担当する。したがって、幾つかのデータセグメントが依然として受信されていないとき、再組み立てステップはそれらの受信を待ち、その後、完全なデータストリームを上位層に送信する。不都合なことに、これらの状態において、状況によっては上位層への送信バーストが発生し得る。
【0009】
発明の概要
上記を鑑みて、送信バーストを回避すると共にメモリ空間を節約しながら、順序付けられたデータセグメントを上位のアプリケーション層に送信する必要性が存在する。
【0010】
第1の態様において、本発明は、プロトコルスタックにおいて下位層から上位層に受信データセグメントを送信する方法であって、
データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
上記上位層は連続するKバイトのデータを処理するようになっており、Kは正の整数であり、
該方法は、以下のステップ、
/a/ 現在のデータセグメントを受信するステップと、
/b/ 現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最初のK−1バイトを、該現在のデータセグメントに関連付けてメモリ内に記憶し、
現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最後のK−1バイトに関連する固有情報を、該現在のデータセグメントに関連付けて記憶するステップと、
/c/ 上記現在のデータセグメントを上位層に送信するステップと、
を含み、上記現在のデータセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のK−1バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントと関連付けて記憶されている固有情報と共に送信される、方法を提案する。
【0011】
用語「データセグメント」はネットワークにおいて送信に使用されるデータの任意の部分に対応し、特にセグメンテーションプロセス又はフラグメンテーションプロセスにおいて取得することができる。
【0012】
これらの特徴によって、有利には、任意のデータセグメントが受信されるとすぐに、該データセグメントを上位層に送信することが可能になる。確かに、このコンテキストにおいては、上位層は、該層の処置を適用することができるようにするために、少なくともKバイトを有することを必要とする。たとえば、この上位層は、アプリケーション層とすることができ、少なくともKバイトのデータに対しパターンマッチングアプリケーションを適用することができる。Kは、発見される最長の文字列の長さである。
【0013】
より正確には、ストレージ構造によって、上位層に送信されるデータセグメントの最初のK−1バイトがメモリ内に保持される。したがって、幾つかのデータセグメントが上位層に送信される一方で、幾つかの前のデータセグメントが依然として受信されていない場合であっても、上位層は、該層の処置を適用できる。これは、欠落したデータッセグメントが受信されると、この新たなデータセグメントと共に連続したK−1バイトが再度送信されるためである。したがって、上位層は、シーケンス番号に関して、つまり初期の送信順序に関して、データセグメントが順序どおりに送信されない場合であっても、その処置を継続的に適用することができる。換言すれば、そのような特性によって、データセグメントが連続して受信されない場合であっても、データセグメントを、該データセグメントが受信されるとすぐに送信することが可能となる。そのような処理によって、データセグメントが順序どおり受信されない場合であっても、上位層が、該層の処置を継続的に適用することが可能になる。
【0014】
実際に、既に受信したデータセグメントの直後の新たなデータセグメントが受信されると、該既に受信したデータセグメントに関連付けられた固有情報が、該新たな受信データセグメントと同時に送信される。本発明の一実施の形態では、固有情報はデータセグメントの最後のK−1バイトに対応することができ、別の実施形態では、固有情報は状態ベクトル値に対応することができる。後者の場合、上位層は、状態ベクトルを用いて決定性有限オートマトン又は非決定性有限オートマトンに基づいたパターンマッチングアルゴリズムの実行を担当することができる。本発明に従って上位層においてデータセグメントが受信されると、新たな状態ベクトル値が取得されると共に、下位層に送信されて、記憶される。
【0015】
これらの状態では、データセグメントが受信されるとすぐに送信されるので、上位層への送信のバーストは発生し得ない。さらに、データセグメントが完全に受信されるまで受信ウィンドウの全てのデータセグメントを記憶することが、もはや必要とされないので、メモリ空間が節約される。
【0016】
加えて、データを記憶するのに使用されるデータバッファはK−1バイトの固定サイズを有し、可変サイズのデータバッファを管理するよりも処理が容易であるため、メモリ空間の管理が容易である。
【0017】
一実施の形態では、ステップ/b/において、1つのデータセグメントに関連する固有情報は、該データセグメントの最後のK−1バイトに対応する。
【0018】
ここで、有利には、次のデータセグメントが依然として受信されていないときに、受信データセグメントのK−1バイトが記憶され、これらのK−1バイトを、上記次のセグメントが受信されるときに、該次のデータセグメントに関連付けて送信することができるようにする。上位層はKバイトの処置を継続的に適用することができる。
【0019】
一実施の形態では、現在のデータセグメントの最初のK−1バイト及び最後のK−1バイトを記憶するために、2つの欠落したデータセグメントの間でデータセグメント(複数可)グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
セグメントグループの最初のK−1バイトを記憶するデータバッファへのポインタを指示するフィールドと、
セグメントグループの最後のK−1バイトを記憶するデータバッファへのポインタを指示するフィールドと、
上記セグメント(複数可)グループの第1のバイトのシーケンス番号を指示するフィールドと、
セグメント(複数可)グループの長さ値を指示するフィールドと、
次のセグメント(複数可)グループに対応する次のストレージ構造へのポインタを指示するフィールドと、
を備える。
【0020】
このストレージ構造は、有利には、下位層の受信ウィンドウの効率的な表現を保持するようになっており、それによって、この下位層が本方法の主要なステップを適用できるようにする。
【0021】
下位層の受信ウィンドウは、ストレージ構造のチェーン化されたリストを通じて表すことができ、1つのストレージ構造は、1つのセグメント(複数可)グループ(a group of segment(s))に関連付けられる。
【0022】
チェーン化されたリスト内のストレージ構造は、各データセグメントが受信されると更新される。
【0023】
新たな受信データセグメントが、セグメント(複数可)グループの直前又は直後に位置する場合に、該セグメント(複数可)グループのストレージ構造が更新される。用語「セグメントグループ」は、1つのセグメントしか含まない場合があるセグメントグループ、及び受信ウィンドウにおいて依然として受信されていない少なくとも1つのセグメントが先行するセグメントグループに対応する。
【0024】
一実施の形態では、上位層は、決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行し、固有情報は、状態ベクトル値であり、下位層において上位層から受信される。
【0025】
一実施の形態では、2つの欠落したデータセグメントの間でデータセグメント(複数可)グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
セグメントグループの最初のK−1バイトを記憶するデータバッファへのポインタを指示するフィールド(31)と、
オートマトンの状態ベクトル値を上記セグメントグループに関連付けて指示するフィールドと、
上記セグメント(複数可)グループの第1のバイトのシーケンス番号を指示するフィールド(33)と、
セグメント(複数可)グループの長さ値を指示するフィールド(34)と、
次のセグメント(複数可)グループに対応する次のストレージ構造へのポインタを指示するフィールド(35)と、
を備える。
【0026】
一実施の形態では、ステップ/c/において、現在のデータセグメントのシーケンス番号を上位層にさらに送信することができる。
【0027】
この特徴は、上位層が受信ウィンドウ内のデータの位置に基づくアプリケーションを実行するときに、非常に有利であり得る。
【0028】
第2の態様では、本発明は、下位層と上位層とを備えるプロトコルスタックであって、
上記下位層は受信データセグメントを上記上位層に送信するようになっており、データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
上記上位層は連続するKバイトのデータを処理するようになっており、Kは正の整数であり、
上記下位層は、
現在のデータセグメントを受信するようになっているレシーバと、
現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最初のK−1バイトを、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファと、
現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最後のK−1バイトに関連する固有情報を、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファと、
上記現在のデータセグメントを上位層に送信するようになっているトランスミッタと、
を備え、上記現在のデータセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のK−1バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントに関連付けて記憶されている上記固有情報と共に送信される、プロトコルスタックを提案する。
【0029】
固有情報は、対応するデータセグメントのK−1バイトとすることができる。そして、データバッファは、現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、該現在のデータセグメントの最後のK−1バイトを、該現在のデータセグメントと関連付けて記憶するようになっていることができ、
トランスミッタは、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントと関連付けて記憶されている最後のK−1バイトと共に現在のデータセグメントを送信するようになっていることができる。
【0030】
代替的に、上位層は、決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行することができ、固有情報は、状態ベクトル値であり、下位層において上位層から受信される。
【0031】
この状態ベクトル値は、上位層によって計算されて、下位層に送信される。
【0032】
第3の態様では、本発明は、伝送ネットワークを通じてデータを受信するようになっている端末であって、第2の態様によるプロトコルスタックを備える、端末を提案する。
【0033】
以下の説明から、本発明のさらなる特徴及び利点がより明らかになる。以下の説明は、純粋に例示としてのみ与えられ、添付の図面と合わせて読まれるべきである。
【図面の簡単な説明】
【0034】
【図1】本発明の一実施形態を有利に実行することができるプロトコルスタックを示す図である。
【図2】本発明の一実施形態による方法の主要なステップを示す図である。
【図3】本発明の一実施形態によるストレージ構造を示す図である。
【図4】データセグメント受信の1つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図5】データセグメント受信の1つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図6】データセグメント受信の1つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図7】データセグメント受信の1つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図8】データセグメント受信の1つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図9】データセグメント受信の1つのケースにおける、本発明の一実施形態による方法の適用を示す図である。
【図10】本発明の一実施形態による、下位層から上位層への受信データセグメントの送信を示す図である。
【図11】本発明の一実施形態による、下位層から上位層への受信データセグメントの送信を示す図である。
【図12】本発明の一実施形態によるプロトコルスタックを備える端末の図である。
【発明を実施するための形態】
【0035】
本発明の一実施形態は、再組み立てされたデータに基づくパターンマッチングアプリケーションのために有利に実行することができる。パターンマッチングは、受信データ内の、正規表現を探すこと又は正確なテキスト文字列を探すことのいずれによっても行うことができる。
【0036】
図1は、本発明の一実施形態を有利に実行することができるプロトコルスタックを示している。
【0037】
そのようなプロトコルスタックは、イーサネット(登録商標)及びIP(「インターネットプロトコル」を表す)のようなネットワークスタックとすることができる下位層10を含む。この層10の上位に、TCP(「伝送制御プロトコル」を表す)層のようなトランスポート層11が位置し、下位層として参照される。このトランスポート層11の上位に、上位アプリケーション層13が位置する。この上位層13は、パターンマッチングアプリケーションに対応することができる。本発明の一実施形態は、TCP層11内で実行することができる。
【0038】
図2は、本発明の一実施形態による方法の主要なステップを示している。
【0039】
本発明の一実施形態によれば、特定のストレージ構造によって、受信ウィンドウのイメージがメモリ内に保持される。ステップ21において現在のデータセグメントが受信されると、ステップ22において、先行するデータセグメントが依然として受信されていない場合に、現在の受信データセグメントの最初のK−1バイトが記憶され、次のデータセグメントが受信されていない場合に、現在の受信データセグメントの最後のK−1バイトに関連する固有情報が記憶される。次に、ステップ23において、この現在の受信データセグメントが上位層に送信される。有利には、上位層が正しい処置を適用できるようにするために、データセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントの最初のK−1バイトと関連付けて送信され、前のデータセグメントが既に受信されている場合に、固有情報と関連付けて送信される。
【0040】
これらの特性によって、上位層が受信データを関連した方法で処理することを可能にしながら、各データセグメントを、該セグメントが受信されるとすぐに送信することが可能である。
【0041】
図3は、本発明の一実施形態によるデータストレージ構造を示している。
【0042】
本発明の一実施形態による受信ウィンドウのイメージを表すのに使用されるデータストレージ構造は、以下のフィールド:
セグメントグループの第1のバイトのシーケンス番号を記憶するフィールド31と、
セグメントグループの長さ値を記憶するフィールド32と、
セグメントグループの最初のK−1バイトを記憶するデータバッファへのポインタを記憶するフィールド33と、
セグメントグループの最後のK−1バイトを記憶するデータバッファへのポインタを記憶するフィールド34と、
必要であれば、次のストレージ構造を指すポインタ「次」を記憶するフィールド35と、
を備える。
【0043】
そのようなストレージ構造を使用することによって、欠落したデータセグメントを待つことなく、すべての受信データセグメントを、それらが受信されるとすぐに送信することが可能になる。実際に、セグメントグループが検出されると、そのようなストレージ構造が作成される。欠落したデータセグメントが後に受信されると、該データセグメントを、それぞれのシーケンス番号に従って、前に位置するK−1バイト及び後に位置するK−1バイトに関連付けて送信することができ、それによって、上位層が少なくともKバイトに対し該層の処置を適用することが可能になる。
【0044】
下位層の受信ウィンドウの境界を、一方では、レシーバ(つまり考察中の端末)によって依然として受信されていない第1のバイトのシーケンス番号であるウィンドウ最下部(Bottom of Window)(BoW)によって定めることができ、他方では、必要とされるウィンドウサイズをBoWに加えることによって相対的に定義することができるウィンドウ最上部(Top of Window)(ToW)によって定めることができる。
【0045】
本発明の一実施形態では、受信ウィンドウに全くホールがない場合であっても、つまり欠落したデータセグメント部がない場合であっても、データバッファへのポインタを記憶するために、上記のように定義される少なくとも1つのストレージ構造が必要とされる。このデータバッファは、BoWの第1のバイトのシーケンス番号と、先行するK−1バイト、つまり以前に受信ウィンドウ内にあった最後のデータセグメントの最後のK−1バイトとの間に含まれるシーケンス番号に関連付けられるK−1バイトを記憶する。
【0046】
図4は、本発明の一実施形態によるデータストレージ構造の使用を示している。
【0047】
本発明の一実施形態が有利には任意の他のプロトコルに適用することができる場合であっても、次のセクションはTCP接続に適用される。
【0048】
この図4は、幾つかのデータセグメントが受信済みとして指示され、他のデータセグメントが欠落しているとして指示される受信ウィンドウ400のステータスを示している。受信データセグメントは縞面を用いて示され、欠落したデータセグメントは空白面を用いて示される。各欠落したデータセグメント部分はホールとして参照される。
【0049】
用語「セグメントグループ(Group of Segments)」、「GoS」は、2つのホール間の連続した受信データセグメントから成るグループに対応する。図示される受信ウィンドウ400は、GoS#0として参照される第1のGoSと、GoS#1として参照される第2のGoSとを含む。
【0050】
受信ウィンドウ400内に、3つの異なるホール、すなわちホール#0、ホール#1、及びホール#2が示される。
【0051】
本発明によれば、この受信ウィンドウ400のイメージは、データストレージ構造31,32,33のチェーンを通じて記憶される。第1のデータストレージ構造41は、
上位層に既に送信されたデータの最後のK−1バイト401が記憶されているバッファへのポインタと、
以前に送信したGoSの第1のバイトに関連付けられるシーケンス番号と、
GoS#0の長さと、
次のデータストレージ構造、つまりストレージ構造32へのポインタと、
を含む。
【0052】
第2のデータストレージ構造32は、
GoS#0の最初のK−1バイトが記憶されているバッファへのポインタと、
GoS#0の最後のK−1バイトが記憶されているバッファへのポインタと、
GoS#0の第1のバイトに関連付けられるシーケンス番号と、
GoS#0の長さと、
次のデータストレージ構造、つまりストレージ構造33へのポインタと、
を含む。
【0053】
第3のデータストレージ構造33は、
GoS#1の最初のK−1バイトが記憶されているバッファへの2つのポインタと、
GoS#1の第1のバイトに関連付けられるシーケンス番号と、
GoS#1の長さと、
を含む。
【0054】
GoS#1はK−1バイト未満のバイトを含む。結果として、データストレージ構造の第1のポインタの双方が同じものとなる。
【0055】
有利には、本発明の一実施形態によれば、一方では、全ての受信データセグメントはそれらが受信されるとすぐに上位層に送信することができ、他方では、受信ウィンドウは、メモリ空間を節約することを可能にするストレージ構造のチェーン化されたリストを通じて記憶される。
【0056】
この種類のストレージ構造を使用することによって、既に受信した全てのデータセグメントを記憶することが回避されるため、多くのメモリ空間をとることなく受信ウィンドウのイメージを記憶することが可能になる。実際に、各セグメントグループの最初のK−1バイト及び最後のK−1バイトのみ(つまり欠落したデータセグメントの前に順序付けされたK−1バイト、及び欠落したデータセグメントの後に順序付けされたK−1バイトのみ)がデータバッファ内に記憶される。このストレージによって、データセグメントのうちの幾つかが欠落している場合であっても、データセグメントが受信されるとすぐに送信されるときに、上位層が継続的な処置を適用することが可能になる。
【0057】
受信ウィンドウがそのようなステータスを呈する(present)とき、それは、ホール#0、ホール#1、及びホール#3において幾つかのセグメントが欠落している場合であっても、GoS#0及びGoS#1内に含まれるデータが既に上位層に送信されたことを意味する。既に送信された各GoSの最初のK−1バイト及び最後のK−1バイトは、メモリ内に記憶される。この状態において、ホール#0においてこれらの最初のK−1バイトの直前の欠落したセグメントが受信されるとき、上位層に該最初のK−1バイトを送信することが可能であり、ホール#1においてこれらの最後のK−1バイトの直後の欠落したセグメントが受信されるとき、上位層に該最後のK−1バイトを送信することが可能である。
【0058】
セグメントグループがKバイトより少ないサイズを有するとき、ストレージ構造はセグメントグループの全てのバイトのコピーを記憶するデータバッファへのポインタを保持する。実際に、このケースでは、最初のK−1バイト及び最後のK−1バイトは同一であり、2つのポインタは同じコピーデータバッファを指す。ここで、フィールド長は記憶されるバイト数を指示する。
【0059】
一実施形態において、開かれたTCP接続毎に、連結ストレージ構造のリストが作成される。
【0060】
次の複数の図面は、欠落したデータセグメントの受信の異なる複数のケースにおける、本発明の一実施形態による受信データセグメントの処理を示している。
【0061】
図5は、一実施形態による孤立した欠落したデータセグメントの受信を示している。
【0062】
欠落したデータセグメント503は、受信ウィンドウのイメージにおいて孤立したデータセグメントとして受信される。このケースにおいて、新たな受信データセグメントは既存のGoS(「セグメント(複数可)グループ(Group of Segment(s))」)に加えることができない。
【0063】
図5は、本発明による、データセグメント503の受信を示す第1の部分501と、この受信に基づいて更新される連結ストレージ構造を示す第2の部分502とを含む。
【0064】
孤立したデータセグメント503が受信されると、新たなストレージ構造504が作成される。用語「孤立したデータセグメント」は、受信ウィンドウの表現のホールにおいて受信されるデータセグメントを意味し、このデータセグメントは、関連付けられるシーケンス番号(複数可)が、受信ウィンドウにおいて既に受信された既存のセグメントグループのデータセグメントと連続していないため、既存のストレージ構造に加えることができない。
【0065】
この新たなストレージ構造は、既存の、ストレージ構造のチェーン化されたリスト内に含まれる。ストレージ構造41の次ポインタは新たなストレージ構造504を指し、新たなストレージ構造504の次ポインタはストレージ構造43を指す。さらに、ストレージ構造504の他のフィールドは、上述したように埋められる。この状態において、受信データセグメントの最初のK−1バイト及び最後のK−1バイトがメモリ内に保持されているので、上位層がパターンマッチング処置のような継続的な処置をKバイトに適用することを可能にしながら、データセグメント503を上位層に送信することができる。実際に、データセグメント503の直前のデータセグメントが受信されると、該データセグメントは、ストレージ構造504によって指される最初のK−1バイトとともに、上位層に送信される。データセグメント503の直後のデータセグメントが受信されると、該データセグメントは、ストレージ構造504によって指される最後のK−1バイトとともに、上位層に送信される。したがって、上位層は、上述したようにKバイトに対し関連するパターンマッチングアルゴリズムを実行することができる。
【0066】
別のケースにおいて、図6に示すように、新たな受信データセグメント603を既存のGoSの最後のバイトに繋げることができる。図6において、第1の部分601は受信ウィンドウの新たなステータスを示し、第2の部分602は本発明の一実施形態に従って更新されるストレージ構造のチェーン化されたリストを示す。
【0067】
たとえば、この新たな受信データセグメントは、受信ウィンドウの最上部に位置する可能性があるか、又は既に受信した2つのGoSの間に、それらの間のホールを完全に埋めることなく位置する可能性があるか、又は受信ウィンドウにおいて受信される最後のデータセグメントに追加される可能性がある。これらのケースにおいて、新たな受信データセグメントを既存のGoSに含めることができる。
【0068】
図示されるケースにおいて、既に作製されたストレージ構造42が更新される。更新した後、ストレージ構造42のフィールド32は新たな受信データセグメントの最後のK−1バイトのコピーを指す。ストレージ構造の長さフィールドも更新される。
【0069】
さらに、このケースでは、新たな受信データセグメント603は上位層に送信される。この上位層が、関連するコンテンツ分析をKバイトに基づいて適用することを可能にするために、データセグメントは、ストレージ構造42によって指されるデータバッファ内に記憶されている最後のK−1バイトに関連付けられて送信される。換言すれば、これらの最後のK−1バイトがデータセグメント603に繋げられて、その結果が上位層に送信される。
【0070】
図7は、それぞれのシーケンス番号に従って、新たな受信データセグメント703を既存のGoSの第1のバイトと繋げることができる、同様のケースを示している。第1の部分701はこの新たな受信データセグメントの受信を示し、第2の部分702はこの新たなデータセグメントの受信を考慮に入れたストレージ構造のチェーン化されたリストを示す。
【0071】
新たなデータセグメント703を受信する前は、ストレージ構造41、42、及び43のチェーン化されたリストが受信ウィンドウを表す。既存のGoS#0がストレージ構造42に関連付けられる。
【0072】
新たな受信データセグメント703を、GoS#0の先頭に繋げることができる。そのとき、この新たなデータセグメント703を考慮に入れるように、ストレージ構造42が更新される。より正確には、データセグメント703を含むGoS#0の新たな長さを指示するように長さフィールドが更新され、そのデータセグメント703の最初のK−1バイトのコピーを指すように、最初のK−1バイトのデータバッファへのポインタが更新される。
【0073】
新たなデータセグメント703は、部分701におけるストレージ構造42(つまり更新前のストレージ構造)のフィールド31によって指されていた最初のK−1バイトと繋げられた後、上位層に送信されることができる。
【0074】
図8は、受信ウィンドウ内のホールをぴったり埋める新たなデータセグメントの受信を示している。このケースでは、新たな受信データセグメント803を、ストレージ構造82によって表されるGoS#0、及びストレージ構造83によって表されるGoS#1において繋げることができる。
【0075】
新たなデータセグメント803は、ストレージ構造83のフィールド31によって指される最初のK−1バイト、及びストレージ構造82のフィールド31によって指される最後のK−1バイトと繋げられ、その後、繋げた結果が上位層に送信される。
【0076】
さらに、部分802に示されるように、チェーン化されたストレージ構造のリストが更新される。より正確には、新たな受信データセグメント803を通じてGoS#0及びGoS#1を共に連結することができるため、GoSを除去することができる。次に、ストレージ構造83が消滅することができ、それに従って、ストレージ構造82が、以前からのGoS#0、GoS#1、及び新たな受信データセグメント803を含む新たなGoS#0を表すように更新される。
【0077】
新たな受信データセグメントによって受信ウィンドウの上側部分を埋めることが可能になると、受信ウィンドウをシフトすることができる。図9はこのケースを示している。前の受信ウィンドウの最後のセグメントグループの最後のK−1バイト91がメモリ内に保持される。
【0078】
図10は、本発明の一実施形態による、上位層に送信されるデータを示している。
【0079】
部分101は新たな受信データセグメントに対応し、部分103は、前のデータセグメントが既に受信されている場合の、該前のデータセグメントの最後のK−1バイトに対応し、部分102は、次のデータセグメントが既に受信されている場合の、該次のデータセグメントの最初のK−1バイトに対応する。
【0080】
必要となるメモリを削減し、上位層において適用されるマッチングプロセスを加速するために、次のセクションはメカニズムの最適化を説明する。
【0081】
上位層がパターンマッチングアルゴリズムを適用することを担当するとき、このアルゴリズムの状態ベクトル値は、新たなデータセグメントが受信される度に記憶され得る。この状態ベクトル値は、マッチングアルゴリズムが現在の分析の終了時点で止まっているときの、たとえばエイホ・コラシックのようなDFA(「決定性有限オートマトン(Deterministic Finite Automata)」を表す)の現在の状態に対応するか、又はNFA(「非決定性有限オートマトン(Non Deterministic Finite Automata)」を表す)のコンテキストを記憶するビットマップ符号化状態ベクトル値に対応することができる。
【0082】
本発明の一実施形態では、受信データセグメントの最後のK−1バイトのコピーを直接保持する代わりに、有利にはパターンマッチングアルゴリズムの状態ベクトル値が記憶される。より正確には、データセグメントが上位層に送信されると、上位層は、該層のパターンマッチングアルゴリズムを適用し、新たな状態ベクトル値を取得する。この新たな状態ベクトル値は、次に下位層に送信され、それによって下位層は、本発明の一実施形態に従って、次のデータセグメントが依然として受信されていないとき、この状態ベクトル値を、直前に送信したデータセグメントと関連付けられる固有情報として、該直前に送信したデータセグメントと関連付けて記憶することができる。
【0083】
このケースでは、セグメントの最後のK−1バイトのコピーを保持する必要がない。受信データセグメントの最初のK−1バイトのみを記憶して、重複パターンの検出を可能にすることができる。そして、状態機械(state machine)は、新たなデータセグメントを受信すると、現在の状態から継続(continue)することができる。
【0084】
第1に、この最適化によってメモリ空間を節約することができる。実際に、状態ベクトル値を記憶するのに必要とされるメモリ空間は、一般的にK−1バイトを記憶するのに必要とされるメモリ空間よりも小さくすることができる。第2に、この最適化によって、既に受信するとともに既に上位層に送信した別のデータセグメントに新たなデータセグメントを繋げることができるときに、受信データセグメントの終端(最後のK−1バイト)を2回解析することが回避される。状態ベクトル値を記憶することによって、解析アルゴリズムが、記憶されている状態ベクトル値を用いて開始することが可能になる。結果として、分析は、有利にはこの開始点から継続することができる。
【0085】
これによって、従来技術による完全な再組み立ての後に実施されるのと同じだけ、分析を速く実施することが可能になる。この実施形態は、データセグメントのほとんどが順序どおりに受信されるときに特に関心を引く。
【0086】
ケースに応じて、上位層におけるコンテンツ分析は、次のデータセグメントが依然として受信されていないときは現在のデータセグメントに対して実施でき、又は次のデータセグメントがすでに受信されているときは、現在のデータセグメントを次のデータセグメントの最初のK−1バイトと繋げたものに対して実施できる。
【0087】
この実施形態によれば、ストレージ構造は、セグメントグループの最後のK−1バイトを記憶するデータバッファへのポインタを記憶する代わりに状態ベクトル値を記憶するフィールドを含む。この状態ベクトルフィールドは、例えばベクトルのサイズに応じて、直接、状態ベクトル値としてもよく、又は状態ベクトル値のコピーへのポインタとしてもよい。
【0088】
図11は、このような一実施形態による、上位層に送信されるデータを示している。
【0089】
部分111は新たな受信データセグメントに対応し、部分112は次のデータセグメントの最初のK−1バイトに対応し、部分113は前のデータセグメントに関連する固有情報に対応する。固有情報は、このコンテキストでは状態ベクトル値である。
【0090】
この場合、完全な再組み立てが実施されていないため、メモリ空間を節約することができる。受信ウィンドウは、受信することができる許可されたシーケンス番号の範囲を特定するウィンドウ最下部変数及びウィンドウ最上部変数によって境界を定めることができる。
【0091】
ストレージ構造毎に、セグメントグループの最初のK−1バイトを記憶するか、又は代替的にパターンマッチングアルゴリズムの現在の状態ベクトル値を記憶するのに、小さなデータバッファしか必要とされない。
【0092】
図12は、本発明の一実施形態によるプロトコルスタックを含む端末を示している。
【0093】
端末120は、ネットワークからの受信データに適合され、これらの受信データに基づいてコンテンツ分析が実行される。端末120は、受信データセグメントを送信する方法を実行するプロトコルスタック124を含む。
【0094】
下位層は、
現在のデータセグメントを受信するようになっているレシーバ121と、
現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最初のK−1バイトを、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ122と、
現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、上記現在のデータセグメントの最後のK−1バイトに関連する固有情報を、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ125と、
上記現在のデータセグメントを上位層に送信するようになっているトランスミッタ123と、
を備え、上記現在のデータセグメントは、次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のK−1バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントに関連付けて記憶されている上記固有情報と共に送信される。
【0095】
初期化ステップの間に、空いているストレージ構造のプール及び空いているデータバッファのプールを定義することができる。それらは、接続を処理するのに必要とされるメモリリソースを動的に割当て及び割当て解除するために使用される。これらのプールのサイズは、たとえば、画定された受信ウィンドウ内の所与の数のホールとの所与の数の接続を処理することが可能になるように選択することができる。
【0096】
本発明の一実施形態によれば、受信データセグメントが受信ウィンドウ内に適合する場合(つまり、受信データセグメントが大きすぎない場合、又は受信データセグメントが考察中の受信ウィンドウ内に位置する場合)に、プロトコルスタックにおけるTCP層に対応することができる下位層を検査することが可能である。重複するセグメントがないかを検査することが可能である。異常が検出されると、エラーを報告することができ、さらなる処理を中断することができる。
【0097】
幾つかの状態では、所与のオフセットにおいて特定の文字列が存在するか否かを検査するか、又は所与のオフセットに位置する文字列を特定することが必要とされる。このケースでは、受信データセグメントの一部分しか関心を引き得ない。この部分は、開始シーケンス番号及び長さ値によって特定され得る。一実施形態によれば、関心を引く受信ウィンドウ内の位置を特定することによって、このようなアプリケーションを実施することが非常に容易である。このために、受信ウィンドウ内の位置に関連する情報を下位層から上位層へ送信することが可能である。この情報はシーケンス番号とすることができる。
【0098】
本発明の一実施形態は、たとえば、プライベートネットワークに属するホストへのトラフィックを転送するゲートウェイにおいて有利に実施することができる。
【0099】
上位層は、たとえば、ウィルススキャン、トラフィック異常検出、QoSアプリケーション、又はトラフィック分析のようなコンテンツ分析を必要とするアプリケーションを実行することができる。本発明の方法が必要とするメモリ空間はより少ないため、有利には、たとえば多くのTCP接続を開くことに基づく攻撃の効率が低くなる。結果として、この方法によって、幾つかの攻撃に対する防御を増大することができる。
【0100】
プロトコルの識別は、パケットの複数の部分を分析することを必要とする古典的なアプリケーションである。たとえば、SIP又はHTTPのようなプロトコルにおいて、メソッド名、ヘッダのような何らかの関心を引くフィールドを抽出するか、又はメッセージの境界設定を実施することが可能である。この種類の処理は、SSL(「セキュアソケットレイヤ(Secure Socket Layer)」を表す)トランザクションのモニタリングを行う調査を実施するときに必要とされる。SSLネゴシエーションフェーズの開始及び終了は、パケットコンテンツが暗号化されていないため安全ではなく、所与のバイトパターンを探すことによって識別することができる。このバイトパターンは、完全なペイロードと比較して短く、その位置特定は既知であるため、完全なペイロードを調べる必要もなければ記憶する必要もない。本発明の一実施形態による方法を実行することによって、必要となるメモリを削減し、リソース消耗攻撃に対し端末をよりロバストにすることができる。
【0101】
本発明の一実施形態による方法を、ペイロード全体を再構築することなく、IDS/IPS内、又は何らかのパケット制御を実施することを必要とする任意の機器内に位置することができるTCP「スヌーパ(snooper)」モジュールにおいて実行することが非常に有利であり得る。そのような機器は、フロー再組み立てを実施する従来の解決策と比較して必要とされるメモリ空間を小さくしながら、たとえば、ペイロード検査によるプロトコルの識別と共にネットワーク接続のモニタリングを実施することができる。
【0102】
このような方法を、(たとえばUDPに関して)トランスポート層再組み立てによってセグメンテーションがサポートされていないときに、IPデフラグメンテーションに適用することも有利である。このケースでは、受信ウィンドウはIPデータグラムの長さに対応することができる。これは一般的に、古典的なウィンドウサイズよりも大幅に小さい。フラグメントはセグメントに非常に類似する。シーケンス番号の代わりに、オフセットを使用してIPデータグラム内のフラグメントの開始位置を特定することができる。

【特許請求の範囲】
【請求項1】
プロトコルスタックにおいて下位層(11)から上位層(13)に受信データセグメントを送信する方法であって、
データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
前記上位層は連続するKバイトのデータを処理するようになっており、Kは正の整数であり、
該方法は、以下のステップ、
/a/ 前記下位層において現在のデータセグメントを受信するステップ(21)と、
/b/ 前記現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最初のK−1バイトを、該現在のデータセグメントに関連付けてメモリ内に記憶し、
前記現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最後のK−1バイトに関連する固有情報を、該現在のデータセグメントに関連付けて記憶するステップ(22)と、
/c/ 前記現在のデータセグメントを前記上位層に送信するステップ(23)と、
を含み、前記現在のデータセグメントは、前記次のデータセグメントが既に受信されている場合に、該次のデータセグメントが受信されたときに該次のデータセグメントと関連付けて記憶されている最初のK−1バイトと共に送信され、先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントが受信されたときに該先行するデータセグメントと関連付けて記憶されている固有情報と共に送信される、方法。
【請求項2】
ステップ/b/において、1つのデータセグメントの最後のK−1バイトに関連する前記固有情報は、該データセグメントの最後のK−1バイトに対応する、請求項1に記載の方法。
【請求項3】
前記現在のデータセグメントの最初のK−1バイト及び最後のK−1バイトを記憶するために、2つの欠落したデータセグメントの間でデータセグメント(複数可)グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
前記セグメントグループの最初のK−1バイトを記憶するデータバッファへのポインタを指示するフィールド(31)と、
前記セグメントグループの最後のK−1バイトを記憶するデータバッファへのポインタを指示するフィールド(32)と、
前記セグメント(複数可)グループの第1のバイトのシーケンス番号を指示するフィールド(33)と、
前記セグメント(複数可)グループの長さ値を指示するフィールド(34)と、
次のセグメント(複数可)グループに対応する次のストレージ構造へのポインタを指示するフィールド(35)と、
を備える、請求項2に記載の方法。
【請求項4】
前記下位層の受信ウィンドウは、前記ストレージ構造のチェーン化されたリストを通じて指示され、1つのストレージ構造は、1つのセグメント(複数可)グループに関連付けられる、請求項3に記載の方法。
【請求項5】
前記チェーン化されたリスト内の前記ストレージ構造は、各データセグメントが受信されると更新される、請求項4に記載の方法。
【請求項6】
新たな受信データセグメントが、セグメント(複数可)グループの直前又は直後に位置する場合に、該セグメント(複数可)グループの前記ストレージ構造が更新される、請求項4又は請求項5に記載の方法。
【請求項7】
前記上位層は、決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行し、前記固有情報は、状態ベクトル値であり、前記下位層において前記上位層から受信される、請求項1に記載の方法。
【請求項8】
2つの欠落したデータセグメントの間でデータセグメント(複数可)グループが検出されるとストレージ構造が作成され、該ストレージ構造は、
前記セグメントグループの最初のK−1バイトを記憶するデータバッファへのポインタを指示するフィールド(31)と、
前記オートマトンの状態ベクトル値を前記セグメントグループに関連付けて指示するフィールドと、
前記セグメント(複数可)グループの第1のバイトのシーケンス番号を指示するフィールド(33)と、
前記セグメント(複数可)グループの長さ値を指示するフィールド(34)と、
次のセグメント(複数可)グループに対応する次のストレージ構造へのポインタを指示するフィールド(35)と、
を備える、請求項7に記載の方法。
【請求項9】
ステップ/c/において、前記現在のデータセグメントの前記シーケンス番号が、前記上位層にさらに送信される、請求項1から請求項8までのいずれか1項に記載の方法。
【請求項10】
下位層(11)と上位層(13)とを備えるプロトコルスタック製品(124)であって、
前記下位層は受信データセグメントを前記上位層に送信するようになっており、データセグメントは該データセグメントを順序付けるシーケンス番号にそれぞれ関連付けられ、
前記上位層は連続するKバイトのデータを処理するようになっており、Kは正の整数であり、
前記下位層は、
現在のデータセグメントを受信するようになっているレシーバ(121)と、
前記現在のデータセグメントに先行するデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最初のK−1バイトを、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ(122)と、
前記現在のデータセグメントの次のデータセグメントが依然として受信されていない場合に、前記現在のデータセグメントの最後のK−1バイトに関連する固有情報を、該現在のデータセグメントと関連付けて記憶するようになっているデータバッファ(125)と、
前記現在のデータセグメントを前記上位層に送信するようになっているトランスミッタ(123)と、
を備え、前記現在のデータセグメントは、前記次のデータセグメントが既に受信されている場合に、該次のデータセグメントと関連付けて記憶されている最初のK−1バイトと共に送信され、及び先行するデータセグメントが既に受信されている場合に、該先行するデータセグメントに関連付けて記憶されている前記固有情報と共に送信される、プロトコルスタック製品。
【請求項11】
1つのデータセグメントの最後のK−1バイトに関連する前記固有情報は、該データセグメントの最後のK−1バイトに対応する、請求項10に記載のプロトコルスタック製品。
【請求項12】
前記上位層(13)は決定性有限オートマトン又は非決定性有限オートマトンの状態ベクトルに基づいてパターンマッチングアルゴリズムを実行し、前記固有情報は、状態ベクトル値であり、前記下位層において前記上位層から受信される、請求項10に記載のプロトコルスタック製品。
【請求項13】
伝送ネットワークを通じてデータを受信するようになっている端末(120)であって、請求項10から請求項12までのいずれか1項に記載のプロトコルスタック製品(124)を備える、端末。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2010−158016(P2010−158016A)
【公開日】平成22年7月15日(2010.7.15)
【国際特許分類】
【外国語出願】
【出願番号】特願2009−292863(P2009−292863)
【出願日】平成21年12月24日(2009.12.24)
【出願人】(503163527)ミツビシ・エレクトリック・アールアンドディー・センター・ヨーロッパ・ビーヴィ (175)
【氏名又は名称原語表記】MITSUBISHI ELECTRIC R&D CENTRE EUROPE B.V.
【住所又は居所原語表記】Capronilaan 46, 1119 NS Schiphol Rijk, The Netherlands
【Fターム(参考)】