(57)【特許請求の範囲】
【請求項１】
所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置であって、
前記監視プログラムを含む所定のプロセスを実行することが可能としてあり、
該所定のプロセスは、終了した場合に前記監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスであり、
前記所定のプロセスの実行に応じて、前記監視プログラムを起動する監視プログラム起動手段を備え、
該監視プログラム起動手段は、前記所定のプロセスの実行に応じて、新たなスレッドを生成し、
生成したスレッド内で監視プログラムを実行するとともに、
生成した新たなスレッドを識別する情報を、稼働しているスレッドを識別する情報を抽出するスレッド抽出プログラムの戻り値から削除するスレッド削除手段をさらに有し、
前記監視プログラムが外部から強制終了させられた場合、前記所定のプロセスを終了するようにしてある装置。
【請求項２】
前記監視プログラムは、ダイナミックリンクライブラリとして実装され、
該ダイナミックリンクライブラリを前記所定のプロセスに注入するようにしてある請求項１記載の装置。
【請求項３】
前記所定のリソースは、前記監視プログラムを実行するコンピュータ本体であり、
前記所定のプロセスは、前記コンピュータ本体へのログオン及びログオフを制御するプロセスである請求項１又は２に記載の装置。
【請求項４】
前記所定のリソースは、他のリソースを監視する他の監視プログラムであり、
前記監視プログラムは、前記他の監視プログラムの強制終了を検知する及び／又は前記他の監視プログラムを再起動する請求項１乃至３のいずれか一項に記載の装置。
【請求項５】
所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法であって、
前記監視プログラムを含む所定のプロセスを、該所定のプロセスが終了した場合に前記監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスとし、
前記所定のプロセスの実行に応じて、新たなスレッドを生成し、
生成したスレッド内で監視プログラムを実行し、
生成した新たなスレッドを識別する情報を、稼働しているスレッドを識別する情報を抽出するスレッド抽出プログラムの戻り値から削除し、
前記監視プログラムが外部から強制終了させられた場合、前記所定のプロセスを終了する方法。
【請求項６】
前記監視プログラムは、ダイナミックリンクライブラリとして実装され、
該ダイナミックリンクライブラリを前記所定のプロセスに注入する請求項５記載の方法。
【請求項７】
前記所定のリソースは、前記監視プログラムを実行するコンピュータ本体であり、
前記所定のプロセスは、前記コンピュータ本体へのログオン及びログオフを制御するプロセスである請求項５又は６に記載の方法。
【請求項８】
前記所定のリソースは、他のリソースを監視する他の監視プログラムであり、
前記監視プログラムは、前記他の監視プログラムの強制終了を検知する及び／又は前記他の監視プログラムを再起動する請求項５乃至７のいずれか一項に記載の方法。
【請求項９】
所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法をコンピュータで実行することが可能なコンピュータプログラムであって、
前記コンピュータは、前記監視プログラムを含む所定のプロセスを実行することが可能としてあり、
前記所定のプロセスは、終了した場合に前記監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスであり、
前記コンピュータを、
前記所定のプロセスの実行に応じて、前記監視プログラムを起動する監視プログラム起動手段、及び
前記監視プログラムが外部から強制終了させられた場合、前記所定のプロセスを終了する手段として機能させ、
前記監視プログラム起動手段を、
前記所定のプロセスの実行に応じて、新たなスレッドを生成する手段、及び
生成したスレッド内で監視プログラムを実行する手段として機能させ、
前記コンピュータを、生成した新たなスレッドを識別する情報を、稼働しているスレッドを識別する情報を抽出するスレッド抽出プログラムの戻り値から削除するスレッド削除手段として機能させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定のリソースを監視する監視プログラムを強制的に終了させることによりコンピュータに対して外部から何らかの攻撃が仕掛けられることを未然に回避することができる、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法及び該方法を装置で実行することが可能なコンピュータプログラムに関する。
【背景技術】
【０００２】
インターネット技術の急速な発展に伴い、ネットワークを介して接続されているコンピュータに対する外部からの攻撃の種類も多種多様になってきている。最近では、ネットワークを介した外部からの攻撃に対抗するべく、監視プログラムを常時稼働させておき、外部からの許可されていないアクセスを検知した場合には、検知したアクセスを遮断する等の対応策を施すことで外部からの攻撃を防いでいる。
【０００３】
監視プログラムによるＵＳＢメモリへのファイル複製の監視、印刷ジョブの監視等は、常駐型のプロセスにより行われることが多い。したがって、常駐型のプロセス自体を外部から強制終了された場合、監視機能自体が無効になるという問題点があった。
【０００４】
例えば特許文献１では、監視対象プロセスを専用プロセスが監視し、異常終了時に再起動する方法が開示されている。特許文献２では、複数のホスト間でプログラムを相互監視することで、強制終了されたプロセスが保持するリソースを解放する方法が開示されている。特許文献３では、プロセスを強制終了させた場合に、例外処理を確実に実行させる方法が開示されている。しかし、いずれの方法であっても、プロセスを監視するプロセス自体に対する外部からの強制終了攻撃を防ぐことはできない。
【０００５】
そこで、常駐型のプロセス自体が外部から強制終了されないよう、例えば監視プロセスをシステム権限で稼働するサービスプロセスとして、一般ユーザによる強制終了ができないようにすることで、外部からの強制終了攻撃を回避している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１０−２１４２０８号公報
【特許文献２】特開２００４−２４６４３９号公報
【特許文献３】特開２００６−０９２０５７号公報
【特許文献４】特開２０００−２１５０６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、監視プロセスをシステム権限で稼働するサービスプロセスとした場合であっても、いわゆる「なりすまし」によりシステム権限を有するユーザとして強制終了攻撃が仕掛けられた場合には、容易に監視プロセスが強制終了され、記憶内容の書き換え等がなされるおそれがある。
【０００８】
また、例えば特許文献４に開示してあるように、オペレーションシステムから隠されているハイバネーション用パーティションを利用して監視プロセスを保護することも考えられる。しかし、ハイバネーション用パーティションの存在が必須であり、あらゆるオペレーションシステムに適用することができる汎用性が欠如する。
【０００９】
本発明は斯かる事情に鑑みてなされたものであり、所定のリソースを監視する監視プログラムを強制的に終了させることによりコンピュータに対して外部から何らかの攻撃が仕掛けられることを未然に回避することができる、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法及び該方法を装置で実行することが可能なコンピュータプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために第１発明に係る装置は、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置であって、前記監視プログラムを含む所定のプロセスを実行することが可能としてあり、該所定のプロセスは、終了した場合に前記監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスであり、前記所定のプロセスの実行に応じて、前記監視プログラムを起動する監視プログラム起動手段を備え、該監視プログラム起動手段は、前記所定のプロセスの実行に応じて、新たなスレッドを生成し、生成したスレッド内で監視プログラムを実行するとともに、生成した新たなスレッドを識別する情報を、稼働しているスレッドを識別する情報を抽出するスレッド抽出プログラムの戻り値から削除するスレッド削除手段をさらに有し、前記監視プログラムが外部から強制終了させられた場合、前記所定のプロセスを終了するようにしてある。
【００１１】
また、第２発明に係る装置は、第１発明において、前記監視プログラムは、ダイナミックリンクライブラリとして実装され、該ダイナミックリンクライブラリを前記所定のプロセスに注入するようにしてある。
【００１４】
また、第３発明に係る装置は、第１又は第２発明において、前記所定のリソースは、前記監視プログラムを実行するコンピュータ本体であり、前記所定のプロセスは、前記コンピュータ本体へのログオン及びログオフを制御するプロセスである。
【００１５】
また、第４発明に係る装置は、第１乃至第３発明のいずれか１つにおいて、前記所定のリソースは、他のリソースを監視する他の監視プログラムであり、前記監視プログラムは、前記他の監視プログラムの強制終了を検知する及び／又は前記他の監視プログラムを再起動する。
【００１６】
次に、上記目的を達成するために第５発明に係る方法は、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法であって、前記監視プログラムを含む所定のプロセスを、前記所定のプロセスが終了した場合に前記監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスとし、前記所定のプロセスの実行に応じて、新たなスレッドを生成し、生成したスレッド内で監視プログラムを実行し、生成した新たなスレッドを識別する情報を、稼働しているスレッドを識別する情報を抽出するスレッド抽出プログラムの戻り値から削除し、前記監視プログラムが外部から強制終了させられた場合、前記所定のプロセスを終了する。
【００１７】
また、第６発明に係る方法は、第５発明において、前記監視プログラムは、ダイナミックリンクライブラリとして実装され、該ダイナミックリンクライブラリを前記所定のプロセスに注入する。
【００２０】
また、第７発明に係る方法は、第５又は第６発明において、前記所定のリソースは、前記監視プログラムを実行するコンピュータ本体であり、前記所定のプロセスは、前記コンピュータ本体へのログオン及びログオフを制御するプロセスである。
【００２１】
また、第８発明に係る方法は、第５乃至第７発明のいずれか１つにおいて、前記所定のリソースは、他のリソースを監視する他の監視プログラムであり、前記監視プログラムは、前記他の監視プログラムの強制終了を検知する及び／又は前記他の監視プログラムを再起動する。
【００２２】
次に、上記目的を達成するために第９発明に係るコンピュータプログラムは、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を付与する方法をコンピュータで実行することが可能なコンピュータプログラムであって、前記コンピュータは、前記監視プログラムを含む所定のプロセスを実行することが可能としてあり、前記所定のプロセスは、終了した場合に前記監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスであり、前記コンピュータを、前記所定のプロセスの実行に応じて、前記監視プログラムを起動する監視プログラム起動手段、及び前記監視プログラムが外部から強制終了させられた場合、前記所定のプロセスを終了する手段として機能させ、前記監視プログラム起動手段を、前記所定のプロセスの実行に応じて、新たなスレッドを生成する手段、及び生成したスレッド内で監視プログラムを実行する手段として機能させ、前記コンピュータを、生成した新たなスレッドを識別する情報を、稼働しているスレッドを識別する情報を抽出するスレッド抽出プログラムの戻り値から削除するスレッド削除手段として機能させる。
【発明の効果】
【００２３】
本発明によれば、所定のリソースを監視する監視プログラムが強制終了させられた場合であっても、コンピュータ自体が動作することができなくなるので外部からコンピュータに対して改ざん、なりすまし等の攻撃を仕掛けることができない。また、監視プログラムが稼働中であってもプロセスリストに表示されることがないので、外部の第三者からの強制終了攻撃を受ける可能性を低減することもできる。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータを、ＣＰＵを用いて構成した例を示すブロック図である。
【図２】本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータの機能ブロック図である。
【図３】本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータの監視プログラムのプロセス注入を説明するための模式図である。
【図４】本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータのＣＰＵの処理手順を示すフローチャートである。
【図５】本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータの派生スレッド隠蔽の手順を説明するためのモジュール構成図である。
【図６】本発明の実施の形態２に係る強制終了抑制装置を内蔵するコンピュータで稼働するプログラムの関係を示す模式図である。
【図７】本発明の実施の形態３に係る強制終了抑制装置を内蔵するコンピュータの機能ブロック図である。
【図８】本発明の実施の形態３に係る強制終了抑制装置を内蔵するコンピュータのＣＰＵの注入プロセス特定処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００２５】
以下、本発明の実施の形態に係る、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置について、図面に基づいて具体的に説明する。以下の実施の形態は、特許請求の範囲に記載された発明を限定するものではなく、実施の形態の中で説明されている特徴的事項の組み合わせの全てが解決手段の必須事項であるとは限らないことは言うまでもない。
【００２６】
また、本発明は多くの異なる態様にて実施することが可能であり、実施の形態の記載内容に限定して解釈されるべきものではない。実施の形態を通じて同じ要素には同一の符号を付している。
【００２７】
以下の実施の形態では、コンピュータシステムにコンピュータプログラムを導入した、強制終了抑制装置について説明するが、当業者であれば明らかな通り、本発明はその一部をコンピュータで実行することが可能なコンピュータプログラムとして実施することができる。したがって、本発明は、所定のリソースを監視する監視プログラムの強制終了攻撃に対する耐性を有する装置というハードウェアとしての実施の形態、ソフトウェアとしての実施の形態、又はソフトウェアとハードウェアとの組み合わせの実施の形態をとることができる。コンピュータプログラムは、ハードディスク、ＤＶＤ、ＣＤ、光記憶装置、磁気記憶装置等の任意のコンピュータで読み取ることが可能な記録媒体に記録することができる。
【００２８】
本発明の実施の形態によれば、所定のリソースを監視する監視プログラムが強制的に終了させられた場合であっても、コンピュータ自体が動作することができなくなるので外部からコンピュータに対して改ざん、なりすまし等の攻撃を仕掛けることができない。また、監視プログラムが稼働中であってもプロセスリストに表示されることがないので、第三者による強制終了攻撃を受ける可能性を低減することも可能となる。
【００２９】
（実施の形態１）
図１は、本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータを、ＣＰＵを用いて構成した例を示すブロック図である。本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータ１は、複数の外部コンピュータ３、３、・・・と、ネットワーク２を介してデータ通信することが可能に接続されている。
【００３０】
コンピュータ１は、少なくともＣＰＵ（中央演算装置）１１、メモリ１２、記憶装置１３、Ｉ／Ｏインタフェース１４、ビデオインタフェース１５、可搬型ディスクドライブ１６、通信インタフェース１７及び上述したハードウェアを接続する内部バス１８で構成されている。
【００３１】
ＣＰＵ１１は、内部バス１８を介してコンピュータ１の上述したようなハードウェア各部と接続されており、上述したハードウェア各部の動作を制御するとともに、記憶装置１３に記憶しているコンピュータプログラム１００に従って、種々のソフトウェア的機能を実行する。メモリ１２は、ＳＲＡＭ、ＳＤＲＡＭ等の揮発性メモリで構成され、コンピュータプログラム１００の実行時にロードモジュールが展開され、コンピュータプログラム１００の実行時に発生する一時的なデータ等を記憶する。
【００３２】
記憶装置１３は、内蔵される固定型記憶装置（ハードディスク）、ＲＯＭ等で構成されている。記憶装置１３に記憶しているコンピュータプログラム１００は、プログラム及びデータ等の情報を記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体９０から、可搬型ディスクドライブ１６によりダウンロードされ、実行時には記憶装置１３からメモリ１２へ展開して実行される。もちろん、通信インタフェース１７を介してネットワーク２に接続されている外部コンピュータ３、３、・・・からダウンロードされたコンピュータプログラムであっても良い。
【００３３】
通信インタフェース１７は内部バス１８に接続されており、インターネット、ＬＡＮ、ＷＡＮ等の外部のネットワーク２に接続されることにより、外部コンピュータ３、３、・・・等とデータ送受信を行うことが可能となっている。
【００３４】
Ｉ／Ｏインタフェース１４は、キーボード２１、マウス２２等のデータ入力媒体と接続され、データの入力を受け付ける。また、ビデオインタフェース１５は、ＣＲＴモニタ、ＬＣＤ等の表示装置２３と接続され、所定の画像を表示する。
【００３５】
以下、上述した構成のコンピュータ１にて外部コンピュータ３からの監視プログラムの強制終了攻撃に対する動作について説明する。図２は、本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータ１の機能ブロック図である。
【００３６】
なお、コンピュータ１は、オペレーティングシステムとしてマイクロソフト社製のウインドウズ（登録商標）を使用しており、監視プログラムをＤＬＬ（ダイナミック・リンク・ライブラリ）として実装することを前提に説明する。もちろん、オペレーティングシステムとしてマイクロソフト社製のウインドウズ（登録商標）に限定されるものではなく、リナックス等の他のオペレーティングシステムを用いても良いことは言うまでもない。
【００３７】
図２において、所定のプロセスの実行に応じて、監視プログラムを起動する監視プログラム起動部（監視プログラム起動手段）２０１は、監視プログラム注入部２０２、注入プロセス起動部２０３、スレッド生成部２０４、及びスレッド隠蔽部２０５を備えている。
【００３８】
監視プログラム注入部２０２は、ＤＬＬとして実装されている監視プログラムを、終了した場合に監視プログラムの監視対象となるリソースを使用することができなくなるプロセスへ注入する。終了した場合に監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスとは、例えばコンピュータ本体を監視している監視プログラムに対するログオン及びログオフを制御するログオンプロセス、ネットワークを監視している監視プログラムに対するネットワークプロセス、ウエブを監視している監視プログラムに対するブラウザプロセス等を意味する。
【００３９】
本実施の形態１では、オペレーティングシステムが有しているレジストリ（ＡｐｐＩｎｉｔ＿ＤＬＬｓ）を使用する。これにより、オペレーティングシステムが起動され、ＤＬＬとして実装されている監視プログラムがロードされる。
【００４０】
監視プログラムを所定のプロセスに「注入する」手段は、特にレジストリに限定されるものではなく、ウインドウズ（登録商標）に固有の機能であるログイン画面の表示と同時に監視プログラムをロードするＤＬＬ「ＧＩＮＡ（ｍｓｇｉｎａ．ｄｌｌ）」を用いても良いし、メッセージフックを用いても良い。
【００４１】
注入プロセス起動部２０３は、監視プログラムが注入されたプロセスを起動し、注入された監視プログラムをロードする。監視プログラムをロードする方法は特に限定されるものではないが、本実施の形態１では、新たなスレッドを生成して、生成した新たなスレッド（以下、派生スレッド）内で監視プログラムを稼働させる。もちろん、オペレーションシステムから自動的に監視プログラムをロードしても良い。
【００４２】
スレッド生成部２０４は、新たな派生スレッドを生成して、生成した新たな派生スレッド内で監視プログラムを稼働させる。すなわち、派生スレッドと派生スレッドを生成したプロセスとは一体であり、派生スレッドに対して外部から強制終了攻撃が仕掛けられ、派生スレッドが終了させられた場合には、基礎となるプロセス自体も終了する。したがって、監視プログラムを含む新たな派生スレッドを生成したプロセスが、監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスである限り、派生スレッドの終了により所定のリソースを使用することができなくなる。
【００４３】
例えば新たな派生スレッドを生成したプロセス、すなわち監視プログラムを注入したプロセスがログオンプロセス（ｗｉｎｌｏｇｏｎ．ｅｘｅ）である場合、派生スレッドを強制終了させるよう外部から攻撃を受け、派生スレッドが強制終了させられた場合、ログオンプロセスも終了することから、コンピュータ１を再起動しない限りだれもコンピュータ１を使用することができなくなる。したがって、外部から監視プログラムに対して強制終了攻撃が仕掛けられた場合であっても、コンピュータ１内のリソースが改ざん、なりすまし等の攻撃が仕掛けられることを未然に回避することが可能となる。
【００４４】
なお、派生スレッドの優先度は、監視プログラムを注入した所定のプロセスが生成している主スレッドよりも低いことが望ましい。例えば監視プログラムを注入したプロセスがログオンプロセス（ｗｉｎｌｏｇｏｎ．ｅｘｅ）である場合、新たに生成した派生スレッドの優先度をログオン制御する主スレッドの優先度よりも低くしておく。これにより、監視プログラムによって、ログオンプロセスの動作が妨げられる可能性を低減することができる。
【００４５】
図３は、本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータ１の監視プログラムのプロセス注入を説明するための模式図である。コンピュータ１は、監視プログラム３０１を、終了した場合に監視プログラム３０１の監視対象となる所定のリソースを使用することができなくなるプロセス３０２へ注入する。プロセス３０２は、起動時に主スレッド３０４、複数の副スレッド３０５、３０５、・・・に加えて、注入された監視プログラム３０１を含む新たな派生スレッド３０３を生成する。
【００４６】
図４は、本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータ１のＣＰＵ１１の処理手順を示すフローチャートである。コンピュータ１のＣＰＵ１１は、ＤＬＬとして実装されている監視プログラムを、終了した場合に監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスへ注入する（ステップＳ４０１）。監視プログラムを注入するタイミングは特に限定されるものではない。しかし、オペレーションシステムの起動時に注入することが好ましい。外部からの強制終了攻撃に対して無力になるタイミングを生み出さないからである。
【００４７】
ＣＰＵ１１は、監視プログラムが注入されたプロセスを起動する（ステップＳ４０２）。該プロセスが起動され、注入された監視プログラムがメモリ１２の実行領域へロードされる。
【００４８】
ＣＰＵ１１は、新たな派生スレッドを生成して（ステップＳ４０３）、生成した新たな派生スレッド内にてロードした監視プログラムを起動する。派生スレッドの優先度は、監視プログラムを注入した所定のプロセスが生成している主スレッドよりも低いことが望ましい。所定のプロセスの動作が妨げられる可能性を低減するためである。
【００４９】
また、派生スレッドの存在を、外部へ見せないようにすることが望ましい。図２のスレッド隠蔽部（スレッド削除手段）２０５は、生成した新たな派生スレッドを識別する情報、例えばスレッドＩＤを、オペレーティングシステム上で稼働しているスレッドを識別する情報を抽出するスレッド抽出関数の戻り値から削除する。具体的には、ウインドウズ（登録商標）が有しているスレッド列挙ＡＰＩであるＥｎｕｍＴｈｒｅａｄｓ、ＴｏｏｌＨｅｌｐ３２等をＡＰＩフックすることにより、プロセス内に存在するスレッドを列挙する場合に、戻り値から削除する。
【００５０】
図５は、本発明の実施の形態１に係る強制終了抑制装置を内蔵するコンピュータ１の派生スレッド隠蔽の手順を説明するためのモジュール構成図である。図５に示すように、まずアプリケーション５０１がＡＰＩである“ＴｏｏｌＨｅｌｐ３２  ＡＰＩ”５０２を呼び出す。“ＴｏｏｌＨｅｌｐ３２  ＡＰＩ”５０２内のフックポイント５０３が、アプリケーション５０１からの呼び出しを検出し、オペレーティングシステム５０４内の対応するＡＰＩを呼び出す。
【００５１】
オペレーティングシステム５０４内の対応するＡＰＩはアプリケーション５０１へ、戻り値として存在するスレッドを識別する情報であるスレッドＩＤを返そうとするので、まず“ＴｏｏｌＨｅｌｐ３２  ＡＰＩ”５０２にてアプリケーション５０１への戻り値を受け取り、受け取った戻り値から新たな派生スレッドを識別する情報であるスレッドＩＤを削除し、削除した戻り値をアプリケーション５０１へ受け渡す。このようにすることで、アプリケーション５０１では、実際には派生スレッドがオペレーティングシステム５０４上で稼働しているにもかかわらず、“ＴｏｏｌＨｅｌｐ３２  ＡＰＩ”５０２の戻り値から削除されているので、列挙されるスレッドＩＤには新たな派生スレッドに対応するスレッドＩＤは含まれない。したがって、派生スレッドの存在を隠蔽することが可能となる。
【００５２】
以上のように本実施の形態１によれば、監視プログラムをログオンプロセスのような正常に稼働していなければコンピュータ１自体を使用することができないプロセスに含まれるようにすることで、監視プログラムに対する外部からの強制終了攻撃を抑制することができる。すなわち、たとえ強制終了させられた場合であっても、外部の第三者は、コンピュータ１内のリソースの改ざん、なりすまし等の攻撃を仕掛けることができない。
【００５３】
また、監視プログラムを含む派生スレッドを含むプロセスが稼働中であっても、派生スレッドを含むプロセスを、稼働中のプロセスを列挙したプロセスリストに表示されないようにすることができる。したがって、外部の第三者から派生スレッドを含むプロセスに対して直接的な強制終了攻撃が仕掛けられることを未然に回避することも可能となる。
【００５４】
（実施の形態２）
実施の形態１に係る強制終了抑制装置を内蔵するコンピュータ１では、監視プログラムをログオンプロセスへ注入しているが、本実施の形態２では所定のリソースを監視する監視プログラムが監視対象である点で実施の形態１と相違する。なお、実施の形態２に係る強制終了抑制装置を内蔵するコンピュータ１の構成例及び機能ブロックは、実施の形態１に係る強制終了抑制装置を内蔵するコンピュータ１の構成例及び機能ブロックと同じであるため、同一の符号を付することにより詳細な説明は省略する。
【００５５】
図６は、本発明の実施の形態２に係る強制終了抑制装置を内蔵するコンピュータ１で稼働するプログラムの関係を示す模式図である。図６に示すように、終了した場合に監視プログラムの監視対象となる所定のリソースを使用することができなくなるプロセスへ注入された監視プログラム６０１は、該プロセスが起動された場合に生成される派生スレッド６０２とともに稼働する。
【００５６】
監視プログラム６０１の監視対象は、他のプロセス６０３ａ、６０３ｂ、・・・で稼働している他の監視プログラム６０４ａ、６０４ｂ、・・・であり、監視プログラム６０１は、他の監視プログラム６０４ａ、６０４ｂ、・・・が強制終了したか否かを検知するとともに、強制終了した旨を検知した場合には再起動する。
【００５７】
監視プログラム６０１の監視対象である他の監視プログラム６０４ａ、６０４ｂ、・・・は、それぞれリソース６０５ａ、６０５ｂ、・・・を監視しており、外部から強制終了攻撃を受けた場合にはリソースを監視することができず、外部から改ざん、なりすまし等の攻撃が仕掛けられた場合であっても検知することができない。しかし、監視プログラム６０１が、他の監視プログラム６０４ａ、６０４ｂ、・・・が外部からの強制終了攻撃を受けて強制終了した旨を検知することができるので、即座に強制終了した他の監視プログラム６０４ａ、６０４ｂ、・・・を再起動することができ、外部からの改ざん、なりすまし等の攻撃から保護することができる。
【００５８】
以上のように本実施の形態２によれば、複数の監視プログラム、例えばファイルアクセスの監視プログラム、印刷状況の監視プログラム等を一の監視プログラムで監視することができ、いずれかの監視プログラムが外部からの強制終了攻撃を受けて強制終了した場合であっても、即座に再起動することができる。
【００５９】
（実施の形態３）
実施の形態１及び２に係る強制終了抑制装置を内蔵するコンピュータ１では、監視プログラムを注入するプロセスをユーザが選択しているが、本実施の形態３では注入するプロセスをコンピュータ１が自動的に選択する点で実施の形態１及び２と相違する。なお、実施の形態３に係る強制終了抑制装置を内蔵するコンピュータ１の構成例は、実施の形態１及び２に係る強制終了抑制装置を内蔵するコンピュータ１の構成例と同じであるため、同一の符号を付することにより詳細な説明は省略する。
【００６０】
図７は、本発明の実施の形態３に係る強制終了抑制装置を内蔵するコンピュータ１の機能ブロック図である。所有プロセス特定部７０１は、監視対象となる所定のリソースを所有するプロセスを特定する。例えばセッションを所有するプロセス、デスクトップを所有するプロセス等を意味する。
【００６１】
より具体的には、オペレーティングシステムがウインドウズ（登録商標）である場合に、監視プログラムがドライブの監視、クリップボードの監視等を行うときには、セッションを所有するプロセスであるｗｉｎｌｏｇｉｎ．ｅｘｅが監視プログラムを注入するプロセスとなる。また、監視プログラムがシェルの操作の監視を行うときには、デスクトップを所有するＥｘｐｌｏｒｅｒ．ｅｘｅが監視プログラムを注入するプロセスとなる。
【００６２】
一方、監視対象となる所定のリソースを所有するプロセスを特定することができない場合、プロセス絞込部７０２は、監視プログラムを注入するプロセスを絞り込む。監視プログラムを注入するプロセスとしては、同一セッション内の複数のプロセスのうち、最も早期に起動しており、しかも最後まで稼働しているプロセスであることが好ましい。監視プログラムが稼働する時間が最も長くなり、最もセキュリティが高くなるからである。
【００６３】
また、一のプロセスに絞り込むことができない場合、監視プログラムを注入する候補となる、複数の注入候補プロセスにまで絞り込み、絞り込まれた複数の注入候補プロセスの共通の親プロセス又は上位プロセスに注入しても良い。さらに、一のプロセスにのみ監視プログラムを注入するのではなく、複数又は全てのプロセスに対して監視プログラムを注入し、少なくともいずれか一のプロセスが稼働する、すなわち必ず少なくとも一の監視プログラムが稼働するようにしても良い。
【００６４】
監視プログラム注入部２０２は、所有プロセス特定部７０１で特定されたプロセス、又はプロセス絞込部７０２で絞り込まれて特定されたプロセスに、それぞれ監視プログラムを注入する。
【００６５】
図８は、本発明の実施の形態３に係る強制終了抑制装置を内蔵するコンピュータ１のＣＰＵ１１の注入プロセス特定処理の手順を示すフローチャートである。図８において、コンピュータ１のＣＰＵ１１は、監視対象となる所定のリソースを所有する所有プロセスを特定することができるか否かを判断する（ステップＳ８０１）。
【００６６】
ＣＰＵ１１が、所有プロセスを特定することができると判断した場合（ステップＳ８０１：ＹＥＳ）、ＣＰＵ１１は、所有プロセスを特定し、特定した所有プロセスに監視プログラムを注入する（ステップＳ８０２）。ＣＰＵ１１が、所有プロセスを特定することができないと判断した場合（ステップＳ８０１：ＮＯ）、ＣＰＵ１１は、同一セッション内で最も早期に起動するプロセスを特定する（ステップＳ８０３）。
【００６７】
ＣＰＵ１１は、特定したプロセスに監視プログラムを注入し（ステップＳ８０４）、注入したプロセスを起動する（ステップＳ８０５）。ＣＰＵ１１は、ログオフ処理中であるか否かを判断し（ステップＳ８０６）、ＣＰＵ１１が、ログオフ処理中でないと判断した場合（ステップＳ８０６：ＮＯ）、ＣＰＵ１１は、次に起動するプロセスが存在するか否かを判断する（ステップＳ８０７）。ＣＰＵ１１が、次に起動するプロセスが存在しない、すなわち全てのプロセスが起動されていると判断した場合（ステップＳ８０７：ＮＯ）、ＣＰＵ１１は、処理をステップＳ８０６へ戻して、ログオフ処理の待ち状態となる。
【００６８】
ＣＰＵ１１が、次に起動するプロセスが存在すると判断した場合（ステップＳ８０７：ＹＥＳ）、ＣＰＵ１１は、次に早く起動するプロセスを特定し（ステップＳ８０８）、処理をステップＳ８０４へ戻し、上述した処理を繰り返す。これにより、複数のプロセスにて監視プログラムを稼働させることができ、それぞれのプロセスの稼働時間を取得することができる。
【００６９】
ＣＰＵ１１が、ログオフ処理中であると判断した場合（ステップＳ８０６：ＹＥＳ）、ＣＰＵ１１は、同一セッション内で最も稼働時間の長いプロセスを、次回、監視プログラムを注入する注入先のプロセスとして特定する（ステップＳ８０９）。これにより、同一セッション内の複数のプロセスのうち、最も早期に起動しており、しかも最後まで稼働しているプロセスを、次回、監視プログラムを注入する注入先のプロセスとして特定することができる。
【００７０】
以上のように本実施の形態３によれば、監視プログラムを注入するプロセスを自動的に特定することができ、監視プログラムをログオンプロセスのような正常に稼働していなければコンピュータ１自体を使用することができない、最も効果的なプロセスに含まれるようにすることで、監視プログラムに対する外部からの強制終了攻撃を抑制することができる。
【００７１】
なお、本発明は上記実施例に限定されるものではなく、本発明の趣旨の範囲内であれば多種の変更、改良等が可能である。例えば、監視プログラムのプロセスへの注入方法は、コンピュータ１に導入されているオペレーティングシステムに応じて最も効果的な方法へ変更することができる。
【符号の説明】
【００７２】
１  コンピュータ
２  ネットワーク
３  外部コンピュータ
１１  ＣＰＵ
１２  メモリ
１３  記憶装置
１４  Ｉ／Ｏインタフェース
１５  ビデオインタフェース
１６  可搬型ディスクドライブ
１７  通信インタフェース
１８  内部バス
２３  表示装置
９０  可搬型記録媒体
１００  コンピュータプログラム
【図１】
0005511506.tif 000002
【図２】
0005511506.tif 000003
【図３】
0005511506.tif 000004
【図４】
0005511506.tif 000005
【図５】
0005511506.tif 000006
【図６】
0005511506.tif 000007
【図７】
0005511506.tif 000008
【図８】
0005511506.tif 000009