(57)【特許請求の範囲】
【請求項１】
プロセスに含まれたコードインジェクション基盤スレッドを探知するプロセス検査部と、
ネットワークフィルタリングによって、ネットワークにアクセスするネットワークパケットを探知し、探知された前記ネットワークパケットの通信主体が前記コードインジェクション基盤スレッドである場合は、前記探知されたネットワークパケットのトラフィックが遮断されるようにするネットワーク監視部とを含み、
前記プロセス検査部は、コンピュータ上で実行されているプロセス情報を収集するプロセス情報収集部と、前記プロセス情報収集部で収集されたプロセスに対して、コードインジェクションされた領域を探知するコードインジェクション探知部と、前記コードインジェクションされた領域をベースとして生成されたスレッドを探知するコードインジェクション基盤スレッド探知部とを含むことを特徴とする、ネットワークアクセス制御システム。
【請求項２】
前記プロセス情報収集部は、前記コンピュータ上で実行されているプロセス別にプロセス構造体を収集したことを特徴とする、請求項１に記載のネットワークアクセス制御システム。
【請求項３】
前記コードインジェクション探知部は、前記収集されたプロセスに割り当てられた仮想アドレス空間の仮想アドレス範囲と属性情報を収集する仮想アドレス空間情報収集部と、前記仮想アドレス空間情報収集部で収集された仮想アドレス空間に対してコードインジェクション有無を調査する仮想アドレス空間調査部とを含むことを特徴とする、請求項１に記載のネットワークアクセス制御システム。
【請求項４】
前記仮想アドレス空間情報収集部は、カーネルレベル（Ｋｅｒｎｅｌ  Ｌｅｖｅｌ）でプロセス構造体（ＥＰｒｏｃｅｓｓ）のＶａｄＲｏｏｔメンバーを検査し、前記収集されたプロセスに割り当てられた仮想アドレス空間の仮想アドレス範囲と属性情報を収集することを特徴とする、請求項３に記載のネットワークアクセス制御システム。
【請求項５】
前記仮想アドレス空間情報収集部は、ユーザーレベル（Ｕｓｅｒ  Ｌｅｖｅｌ）でＶｉｒｔｕａｌＱｕｅｒｙＥｘ関数を用いて、前記収集されたプロセスに割り当てられた仮想アドレス空間の仮想アドレス範囲と属性情報を収集することを特徴とする、請求項３に記載のネットワークアクセス制御システム。
【請求項６】
前記仮想アドレス空間調査部は、前記仮想アドレス空間情報収集部で収集された前記仮想アドレス空間の属性情報のうち、メモリタイプがプライベートタイプ（Ｐｒｉｖａｔｅ  ｔｙｐｅ）でありかつプロテクトフラグ値が実行可能（ｅｘｅｃｕｔａｂｌｅ）である場合は、前記仮想アドレス空間をコードインジェクション領域として判断することを特徴とする、請求項３に記載のネットワークアクセス制御システム。
【請求項７】
前記コードインジェクション基盤スレッド探知部は、コンピュータ上で実行されているスレッド情報を収集するスレッド情報収集部と、前記スレッド情報収集部で収集されたスレッドの開始アドレス値と、前記仮想アドレス空間調査部から提供されたコードインジェクションされた仮想アドレス空間の仮想アドレス範囲とを比較して、前記収集されたスレッドの開始アドレス値が前記コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属する場合は、前記コードインジェクションされた仮想アドレス空間にコードインジェクション基盤スレッドが存在すると判断するアドレス比較部とを含むことを特徴とする、請求項３に記載のネットワークアクセス制御システム。
【請求項８】
前記スレッド情報収集部は、プロセス構造体（ＥＰｒｏｃｅｓｓ）のスレッドリストヘッド（ＴｈｒｅａｄＬｉｓｔＨｅａｄ）を検査し、前記コンピュータ上で実行されているスレッド情報を収集することを特徴とする、請求項７に記載のネットワークアクセス制御システム。
【請求項９】
前記スレッド情報収集部は、ＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数を用いて、前記コンピュータ上で実行されているスレッド情報を収集することを特徴とする、請求項７に記載のネットワークアクセス制御システム。
【請求項１０】
前記ネットワーク監視部は、前記ネットワークパケットをフィルタリングするネットワークフィルター部と、前記ネットワークパケットの通信主体のプロセスＩＤおよびスレッドＩＤを基準に前記ネットワークパケットのトラフィックを許可または遮断するネットワーク遮断部とを含むことを特徴とする、請求項１に記載のネットワークアクセス制御システム。
【請求項１１】
前記ネットワークフィルター部は、カーネルレベルでネットワークフィルタードライバーを用いてネットワークフィルタリングすることを特徴とする、請求項１０に記載のネットワークアクセス制御システム。
【請求項１２】
前記ネットワークフィルター部は、ユーザーレベルでプロセスが使用するソケット関数をフッキングしてネットワークフィルタリングすることを特徴とする、請求項１０に記載のネットワークアクセス制御システム。
【請求項１３】
ネットワークアクセス制御システムが、コンピュータで実行されるプロセス情報を収集する第１段階と、
前記ネットワークアクセス制御システムが、収集された前記プロセス情報でコードインジェクションされた領域を探知する第２段階と、
前記ネットワークアクセス制御システムが、前記コードインジェクションされた領域をベースとして生成されたコードインジェクション基盤スレッドを探知する第３段階と、
前記ネットワークアクセス制御システムが、ネットワークフィルタリングしてネットワークにアクセスするネットワークパケットのトラフィックを収集する第４段階と、
前記ネットワークアクセス制御システムが、前記第４段階で探知された前記ネットワークパケットの通信主体が前記コードインジェクション基盤スレッドである場合は、前記探知されたネットワークパケットのトラフィックが遮断されるようにする第５段階とを含んでなることを特徴とする、ネットワークアクセス制御方法。
【請求項１４】
前記第１段階は、前記コンピュータ上で実行されているプロセス別にプロセス構造体を収集することを特徴とする、請求項１３に記載のネットワークアクセス制御方法。
【請求項１５】
前記第２段階は、前記ネットワークアクセス制御システムが、前記収集されたプロセスに割り当てられた仮想アドレス空間に対する情報を収集する第２１段階と、
前記ネットワークアクセス制御システムが、検査対象仮想アドレス空間を選択し、前記検査対象仮想アドレス空間のメモリタイプとプロテクトフラグ値を検査する第２２段階と、前記第２２段階の検査結果、前記検査対象仮想アドレス空間のメモリタイプがプライベートタイプでありかつプロテクトフラグ値が実行可能（ＥＸＥＣＵＴＡＢＬＥ）である場合は、前記検査対象仮想アドレス空間をコードインジェクション領域として判断する第２３段階とを含むことを特徴とする、請求項１３に記載のネットワークアクセス制御方法。
【請求項１６】
前記第２１段階は、カーネルレベル（Ｋｅｒｎｅｌ  Ｌｅｖｅｌ）でプロセス構造体（ＥＰｒｏｃｅｓｓ）のＶａｄＲｏｏｔメンバーを検査し、前記収集されたプロセスに割り当てられた仮想アドレス空間の仮想アドレス範囲と属性情報を収集することを特徴とする、請求項１５に記載のネットワークアクセス制御方法。
【請求項１７】
前記第２１段階は、ユーザーレベル（Ｕｓｅｒ  Ｌｅｖｅｌ）でＶｉｒｔａｌＱｕｅｒｙＥｘ関数を用いて、前記収集されたプロセスに割り当てられた仮想アドレス空間の仮想アドレス範囲と属性情報を収集することを特徴とする、請求項１５に記載のネットワークアクセス制御方法。
【請求項１８】
前記第３段階は、前記ネットワークアクセス制御システムが、前記コンピュータで実行されるスレッド情報を収集する第３１段階と、
前記ネットワークアクセス制御システムが、検査対象スレッドを選択し、前記検査対象スレッドの開始アドレス値が前記コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属するかを比較する第３２段階と、
前記第３２段階の比較結果、前記検査対象スレッドの開始アドレス値が前記コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属する場合は、前記コードインジェクションされた仮想アドレス空間にコードインジェクション基盤スレッドが存在すると判断する第３３段階とを含むことを特徴とする、請求項１３に記載のネットワークアクセス制御方法。
【請求項１９】
前記第３３段階後、前記コードインジェクション基盤スレッドのプロセスＩＤおよびスレッドＩＤを遮断スレッドリストに含むことを特徴とする、請求項１８に記載のネットワークアクセス制御方法。
【請求項２０】
前記第３１段階は、プロセス構造体（ＥＰｒｏｃｅｓｓ）のスレッドリストヘッド（ＴｈｒｅａｄＬｉｓｔＨｅａｄ）を検査し、前記コンピュータ上で実行されているスレッド情報を収集することを特徴とする、請求項１８に記載のネットワークアクセス制御方法。
【請求項２１】
前記第３１段階は、ＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数を用いて、前記コンピュータ上で実行されているスレッド情報を収集することを特徴とする、請求項１８に記載のネットワークアクセス制御方法。
【請求項２２】
前記第４段階は、カーネルレベルでネットワークフィルタードライバーを用いてネットワークフィルタリングすることを特徴とする、請求項１３に記載のネットワークアクセス制御方法。
【請求項２３】
前記第４段階は、ユーザーレベルでプロセスが使用するソケット関数をフッキングしてネットワークフィルタリングすることを特徴とする、請求項１３に記載のネットワークアクセス制御方法。
【請求項２４】
前記第５段階は、前記ネットワークアクセス制御システムが、前記コードインジェクション基盤スレッドのプロセスＩＤおよびスレッドＩＤを遮断スレッドリストに格納する第５１段階と、
前記ネットワークアクセス制御システムが、前記収集されたネットワークパケットのプロセスＩＤとスレッドＩＤ情報を収集する第５２段階と、
前記ネットワークアクセス制御システムが、前記第５２段階で収集された前記プロセスＩＤおよびスレッドＩＤが前記遮断スレッドリストに含まれる場合は、前記収集されたネットワークパケットのトラフィックを遮断する第５３段階と、
前記ネットワークアクセス制御システムが、前記収集されたネットワークパケットのプロセスＩＤおよびスレッドＩＤが遮断スレッドリストに含まれずかつ前記プロセスＩＤが許可プロセスリストに含まれる場合は、前記収集されたネットワークパケットのトラフィックを許可する第５４段階とを含むことを特徴とする、請求項１３に記載のネットワークアクセス制御方法。
【請求項２５】
前記第５１段階は、前記ネットワークアクセス制御システムが、ユーザーの検証後、前記コードインジェクション基盤スレッドのプロセスＩＤおよびスレッドＩＤを遮断スレッドリストに格納することを特徴とする、請求項２４に記載のネットワークアクセス制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークアクセス制御システムおよび方法に係り、より詳しくは、プロセスにコードインジェクション（ｃｏｄｅ  ｉｎｊｅｃｔｉｏｎ）により挿入されたスレッドを基準にネットワークアクセスを制御するシステムおよび方法に関する。
【背景技術】
【０００２】
インターネットはＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）を使用するネットワークである。このようなインターネット技術が発達するにつれて、インターネットの使用領域が拡張されることにより、個人および一般企業においてもインターネット網に接続して各種情報を取得し、その情報を業務に利用している。ところが、上述したような情報取得の利点とは逆に、ウイルスなどの各種ハッキングプログラムがインターネットに横行し、インターネットに接続されたネットワーク網へのウイルスなどの侵入により、インターネットを使用するシステムが攻撃を受けるところもある。
【０００３】
このようなシステムに対する不正侵入を予防するためのセキュリティ技術として、マイクロソフト（Ｍｉｃｒｏｓｏｆｔ）社では、ＷＩＮＤＯＷＳ（登録商標）  ＸＰバーションからコンピュータまたはネットワークを保護するためのインターネット接続ファイアウォール（ＩＣＦ：Ｉｎｔｅｒｎｅｔ  Ｃｏｎｎｅｃｔｉｏｎ  Ｆｉｒｅｗａｌｌ）を基本的に提供している。
【０００４】
インターネット接続ファイアウォールは、コンピュータユーザーの所望しないトラフィックが外部からコンピュータに持ち込まれたりコンピュータから外部に持ち出されたりしないようにするセキュリティ技術である。このために、インターネット接続ファイアウォールは、通信許可リストをテーブルとして構築し、ネットワークフィルタリング技術を用いてインバウンドパケット（外部からコンピュータに入ってくるパケット）およびアウトバウンドパケット（コンピュータから外部に出ていくパケット）を追跡し、これらのパケットを通信許可リストと比較する。該当パケットが通信許可リストに含まれる場合は、該当パケットのトラフィックを許可し、該当パケットが通信許可リストに含まれない場合は、該当パケットのトラフィックを遮断する。この際、通信許可リストには、ユーザーによって通信が許可されたプロセスのプロセスＩＤと経路が格納される。
【０００５】
図１は従来のインターネット接続ファイアウォールにおけるネットワークアクセス遮断方法を示す動作流れ図である。
インターネット接続ファイアウォールは、ネットワークパケットに対して、該当パケットを送信または受信するプロセスのプロセス情報（プロセスＩＤと経路）を分析し（Ｓ１１）、該当プロセスＩＤと経路が通信許可リストに含まれる場合は（Ｓ１２）、該当パケットのトラフィックを許可する（Ｓ１３）。ところが、該当プロセスＩＤと経路が通信許可リストに含まれない場合は（Ｓ１２）、該当プロセスが送信または受信しようとするパケットを許可するか否かについてユーザーから検証を受ける（Ｓ１４）。ユーザーが前記パケットの伝送を許可する場合は（Ｓ１５）、通信許可リストに該当プロセスのプロセスＩＤと経路を追加し（Ｓ１６）、該当パケットのトラフィックを許可する（Ｓ１３）。一方、ユーザーが前記パケットの伝送を許可しない場合は（Ｓ１５）、該当パケットのトラフィックを遮断する（Ｓ１７）。
【０００６】
このような従来のインターネット接続ファイアウォールにおけるネットワークアクセス遮断方法は、プロセスＩＤを基準にパケットトラフィックを許可または遮断するため、ハッカーが通信の許可されたプロセスに悪質なコードを挿入し、その悪質なコードが動作してパケットトラフィックを発生する場合にはそれを遮断することができないという問題点がある。
【０００７】
次に、これをより詳しく説明する。
通常、インターネットエクスプローラー（ｉｅｘｐｌｏｒｅ．ｅｘｅ）は、ＷＩＮＤＯＷＳ（登録商標）ＯＳの下で広く用いられるＷｅｂブラウザプログラムであって、アウトバウンドパケットやインバウンドパケットなどのトラフィックを随時発生する。よって、インターネットエクスプローラーで発生したパケットの伝送に対して検証が要請されると、ユーザーは特に疑いなく許可するだろう。その場合、インターネットエクスプローラーが外部に持ち出すアウトバウンドパケット、および外部からインターネットエクスプローラーに持ち込まれるインバウンドパケットが全てユーザーの追加検証なしで許可されるであろう。
【０００８】
一方、トロイの木馬（ｔｒｏｊａｎ）やゼウス（Ｚｅｕｓ）などのプログラムは、プロセスにコードインジェクション（ｃｏｄｅ  ｉｎｊｅｃｔｉｏｎ）を行って悪質なコードを挿入し、その悪質なコードがスレッドを生成するようにする。最近、ゼウスプログラムによってユーザーコンピュータに挿入された悪質なコードが、コンピュータに記憶された銀行取引口座や暗証番号などの金融情報をハッカーに流出させ、ハッカーがその金融情報を用いて中小企業や地方自治団体の銀行アカウントにアクセスして現金を引き出す金融事故が発生したことがある。
【０００９】
例えば、図２に示すように、インターネットエクスプローラーに悪質なコードが挿入されてその悪質なコードをベースとしてスレッドが生成され、その悪質なスレッド（Ｔｈｒｅａｄ３）が悪意的に情報を流出させようとすると仮定する。この場合、インターネット接続ファイアウォールは、プロセスＩＤ（すなわち、インターネットエクスプローラー（ｉｅｘｐｌｏｒｅ．ｅｘｅ））を用いて通信許可リストを検索してインターネットエクスプローラーのネットワークアクセスを制御する。すなわち、インターネットエクスプローラーが通信許可リストに含まれている場合は、その悪質なスレッドによる悪意のある情報流出を許可し、インターネットエクスプローラーが通信許可リストに含まれていない場合は、その悪質なスレッドによる悪意のある情報流出を遮断する。勿論、インターネット接続ファイアウォールは、インターネットエクスプローラーの他の正常スレッドによる正常パケットに対してはプロセスＩＤを基準にそのネットワークアクセスを制御する。
【００１０】
したがって、ユーザーがインターネットエクスプローラーに対してネットワークアクセスを許可すれば、他の正常スレッドによる正常パケットの伝送が円滑に行われてユーザーが不便なくインターネットに接続することができるが、インターネットエクスプローラーに含まれた悪質なスレッドによるネットワークアクセスも全て許可されるため、セキュリティが脆弱になるという問題点がある。
【００１１】
これに対し、ユーザーがインターネットエクスプローラーに対してネットワークアクセスを許可しなければ、悪質なスレッドによる悪意のある情報流出を防止することはできるが、他の正常スレッドによる正常パケットの伝送も全て遮断されるため、ユーザーのインターネット使用に大きな不便さが伴う。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
本発明は、上述した従来の技術の問題点を解決するために案出されたもので、その目的は、プロセスＩＤだけでなく、スレッドＩＤに基づいてネットワークパケットのトラフィックを許可または遮断することにより、ユーザーの便宜性およびセキュリティの強度を向上させたネットワークアクセス制御システムおよび方法を提供することにある。
【課題を解決するための手段】
【００１３】
本発明に係るネットワークアクセス制御システムは、プロセスに含まれたコードインジェクション基盤スレッドを探知するプロセス検査部と、ネットワークフィルタリングによって、ネットワークにアクセスするネットワークパケットを探知し、探知された前記ネットワークパケットの通信主体が前記コードインジェクション基盤スレッドである場合は前記探知されたネットワークパケットのトラフィックが遮断されるようにするネットワーク監視部とを含んでなることを特徴とする。
【００１４】
また、本発明に係るネットワークアクセス制御方法は、ネットワークアクセス制御システムが、コンピュータで実行されるプロセス情報を収集する第１段階と、前記ネットワークアクセス制御システムが、収集された前記プロセス情報に対して、コードインジェクションされた仮想アドレス空間領域を探知する第２段階と、前記ネットワークアクセス制御システムが、前記コードインジェクションされた仮想アドレス空間にコードインジェクション基盤スレッドが存在するかを探知する第３段階と、前記ネットワークアクセス制御システムがネットワークフィルタリングしてネットワークパケットのトラフィックを収集する第４段階と、前記ネットワークアクセス制御システムが前記コードインジェクション基盤スレッドの情報を用いて前記ネットワークパケットのトラフィックを許可または遮断する第５段階とを含んでなることを特徴とする。
【発明の効果】
【００１５】
上述したように、本発明によれば、プロセスにコードインジェクションにより挿入された悪質なコードによって生成された悪質なスレッドによる悪意のある情報流出を実時間で遮断することができるという効果がある。また、本発明によれば、同じプロセスであっても、スレッド別に許可／遮断を決定し、正常スレッドによる正常なネットワークアクセスは許可し、悪質なスレッドによる悪意のあるネットワークアクセスは遮断することにより、ユーザーの便宜性およびセキュリティの強度を向上させることができるという効果がある。
【図面の簡単な説明】
【００１６】
【図１】従来のインターネット接続ファイアウォールにおけるネットワークアクセス遮断方法を示す動作流れ図である。
【図２】従来の技術に係るネットワークアクセス遮断方法の問題点を説明するために示す図である。
【図３】本発明に係るネットワークアクセス制御システムの構成ブロック図である。
【図４】任意のプロセスのＶａｄツリー構造を示す一例示図である。
【図５】図４のプロセスのＶａｄツリー構造を表現したメモリ構造を示す図である。
【図６】本発明に係るネットワークアクセス制御方法を示す動作流れ図である。
【図７】図６における任意のプロセスのコードインジェクションされた仮想アドレス空間領域を探知する段階（Ｓ６２）を詳細に示す動作流れ図である。
【図８】図６の段階Ｓ６２で探知された、コードインジェクションされた仮想アドレス空間をベースとするスレッド、すなわちコードインジェクション基盤スレッドを探知する段階（Ｓ６３）を詳細に示す動作流れ図である。
【図９】図６の段階Ｓ６３で探知されたコードインジェクション基盤スレッド情報を用いてネートワークパケットを制御する段階（Ｓ６５）を詳細に示す動作流れ図である。
【発明を実施するための形態】
【００１７】
以下、添付図面を参照して、本発明に係るネットワークアクセス制御システムおよび方法をより詳細に説明する。
図３は本発明に係るネットワークアクセス制御システムの構成ブロック図である。
本発明に係るネットワークアクセス制御システムは、プロセスに対してコードインジェクション基盤スレッドを探知するプロセス検査部３１０と、ネットワークフィルタリングによって、ネットワークにアクセスするネットワークパケットを探知し、探知された前記ネットワークパケットの通信主体が前記コードインジェクション基盤スレッドである場合は、前記探知されたネットワークパケットの伝送が遮断されるようにするネットワーク監視部３２０とを含む。
【００１８】
プロセス検査部３１０は、コンピュータ上で実行されているプロセス情報を収集するプロセス情報収集部３１１と、前記プロセス情報収集部で収集されたプロセスに対して、コードインジェクションされた領域を探知するコードインジェクション探知部３１２と、前記コードインジェクションされた領域をベースとして生成されたスレッドを探知するコードインジェクション基盤スレッド探知部３１３とを含む。
【００１９】
ネットワーク監視部３２０は、ネットワークフィルタリングを行ってネートワークパケットを探知するネットワークフィルター部３２１と、前記ネットワークパケットの通信（送信または受信）する主体のプロセスＩＤおよびスレッドＩＤを基準に前記ネットワークパケットの伝送を許可または遮断するネットワーク遮断部３２２とを含む。
【００２０】
プロセス情報収集部３１１は、コンピュータ上で実行されているプロセスに対してプロセス別にプロセス構造体を収集することにより、プロセス情報を収集する。
プロセス情報収集部３１１がプロセス別プロセス情報を収集する方法としては、多様な方法、たとえば、ｐｓａｐｉ．ｄｌｌのＥｎｕｍＰｒｏｃｅｓｓｅｓ関数を用いてプロセスを列挙し、各プロセス別プロセス構造体を収集する方法や、ＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数を用いてプロセス情報を獲得し、プロセス別プロセス構造体を収集する方法、カーネル全域変数であるＰｓｐＣｉｄＴａｂｌｅを調査してプロセス別プロセス構造体（ＥＰｒｏｃｅｓｓ）を収集する方法、カーネル全域変数であるＰｓｐＣｉｄＴａｂｌｅを調査してスレッド構造体（ＥＴｈｒｅａｄ）を収集した後、スレッド構造体（ＥＴｈｒｅａｄ）のプロセスメンバーを介してプロセス構造体（ＥＰｒｏｃｅｓｓ）を収集する方法、任意のプロセスのプロセス構造体（ＥＰｒｏｃｅｓｓ）のハンドルテーブル（ＨａｎｄｌｅＴａｂｌｅ）を検査し、残りのプロセス別プロセス構造体（ＥＰｒｏｃｅｓｓ）を収集する方法、実行されたプロセスを管理するｃｓｒｓｓ．ｅｘｅの内部プロセス情報項目を収集する方法、プロセス構造体（ＥＰｒｏｃｅｓｓ）のメモリ常駐パターンでメモリスキャンを介してプロセス別プロセス構造体（ＥＰｒｏｃｅｓｓ）を収集する方法、スレッド構造体（ＥＴｈｒｅａｄ）のメモリ常駐パターンでメモリスキャンを介してスレッド別スレッド構造体（ＥＴｒｅａｄ）を収集した後、収集されたスレッド構造体（ＥＴｈｒｅａｄ）のプロセスメンバーを介してプロセス別プロセス構造体（ＥＰｒｏｃｅｓｓ）を収集する方法などが含まれる。
【００２１】
コードインジェクション探知部３１２は、プロセス情報収集部３１１で収集された各プロセスに対して、コードインジェクションされた領域を探知する。コードインジェクション探知部３１２は、プロセスに割り当てられた仮想アドレス空間情報を収集する仮想アドレス空間情報収集部３１２ａと、収集された仮想アドレス空間に対してコードインジェクション有無を調査する仮想アドレス空間調査部３１２ｂとを含む。
【００２２】
仮想アドレス空間情報収集部３１２ａが、プロセスに割り当てられた仮想アドレス空間情報を収集する方法としては、カーネルレベル（Ｋｅｒｎｅｌ  Ｌｅｖｅｌ）でプロセス構造体（ＥＰｒｏｃｅｓｓ）のＶａｄＲｏｏｔメンバーを検査する方法と、ユーザーレベル（Ｕｓｅｒ  Ｌｅｖｅｌ）でＶｉｒｔｕａｌＱｕｅｒｙＥｘ関数を使用する方法がある。
【００２３】
仮想アドレス空間情報収集部３１２ａがプロセス構造体（ＥＰｒｏｃｅｓｓ）のＶａｄＲｏｏｔメンバーを検査し、プロセスに割り当てられた仮想アドレス空間情報を収集する方法について詳細に説明する。ここで、Ｖａｄとは仮想アドレス記述子（Ｖｉｒｔｕａｌ  ａｄｄｒｅｓｓ  Ｄｅｓｃｒｉｐｔｏｒ）を意味し、通常、一つのプロセスには多数の仮想アドレス空間が割り当てられるが、それぞれのＶａｄはプロセスに割り当てられたそれぞれの仮想アドレス空間を表現する。
【００２４】
プロセス情報収集部３１１で収集されたプロセス構造体（ＥＰｒｏｃｅｓｓ）は、カーネルレベル（Ｋｅｒｎｅｌ  Ｌｅｖｅｌ）で管理する客体であって、プロセスの内部情報を含み、その中でもＶａｄＲｏｏｔメンバーを含む。このＶａｄＲｏｏｔは、ツリー形態の資料構造であって、プロセスに割り当てられたメモリアドレス情報を管理する。
【００２５】
図４は任意のプロセスのＶａｄツリー構造を示す一例示図である。図４における各四角ブロックは、一つのＶａｄに該当し、仮想アドレス空間の仮想ページ番号（ＶＰＮ；Ｖｉｒｔｕａｌ  Ｐａｇe  Ｎｕｍｂｅｒ）の開始アドレス（ＳｔａｒｔＶＰＮ）および終了アドレス（ＥｎｄＶＰＮ）と、メモリタイプ（Ｐｒｉｖａｔｅ／Ｍａｐｐｅｄ Ｅｘｅ／Ｍａｐｐｅｄ）と、プロテクト（ｐｒｏｔｅｃｔ）フラグ値（ＲＥＡＤＷＲＩＴＥ／ＲＥＡＤＯＮＬＹ／ＥＸＥ＿ＷＲＩＴＥ＿ＣＯＰＹ）が記載されている。仮想アドレス空間情報収集部３１２ａは、プロセス構造体（ＥＰｒｏｃｅｓｓ）のＶａｄＲｏｏｔをベースとして、プロセスに割り当てられた仮想アドレス空間にどの仮想アドレス範囲（開始アドレスと終了アドレス）が割り当てられているか、そしてその属性（メモリタイプ、プロテクトフラグ値）を確認して収集することができる。図５は図４のプロセスのＶａｄツリー構造を表現したメモリ構造を示す図である。
【００２６】
次に、仮想アドレス空間情報収集部３１２ａが、ユーザーレベルでＶｉｒｔｕａｌＱｕｅｒｙＥｘ関数を用いて、プロセスに割り当てられた仮想アドレス空間情報を収集する方法について詳細に説明する。ユーザーレベルでＶｉｒｔｕａｌＱｕｅｒｙＥｘ関数を使用すると、クエリーした仮想アドレスに対する情報を得ることができるが、ＶｉｒｔｕａｌＱｕｅｒｙＥｘ関数のクエリー結果がＭＥＭＯＲＹ＿ＢＡＳＩＣ＿ＩＮＦＯＲＭＡＴＩＯＮ構造体の形で得られる。このＭＥＭＯＲＹ＿ＢＡＳＩＣ＿ＩＮＦＯＲＭＡＴＩＯＮ構造体は、前述したＶａｄＲｏｏｔを介して得られる情報と類似し、プロセスに割り当てられた仮想アドレス空間別に該当仮想アドレス空間に割り当てられた仮想アドレス範囲（開始アドレスと終了アドレス）と、その属性（メモリタイプ、プロテクトフラグ値）を確認することができる。
【００２７】
ＶｉｒｔｕａｌＱｕｅｒｙＥｘ関数の詳細な使用法は、次のリンクから確認することができる。
http://msdn.microsoft.com/en-us/library/aa366907(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/ms810627.aspx 
仮想アドレス空間調査部３１２ｂは、仮想アドレス空間情報収集部３１２ａで収集した各仮想アドレス空間の属性情報を用いて、該当仮想アドレス空間にコードインジェクション（ｃｏｄｅ  ｉｎｊｅｃｔｉｏｎ）が行われているかを調査する。プロセスに正常的に挿入されてロードされるＤＬＬファイルの場合、そのＤＬＬファイルに割り当てられた仮想アドレス空間のメモリタイプはマップタイプ（Ｍａｐｐｅｄ  Ｔｙｐｅ）であり、プロテクトフラグ値は実行可能（ｅｘｅｃｕｔａｂｌｅ）である。一方、プロセスにコードインジェクションされた場合、そのコードインジェクションされた仮想アドレス空間のメモリタイプはプライベートタイプ（Ｐｒｉｖａｔｅ  Ｔｙｐｅ）であり、プロテクトフラグ値は実行可能（ｅｘｅｃｕｔａｂｌｅ）である。
【００２８】
したがって、仮想アドレス空間調査部３１２ｂは、プロセスに割り当てられた仮想アドレス空間のうち、メモリタイプがマップタイプではなくプライベートタイプであり、プロテクトフラグ値が実行可能であれば、該当仮想アドレス空間をコードインジェクション領域として判断する。仮想アドレス空間調査部３１２ｂは、コードインジェクション領域として判断された仮想アドレス空間の仮想アドレス範囲（開始アドレスと終了アドレス）情報をコードインジェクション基盤スレッド探知部３１３に伝達する。
【００２９】
コードインジェクション基盤スレッド探知部３１３は、プロセスで実行される全てのスレッドに対して情報を収集するスレッド情報収集部３１３ａ、および前記収集されたスレッドの開始アドレス値（Ｗｉｎ３２ＳｔａｒｔＡｄｄｒｅｓｓ）と前記仮想アドレス空間調査部３１２ｂから提供されたコードインジェクションされた仮想アドレス空間の仮想アドレス範囲とを比較して、前記収集されたスレッドの開始アドレス値が前記コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属すれば、前記コードインジェクションされた仮想アドレス空間にコードインジェクション基盤スレッドが存在すると判断するアドレス比較部３１３ｂを含む。
【００３０】
スレッド情報収集部１３１ａが、プロセスで実行される全てのスレッドに対する情報を収集する方法としては、多様な方法、たとえば、プロセス構造体（ＥＰｒｏｃｅｓｓ）のスレッドリストヘッド（ＴｈｒｅａｄＬｉｓｔＨｅａｄ）を検査する方法や、ＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数を使用する方法などが含まれる。
【００３１】
まず、プロセス構造体（ＥＰｒｏｃｅｓｓ）のスレッドリストヘッドを検査する方法について説明する。プロセス構造体（ＥＰｒｏｃｅｓｓ）は、前述したように、カーネルレベル（Ｋｅｒｎｅｌ  Ｌｅｖｅｌ）で使用するプロセスに対する情報を含む構造体であって、プロセス構造体のスレッドリストヘッド（ＴｈｒｅａｄＬｉｓｔＨｅａｄ）メンバーにはプロセス内で動作中の全てのスレッドに対する情報が含まれる。スレッドリストヘッド（ＴｈｒｅａｄＬｉｓｔＨｅａｄ）メンバーは連結リスト形態であり、ここに連結されたそれぞれのエントリーを介してスレッド構造体（ＥＴｈｒｅａｄ）を求めることができる。スレッド構造体（ＥＴｈｒｅａｄ）は、カーネルレベルで使用するスレッドに対する情報を含む構造体である。よって、スレッド情報収集部３１３ａは、スレッドリストヘッド（ＴｈｒｅａｄＬｉｓｔＨｅａｄ）メンバーを介してスレッド構造体を収集して検査し、該当プロセスに存在する全てのスレッドに対する情報を収集する。
【００３２】
次に、スレッド情報収集部３１３ａがＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数を用いてスレッド情報を収集する方法について説明する。ＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数は、システム情報を求めるときに使用する関数であって、ＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎＣｌａｓｓによって、得られる情報タイプが異なる。本発明では、ＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎＣｌａｓｓをＳｙｓｔｅｍＰｒｏｃｅｓｓｅｓＡｎｄＴｈｒｅａｄｓＩｎｆｏｒｍａｔｉｏｎとして設定してＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数を呼び出すことにより、プロセス別スレッド情報を得る。
【００３３】
ＺｗＱｕｅｒｙＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎ関数呼び出しが成功すると、ＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎで該当情報にアクセスすることができる。ＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎは、全プロセスと各プロセスに対するスレッド情報を含んでいるメモリ空間であって、ＳｙｓｔｅｍＩｎｆｏｒｍａｔｉｏｎを介してＳＹＳＴＥＭ＿ＰＲＯＣＥＳＳＥＳ構造体にアクセスすることができ、結局、配列として存在するＳＹＳＴＥＭ＿ＴＨＲＥＡＤＳを得ることができる。また、ＳＹＳＴＥＭ＿ＰＲＯＣＥＳＳＥＳ構造体のＮｅｘｔＥｎｔｒｙＤｅｌｔａメンバーを用いて次のプロセスに対するＳＹＳＴＥＭ＿ＰＲＯＣＥＳＳＥＳ構造体領域を探していくことができる。
【００３４】
次に、アドレス比較部３１３ｂは、プロセスで実行される任意のスレッドの開始アドレス値（Ｗｉｎ３２ＳｔａｒｔＡｄｄｒｅｓｓ）と、前記プロセスのコードインジェクションされた仮想アドレス空間の仮想アドレス範囲とを比較して、前記収集されたスレッドの開始アドレス値が前記コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属すると、前記コードインジェクション基盤スレッドが存在すると判断し、そのコードインジェクション基盤スレッドのプロセスＩＤおよびスレッドＩＤを遮断スレッドリストに追加してネットワーク遮断部３２２に伝達する。
【００３５】
ネットワークフィルター部３２１は、通常のネットワークフィルタリングを行ってネットワークパケットトラフィックを監視する。ネットワークフィルター部３２１のネットワークフィルタリング方法として、カーネルレベルではネットワークフィルタードライバーを使用することができる。ネットワークフィルタードライバーを使用する方法には、ＮＤＩＳ＿ＯＰＥＮ＿ＢＬＯＣＫフッキング方法、Ｎｄｉｓ  Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｄｒｉｖｅｒ実現方法、ＴＤＩフッキング方法、ＷＦＰ（ＷＩＮＤＯＷＳ（登録商標）  Ｆｉｌｔｅｒｉｎｇ  Ｐｌａｔｆｏｒｍ）を使用する方法などの多様な方法が含まれる。一方、ネットワークフィルター部３２１のネットワークフィルタリング方法として、ユーザーレベルでは、特定のプロセスをターゲットとして、該特定のプロセスが使用するソケット関数をフッキングしてネットワークパケットトラフィックを監視することができる。
【００３６】
ネットワーク遮断部３２２は、ネットワークパケットの送信または受信主体のプロセスＩＤとスレッドＩＤを用いて該当ネットワークパケットのトラフィックを許可または遮断する。すなわち、ネットワークパケットのスレッドＩＤが遮断スレッドリストに含まれる場合は、前記ネットワークパケットのトラフィックを遮断し、ネットワークパケットのスレッドＩＤが遮断スレッドリストに含まれないながらネットワークパケットのプロセスＩＤが許可プロセスリストに含まれる場合は、前記ネットワークパケットのトラフィックを許可する。一方、前記ネットワークパケットのプロセスＩＤが許可プロセスリストに含まれない場合は、ユーザーの検証を受け、前記ユーザー検証結果に基づいて該当トラフィックを許可または遮断する。
【００３７】
前述したように構成されたネットワークアクセス制御システムの動作を説明する。
図６は本発明に係るネットワークアクセス制御方法を示す動作流れ図である。
本発明に係るネットワークアクセス制御システムは、コンピュータで実行されるプロセス情報を収集する（Ｓ６１）。次いで、収集された各プロセスに対して、コードインジェクションされた仮想アドレス空間領域を探知する（Ｓ６２）。その後、そのコードインジェクションされた仮想アドレス空間にコードインジェクション基盤スレッドが存在するかを探知する（Ｓ６３）。その次に、ネットワークパケットトラフィックが探知されると（Ｓ６４）、前記コードインジェクション基盤スレッドをベースとして前記ネットワークパケットのトラフィックを許可または遮断する（Ｓ６５）。
【００３８】
図７は図６における任意のプロセスのコードインジェクションされた仮想アドレス空間領域を探知する段階（Ｓ６２）を詳細に示す動作流れ図である。
コードインジェクションされた仮想アドレス空間領域を探知する段階（Ｓ６２）は、次のように行われる。ネットワークアクセス制御システムは、プロセスをなす仮想アドレス空間に対する情報を収集する（Ｓ７１）。一つの仮想アドレス空間を検査対象仮想アドレス空間として選択し（Ｓ７２）、前記検査対象仮想アドレス空間のメモリタイプがプライベートタイプであるか否かを検査する（Ｓ７３）。段階Ｓ７３で検査対象仮想アドレス空間のメモリタイプがプライベートタイプである場合は、前記検査対象仮想アドレス空間のプロテクトフラグ値が実行可能（ＥＸＥＣＵＴＡＢＬＥ）であるか否かを検査する（Ｓ７４）。段階Ｓ７４で検査対象仮想アドレス空間のプロテクトフラグ値が実行可能である場合は、前記検査対象仮想アドレス空間をコードインジェクション領域として判断し（Ｓ７５）、コードインジェクションされた仮想アドレス空間の仮想アドレス範囲情報をコードインジェクション基盤スレッド探知部に伝達する（Ｓ７６）。
【００３９】
その後、前記検査対象仮想アドレス空間が最後の仮想アドレス空間であるか否かを検査し（Ｓ７７）、最後の仮想アドレス空間でない場合は、段階Ｓ７２から繰り返し行う。一方、段階Ｓ７３で検査対象仮想アドレス空間のメモリタイプがプライベートタイプではない場合、或いは段階Ｓ７４で検査対象仮想アドレス空間のプロテクトフラグ値が実行可能でない場合は、段階Ｓ７７に直ちに移行する。
【００４０】
図８は図６の段階Ｓ６２で探知された、コードインジェクションされた仮想アドレス空間をベースとしたスレッド、すなわちコードインジェクション基盤スレッドを探知する段階（Ｓ６３）を詳細に示す動作流れ図である。
【００４１】
コードインジェクション基盤スレッドを探知する段階（Ｓ６３）は、次のように行われる。ネットワークアクセス制御システムは、コンピュータで実行されるスレッド情報を収集する（Ｓ８１）。収集されたスレッド情報のうち、一つのスレッドを検査対象スレッドとして選択し（Ｓ８２）、検査対象スレッドの開始アドレス値が、コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属するかを比較する（Ｓ８３）。段階Ｓ８３の比較結果、検査対象スレッドの開始アドレス値が、コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属すると（Ｓ８４）、前記コードインジェクションされた仮想アドレス空間にコードインジェクション基盤スレッドが存在すると判断し（Ｓ８５）、コードインジェクション基盤スレッドのプロセスＩＤおよびスレッドＩＤを遮断スレッドリストに含ませた後、ネットワーク遮断部へ伝達する（Ｓ８６）。段階Ｓ８６で前記コードインジェクション基盤スレッドのプロセスＩＤおよびスレッドＩＤに対してユーザーの検証を受けた後、遮断スレッドリストに含ませることもできる。
【００４２】
その後、前記検査対象スレッドが最後のスレッドであるか否かを検査し（Ｓ８７）、最後のスレッドでない場合は、段階Ｓ８２から繰り返し行う。一方、段階Ｓ８４で検査対象スレッドの開始アドレス値が、コードインジェクションされた仮想アドレス空間の仮想アドレス範囲に属しない場合は、段階Ｓ８７に直ちに移行する。
【００４３】
図９は図６の段階Ｓ６３で探知されたコードインジェクション基盤スレッド情報を用いてネットワークパケットを制御する段階（Ｓ６５）を詳細に示す動作流れ図である。
ネットワークパケット制御段階（Ｓ６５）は、次のように行われる。ネットワークアクセス制御システムは、ネットワークフィルタリングを行って、コンピュータで送受信されるネットワークパケットを収集する（Ｓ９１）。そして、収集されたネットワークパケットのプロセスＩＤとスレッドＩＤおよび全体経路情報を収集する（Ｓ９２）。前記プロセスＩＤおよびスレッドＩＤが遮断スレッドリストに含まれる場合は（Ｓ９３）、前記収集されたネットワークパケットのトラフィックを遮断する（Ｓ９４）。段階Ｓ９３で前記収集されたネットワークパケットのプロセスＩＤおよびスレッドＩＤが遮断スレッドリストに含まれない場合は、前記プロセスＩＤが許可プロセスリストに含まれるか否かを検査する（Ｓ９５）。段階Ｓ９５でプロセスＩＤが許可プロセスリストに含まれる場合は、前記収集されたネットワークパケットのトラフィックを許可する（Ｓ９６）。
【００４４】
一方、段階Ｓ９５でプロセスＩＤが許可プロセスリストに含まれない場合は、前記プロセスＩＤに対してユーザーの検証を要請し（Ｓ９７）、ユーザーから許可される場合は（Ｓ９８）、前記収集されたネットワークパケットのプロセスＩＤを許可プロセスリストに追加した後（Ｓ９９）、前記収集されたネットワークパケットのトラフィックを許可する（Ｓ９６）。一方、段階Ｓ９８でユーザーから許可されない場合は、前記収集されたネットワークパケットのトラフィックを遮断する（Ｓ９４）。
【００４５】
以上、本発明についての技術思想を添付図面と共に述べたが、これは本発明の最も良好な実施形態を例示的に説明したものに過ぎず、本発明を限定するものではない。また、当該技術分野における通常の知識を有する者であれば、本発明の技術思想の範疇を逸脱することなく様々な変形および模倣を加え得るのは明確な事実である。
【符号の説明】
【００４６】
３１０…プロセス検査部
３１１…プロセス情報収集部
３１２…コードインジェクション探知部
３１３…コードインジェクション基盤スレッド探知部
３２０…ネットワーク監視部
３２１…ネットワークフィルター部
３２２…ネットワーク遮断部
【図４】
0005956570.tif 000002
【図５】
0005956570.tif 000003
【図１】
0005956570.tif 000004
【図２】
0005956570.tif 000005
【図３】
0005956570.tif 000006
【図６】
0005956570.tif 000007
【図７】
0005956570.tif 000008
【図８】
0005956570.tif 000009
【図９】
0005956570.tif 000010