(57)【特許請求の範囲】
【請求項１】
オペレーティング・システムによって実行を監督される実行可能モジュールおよび該実行可能モジュールに関連する保護サービス・プロバイダ（ＰＳＰ）モジュールのうちの少なくとも１つの完全性を監視するための方法であって、前記ＰＳＰモジュールが、前記実行可能モジュールに保護サービス機能を提供し、
（ｉ）前記オペレーティング・システムの初期設定時に、前記ＰＳＰモジュールの完全性を検査するための、前記ＰＳＰモジュールと別の独立型のプロセスまたはスレッドとして実施される共生モジュールをロードするステップと、
（ｉｉ）その後に、前記保護サービス機能が前記実行可能モジュールによって要求されるのに応じて、前記共生モジュールをクロスチェックするための前記ＰＳＰモジュールをロードするステップとを含み、
前記共生モジュールによる検査および前記ＰＳＰモジュールによるクロスチェックが、一緒に、前記実行可能モジュールおよび前記ＰＳＰモジュールのうちの少なくとも１つの完全性を監視し、
前記ＰＳＰモジュールが、さらに、前記実行可能モジュールの完全性を監視するためのコードを含む、方法。
【請求項２】
オペレーティング・システムによって実行を監督される実行可能モジュールおよび該実行可能モジュールに関連する保護サービス・プロバイダ（ＰＳＰ）モジュールのうちの少なくとも１つの完全性を監視するためのシステムであって、前記ＰＳＰモジュールが、前記実行可能モジュールに保護サービス機能を提供し、
前記オペレーティング・システムの初期設定時に、前記ＰＳＰモジュールの完全性を検査するための、前記ＰＳＰモジュールと別の独立型のプロセスまたはスレッドとして実施される共生モジュールをロードするための手段と、
その後に、前記保護サービス機能が前記実行可能モジュールによって要求されるのに応じて、前記共生モジュールをクロスチェックするための前記ＰＳＰモジュールをロードするための手段とを含み、
前記共生モジュールによる検査および前記ＰＳＰモジュールによるクロスチェックが、一緒に、前記実行可能モジュールおよび前記ＰＳＰモジュールのうちの少なくとも１つの完全性を監視し、
前記ＰＳＰモジュールが、さらに、前記実行可能モジュールの完全性を監視するためのコードを含む、システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ディジタル情報に対する変更の検出の分野に関し、具体的には、実行可能モジュールと、それに関連する、実行可能モジュールに保護サービス（protected service）機能を提供する保護サービス・プロバイダ（protected service provider）（ＰＳＰ）モジュールの完全性検査のための技法ならびに、ＰＳＰモジュールの耐タンパ性（tamper-resistance）を強化するための技法に関する。
【０００２】
【従来の技術】
あるデータを使用してある動作が実行され、そのデータおよび動作の一方または両方を秘密に保たなければならない種類のコンピュータ・アプリケーションが存在する。一般には、これは問題ではない。というのは、ほとんどのユーザが、その所期の目的のためにアプリケーションを単純に使用し、それに含まれる秘密を気にしないからである。しかし、一部のユーザ（すなわち「ハッカー」）は、内部の秘密を暴くか、制限された動作または禁止された動作を実行する形でアプリケーションを変更するかのいずれかのために、アプリケーションとその構成要素を覗こうとする場合がある。一般に、ハッカーは、通常は、アプリケーションの動作を習得するために、静的な逆アセンブルおよび分析か、対象のアプリケーションの生のデバッギングのいずれかを使用する。習得を終えると、ハッカーは、所期の目的に従って動作を変更することができる。これに応答して、これらのハッキングの試みを妨げるために、耐タンパ技法がアプリケーションに適用されることがしばしばである。
【０００３】
さまざまな手段を使用して、アプリケーションとその構成要素を耐タンパ性にすることができる。その１つが、アプリケーションとその２進情報のディジタル「指紋」または署名を作ることである。初期設定中または実行時（またはその両方）に、アプリケーションの現在の２進状態と比較してディジタル指紋を検査することを介して、保護されたアプリケーションの変更を検出することができる。そのような活動または変更が検出される時には、保護されたアプリケーションは、それに含まれる秘密が露出されない形で意図的に障害を発生することができる。
【０００４】
【発明が解決しようとする課題】
タンパリング活動を検出するための信頼性のある手段は、しばしば実施が困難であり、ハッカーの高度な知識が増えるにつれてさらに複雑にならなければならない。本発明は、この必要を満たすことを目的とする。
【０００５】
【課題を解決するための手段】
手短に要約すると、第１の態様では、実行可能モジュールおよび関連保護サービス・プロバイダ（ＰＳＰ）モジュールのうちの少なくとも１つの完全性を監視するための方法が提供され、ＰＳＰモジュールは、実行可能モジュールに保護サービス機能を提供する。この方法には、ＰＳＰモジュールおよび実行可能モジュールのうちの少なくとも１つの完全性を検査するための、ＰＳＰモジュールと別のモジュールを構成する共生モジュールを提供するステップと、共生モジュールをクロスチェック（cross-checking）するためのコードをＰＳＰモジュール内で提供するステップとが含まれ、共生モジュールによる検査およびＰＳＰモジュールによるクロスチェックが、一緒に、実行可能モジュールおよびＰＳＰモジュールのうちの少なくとも１つの完全性を監視する。
【０００８】
上で述べた方法に対応するシステムも、本明細書に記載され、請求される。
【０００９】
言い換えると、本明細書で提供されるのは、たとえばオペレーティング・システム・ローダによるメモリへの実行可能モジュールのロードの後ならびに、実行可能モジュールに関連し且つこれに保護サービス機能を提供する保護サービス・プロバイダ（ＰＳＰ）モジュールの検査の後などの、アプリケーション・プログラムの実行可能モジュールの完全性検査実行のためのさまざまな技法である。ＰＳＰモジュールを構成するコードとは別の実行可能モジュールを構成する独立のモニタ実体が開示され、これによって、モニタ実体は、簡単に検出または無効化することができなくなり、したがって、アプリケーション・モジュールに与えられる耐タンパ保護が高まる。モニタ実体（本明細書では「共生モジュール（symbiont module）」とも称する）は、ＰＳＰモジュールと共に走行し、実行可能モジュールを含むアプリケーションによるか、たとえば初期設定時に、オペレーティング・システムによるかのいずれかで起動することができる。したがって、下でさらに説明するように、モニタ実体は、さまざまな形で始動でき、オペレーティング・システム内で独立に走行することができる。
【００１０】
【発明の実施の形態】
全般的に、本発明は、走行中にアプリケーションまたは、より具体的にはアプリケーションの実行可能モジュールの有効性を検査するための、アプリケーションと共に走行する独立のソフトウェア「モニタ」実体または共生モジュールの使用を提案する。アプリケーション自体の中で実施可能ではあるが、共生コードは、システム内の独立のプロセスまたはスレッドとして独立型にして、組み合わされるアプリケーションのデバッグをより困難にすることができる。
【００１１】
機能強化された実施形態では、保護サービス・プロバイダ（ＰＳＰ）モジュールによって実行可能モジュールに提供される保護サービス機能を、第１構成要素と第２構成要素に再分割することができ、第１構成要素をＰＳＰモジュール内に残し、第２構成要素を共生モジュール内で実施することができる。有利なことに、この実施形態では、共生モジュールがＰＳＰモジュールの完全性検査を行い、ＰＳＰモジュールが共生モジュールの完全性クロスチェックを行い、これによって、保護サービス機能の有効性がさらに保証され、保護サービス機能への許可されないアクセスがより困難になる。
【００１２】
本明細書では、以下の用語を使用する。
【００１３】
実行可能モジュール−−ディジタル情報の集合であり、通常は、コンピュータのプロセッサによって実行される命令とデータを含む。この情報の集合は、しばしばハード・ドライブなどの媒体に「ファイル」として格納され、そこからメモリ（またはランダム・アクセス・メモリ、ＲＡＭ）にロードされ、実行される。実行可能モジュールの例には、（一般的な命名規則を使用する）「実行可能ファイル」（接尾部が．ｅｘｅまたは．ｃｏｍであるファイル）、動的リンク・ライブラリ（接尾部が．ｄｌｌ）およびデバイス・ドライバ（接尾部が、たとえば．ｖｘｄ、．ｄｒｖ、．ｓｙｓまたは．ｍｐｄ）が含まれるが、これに制限されない。
【００１４】
ディジタル署名−−ディジタル・データの集合（実行可能モジュールの全体またはサブセクション（subsection）など）のディジタル「指紋」。ディジタル署名は、有用になるために、通常は以下の特性を有する。１）ディジタル・データの集合に対する簡潔で明確に定義された反復可能な処理（通常は数学的処理）の適用によって作成される。２）ディジタル署名は、ディジタル・データの集合のどの部分が変更された場合でも、変化する確度が極端に高い。３）ディジタル署名が有効であるためには、別のディジタル・データのシーケンスと同一のディジタル署名をもたらすディジタル・データのシーケンスが発見される確度がほぼ０でなければならない。４）ディジタル署名は、署名生成処理が普通に適用されるディジタル・データの集合のサイズと比較した時に、比較的小さいサイズを有する。署名生成処理は、非常に基本的で破ることが簡単な方法（チェックサムなど）から、メッセージ・ダイジェスト５ハッシュ（ＭＤ５）などの暗号的に強く安全な方法まで変化することができることに留意されたい。
【００１５】
共生モジュールまたはモニタ−−その機能が、１つまたは複数の実行可能モジュールまたは実行可能モジュールのサブセクションを周期的または継続的に検査して、そのモジュールまたはサブセクションがコンピュータ・メモリ（ランダム・アクセス・メモリ）または他の位置に現れる際にそれらの完全性を検証することである、独立の実行可能モジュールまたは実行可能モジュールのサブセクション。任意選択として、共生モジュールは、それが完全性を検査する他の実行可能モジュールによって主に実行される計算に参加することもでき（すなわち、共生モジュールは、機能ならびに完全性検査を提供することができる）、これによって、検査される実行可能モジュールに共生モジュールをより緊密に結合することができる。共生実行可能モジュールとその完全性検査は、２つのモードのうちの１つ、すなわち、独立の実行スレッドとして、または、それが検査する１つまたは複数の実行可能モジュールから呼び出される機能として（これによって、その実行スレッド内で動作するようになる）実施することができる。後者の場合、共生モジュールとの通信は、当業者には既知のシグナリング機構（たとえば共用メモリ、セマフォ、ミューテックスなど）を介して行われる。完全性検査は、実行可能モジュールまたは実行可能モジュールのサブセットを構成するディジタル・データおよび命令からのディジタル署名の生成と、その後の、その署名と、完全性が良好であることが既知の同一の実行可能モジュールから生成された署名との比較を必要とすることがある。共生モジュールは、実行可能モジュールまたはサブセクションの他の検査を実行することもでき、また、オペレーティング・システムに問い合わせるか、コンピュータ・システム内の活動の属性を検査して、「ハッカー」が実行可能モジュール内の命令またはデータの不法な観察、変更または不正使用を試みているかどうかを判定することができる。そのようなモニタでは、通常は、ＲＡＭに現れる実行可能モジュールのイメージを検査するが、モニタは、たとえばハード・ドライブまたはプロセッサ・キャッシュなど、ＲＡＭ以外の媒体に格納される実行可能モジュールまたはサブセクションのイメージを検査できないわけではない。
【００１６】
保護サービス・プロバイダ−−秘密、機密または専有的（proprietary）であり、公開されることを意図されていない命令またはデータを含む、実行可能モジュールまたは実行可能モジュールのサブセクション。保護サービス・プロバイダは、１つまたは複数の実行可能モジュールを含むアプリケーションに保護サービス機能を提供する。
【００１７】
防衛処置（defensive action）−−完全性検査によって、保護サービス・プロバイダの完全性が傷つけられたか傷つけられようとしていることが明らかになった時に、保護サービス・プロバイダの作成者またはユーザの自由裁量で行われる処置。これは、たとえば、保護サービス・プロバイダのディジタル署名が変更された、デバッガが活動状態である、または、他の許可されないか疑わしい変更がシステムで行われたことを意味する場合がある。防衛処置には、保護サービス・プロバイダの実行の停止、不法な活動が検出されたことのユーザへの通知、不法な活動が検出されたことのログ記録、別の位置への不法な活動の詳細を示す送信（可能であれば）の送出、誤った結果を生じる（しかし実行を継続する）ようにするための保護サービス・プロバイダの命令またはデータの変更、実行障害を引き起こすこと、コンピュータのリブート、コンピュータに電源を切るように指示することの任意の組合せが含まれるが、これに制限されない。
【００１８】
ここで図面を参照すると、図１は、本発明の実施形態が動作することのできるコンピュータ・システム１００を示すブロック図である。この実施形態には、１つまたは複数のアプリケーション・プログラムが含まれ、たとえば、そのうちの１つのアプリケーション・プログラム２００が、図２に示されている。別の種類のアプリケーション・プログラム１０２が、オプティマイザ１０６を含むコンパイラ１０５である。コンパイラ１０５およびオプティマイザ１０６は、ソース・プログラム（アプリケーション・プログラム１０２など）を最適化された実行可能コードに変換するように構成される。より一般的には、ソース・プログラムは、最適化された形態に変換され、その後、実行可能コードに変換される。この処理の一部として、コンパイラ１０５は、データ記憶装置１１８からＲＡＭ１１４などのメモリに実行可能モジュールをロードするための省略時ロード・アドレスを割り当てる。
【００１９】
コンパイラ１０５およびオプティマイザ１０６は、ハードウェア・ユニット１１２を含むコンピュータ・プラットホーム１０４上で動作する。ハードウェア・ユニット１１２には、１つまたは複数の中央処理装置（ＣＰＵ）１１６、ランダム・アクセス・メモリ（ＲＡＭ）１１４および入出力インターフェース（図示せず）が含まれる。たとえば縮小命令セットなどのマイクロ命令コード１１０も、コンピュータ・プラットホーム１０４上に含めることができる。データ記憶装置１１８を含むさまざまな周辺構成要素を、コンピュータ・プラットホーム１０４に接続することができる。リンクも、コンピュータ・システム１００を１つまたは複数の同様のシステム（図示せず）に接続するために含めることができる。
【００２０】
オペレーティング・システム１０８は、コンピュータ・システム１００のさまざまな構成要素の動作を調整する。このようなコンピュータ・システム１００の例が、ＩＢＭ  ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００（ＲＩＳＣ  Ｓｙｓｔｅｍ／６０００は、ＩＢＭ社の商標である）である。しかし、以下で説明する概念を、独立型システムであれネットワーク型システムであれ、異なる種類のコンピュータ・システム１００に適用可能であることは、当業者に容易に理解される。
【００２１】
前に述べたように、図２は、本発明の概念を使用するためのアプリケーション・プログラムの１実施形態を示す図である。アプリケーション・プログラム２００には、アプリケーション・グラフィカル・ユーザ・インターフェース（ＧＵＩ）２０１、第１のアプリケーション動的リンク・ライブラリ（ＤＬＬ）２０２および第２のアプリケーションＤＬＬ２０３が含まれる。この例では、アプリケーションＤＬＬ２０２および２０３は、実行可能モジュールを構成し、さらに保護サービス・プロバイダ２１０およびモニタ／完全性チェッカ２０４とのインターフェースを構成する。保護サービス・プロバイダ２１０は、アプリケーションの一部を構成するか、アプリケーションにインターフェースすることができ、後者の場合には、保護サービス・プロバイダに第２のアプリケーションを構成することができる。
【００２２】
保護サービス・プロバイダには、機密情報を含めることができ、１実施形態では、保護サービス・プロバイダが、本発明の原理による耐タンパ・コードを実施する。アプリケーションＤＬＬ２０２および２０３は、保護サービス・プロバイダ２１０とインターフェースするので、保護サービス・プロバイダをオープンする際に、可能な不正使用のためにこれらのＤＬＬのどちらもが変更されないことを保証することが望ましい。したがって、アプリケーションＤＬＬ２０２および２０３は、保護サービス・プロバイダへのアクセスの前提条件として検査を受けることができ、実行時に動的に周期的に再検査を受けることができる。１例として、保護サービス・プロバイダに、ディジタル・ビデオ・ディスク・プレイヤ用のデスクランブラ・モジュールを含めることができ、この場合に、ＰＳＰモジュールによって提供される保護サービス機能に、デスクランブル機能が含まれるはずである。
【００２３】
モニタ／完全性チェッカ２０４は、本明細書では共生コードとも称するが、保護サービス・プロバイダまたはオペレーティング・システムによって起動され、オペレーティング・システム（ＯＳ）内で独立に走行する、独立のモニタ・プログラムを含むことが好ましい。モニタ実体は、さまざまな形で始動することができるが、その中には他の形より堅牢なものがある。以下これを例示する。
【００２４】
・アプリケーションは、スレッド（または別のプロセス）をスポーン（spawn）して、モニタ実体の独立の実行を開始することができる。たとえば、Ｗｉｎｄｏｗｓオペレーティング・システムでは、独立のスレッドまたはプロセス内でコード・シーケンスの実行を開始する方法が複数存在する。しかし、この手法では、モニタのコードは、実際には実行可能モジュールと同時にメモリにロードされる。
【００２５】
・共生コードを、別にコンパイルされたプログラム、デバイス・ドライバまたはサービスとして作成することができる。このような実施形態では、共生コードは、実際にはオペレーティング・システムによって、たとえばブート時に始動される。ある意味では、共生コードは、休止状態になり、保護サービス・プロバイダを使用するアプリケーションの初期設定と実行開始を待ち、その時点で、共生コードが機能を開始する。この技法は、共生コードが、ＯＳブート時にロードされるように導入された時に、アプリケーションの一部にみえることが全くなく、それ自体がほとんど注目されないという点でより強力である。アプリケーションと共生コードの間の最初の通信は、デバイス・ドライバ入出力制御コマンド（ＩＯＣＴＬ）、共用メモリ、名前付きパイプ、ソケット通信ＡＰＩを含むがこれらに制限されない複数の形で行うことができる。
【００２６】
要約すると、アプリケーションＤＬＬ２０２および２０３は、保護サービス・プロバイダ２１０への機能呼出しを行って、保護サービス機能にアクセスする。モニタ／完全性チェッカ２０４は、完全性検査機能を、たとえば保護サービス・プロバイダ２１０ならびにアプリケーションＤＬＬ２０２および２０３の両方に、提供する。代替実施形態では、保護サービス・プロバイダ２１０に、アプリケーションＤＬＬ２０２および２０３のための完全性チェッカならびにモニタ／完全性チェッカ２０４に対する相互チェッカを含めることができる。プロセス間通信リンクも、本明細書の以下でさらに説明する本発明のさまざまな実施形態で、保護サービス・プロバイダ２１０とモニタ／完全性チェッカ２０４の間に存在するはずである。
【００２７】
さらに、モニタ／完全性チェッカ２０４（１実施形態の）は、保護サービス・プロバイダが保護サービス機能を提供する対象の特定のアプリケーションの完全性検査専用である。この特定のアプリケーションは、メモリ内にあり実行中の間に完全性検査を受ける。前に述べたように、モニタ／完全性チェッカ２０４は、アプリケーションと独立にスポーンすることができる（たとえば、オペレーティング・システム・ブート時にロードされるデバイス・ドライバとして）。
【００２８】
図３は、共生コード（すなわちモニタ／完全性チェッカ２０４）を対象としてＰＳＰモジュール（以下「ＰＳＰ主モジュール」とも称する）によって実行される完全性クロスチェックの流れ図であり、図４は、ＰＳＰモジュールを対象として共生コードによって実行される完全性検査の流れ図である。この例では、共生コードが、ＰＳＰモジュールを実行するスレッドとは別のスレッド上で実行中であると仮定する。図３から始めると、ＰＳＰ主モジュールのルーチン動作フロー３００内で実施することのできる、共生コードの完全性検査では、まず、共生スレッドが実行中であるかどうかを判定する（３１０）。この例では、共生コードは、有効であるために実行中でなければならないと仮定する。共生スレッドが実行中でない場合には、防衛処置を行う（３２０）。共生スレッドが実行中である場合には、ＰＳＰモジュールは、共生コードに対する完全性検査を実行し（３３０）、共生コードが有効であるかどうかを判定する（３４０）。そうでない場合には、やはり防衛処置を行う（３５０）。それ以外の場合には、共生コードが動作中であり、有効であるので、ＰＳＰは、主動作フローを継続する（３６０）。
【００２９】
図４からわかるように、本発明の１実施形態では、共生コードは、バックグラウンド動作フロー３５５内でＰＳＰモジュールの完全性検査３５５を実施する。この完全性検査は、ＰＳＰモジュールとは別の、独立の実行スレッドによって行われる。共生コードは、共生コードを検査するコード自体を含む、ＰＳＰ主モジュールに対する完全性検査を実行する（３６５）。任意選択として、共生コードは、ＰＳＰ機能を使用しているアプリケーションｘも検査することができる。共生コードは、ＰＳＰモジュールが有効であるかどうかを判定し（３７５）、そうでない場合には、防衛処置を実行する（３８５）。有効である場合には、共生コードは、ある期間だけ待機（３９５）した後に、ＰＳＰ主モジュールの完全性検査をもう一度実行することができる。
【００３０】
上で述べた監視手法に対する機能強化として、本明細書では、１つまたは複数の保護サービス機能を複数の独立の実行スレッド間で再分割するという概念を提示する。相互に独立なクロスチェック・モジュールは、さらに耐タンパ性が高くなるはずである。したがって、保護サービス機能を、複数の実行スレッドに分割することができ、実行スレッドのそれぞれが、少なくとも１つの他のモジュールの完全性検査を行うことができ、各モジュールにクリティカルなすなわち保護された機能の一部が含まれる。図５に、この概念を実施するための実施形態の１つを示す。
【００３１】
まず、保護サービス・プロバイダの主機能が判定され（４００）、１つまたは複数の保護サービス機能が、複数の構成要素に再分割される（４１０）。たとえば、保護サービス機能Ａが、第１の構成要素Ａ'と第２の構成要素Ａ"に再分割される。第１の構成要素Ａ'は、ＰＳＰ主モジュール内で実施され（４２０）、第２の構成要素Ａ"は、ＰＳＰの共生コード内で実施される（４３０）。第２の構成要素Ａ"の完全性を検査するための完全性検査コードは、ＰＳＰ主モジュール内で、たとえば、第１の構成要素Ａ'自体の中で実施される（４４０）。同様に、第１の構成要素Ａ'の完全性を検査するためのコードは、たとえば、第２の構成要素Ａ"自体の中で実施される（４５０）。１実施形態では、その後、共生コードを、オペレーティング・システムのブート時にロードされるデバイス・ドライバとして導入することができる（４６０）。
【００３２】
図６は、本発明の１態様に従って再分割された保護サービス機能の概念を示す図である。保護サービス機能Ａ、Ｂ、Ｃ、…、Ｆに関する呼出しが、それぞれの保護サービス機能Ａ、Ｂ、Ｃ、…、Ｆの第１構成要素Ａ'、Ｂ'、Ｃ'、…、Ｆ'が存在する主保護サービス・プロバイダ・モジュール５００に対して行われる。保護サービス機能は、１実施形態では、第１構成要素から、第２保護サービス・プロバイダ・モジュール５１０内で実施される第２構成要素への機能呼出しを実施することによって実行される。図からわかるように、第２保護サービス・プロバイダ・モジュール５１０は、第２構成要素Ａ"、Ｂ"、Ｃ"、…、Ｆ"を実施する。第１構成要素から第２構成要素への機能呼出しが行われるのに応じて、第２構成要素が、第１構成要素の完全性検査を行い、第１構成要素が、第２構成要素の完全性検査を行う。破線によって示されているように、主保護サービス・プロバイダ・モジュール５００と第２保護サービス・プロバイダ・モジュール５１０は、独立の実行可能モジュールを構成することが好ましい。ここで使用される第２保護サービス・プロバイダ・モジュール５１０には、主保護サービス・プロバイダ・モジュール５００に対する共生コードが含まれる。さらに、ここでは主保護サービス・プロバイダ・モジュール５００および第２保護サービス・プロバイダ・モジュール５１０に関して説明するが、提示される概念は、当業者によって、３つ以上の別々の実行可能モジュールの間で簡単に実施できる。
【００３３】
図７は、本発明の原理に従って、組み合わされた保護サービス機能再分割および完全性検査を実施するための１実施形態を表す流れ図である。ＰＳＰ主モジュールは、保護サービス機能Ａについて、アプリケーションｘの実行可能モジュールによって呼び出される（６００）。ＰＳＰ主モジュールは、機能Ａの一部（すなわち第１構成要素Ａ'）を実行すると同時に、共生モジュールに存在する第２構成要素Ａ"コードの完全性を検査する（６１０）。処理によって、第２構成要素Ａ"コードの完全性が正しいかどうかが判定され（６２０）、正しくない場合には、防衛処置が行われる（６３０）。第２構成要素の完全性が正しいと仮定すると、保護サービス機能Ａの完了（すなわち第２構成要素Ａ"の実行）のために、共生モジュールへの呼出しが行われる（明示的な呼出しか、共生モジュールが別の形で実行開始のシグナルを受け取るのいずれか）（６４０）。
【００３４】
呼び出された共生コードは、ＰＳＰ主モジュール内の第１構成要素Ａ'の完全性を検査する（６５０）。処理によって、第１構成要素Ａ'のコードの完全性が正しいかどうかが判定され（６６０）、そうでない場合には、やはり防衛処置が行われる（６７０）。第１構成要素Ａ'の完全性が正しい場合には、第２構成要素Ａ"のコードが実行され、結果がＰＳＰ主モジュールに返される（６８０）。ＰＳＰ主モジュールは、保護サービス機能呼出しの結果をアプリケーションｘに返す（６９０）。
【００３５】
要約すると、当業者は、上の説明から、アプリケーションそのものに関するモニタ／完全性チェッカ（すなわち共生コード）の処置が、以下のいずれかまたはすべてであることに気付くであろう。
【００３６】
・モニタは、アプリケーションそのもののメモリ領域に対して周期的な署名分析を実行する。これは、ロードの前または実行中のいずれかの、アプリケーションの許可されない変更の検出を助ける。前者の検出は、許可されない動作を実行するためにアプリケーションが静的に変更される（「永久的」記憶装置、通常はハード・ドライブ内で）「ブラック・ボックス」攻撃を妨げるのに役立つ。後者は、一部のデバッグ活動の検出に役立つ（たとえば、アプリケーションにブレークポイントを設定すると、実際に、アプリケーションのメモリ・イメージの２進署名が変化する）。
【００３７】
・モニタは、アプリケーションの保護された計算の一部を実行する。したがって、モニタ実体を使用不能にすると、アプリケーションが「破壊」され、正しく機能しなくなる。
【００３８】
・アプリケーションまたはモニタあるいはその両方は、可能な観察者を迷わせるために、不要であるか、その計算が回り道であるか追従が困難である、お互いへの呼出しを含み、実行することができる。
【００３９】
・モニタは、アプリケーションからの呼出しが、そのアプリケーションが存在しなければならないか存在することが既知のアドレス範囲（メモリ内の）から実際に来たものであることを検証し、その逆も行われる。
【００４０】
・アプリケーションは、モニタ実体に対する完全性検査（ディジタル署名またはチェックサム）を実行することもできる。
【００４１】
・モニタは、許可されないデバッグ動作を検出するために、アプリケーション自体とは別の、オペレーティング・システムの要素を検査する。
【００４２】
・モニタが、アプリケーション自体の正しくない動作または署名の変化を検出した場合には、モニタは、望ましくない活動を終了させるために、アプリケーションを使用不能にするか、正しくないデバッグ動作を使用不能にするか、おそらくはリブートまたは他の形でシステムを停止させるための独立の処置を行うことができる。または、モニタは、この動作が検出されたことをハッカーに表立って通知せずに、その計算を無効にすることができる。攻撃に対する応答は、発生ごとに変更することができる、すなわち、その反応の予測不能性を実現でき、これによって、アプリケーション／モニタ対がさらにハッキングしにくくなる。
【００４３】
・何らかの形のネットワーク接続が使用可能な場合には、モニタは、検出された活動を外部の観察者に報告することもできる。この技法は、アプリケーションが、インターネット上のサーバからのデータ必要とする（または、その機能が保護されたデータにアクセスすることである）場合に有用になる。この場合、不正な活動の報告は、攻撃者がその後にサーバ・データにアクセスできなくするのに使用することができる。
【００４４】
・アプリケーション全体が、複数の実行実体（たとえば、デバイス・ドライバ、プロセス、スレッド）からなるものとすることができることに留意されたい。同様に、モニタも、複数の実行実体からなるものとすることができる。鍵は、アプリケーションとモニタが分離され、モニタがそのアプリケーション「専用」であることである。
【図面の簡単な説明】
【図１】  本発明の原理による、耐タンパ検査技法を使用するコンピュータ・システム・ハードウェアの１実施形態のブロック図である。
【図２】  本発明の原理による、アプリケーション２００を構成する複数の実行可能コード２０１〜２０３が保護サービス・プロバイダ２１０（たとえば、ディジタル・ビデオ・ディスク・プレイヤ用のデスクランブラ）とインターフェースされ且つその両方がモニタ／完全性チェッカ２０４にインターフェースされる、システムの概要を示す図である。
【図３】  本発明の原理による、共生コードを対象としてＰＳＰモジュールによって実行される完全性クロスチェックの１実施形態の流れ図である。
【図４】  本発明の原理による、ＰＳＰモジュールを対象として共生モジュールによって実行される完全性検査の１実施形態の流れ図である。
【図５】  本発明の原理による、ＰＳＰモジュールと共生コードの間の保護サービス機能の共用と、ＰＳＰモジュールと共生コードの間の完全性検査および完全性クロスチェックの１実施形態の流れ図である。
【図６】  本発明の原理による、ＰＳＰモジュールの機能を第１構成要素と第２構成要素へ分割する概念を表す図である。
【図７】  本発明の原理による、ＰＳＰモジュールと共生コードの間の保護サービス機能の共用と、ＰＳＰモジュールと共生コードの間の完全性検査および完全性クロスチェックのもう１つの実施形態の流れ図である。
【図１】
0003657179.tif 000002
【図２】
0003657179.tif 000003
【図３】
0003657179.tif 000004
【図４】
0003657179.tif 000005
【図５】
0003657179.tif 000006
【図６】
0003657179.tif 000007
【図７】
0003657179.tif 000008