(57)【要約】【課題】悪意あるクラッカーやコンピュータウィルスにＷＷＷサーバがのっとられて関数の実行を不当に要求してきた場合でもこの要求を禁止し、ＷＷＷサーバプロセスが提供するサービスが停止あるいはプロセスの継続が不可能な状態に陥りそうな事態が発生した場合、プロセスを継続または再起動してシステムの速やかな復旧を図ることを目的とする。【解決手段】ＷＷＷサーバプロセスを常時監視し、ＷＷＷサーバが起動するＣＧＩ等のプロセスやＷＷＷサーバが利用するシステムサービスを動的に監視対象に含める。仮に攻撃者からの攻撃を受けて、ＷＷＷサーバプロセスが停止またはサービスの提供を継続するのが不可能な場合には、監視中のプログラムがＷＷＷサーバプロセスを自動的に再起動する。【選択図】　図４
2004126958.tif 000002
【特許請求の範囲】
【請求項１】
ＷＷＷサーバで動作するプロセスからシステムが提供する関数の実行要求があった場合に、該要求が不当な要求であったときには該要求を禁止するＷＷＷサーバシステム保護方法であって、
前記関数の実行前にフィルタ処理を起動するステップと、
前記フィルタ処理により、前記関数の実行の可否を確認するステップと、
前記関数の実行が可なら当該関数を実行し、否なら当該関数を実行しないステップと
を備えることを特徴とするＷＷＷサーバシステム保護方法。
【請求項２】
請求項１に記載のＷＷＷサーバシステム保護方法において、
前記フィルタ処理は、システムの起動時に動的に生成されることを特徴とするＷＷＷサーバシステム保護方法。
【請求項３】
請求項１または２に記載のＷＷＷサーバシステム保護方法において、
システムが提供する各関数について、各関数で使用される引数のうちフィルタリングする引数についての型の定義情報と、引数のフィルタリングに用いるフィルタと、該フィルタと一致する引数であった場合に実行を「許可」するか「禁止」するかを示す動作の定義情報とを保持しておき、
前記フィルタ処理は、要求があった関数の引数の型が前記型の定義情報と一致し、かつ、要求があった関数の引数が前記フィルタと一致した場合の前記動作の定義情報が「許可」であったとき、前記関数の実行を可として当該関数を実行し、そうでないとき、前記関数の実行を否として当該関数を実行しない
ことを特徴とするＷＷＷサーバシステム保護方法。
【請求項４】
請求項１または２に記載のＷＷＷサーバシステム保護方法において、
前記フィルタ処理は、前記関数実行の要求経路が、要求が正当な場合に経由するはずの特定の経路を経由しての要求か否か確認し、該要求が前記特定の経路を経由しての要求なら前記関数の実行を可として当該関数を実行し、該要求が前記特定の経路を経由しての要求でないなら前記関数の実行を否として当該関数を実行しない
ことを特徴とするＷＷＷサーバシステム保護方法。
【請求項５】
請求項１から４の何れか１つに記載のＷＷＷサーバシステム保護方法において、
プロセス内で発生するソフトウェア例外を捕捉するステップと、
ソフトウェア例外を捕捉した場合に、発生したソフトウェア例外を保持するシステム領域に格納されているすべてのソフトウェア例外を削除するステップと、
ソフトウェア例外が発生した次の命令に制御を移行するステップと
をさらに備えることにより、前記フィルタ処理で関数が実行されないことによる異常終了を回避することを特徴とするＷＷＷサーバシステム保護方法。
【請求項６】
請求項５に記載のＷＷＷサーバシステム保護方法において、
監視対象とするプロセスの起動種別をデバッグモードとして起動するステップと、
起動したプロセスから通知されるデバッグイベントをチェックすることにより、前記プロセスの継続が困難あるいは停止している状態にあることを検出するステップと、
前記プロセスの継続が困難あるいは停止している状態にあることを検出したとき、前記プロセスを再起動するステップと
をさらに備えることを特徴とするＷＷＷサーバシステム保護方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報セキュリティ技術に関し、特にＷＷＷサーバに対する外部からの攻撃に対する影響を最小化する方法に関する。
【０００２】
【従来の技術】
インターネットは、各地に設けられたコンピュータネットワーク同士を広域回線を介して接続したコンピュータネットワーク網である。インターネットに接続されたコンピュータ間では様々なサービスの授受が行われているが、コンピュータウィルスや悪意あるクラッカー等のユーザにより、インターネットに接続されているコンピュータがシステム停止となったり重要なファイルが消去されるという問題が発生している。
【０００３】
例えば、悪意あるクラッカー等のユーザがインターネットに接続されているＷＷＷサーバにＴｅｌｎｅｔ接続し、ポート１３５に一連のテキスト文字列を入力することでＷＷＷサーバが停止してしまうといった、ＷＷＷサーバ自体の脆弱性によりシステムが停止してしまう可能性があった。
【０００４】
また、ＷＷＷサーバではＣＧＩ（Ｃｏｍｍｏｎ　Ｇａｔｅｗａｙ　Ｉｎｔｅｒｆａｃｅ）やＪａｖａ（Ｊａｖａは、サン・マイクロシステムズ・インコーポレーテッド　の登録商標）が動作する場合がある。ＣＧＩではデータベースへのアクセスや、システムコマンドの実行によるサービスを提供する場合がある。ＣＧＩの場合は、その記述言語としてＰｅｒｌ等が用いられることが一般的である。このＰｅｒｌ自体のセキュリティは良好であるが、Ｐｅｒｌプログラマがセキュリティホールを空けてしまう可能性が高い。例えば、Ｐｅｒｌ言語はＳｙｓｔｅｍという関数を規定しており、Ｓｙｓｔｅｍ関数を利用すれば、オペレーティングシステム固有のコマンドを実行することができる。ＣＧＩスクリプトの中に上記のシステムコールが含まれている場合、クラッカーによって文字列に特定のメタキャラクタを追加されると、結果としてＷＷＷサーバが停止したり重要なファイルが消去されることになる。
【０００５】
ＷＷＷサーバはインターネットに接続されシステムのルート権限で動作していることから、ＷＷＷサーバを攻略してしまうとシステム権限で悪事を働くことが可能である。そのため、ＷＷＷサーバはクラッカーの攻撃対象にされ易かった。この事実はコンピュータウィルスに関しても同様である。
【０００６】
このような問題に対処するため、従来はファイアウォールを利用して悪意あるクラッカーからシステムを防御したり、コンピュータウィルスに関しては、システムリソースのアクセスを随時監視するウィルス対策ソフトウェアにより防御していた。
【０００７】
さらに、特許文献１には次のような技術が開示されている。
【０００８】
基本的には、コンピュータウィルスの侵入を事前にチェックして、その侵入・増殖を防止するため、例えば、アプリケーションプログラムからオペレーティングシステムへの要求を取り込み、取り込まれた要求が正常な要求か又はコンピュータウィルスによる要求かを判別し、判別結果に基づいて該要求がコンピュータウィルスによる要求の場合には少なくともその要求を禁止するようにしたものである。
【０００９】
上記判別の方法としては、データベース法（スキャン法）、バックアップ法、接種法、キーワード法、および手続法が開示されている。データベース法（スキャン法）は、各種のコンピュータウィルスによるコンピュータプログラムを予めデータベース化しておき、取り込んだアプリケーションからの要求とデータベース化されたデータとが一致している場合には、プロセスを中断することにより当該要求を禁止する。
【００１０】
また、接種法は、検査対象になるファイルに、ウィルスの感染の有無を判別するプログラム（いわゆるワクチン）を予め接種しておき、システム起動時において、ファイル自身にウィルスの感染の有無を判別させるものである。例えば、本来の元プログラムファイルに対し、元プログラムファイル特有のＳＵＭデータを作成し、このＳＵＭデータとチェックプログラムを元プログラムファイルに接種し、かつ元プログラムファイルの先頭をチェックプログラムにジャンプするようにさせて、接種済プログラムファイルを作成する。接種済プログラムファイルが実行されると、チェックプログラムが起動する。そして、その時点で、元プログラムファイルのＳＵＭを計算し、その計算値と、予め記録されているＳＵＭ値とを比較する。そして、一致している場合には正常であるとして、元プログラムファイルを起動する。これに対して、一致しない場合には、元プログラムファイルがウィルスに汚染されているとして、以降の実行を中止するものである。
【００１１】
【特許文献１】特開平５−１０８４８７号
【００１２】
【発明が解決しようとする課題】
ＷＷＷサーバをインターネットで公開するには、ＷＷＷサーバをファイアウォールの外側のバリアセグメントに設置する必要があるため、ＷＷＷサーバを防御するにはファイアウォールは無力である。
【００１３】
ウィルス対策ソフトウェアによる防御については、新種のウィルスが出現するたびにパッチを当て直す必要があり、既知のウィルスの対策にはなるが、新種のウィルスに対しては無力である。
【００１４】
また、特許文献１に記載のデータベース法（スキャン法）では、各種のコンピュータウィルスによるコンピュータプログラムを予めデータベース化しておくが、そのようなコンピュータプログラムを事前に洩れなく調査する必要があり、調査に洩れたコンピュータプログラムに対しては、依然として無効である。接種法は、検査対象になるファイルに、ウィルスの感染の有無を判別するプログラムを予め接種しておくものであるが、検査対象外になっているファイルについては、依然として無効である。
【００１５】
本発明は、上記の課題を解決するため、悪意あるクラッカーやコンピュータウィルスにＷＷＷサーバがのっとられて関数の実行を不当に要求してきた場合でも、この要求を禁止する仕組を提供することを目的とする。また、悪意あるクラッカーやコンピュータウィルスによりＷＷＷサーバプロセスが提供するサービスが停止あるいはプロセスの継続が不可能な状態に陥る場合も考えられる。このような事態が発生した場合、プロセスを継続または再起動してシステムの速やかな復旧を図ることを目的とする。
【００１６】
【課題を解決するための手段】
上記目的を達成するため、請求項１に係る発明は、ＷＷＷサーバで動作するプロセスからシステムが提供する関数の実行要求があった場合に、該要求が不当な要求であったときには該要求を禁止するＷＷＷサーバシステム保護方法であって、前記関数の実行前にフィルタ処理を起動するステップと、前記フィルタ処理により、前記関数の実行の可否を確認するステップと、前記関数の実行が可なら当該関数を実行し、否なら当該関数を実行しないステップとを備えることを特徴とする。
【００１７】
請求項２に係る発明は、請求項１に記載のＷＷＷサーバシステム保護方法において、前記フィルタ処理は、システムの起動時に動的に生成されることを特徴とする。
【００１８】
請求項３に係る発明は、請求項１または２に記載のＷＷＷサーバシステム保護方法において、システムが提供する各関数について、各関数で使用される引数のうちフィルタリングする引数についての型の定義情報と、引数のフィルタリングに用いるフィルタと、該フィルタと一致する引数であった場合に実行を「許可」するか「禁止」するかを示す動作の定義情報とを保持しておき、前記フィルタ処理は、要求があった関数の引数の型が前記型の定義情報と一致し、かつ、要求があった関数の引数が前記フィルタと一致した場合の前記動作の定義情報が「許可」であったとき、前記関数の実行を可として当該関数を実行し、そうでないとき、前記関数の実行を否として当該関数を実行しないことを特徴とする。
【００１９】
請求項４に係る発明は、請求項１または２に記載のＷＷＷサーバシステム保護方法において、前記フィルタ処理は、前記関数実行の要求経路が、要求が正当な場合に経由するはずの特定の経路を経由しての要求か否か確認し、該要求が前記特定の経路を経由しての要求なら前記関数の実行を可として当該関数を実行し、該要求が前記特定の経路を経由しての要求でないなら前記関数の実行を否として当該関数を実行しないことを特徴とする。
【００２０】
請求項５に係る発明は、請求項１から４の何れか１つに記載のＷＷＷサーバシステム保護方法において、プロセス内で発生するソフトウェア例外を捕捉するステップと、ソフトウェア例外を捕捉した場合に、発生したソフトウェア例外を保持するシステム領域に格納されているすべてのソフトウェア例外を削除するステップと、ソフトウェア例外が発生した次の命令に制御を移行するステップとをさらに備えることにより、前記フィルタ処理で関数が実行されないことによる異常終了を回避することを特徴とする。
【００２１】
請求項６に係る発明は、請求項５に記載のＷＷＷサーバシステム保護方法において、監視対象とするプロセスの起動種別をデバッグモードとして起動するステップと、起動したプロセスから通知されるデバッグイベントをチェックすることにより、前記プロセスの継続が困難あるいは停止している状態にあることを検出するステップと、前記プロセスの継続が困難あるいは停止している状態にあることを検出したとき、前記プロセスを再起動するステップとをさらに備えることを特徴とする。
【００２２】
【発明の実施の形態】
以下、本発明の一実施の形態を、図面を用いて説明する。
【００２３】
図１は、本発明の実施形態のネットワーク構成を示す。本実施の形態では、複数のクライアントコンピュータ２１、２２とサーバコンピュータ２３とがネットワーク２０を介して接続している。クライアントコンピュータ２１、２２ではＷＷＷブラウザ２１１、２２１が動作する。サーバコンピュータ２３ではＷＷＷサーバ２３１とＤＢサーバ２３２が動作する。ＤＢサーバ２３２は、ＷＷＷサーバ２３１とは別のサーバコンピュータで動作する場合もある。
【００２４】
図２は、ＷＷＷサーバ２３１等で動作するターゲットプロセス２３４（後述）に組込む本発明特有のモジュール等を示している。ＷＷＷサーバ２３１等には、デバッガプロセス５、フィルタモジュール６、デバッグモジュール７、フィルタリング関数テーブル８、およびフィルタテーブル９が組込まれている。
【００２５】
図３は、サーバコンピュータ２３内のシステム構成を示す。サーバコンピュータ２３内には、ＷＷＷサーバ２３１で動作するＷＷＷサーバプロセス２、ＷＷＷサーバプロセス２によって起動されて動作するＣＧＩプロセス３、および、ＣＧＩプロセス３からのデータベースに関する要求をＤＢサーバ２３２で動作して実行するＤＢサーバプロセス４等のプロセスが存在する。本実施形態ではこのようなＷＷＷサーバプロセス２を含めＷＷＷサーバ２３１がアクセスするすべてのプロセスに、フィルタモジュール６、デバッグモジュール７、フィルタリング関数テーブル８、およびフィルタテーブル９を組み込む。
【００２６】
なお、ＷＷＷサーバプロセス２を含めＷＷＷサーバプロセス２がアクセスするすべてのプロセスを総称してターゲットプロセス２３４と呼び、またターゲットプロセス２３４を実行しているサーバをターゲットサーバと呼ぶ場合もある。
【００２７】
デバッガプロセス５は、ターゲットプロセス２３４をデバッグプロセス（デバッグの対象とするプロセス）として起動する。
【００２８】
次に、それぞれのモジュール等の機能を説明する。
【００２９】
デバッガプロセス５は、ターゲットプロセス２３４をデバッグプロセスとして起動することによってターゲットプロセス２３４の挙動をモニタし、ターゲットプロセス２３４のプロセス継続が困難と判断した場合や異常の発生によって停止した場合は当該プロセス２３４を速やかに再起動する。具体的には、デバッガプロセス５は、ＷＷＷサーバプロセス２、ＣＧＩプロセス３、ＤＢサーバプロセス４等のターゲットプロセス２３４を起動するが、その起動に際してターゲットプロセス２３４をデバッグプロセスとして起動する。
【００３０】
ターゲットプロセス２３４をデバッグプロセスとして起動したデバッガプロセス５は、ターゲットプロセス２３４に関するデバッグイベントをシステムから受信できる。受信したデバッグイベントをチェックして上記判断（プロセス継続が困難になっていないか、あるいは異常発生していないかの判断）を行う。例えば、デバッガプロセス５がデバッグイベントの一つであるＥｘｃｅｐｔｉｏｎデバッグイベント（ソフトウェア例外の発生）を受信した場合に、そのＥｘｃｅｐｔｉｏｎがアクセス違反を示すものであればデバッガプロセス５は当該プロセス２３４を再起動する。
【００３１】
フィルタモジュール６は、ターゲットプロセス２３４から実行要求のあった関数が禁止された関数として定義されている場合、その要求を防止する。ターゲットプロセス２３４がフィルタリング対象関数の実行要求をした場合、フィルタモジュール６は、自身内に生成したフィルタ関数を使用して当該関数のフィルタの定義に従って当該関数を実行したりしなかったりする。
【００３２】
デバッグモジュール７は、ターゲットプロセス２３４で発生するソフトウェア例外を捕捉して、捕捉した例外をすべて削除したのち、例えば例外を発生させた実行コードの次の実行コードから処理を実行させることによって、当該プロセス２３４を継続させる。
【００３３】
フィルタリング関数テーブル８は、フィルタモジュール６がフィルタリングする対象の関数であるフィルタリング対象関数を定義しており、システムが提供しているシステムモジュール内の関数のうち、フィルタリング対象関数として定義されている関数をフィルタモジュール６が書き換える場合に参照される。フィルタテーブル９は、フィルタリング対象関数に関するフィルタを定義しており、フィルタモジュール６内のフィルタ関数がフィルタ処理を行う際、実行要求のあったフィルタリング対象関数を実行するか否かのために参照される。
【００３４】
図４に、フィルタモジュール６がフィルタ関数を生成する方法を示す。
【００３５】
＜生成前＞は、ターゲットプロセス２３４のアドレス空間には、関数アドレステーブル４１１、アプリケーションモジュール４１２、およびシステムモジュール４１３がロードされている。関数アドレステーブル４１１はシステムモジュール４１３が提供している関数のアドレスを格納しており、アプリケーションモジュール４１２は関数アドレステーブル４１１を参照することで関数のアドレスを解決できる。
【００３６】
この＜生成前＞の状態から、フィルタモジュール６は、フィルタリング関数テーブル８でフィルタリング対象関数として指定されたシステムモジュール４１３内の関数、例えば関数ｆｕｎｃ１、の処理部４１４を関数ｆｕｎｃ１のスタブ関数の処理部４１４’としてフィルタモジュール６内にコピーし、処理部４１４をフィルタ関数ｆｉｌｔｅｒｆｕｎｃ１へのＪＭＰ命令に書き換えて処理部４２４とする。そして、関数ｆｕｎｃ１のフィルタ処理部４２６と関数ｆｕｎｃ１のスタブ関数ｓｔｕｂｆｕｎｃ１呼出し部４２７とをフィルタ関数ｆｉｌｔｅｒｆｕｎｃ１の後部に生成する。この結果が、＜生成後＞の状態である。
【００３７】
以上のことにより、アプリケーションモジュール４１２’の実行時に、例えばｆｕｎｃ１関数の実行要求によりフィルタ関数ｆｉｌｔｅｒｆｕｎｃ１が呼出され、フィルタ関数ｆｉｌｔｅｒｆｕｎｃ１ではフィルタ処理部４２６により、関数ｆｕｎｃ１のフィルタリングを行う。フィルタリングの結果、関数ｆｕｎｃ１を実行しない場合はフィルタ関数ｆｉｌｔｅｒｆｕｎｃ１内で処理が終了し、実行する場合は処理部４１４’の処理を実行後、システムモジュール４１３’のコピーしていない関数ｆｕｎｃ１の残りの部分の先頭４１５へＪＵＭＰさせることによって実行要求のあった関数ｆｕｎｃ１を実行する。
【００３８】
このことにより、実行禁止としてフィルタリングされている関数の場合にはフィルタ関数内で処理が終了して当該関数は実行されないが、フィルタリング対象関数として定義されていない関数及び実行可としてフィルタリングされている関数の場合には当該関数が実行される。
【００３９】
図５は、フィルタモジュール６が参照するフィルタリング関数テーブル８である。フィルタリング関数テーブル８には、関数５１と、その引数５２のフィールドが存在する。関数５１には、フィルタモジュール６がフィルタリングする関数名が定義されている。引数５２には、関数５１で定義した関数で使用される引数の内、フィルタリングする引数についての型が定義されている。なお、フィルタリング対象外の引数は、引数５２に定義する必要はない。
【００４０】
図６は、フィルタモジュール６の動作を定義するフィルタテーブル９である。フィルタテーブル９には、フィルタリングする関数名を定義している関数６１、関数６１の引数をフィルタリングするフィルタ６２、および、フィルタ６２と一致する引数である場合の当該関数の動作を定義する動作６３が定義されている。
【００４１】
なお、図６の例では、引数のフィルタとしてフィルタ６２の一項目しか例示してなく、またフィルタ６２内に定義されている一つまたは複数の引数のうちのどれかに一致したら動作６３の定義に従うものとしているが、これを例えば第１フィルタと第２フィルタ等のように複数項目とし、第１フィルタに定義されているの引数と第２フィルタに定義されているの引数との論理積によるフィルタリングにする等のきめ細かなフィルタとすることもできる。
【００４２】
次に、実行要求のあった関数の実行／不実行を決定するフィルタモジュール６内フィルタ関数でのフィルタリング関数テーブル８とフィルタテーブル９の使われ方を説明する。
【００４３】
例えば、アプリケーションモジュールが引数ａ０を”Ｃ：￥ＷｉｎＮＴ￥Ｅｍｐｌｏｙｅｅｓ”として関数ＣｒｅａｔｅＦｉｌｅＡ６１１の実行を要求した場合、関数ＣｒｅａｔｅＦｉｌｅＡ６１１のフィルタ６２が引数ａ０を定義しているため、フィルタリング処理では引数値の比較を可能とするためにフィルタリング関数テーブル８の関数ＣｒｅａｔｅＦｉｌｅＡ５１１の引数５２を参照して引数ａ０の型属性を調べる。そして引数５２に定義されている型属性を用いて、”Ｃ：￥ＷｉｎＮＴ￥Ｅｍｐｌｏｙｅｅｓ”と”Ｃ：￥ＷｉｎＮＴ￥＊”を比較する。この場合、比較は一致するため、フィルタリング処理は動作６３の定義に従って関数ＣｒｅａｔｅＦｉｌｅＡ６１１の実行／不実行を決定することになるが、動作６３の定義が「禁止」であるため、引数ａ０を”Ｃ：￥ＷｉｎＮＴ￥Ｅｍｐｌｏｙｅｅｓ”とする関数ＣｒｅａｔｅＦｉｌｅＡ６１１は実行されないことになる。
【００４４】
また、アプリケーションモジュールが引数ａ０を”Ｃ：￥ＬＩｎｕｘＮＴ￥Ｅｍｐｌｏｙｅｅｓ”として関数ＣｒｅａｔｅＦｉｌｅＡ６１１の実行を要求した場合は、フィルタ６２の引数値とは一致しないため、動作６３の定義を参照することなく、引数ａ０を”Ｃ：￥　ＬＩｎｕｘＮＴ￥Ｅｍｐｌｏｙｅｅｓ”とする関数ＣｒｅａｔｅＦｉｌｅＡ６１１は実行される。
【００４５】
さらに、フィルタリング関数テーブル８に定義されている関数だけにフィルタリング処理を実行するようにフィルタ関数を生成しているので、フィルタリング関数テーブル８に定義されていない関数についての実行要求は無条件に実行される。
【００４６】
なお、フィルタリング関数テーブル８のＤｅｖｉｃｅＩｏＣｏｎｔｒｏｌ５１２の引数５２とフィルタテーブル９の関数ＤｅｖｉｃｅＩｏＣｏｎｔｒｏｌ６１２のフィルタ６２の定義がともに「−」となっているが、これは引数値が何であろうと関数ＤｅｖｉｃｅＩｏＣｏｎｔｒｏｌ６１３の実行は動作６３の定義に従うことを示すものである。
【００４７】
図７は、デバッグモジュール７がターゲットプロセス２３４で発生したソフトウェア例外を削除して当該プロセス２３４を可能な限り継続させるための処理を示したものである。図８は、デバッガプロセス５がターゲットプロセス２３４のプロセス継続は不可能と判断した場合のターゲットプロセス２３４を再起動する処理を示したものである。なお、図７および図８では、ターゲットプロセス２３４としてＣＧＩプロセス３の例を示している。
【００４８】
まず、図７のデバッグモジュール７について説明する。本実施形態で前提としているＯＳ（オペレーティングシステム）では、システムがプロセスに組込むｎｔｄｌｌ．ｄｌｌというモジュールのＫｉＵｓｅｒＥｘｃｅｐｔｉｏｎＤｉｓｐａｔｃｈｅｒ関数内でプロセス内のソフトウェア例外を処理しているとする。このソフトウェア例外をデバッグモジュール７が捕捉できるようにするため、フィルタモジュール６は、ＣＧＩプロセス３でソフトウェア例外が発生した場合にデバッグモジュール７に制御が移るようＫｉＵｓｅｒＥｘｃｅｐｔｉｏｎＤｉｓｐａｔｃｈｅｒ関数の内容を変更する。これによってデバッグモジュール７はソフトウェア例外の発生を捕捉できるようになる。デバッグモジュール７は、ＣＧＩプロセス３でのソフトウェア例外を捕捉した場合（図７の（１））、ＥＸＣＥＰＴＩＯＮ＿ＲＥＧＩＳＴＲＡＴＩＯＮ構造体に格納されているソフトウェア例外をすべて削除して（図７の（２））、例えば例外を発生させた実行コードの次の実行コードから処理を実行させることによって、当該プロセス２３４を継続させる。なお、ＥＸＣＥＰＴＩＯＮ＿ＲＥＧＩＳＴＲＡＴＩＯＮ構造体は、発生したソフトウェア例外を格納するシステム規定の構造体である。
【００４９】
図８のデバッガプロセス５は、ターゲットプロセス２３４であるＣＧＩプロセス３をデバッグプロセスとして起動する（図８の（１））。システムは、デバッグプロセスにデバッグイベントが発生する都度、デバッガプロセス５に、発生したデバッグイベントを通知する（図８の（２））。通知を受けたデバッグイベントがＥｘｃｅｐｔｉｏｎでアクセス違反を示す場合、デバッガプロセス５はＣＧＩプロセス３がプロセス継続不能とみなし、必要に応じてＣＧＩプロセス３を停止させた後、ＣＧＩプロセス３を再起動する（図８の（３））。
【００５０】
図９は、フィルタモジュール６でのフィルタリングの具体例を示したものである。ターゲットプロセス２３４であるＣＧＩプロセス３に侵入したコンピュータウィルス８０１が関数を実行しようとした場合の様子を、図５および図６も参照しながら、説明する。
【００５１】
コンピュータウィルス８０１が、ＳＱＬＥｘｅｃＤｉｒｅｃｔ関数のアドレスを突き止め、ＤＥＬＥＴＥ　ＦＲＯＭ　Ｅｍｐｌｏｙｅｅｓ文を引数ａ０としてこの関数を実行しようとした場合、当該関数はフィルタリング対象関数となっているため、フィルタモジュール６内のＳＱＬＥｘｅｃＤｉｒｅｃｔ関数対応のフィルタ関数にＪＵＭＰする。フィルタ関数は、フィルタ関数テーブル８（図５）とフィルタテーブル９（図６）を参照して当該関数を実行するか否かを判断する。フィルタテーブル９のＳＱＬＥｘｅｃＤｉｒｅｃｔ関数のフィルタ６２がａ０＝”　ＤＥＬＥＴＥ　ＦＲＯＭ　Ｅｍｐｌｏｙｅｅｓ”であり、その動作６３が「禁止」となっているため、ＤＥＬＥＴＥ　ＦＲＯＭ　Ｅｍｐｌｏｙｅｅｓ文はフィルタモジュール６によって実行されないことになる。つまり、ＤＢサーバプロセス４が管理するＥｍｐｌｏｙｅｅｓＤＢ８５の削除は失敗する。
【００５２】
また、コンピュータウィルス８０１が、ＣｒｅａｔｅＦｉｌｅＡのアドレスを突き止め、”Ｃ：￥ＷｉｎＮＴ￥＊”を参照しようとしても、同様に「禁止」されているため、この関数はやはり実行されないことになる。
【００５３】
なお、”Ｄ：￥”を引数ａ０とするＣｒｅａｔｅＦｉｌｅＡについては、当該関数のフィルタ６２に引数ａ０が”Ｃ：￥ＷｉｎＮＴ￥＊”と”Ｅ：￥＊”としか定義されていないため、この関数は実行されることになる。
【００５４】
図１０は、フィルタモジュール６がフィルタ関数を生成する処理を示すフローチャートである。
【００５５】
ターゲットプロセス２３４のプロセス開始の初期化処理においてフィルタモジュール６が実行されると、フィルタモジュール６は、プロセス内にロードされているモジュールのリストアップを開始する（ステップ１１０１）。そして、未検出のモジュールが存在する間（ステップ１１０２）、フィルタリング関数テーブル８を参照してフィルタリング対象関数がそのモジュールに含まれるかチェックする（ステップ１１０３）。
【００５６】
フィルタリング関数テーブル８に定義されているフィルタリング対象関数がそのモジュール内に存在する場合には、その関数の先頭部分の処理部をフィルタモジュール６内にスタブ関数としてコピーし、コピーした処理部の後ろに、コピーしなかった処理部の先頭へＪＵＭＰする実行コードを埋め込む（ステップ１１０４）。次に、フィルタリングを行うフィルタ関数と当該フィルタリング対象関数のスタブ関数を呼出す実行コードをフィルタモジュール６内に生成する（ステップ１１０５）。そして、フィルタリング対象関数の先頭部をフィルタ関数へのＪＭＰ命令に書き換える（ステップ１１０６）。すべてのモジュールに関して、上記のチェックを終了するまで継続する。
【００５７】
図１１は、実行要求のあった関数をフィルタリングするフィルタモジュール６内のフィルタ関数の処理を示すフローチャートである。
【００５８】
アプリケーションモジュール４１２’（図４）から関数の実行要求があると、その関数がフィルタリング対象関数の場合、システムモジュール４１３’内のフィルタリング対象関数の先頭処理部がフィルタ関数へのＪＭＰ命令に置き換えられているので、フィルタリング対象関数の実行要求はフィルタ関数によってフィルタリングされる。
【００５９】
フィルタ関数内では、まずフィルタ処理が実行される。フィルタ処理では、フィルタリング関数テーブル８とフィルタテーブル９を参照して、呼出された関数に指定されている引数値とフィルタ６２に定義されている引数値とを比較する（ステップ１２０１）。指定されている引数値がフィルタ６２に定義されている引数値と一致する場合、またはフィルタ６２になにも定義されていない場合、動作６３の定義を確認し（ステップ１２０２）、動作６３の定義が「許可」の場合は、呼出された関数を実行して処理を終了する（ステップ１２０３）。動作６３の定義が「禁止」の場合は、呼出された関数を実行しないで処理を終了する。また、指定されている引数値がフィルタ６２に定義されている引数値と一致しない場合は（ステップ１２０１）、実行要求のあった関数を実行して処理を終了する。
【００６０】
図１２は、デバッグモジュール７がターゲットプロセス２３４内で発生するソフトウェア例外を削除してプロセスを継続させる処理を示すフローチャートである。
【００６１】
デバッグモジュール７は、ソフトウェア例外を捕捉すると（ステップ１３０１）、ＥＸＣＥＰＴＩＯＮ＿ＲＥＧＩＳＴＲＡＴＩＯＮ構造体７３の中に要素が格納されているかチェックする（ステップ１３０２）。格納されている場合には、格納要素をすべて削除（ステップ１３０３）し、例外を発生させた実行コードの次の実行コードから処理を実行させるようにさせた後（ステップ１３０４）、新たなソフトウェア例外の捕捉を待つ。
【００６２】
なお、デバッグモジュール７は、前述したように、ターゲットプロセス２３４で発生するソフトウェア例外を捕捉できるようＫｉＵｓｅｒＥｘｃｅｐｔｉｏｎＤｉｓｐａｔｃｈｅｒ関数の内容を変更しているが、変更処理のフローチャートとその説明は省略する。
【００６３】
図１３は、デバッガプロセス５がターゲットプロセス２３４をデバッグプロセスとして起動し、アクセス違反等のデバッグイベントの発生があった場合に当該ターゲットプロセス２３４を再起動する処理を示すフローチャートである。
【００６４】
デバッガプロセス５は、デバッグの開始もしくはデバッグプロセスとしてターゲットプロセス２３４を起動し（ステップ１４０１）、ターゲットプロセス２３４のデバッグイベント通知を待つ（ステップ１４０２）。イベントの通知があった場合、そのイベントがプロセスの継続が困難なイベントかチェックする（ステップ１４０３）。プロセスの継続が困難なイベントの場合には、ターゲットプロセス２３４を一旦終了させて、ステップ１４０１に戻り、あらためてターゲットプロセス２３４をデバッグプロセスとして再起動し、そうでない場合はイベントの通知待ち（ステップ１４０２）に入る。
【００６５】
なお、図４ではアプリケーションモジュール４１２’等の関数の実行要求元からシステムモジュール４１３’を経由してフィルタモジュール６のフィルタ処理を実行するようにしているが、コンピュータウィルス等が関数アドレステーブル４１１’を参照せずして直接にシステムモジュール４１３’内の関数を呼出して関数の実行要求をしてくることが考えられる。
【００６６】
図１４は、そのような不当な要求に対して関数の実行を禁止することができるようにする方法を示す。すなわち、図１４に示す方法では、コンピュータウィルスからの関数実行要求の排除の可能性をさらに高めるため、関数実行要求元が関数アドレステーブル４１１’を参照せずして直接にシステムモジュール４１３’内の関数を呼出して関数の実行要求をしてきたか否かで、関数の実行要求元が正規の要求元かコンピュータウィルスかを区別する。なお、図１４において、図４と同じ要素は同じ番号で表すものとする。
【００６７】
具体的に図１４の方法では、関数アドレステーブル４１１’内のフィルタリング対象関数であるｆｕｎｃ１のアドレスをプレフィルタモジュール６００’のｐｒｅｆｕｎｃ１アドレスに書き換えておく。プレフィルタモジュール６００’のｐｒｅｆｕｎｃ１では、プレフィルタモジュール６００’を経由したことを示す情報をある領域Ａに設定した後、システムモジュール４１３’内のｆｕｎｃ１関数を呼出す。そして、フィルタモジュール６のｆｉｌｔｅｒｆｕｎｃ１では、関数実行要求は、プレフィルタモジュール６００’を経由しての要求か否かを領域Ａを確認してチェックする。領域Ａに、プレフィルタモジュール６００’を経由したことを示す情報が設定されていない場合は、コンピュータウィルスからの関数実行要求であると判断して、当該関数実行要求のあった関数の実行をしないまま処理を終了する。すなわち、プレフィルタモジュール６００’という特定の経路を経由しての要求は正当な要求として実行し、該特定の経路を経由しない要求は不当な要求としてこれを実行しないようにしている。
【００６８】
【発明の効果】
以上説明したように、本発明によれば、悪意あるクラッカーやコンピュータウィルスにＷＷＷサーバがのっとられて関数の実行を不当に要求してきた場合でも、この要求を禁止することができる。また、悪意あるクラッカーやコンピュータウィルスによりＷＷＷサーバプロセスが提供するサービスが停止あるいはプロセスの継続が不可能な状態に陥りそうな事態が発生した場合でも、プロセスを継続または再起動してシステムの速やかな復旧を図ることができる。
【図面の簡単な説明】
【図１】本発明の一実施の形態を示すネットワーク構成図
【図２】本実施の形態におけるプログラム構成図
【図３】サーバコンピュータのシステム構成図
【図４】フィルタ関数の生成方法を示す図
【図５】フィルタリング関数テーブルを示す図
【図６】フィルタテーブルを示す図
【図７】デバッグモジュールの機能を示す図
【図８】デバッガプロセスの機能を示す図
【図９】フィルタモジュールの機能を示す図
【図１０】フィルタモジュールのフィルタ関数の生成に関するフローチャート図
【図１１】フィルタモジュールの関数のフィルタリングに関するフローチャート図
【図１２】デバッグモジュールの例外削除に関するフローチャート図
【図１３】デバッガプロセスのフローチャート図
【図１４】プレフィルタモジュールの生成方法を示す図
【符号の説明】
５…デバッガプロセス、６…フィルタモジュール、７…デバッグモジュール、８…フィルタリング関数テーブル、９…フィルタテーブル、２１，２２…クライアントコンピュータ、２３…サーバコンピュータ、２１１，２２１…ＷＷＷブラウザ、２３１…ＷＷＷサーバ、２３２…ＤＢサーバ。
【図１】
2004126958.tif 000003
【図２】
2004126958.tif 000004
【図３】
2004126958.tif 000005
【図４】
2004126958.tif 000006
【図５】
2004126958.tif 000007
【図６】
2004126958.tif 000008
【図７】
2004126958.tif 000009
【図８】
2004126958.tif 000010
【図９】
2004126958.tif 000011
【図１０】
2004126958.tif 000012
【図１１】
2004126958.tif 000013
【図１２】
2004126958.tif 000014
【図１３】
2004126958.tif 000015
【図１４】
2004126958.tif 000016