(57)【要約】コンピュータ装置上で動作するコンピュータ・プログラムの完全性を保護する方法は、プログラムのアドレス空間に対する権限の無い変更が発生したか否かを検知するプロシージャと、権限のある変更が検知された場合にはプログラムの実行を終了し、そのような変更が検知されなかった場合にはプログラムの実行を継続するプロシージャとを含む。演算装置の少なくとも２つの通信主体間の通信方法は、各通信シーケンスのそれぞれの通信主体において、ランタイムで、デジタル署名のための秘密鍵と公開鍵を生成するステップと、公開鍵を他の通信主体が利用可能にするステップと、秘密鍵と公開鍵に基づくデジタル署名を用いて、通信主体間の通信を行うステップとを含む。両方法は、ローカルコンピュータシステムでの悪意あるプログラムによる完全性と真正性の考えうる侵害に対する改善された保護策を提供する。
2005535945.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ装置上で動作するコンピュータ・プログラムの完全性を保護する方法であって、
プログラムの実行を開始するステップと、
プログラムのアドレス空間に対する権限の無い変更が発生したか否かを検知するステップと、
権限の無い変更が検知された場合にはプログラムの実行を終了し、そのような変更が検知されなかった場合にはプログラムの実行を継続するステップと
を含む方法。
【請求項２】
プログラムのアドレス空間に対する権限の無い変更の発生が検知された場合にエラーメッセージが出力される請求項１に記載の方法。
【請求項３】
検知するステップは、
プログラムのプログラムモジュールとプログラムにより使用されるランタイム・ライブラリと対する権限の無い変更の検知を含む請求項１、又は２に記載の方法。
【請求項４】
検知するステップは、
プログラムのアドレス空間のハッシュ関数と参照ハッシュ値との比較を含む請求項３に記載の方法。
【請求項５】
少なくとも１００ビット長、望ましくは少なくとも１６０ビット長の、暗号として強力なハッシュ関数を使用する請求項４に記載の方法。
【請求項６】
プログラム・モジュールのハッシュ関数ｈ（Ｍ）を演算するステップと、
ランタイム・ライブラリのハッシュ関数ｈ（Ｌ）を演算するステップと、
を含むプログラムのインストール・プロシージャを有する、請求項４又は５に記載の方法。
【請求項７】
インストール・プロシージャは、プログラムの権利者により与えられたモジュールのハッシュ関数ｈ（Ｍ）と、動作環境により与えられた外部モジュールのハッシュ関数ｈ（Ｍ）の演算を含む請求項６に記載の方法。
【請求項８】
インストール・プロシージャは、プログラムの更新がインストールされた場合に、繰り返される請求項６又は７に記載の方法。
【請求項９】
ｈ（Ｍ）とｈ（Ｌ）は演算装置の変更に対して保護された記憶領域（５４；  １２１）に保持される請求項６、７又は８に記載の方法。
【請求項１０】
検知するステップは、
プログラム実行の起動時のプログラム・モジュールのハッシュ関数ｈ＊（Ｍ）と、ランタイム・ライブラリのｈ＊（Ｌ）の演算と、
ｈ＊（Ｍ）、ｈ＊（Ｌ）と変更に対して保護された記憶領域に保持されているハッシュ関数ｈ（Ｍ）、ｈ（Ｌ）との比較を含む請求項９に記載の方法。
【請求項１１】
プログラム・モジュールの名前と、プログラムのアドレス空間のランタイム・ライブラリの名前を取得するためのａｓｍ関数の使用を含む請求項３から１０に記載の方法。
【請求項１２】
変更に対して保護された記憶領域の変更に対する保護は、アクセス制御又は／及びユーザ・アカウントを通じて動作環境によって実現される請求項９から１１のいずれか一に記載の方法。
【請求項１３】
プログラム自身がインストール・プロシージャ間に変更に対して保護された記憶領域への一時的なアクセスを認められる請求項９から１２のいずれか一に記載の方法。
【請求項１４】
検知するステップは欠落プログラム・モジュール、追加プログラム・モジュール、又は変更プログラム・モジュールの認識を含む請求項３から１３のいずれか一に記載の方法。
【請求項１５】
保護されたプログラムは、デジタル署名プログラムや、金融取引プログラムのように安全性の高いプログラムである請求項１から１４のいずれか一に記載の方法。
【請求項１６】
プロセッサ部（５１）、少なくとも一つの記憶装置（５３）、及び入出力部（５２）を有し、請求項１から１５のいずれか一に記載の方法を実行するようプログラムされている演算装置。
【請求項１７】
請求項１から１５のいずれか一に記載の方法を実行するためのプログラム・コードを有するコンピュータ・プログラム
【請求項１８】
請求項１から１５のいずれか一に記載の方法を実行するためのプログラム・コードを有するコンピュータ・プログラムを保持する記憶媒体。
【請求項１９】
プログラムの更新がインストールされると、インストール・プロシージャが繰り返される請求項６又は７のいずれか一に記載の方法。
【請求項２０】
演算装置の少なくとも２つの通信主体（Ａ・Ｂ）間の通信方法であって、
少なくとも２つの通信主体間の通信シーケンスを開始するステップと、
通信シーケンスごとの各通信主体において、デジタル署名のための秘密鍵と公開鍵を生成するステップと、
一つの通信主体の公開鍵を他の通信主体が利用可能とするステップと、
秘密鍵と公開鍵のそれぞれを用いて暗号化された、通信主体間のデジタル署名付メッセージを交換するステップと、
を含む通信方法。
【請求項２１】
変更に対して保護された記憶領域内の予め定義された固定アドレスに各通信主体の公開鍵を書き込むステップを含む請求項２０に記載の方法。
【請求項２２】
通信シーケンスを終了する際に各通信主体の公開鍵を無効にするステップを含む請求項２０又は２１に記載の方法。
【請求項２３】
各通信主体に対するインストール・プロシージャを含む方法であって、
変更に対して保護された記憶領域を定義するステップと、
通信主体の公開鍵用の固定アドレスを変更に対して保護された記憶領域にハード・コードするステップと、
安全な通信が行われるべき他の通信主体の公開鍵の固定アドレスを変更に対して保護された記憶領域にハード・コードするステップと、
を含む請求項２１又は２２に記載の方法。
【請求項２４】
通信主体の操作が開始した際に、請求項１から１５のいずれか一に記載の完全性保護プロシージャを含む請求項２０から２３のいずれか一に記載の方法。
【請求項２５】
通信主体はコンピュータ・システムのローカル・モジュールである請求項２０から２４のいずれか一に記載の方法。
【請求項２６】
複数の機能的モジュール（Ａ，Ｂ，Ｃ，Ｄ）を含む演算装置であって、
秘密鍵とそれに対応する公開鍵を生成する鍵生成部（２１２）と、
秘密鍵を用いたデジタル署名付メッセージを供給する署名添付部（２１１）と、
公開鍵を保持するための固定アドレスと、さらに、安全な通信が行われるべき他のモジュールの公開鍵の固定アドレスとを有する変更に対して保護された記憶領域（２１４）と、
それぞれの送信側モジュールの公開鍵を用いて、他のモジュールから受信したメッセージを照合する署名照合部（２１０）と
を含む演算装置。
【請求項２７】
演算装置は、パーソナル・コンピュータである請求項２６に記載の方法。
【請求項２８】
演算装置は、ラップトップ、パーソナル・デジタル・アシスタント、又は、携帯電話といった携帯装置である請求項２６に記載の方法。
【請求項２９】
コンピュータ上で実行される際に、請求項２０から２５のいずれか一に記載の方法を行うためのプログラム・コードを含むコンピュータ・プログラム。
【請求項３０】
請求項２９に記載のコンピュータ・プログラムを保持する記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータシステムのセキュリティ、特にコンピュータ装置上で動作するコンピュータプログラムの完全性と真正性の保護、及びコンピュータシステムの少なくとも２つのモジュール間での通信方法に関する。
【背景技術】
【０００２】
コンピュータ・システムのセキュリティは、３つの要素、有用性、機密性及び完全性にかかっている。さらに、アプリケーション数の増加におけるその重要性ゆえに、真正性が第四の要素として加わった。
【０００３】
有用性は、セキュリティ・ポリシーに規定された時間内に、認証されたユーザにそのサービスを提供することと定義される。機密性は、幾つかのデータは権限の無いユーザに対して機密とされなければならない、というセキュリティ・ポリシーに従い特定する。完全性は、例えば、作成、変更、消去といったデータ及びプログラムに対する変更が、セキュリティ・ポリシーに従い認証されたユーザによってのみなされることを要件としている。そして、最後に、真正性は、データ又はプログラムの受け手がその送り手の同一性についての要求を検証できることを要件としている。
【０００４】
本発明は、例えば、トロイの木馬プログラム、ウイルス、及びワームといったユーザのコンピュータ上で、又は彼のアカウントにおいて、ユーザの承諾なしに、殆どの場合は知らないうちに動作する悪意あるプログラムによってもたらされる問題を解決する。悪意あるプログラムがユーザのコンピュータシステムに侵入できる多くの方法がある。ウインドウズ２０００やリナックスといった一般的なオペレーティング・システムは、それを起動したユーザとの同一性をもとにプログラムに権限を付与するアクセス・コントロール・システムを有している。これらのオペレーティング・システムは、プログラムベースのアクセス権のコントロールをサポートするわけではない。このように、一度定着すれば、悪意あるプログラムは、プログラム実行の間に、ユーザの権限や特権が与えられ、例えば、ファイル消去、プログラム変更、又はプログラムの通信の妨害といったユーザの意図しない悪意の動作を行う事が可能となる。
【０００５】
悪意あるプログラムの脅威は深刻である。一方では、例えば、暗号化、デジタル署名、ホーム・バンキング、電子商取引、金融や他の信用取引といったユーザ・アカウントにおいてセキュリティ関連のタスクを行うアプリケーションが増えている。これらアプリケーションのセキュリティは殆どがユーザのアカウント、又は彼・彼女のパーソナル・コンピュータにおいて、それらが適切に実行されることに依存している。他方、ファイアウォール、ウイルス・スキャナー、ｅ−ｍａｉｌフィルタといった現在の防御メカニズムは、悪意あるプログラムのコンピュータへの侵入を防止することのみを狙いとしている。実際には、しかしながら、この防御が多くの場合不十分であることを示している。
【０００６】
コンピュータベースのワークフロー、処理、動作の大部分は、ローカルエリア・ネットワーク（ＬＡＮ）又はインターネットへの接続を必要とする。定置型、又は移動型ｅサービスの商業的な拡大−そして多くの政府よるプロモーション−に鑑みると、ネットワーク依存型のアプリケーション数は間違いなく増大するであろう。リモート通信において中心的役割を果たすインターネットは、オープンなワールドワイドネットワークである。その構造とデザインの帰結として、インターネットの通信は様々な脅威にさらされるようになった。インターネット上のデータの移動は、その受け手以外の者によって盗聴され、読み出される可能性があり、そのことはデータの機密性と通信主体のプライバシーを侵害するものである。データはまた、インターネットにおける権限の無い通信主体によって変更され、その完全性を侵害されうるし、あるいは、不正なデータが挿入されて、その真正性を侵害されうる。その結末は予想がつかない。ついには、インターネットの攻撃者は有用性に影響を与えうるまでになる。
【０００７】
暗号化技術は機密性、完全性、及び真正性の強力な保護策であると考えられている。
【０００８】
機密性を強化するために、送り手は彼のコンピュータ内のデータを暗号化し、暗号化された形式で受け手に送信する。暗号化はデータの意味を隠し、使われたアルゴリズムは、データを読み出せる権限の無いユーザが、その意図された意味を再構築、及び認識できないことを確実なものとする。認証されたユーザのみが暗号化されたデータを彼の秘密鍵で復号できる。すなわち、暗号化技術は機密性の侵害を防止する。
【０００９】
完全性と真正性を強化するため、送り手はデータに、データと送り手の両方を識別するためのデジタル署名を添付する。デジタル署名の使用については図２に概略が例示してある。ステップＳ１において、送り手は秘密鍵と、受け手がアクセス可能な公開鍵を生成する（ステップＳ２）。その後、デジタル署名は、秘密鍵を用いてメッセージに添付される。デジタル署名付のメッセージは、送り手の公開鍵を使ってメッセージの完全性と真正性を検証することのできる受け手に送信される。データ又はその署名を変更できる権限の無いユーザは、署名がデータと、送り手の身元とを符合させる方法で、依然データを変更できない。デジタル署名付データの受け手は、送り手の公開情報を持つ他のどのユーザ同様、送信の間に署名データが変更されたか否かを照合でき、よって送り手の同一性についての要求を検証できる。
【００１０】
すなわち、デジタル署名のような暗号技術は、通信ネットワークで送信されたメッセージの完全性と真正性に対する侵害を防止はできないが、少なくとも検知を可能にする。暗号化技術の強度は２つの仮定に依存する。
【００１１】
１．潜在的攻撃者は、暗号化された又は署名されたデータ、さもなくば公に利用可能な情報にのみにアクセスする。
【００１２】
２．このデータであっても、データの復号やデジタル署名の偽造が計算量的に実行不可能である。
【００１３】
第２の仮定は公式な数学的議論と現在の演算能力を根拠として正当化される。それは、証明と同じくらいの厳密さをもって検証できる。
【００１４】
これとは対照的に、第１の仮定の条件は、簡単に認めることができる。このことは、しかしながら、悪意あるプログラムが詳細に考慮される必要がある点である。
【００１５】
暗号化技術の数学的特性が強くなるにつれ、攻撃者は攻撃しなくなると思われる。従って、システム内のより安全でない他の部分が好んで狙われることとなる。
【００１６】
機密性を貶めようと、潜在的な攻撃者はユーザのデータに直接アクセスしてそれを盗むもうとする。アクセスコントロールは、しかしながら、信頼できる技術であり、コンピュータ・システム上での外部者の行動は注意深くモニターされている。攻撃者にとってより簡便な方法は、ユーザをだまして悪意あるプログラムを作動させ、このプログラムに、ユーザの秘密鍵の秘密データを、あたかもユーザ自身に成り代わって、彼に向けて送信させることである。
【００１７】
例えば、デジタル署名を強要するといったように、攻撃者が完全性と真正性を貶めようとするなら、悪意あるプログラムに対してさらなる注目がなされるべきである。署名を生成するために必要なこの秘密署名鍵は、多くの場合、すなわちユーザのみが知っている秘密番号であるＰＩＮにより保護されているスマートカード上に、復元不能なやり方で保持されている。このように、デジタル署名を彼自身で生成するためには、攻撃者はスマートカードをユーザから盗んで、ＰＩＮを開示させなくてはならない。この行為の結果として、ユーザはスマートカードと、ひいては偽造された署名を無効にするであろう。他方、ユーザのアカウント、又は彼のコンピュータ上で作動する悪意あるプログラムはどんなデータのデジタル署名も無難に生成し、この署名されたデータをあたかもユーザ自身に成り代わって配信することができる。
【００１８】
インターネット時代の悪意あるプログラムは攻撃の一般的かつ簡便な手段である。それらは簡単に配信されうるし、時として攻撃されたユーザの実行起動の明示的なアクションさえも必要とせず、その実行は偽装され、それらは一度定着してしまえば、ユーザに可能なあらゆる操作を行うことができる。
【発明の開示】
【発明が解決しようとする課題】
【００１９】
本発明はすなわち、以下の２つの問題を解決する。
【００２０】
１．プログラムコードの完全性の、その実行の間における強化。
【００２１】
２．コンピュータシステムにおけるローカル通信の完全性と真正性の強化
【課題を解決するための手段】
【００２２】
第一の問題は、コンピュータ装置上で動作するコンピュータ・プログラムの完全性を保護する方法であって、プログラムの実行を開始するステップと、プログラムのアドレス空間に対する権限の無い変更が発生したか否かを検知するステップと、権限の無い変更が検知された場合にはプログラムの実行を終了し、そのような変更が検知されなかった場合にはプログラムの実行を継続するステップとを含む方法により解決される。
【００２３】
上記の方法は、その実行の間にプログラムのアドレス空間に配置されたコード、すなわち、プログラム自身のコードと、それに加えて、独立したライブラリとモジュールがリンクするコードがプログラムの作成者が意図したものであることを保証する。
【００２４】
エラーメッセージが、プログラムのアドレス空間の権限の無い変更が検知された場合、出されてもよい。
【００２５】
プログラムのアドレス空間の権限の無い変更を検知するためには、暗号的に強力なハッシュ関数が採用されても良い。このことは、アドレス空間におけるただ１ビットの変更が、ハッシュ関数においては明らかな差異となり、容易に検知されうることを保証する。
【００２６】
該方法は、プログラム・モジュールのハッシュ関数ｈ（Ｍ）を演算するステップと、ランタイム・ライブラリとリンクしたモジュールのハッシュ関数ｈ（Ｌ）を演算するステップと、を含むプログラムのインストール・プロシージャを有してもよい。
【００２７】
ハッシュ関数が変更に対して保護された記憶領域に保持されることが望ましい。変更に対する保護は、アクセス制御又は／及びユーザ・アカウントを通じて動作環境によって実現される。ハッシュ関数の権限の無い変更は、すなわち防止される。ハッシュ関数のサイズの小ささゆえに、変更から保護されなくてはならない記憶領域は大変小さくなりうる。例えば、数キロバイトである。
【００２８】
プログラムそれ自体は、インストールプロセス間に変更に対して保護された記憶領域への一時的アクセスのみが許可される。
【００２９】
検知するステップは、欠落した、追加された、又は変更されたプログラム・モジュールの認識が可能であっても良い。このことは、起こりうる権限の無い変更に関与する悪意あるプログラムの検知を容易にする。
【００３０】
本発明による方法は、メインフレームコンピュータ、デスクトップコンピュータ、又はラップトップ、パーソナル・デジタル・アシスタンス、携帯電話といった携帯装置から、内蔵型コンピュータ又はマイクロコントローラに及ぶコンピュータ装置上で作動するあらゆる種類のコンピュータプログラムに応用できる。該発明は特に、デジタル署名プログラム、金融取引プログラムのような高度なセキュリティを要するプログラムにとって有用である。
【００３１】
本発明は、また、請求項１に記載の方法を行うようにプログラムされているコンピュータ装置と、請求項１に記載の方法を行うためのプログラムコードを有するコンピュータプログラムと、それに加えて請求項１に記載の方法を行うためのプログラムコードを有するコンピュータプログラムを保持する記憶媒体を提供する。
【００３２】
本発明の第二の特徴によれば、少なくとも２つの演算装置のモジュール間の通信方法であって、少なくとも２つのモジュール間の通信シーケンスを開始するステップを含み、デジタル署名のための秘密鍵と公開鍵を、各通信シーケンスのための各モジュールで生成し、他のモジュール夫々に利用可能な１つのモジュールの公開鍵を作成し、秘密鍵と公開鍵のそれぞれを用いてデジタル署名付のモジュール間でメッセージを交換する、少なくとも２つの演算装置のモジュール間の通信方法が提供される。
【００３３】
本発明の第二の特徴により、１つの装置上で互いに通信し合う２つ又はそれ以上のプログラム、ドライバ、又は他のモジュールが、データが送信の間に変更されたか、及びデータが予定された送り手から発信されたかを、データの受信の際に照合できることが確実となる。本発明の第二の特徴はすなわち、上述の２つの問題のうち、第２の問題を解決する。
【００３４】
コンピュータシステムの異なるモジュール間の通信シーケンスは、ほとんどの場合極めて短いため、どの攻撃者にとっても、より強度の低いデジタル署名すら偽造することが難しい。デジタル署名の鍵は各通信シーケンスの終了時に無効とされることが望ましい。
【００３５】
各モジュールの公開鍵は変更に対して保護された記憶領域に所定の固定アドレスで保持されてもよい。安全な通信の他の通信パートナーの公開鍵の固定アドレスもまた、モジュールの変更に対して保護された記憶領域において保持される。各モジュールは、すなわち、他のモジュールのそれぞれの秘密鍵にアクセスする。固定アドレスは、記憶領域にハードコードされ、システム外の第三者には知られない。
【００３６】
各モジュールは、本発明の第一の特徴によって、完全性保護プロシージャに支配される。
【００３７】
本発明の第二の特徴によれば、複数の機能的モジュールを有する演算装置であって、秘密鍵とそれに対応する公開鍵を生成する鍵生成部と、秘密鍵を用いたデジタル署名付メッセージを供給する署名添付部と、公開鍵を保持するための固定アドレスと、さらに、安全な通信が行われるべき他のモジュールの公開鍵の固定アドレスとを有する変更に対して保護された記憶領域と、それぞれの送信側モジュールの公開鍵を用いて、他のモジュールから受信したメッセージを照合する署名照合部とを有する演算装置も提供される。
【００３８】
本発明の第二の特徴によれば、請求項２０に記載の方法を行うためのプログラムコードを有するコンピュータプログラムと、それに加えて請求項２０に記載の方法を行うためのプログラムコードを有するコンピュータプログラムを保持する記憶媒体も提供される。
【発明を実施するための最良の形態】
【００３９】
本発明及びその特徴と利点は、図面を参照した以下の本発明の具体的な実施例の説明により、直ちに明確となるであろう。
【００４０】
（Ａ）用語の説明
【００４１】
コンピュータ装置／演算装置：プログラムコードに従って所定の命令を実行するあらゆるサイズ、又は動作レベルのあらゆる装置であって、
【００４２】
メインフレームコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、パーソナル・デジタル・アシスタンス、携帯電話、内蔵型コンピュータ、又はマイクロコントローラを含む。
【００４３】
プログラムモジュール：  他のモジュールと通信するコンピュータプログラムの一部であって、サブ・プログラム、又は、サブ・ルーチン、ドライバ、インターフェースを含む。
【００４４】
アドレス空間：  プログラムのコード、加えて、プログラムにリンクする、又はプログラム実行の間にプログラムにより使用される全てのライブラリ又はモジュール。
【００４５】
ａｓｍ関数：  プログラムのアドレス空間内の全てのモジュールの名前を返す関数であって、すなわち、プログラム自身やランタイムの動作環境により供給される。
【００４６】
動作環境：  プログラムの基礎管理機能を提供するプログラム、又はネットワーク機能であって、例えば、ウインドウズＸＰ，リナックス，又はＰａｌｍＯＳのようなＰＤＡオペレーティング・システムといったＰＣオペレーティング・システム。
【００４７】
ハッシュ関数：  数学的関数であって、データセットのユニークな識別が、ハッシュ関数を通して可能となるように、所定のデータセットを数学上の値にマップする。
【００４８】
デジタル署名：  特定の電子文書のソースと完全性を認証するための暗号化技術を用いた方法。
【００４９】
暗号鍵：  電子文書を暗号化するアルゴリズムにおいて使用される数学的値。
【００５０】
（Ｂ）起こりうる脅威のシナリオの分析
【００５１】
悪意あるプログラムが脅威であると考えられるいつの場合も、ファイアウォール、ウイルススキャナとアクセスコントロールが防御手段として提案される。しかしながら、それらにより提供される実際の防御は、多くの場合不適切である。
【００５２】
ファイアウォールはコンピュータのポート、すなわち、それに接続されるネットワークからデータの送受信をするために使用されるスロットをコントロールする。ネットワーク上を移動するデータはパケットにグループ化される。ファイアウォールは以下を決定可能である。
【００５３】
−ポートを通信のために開けるか。
【００５４】
−アプリケーションにポートを使用させるか。
【００５５】
−到着するデータパケットをコンピュータに進入させるか。
【００５６】
−送出されるデータパケットをコンピュータから送出させるか。
【００５７】
悪意あるプログラムは、あらゆるデータがそうするのと同様に、ネットワークのデータパケットからコンピュータに侵入する。これを防止するファイアウォールの能力は非常に限られている。閉じたポートはどのデータの送受信にも使用できない。このことはまた、悪意あるプログラムの転送に使用されえないことを意味する。しかし、ポートは開かれており、例えばｅ−ｍａｉｌプログラムといったアプリケーションが到着したデータパケットのために待機していると仮定する。ファイアウォールから見ると、データパケットは送り手のネットワークアドレス、受け手のネットワークアドレス、及びペイロードを有している。ファイアウォールにはペイロードの意味を理解できず、結果として、それが悪意あるプログラムの一部かどうかを認識できない。オープンなポートにアドレスされ到着したデータパケットを拒絶するか、又は承認するかの決定は送り手のネットワークアドレスを根拠としてなされなくてはならない。例えばデータベースシステムのようなアプリケーションは多くの場合、ファイアウォールによってそのアドレスが特定され、検証されるソースの小さいセットからのデータのみを想定している。しかしながら、多くのアプリケーション−そのうちのいくつかは不可欠であり、例えば、ｅ−ｍａｉｌクライアントやｗｅｂブラウザである−があるが、２，３のソースを除いた全てのソースからのデータを受け付ける。ここで、ファイアウォールは、ほとんど全てのデータパケットを通してしまうので、明らかに効力がない。この事実は、悪意あるプログラムをｅ−ｍａｉｌメッセージやＨＴＭＬページに埋め込む主な理由のひとつとなっている。さらに、データパケット内の送り手のネットワークアドレスは信頼できない。それは、容易に偽造されうるし、オリジナルであるという何の保証にもならない。ついには、悪意あるプログラムの配信には、他人をだまして必要な情報を入手する技術的に変化した手口がさらに頻繁に利用されることとなる。悪意あるプログラムは、コンピュータに侵入すると直ちに、友好関係にあると思われる他のコンピュータのアドレス、例えば、ユーザのアドレスを探す。そして、自身、又は他の悪意あるプログラムをそれらに送信する。受け手のファイアウォールは、送り手のコンピュータが破壊されていて、友好的なメッセージに悪意あるプログラムが埋め込まれている事を認識できないし、受け手自身も、悪意のコンテンツを見抜くチャンスがほとんどない。
【００５８】
ウィルススキャナは、例えば、ファイル又はメインメモリといったコンピュータの記憶と、それらプログラムのパターンのリストとを比較することで、悪意あるプログラムを検知しようとするプログラムである。検知のためのこのアプローチは、すでにその欠点が指摘されている。第一に、ウィルススキャナのパターンリストの一部となるためには、悪意あるプログラムは、すでに認知され分析されていなければならない。すなわち、誰かが最初に新しい悪意あるプログラムの被害を受けなくてはならない。その時点ではスキャンは失敗している。そしてその後、将来においては検知されるように、スキャナの製造者にリポートされる。この事実から見ると、第二に、ウィルススキャナは、特定者に向けられた悪意あるプログラム、又は既知のものの巧みな変種を検知しそうに無い。そして最後に、もしデータ暗号化された形式で友好関係にあるが破壊された発信源から到着した場合、ウィルススキャナとユーザの双方ともが、その中に含まれた悪意のコンテンツを検知することに失敗する傾向にある。
【００５９】
アクセスコントロールシステムは、悪意あるプログラムに対する最後の防御メカニズムであると言われており、今日のオペレーティングシステムにおいて発見され、ユーザベースの防御スキームを実現する。それらは、プログラムを起動したアカウントと関連のあるユーザの身元に基づいて、例えば、データファイルやプログラムといったコンピュータ資源へのプログラムアクセスを制限する。プログラムのアクセス要求の許可又は拒否において、これらのアクセスコントロールシステムは、実際には、プログラム自身の信頼性においてではなく、ユーザに代わってプログラムが実行されるというユーザの信頼性においてアクセスする。信頼できるプログラムからアクセスコントロールシステムへのアクセス要求は悪意あるプログラムからのそれと区別ができない。結果として、いつ悪意あるプログラムがアクセス要求を出しても、アクセスコントロールシステムは、この要求が  アカウントの所有者の承諾を得て代わって出されたものと想定する。悪意のあるプログラムによって被る潜在的な被害を大幅に減少させるプログラム指向コントロールで、その柔軟性を維持しつつ、アクセスコントロールシステムの防御のクオリティを強化するアプローチは存在するが、今日のオペレーティングシステムは、それらを実現するには遠い。このように、すでに存在したいたとしても、現在のかたちのアクセスコントロールシステムは、悪意あるプログラムのアクションに対してなんら現実的な制限を設けることにならない。
【００６０】
脅威のシナリオについての分析を結論付けると、悪意あるプログラムは、現在の技術による防御メカニズムによって不適切にしか解決されない完全性に対する脅威を示している。結果として、管理規則、すなわち、ノット・トゥ・ドゥのセット、及びユーザに悪意あるプログラムの侵入を回避するハウツーを教える禁止とアドバイスは、多くの場合、防御における本質的な鍵であると考えられている。この結果として、悪意あるプログラムがいくらかの被害を及ぼした場合、責任を押し付ける都合の良いスケープゴートはすでに決まっている。例えば、"常に一連のプロテクションの中で紛れもなく最も弱く、彼のアクションに十分な注意を払ってこなかったユーザであり、それは彼の責任である・・・"。しかしながら、正しい観察者は、この考え方がユーザが全く根拠を欠くことに対する決定を要求するものとして直ちに異を唱えるであろう。
【００６１】
悪意あるプログラムがユーザのコンテクストにおいて実行されないとの仮定に基づいて、全てのセキュリティの保証を考えることは全く当てにならない。ある人は攻撃者が殆どの場合に不正なやり方でそのようなプログラムを攻撃されるコンピュータ上に持ち込むという事実と対面しなくてはならない。すなわち、完全性の防御にとって効果的なストラテジーは悪意あるプログラムを考慮しなくてはならないし、悪意あるプログラムの存在下においても、プログラム実行と通信の完全性と真正性を強化する技術的なコントロールに依拠しなくてはならない。
【００６２】
Ｃ）完全性と真正性の防御の要件
【００６３】
セキュリティポリシーのプログラム的な規格でもって、完全性と真正性の防御はプログラムが権限のある動作のみを行うことを要求する。完全性と真正性の効果的な強化のストラテジーは、以下の３つのステップを含む。
【００６４】
ｉ）プログラムの実行が依拠するコンポーネントとファクターの認識
【００６５】
ｉｉ）悪意あるプログラムが完全性と真正性を侵害しうる脆弱性と方法の分析
【００６６】
ｉｉｉ）好適で頑強な防御メカニズムの考案
【００６７】
図１は、プログラムの実行に関係する構成要素の概略図である。プログラムの実行は以下のアクションを含む。
【００６８】
−ユーザ又はプログラムはスタートコマンド６３でプログラムを起動する。
【００６９】
−動作環境は、プログラムがランタイムに要求する全てのオブジェクトモジュール６２とランタイムライブラリ６１を収集し、アドレス空間６０又は仮想メモリに保持する。
【００７０】
−オペレーティングシステムはプログラムの実行を初期化する。
【００７１】
−プログラムは、その一部がユーザによって与えられるプログラムの入力データ６４を収集する。
【００７２】
−プログラムは他のプロセス６８、ドライバ６６、サービス６９、及び通信コンポーネントと通信する。
【００７３】
−プログラムはその出力データ６５を生み出す。
【００７４】
−プログラムが終了する、又は終了される。
【００７５】
プログラム実行のアクションは任意の順序で数回繰り返される。
【００７６】
以下の各アクションにおいて、以上に記載されたアクションは詳細に検査され、意図された意味の保存に必要な要件が決定される。その後、その完全性と真正性を侵害する可能性が検討される。
【００７７】
ａ）プログラム起動の完全性と真正性
【００７８】
プログラムは、ユーザのインタラクション、又は作動しているプログラムのコマンドにより起動される。完全性と真正性の侵害を、この早い段階においてすでに避けておくためには、２つの要件が合致しなくてはならない。
【００７９】
要件１：  開始プログラムは、オペレーティングシステムが意図されたプログラムを起動することを確実にしなくてはならない。
【００８０】
要件２：  オペレーティングシステムにより実行のために選択されたプログラムは、その実行順序がユーザにより認証されることを確実にしなくてはならない。
【００８１】
コンピュータにローカルなプログラムの明確な名前はフルディレクトリ・パスと、そのディレクトリにローカルな名前によって定義される。上記要件の両方の侵害は、多くの場合、悪意あるプログラムによるものと見られる。
【００８２】
多くのオペレーティングシステムによってもたらされるファイルのサーチパスやファイルの相対パスアドレッシングを利用するために、悪意あるプログラムは意図された既に存在しているプログラムのローカルネームを与えられ、意図されたプログラムが駐在する場所よりも前の場所であってそのネームのためにサーチされる場所に保持される。もし悪意あるプログラムが対象となるプログラムに変更するアクセスをした場合、それは、コンテンツディレクトリを置き換えるか、又は操作する。
【００８３】
このように、要件１を満たすために、開始プログラムは、オペレーティングシステムにより実行のために選択されたプログラムが、意図された内容を持つプログラムであることを確実にする。
【００８４】
要件２は、プログラムが、悪意あるプログラムによって権限の無い動作を行うように起動されうるという問題と関係がある。この要件を満たすために、プログラム自身、又はオペレーティングシステムは、このプログラムを起動するための認証された条件を知っていなくてはならないし、これらの条件は検証できなくてはならない。例えば、仮にプログラムが、ユーザによって、インタラクティブなやり方でのみ起動することを意図されているなら、コマンドファイル又は他のプログラム（おそらくは悪意あるプログラム）から起動された場合には、実行されてはならない。
【００８５】
ｂ）プログラムアドレス空間の完全性と真正性
【００８６】
プログラムのアドレス空間は静的オブジェクトモジュール及びダイナミックランタイムライブラリを持つオペレーティングシステムによって占められる。
【００８７】
静的モジュールはプログラムファイルの一部である。仮に上記要件１が強化されるなら、意図されたオブジェクトモジュールはプログラムのアドレス空間に占められることを許される。
【００８８】
したがって、この段階でプログラムの完全性と真正性を侵害するために、悪意あるプログラムは、攻撃されるプログラムのアドレス空間に意図されないランタイムライブラリのセットを含まなくてはならない。含まれるランタイムライブラリの決定は帰納的プロセスである。プログラムが直接に依拠するランタイムライブラリの名前はプログラムファイルにおいて特定される。もしライブラリが他のライブラリに依拠するなら、それらの名前はライブラリファイルにおいて特定される。その選択処理は、全ての依存状態が満足され、さらなるライブラリが必要とされない場合に終了する。すなわち、ライブラリの遷移的閉包の演算完了時である。
【００８９】
ランタイムライブラリは、普通のファイルのようにファイルシステムに保持されるため、悪意あるプログラムは、オペレーティングシステムを欺いて意図されないライブラリの選択させるという、前述の攻撃をすることができる。
【００９０】
今、上記要件１と同様なランタイムライブラリの要件を繰り返したいと考えるかもしれない。この特徴は、たとえ効果的であっても、非効率的であろうと思われる。プログラムの作成者は、間違いなくランタイムライブラリに要求されるディレクトリの名前のみを知っている。しかしながら、それらの内容と、結果的遷移的閉包におけるありうる追加ライブラリ、それは特定のコンピュータ上でのプログラム実行に実際に必要とされる最も小さいライブラリのセットであるが、はオペレーティングシステムのヴァージョン、そのサービスパック、パッチ、及びランタイム環境の他のパーティに依拠することが可能である。
【００９１】
このように、開発者のコンピュータ上の全ての要求されたランタイムライブラリのを決めることは、広い範囲のコンピュータで実行するプログラムの能力を限定しそうである。すなわち、対象コンピュータ上のランタイムライブラリの意図された状態を決める事が必要である。我々の目的であるプログラムアドレス空間の完全性と真正性の保証の点から見ると、まず第一に、誰かがこのプロシージャを対象コンピュータ上の遷移的閉包のランタイムライブラリに限定する。検証の結果は２つの要件をもたらす。
【００９２】
要件３：  プログラムは、その実行に必要な対象となるランタイムライブラリのセットを決定しなくてはならない。
【００９３】
要件４：  プログラムは、オペレーティングシステムがそのアドレス空間の対象となるランタイムライブラリのみを含まなくてはならない。
【００９４】
ｃ）１つのコンポーネント又はモジュールと、他のコンポーネントの通信の完全性と真正性
【００９５】
今、適正なプログラムの実行もまた、たとえば、他のプログラム、ドライバ、又はサービスといった、それ自体のアドレス空間外のモジュールと独立したコンポーネントとの通信に依拠していると仮定する。ローカル通信コンポーネントの完全性と真正性の要件はまさにリモート通信主体のそれと同様である。
【００９６】
要件５：  データの受信時に、受け手は
【００９７】
ｉ）もし、転送される間にデータが変更されているかどうか決定できる。
【００９８】
ｉｉ）データの作成者ついての要求を検証できる。
【００９９】
ｉｉｉ）データの送り手についての要求を検証できる。
【０１００】
ローカルコンポーネント間の通信は、通常コンピュータのオペレーティングシステムによって管理される。送り手は受け手にデータ（多くの場合、メッセージを意味する）を送るためにシステムコールを使う。すなわち、送り手はオペレーティングシステムに受け手にデータを配信するように命令する。オペレーティングシステムは、郵便サービスのように働く。すなわち、データを送り手から収集し、受け手に配信する。要件５ｉ）は、ほとんどの場合、オペレーティングシステムにより満足される。しかし、有用ではあるが、リナックスとウインドウズのどちらも送り手の身元に関する情報を受け手に提供しない、よって要件５ｉｉｉ）は通信パーティによって管理されなくてはならない。そして、最後に、オペレーティングシステムは、データの断片の作成者の身元の記録について何も提供しない。結果として、通信パーティは当該要件５ｉｉ）についても責任があることになる。
【０１０１】
もし、悪意あるプログラムが権限あるパーティ間を通過するデータを記録できる場合、データの送り手と作成者との間の違いは、重要である。コンポーネントＡは、重大な動作を行うが、それは特定の他のコンポーネントＢによる要求時のみと想定する。もし、悪意あるプログラムがＢからＡに送られたデータを記録する場合、後で再度Ａにデータを送り、重大な動作の実行を要求する。たとえこのデータがＡの真正性のプルーフを持っていたとしても、Ｂはそれが悪意の送り手であると発見することができないであろう。
【０１０２】
要件５の強化のための一般的な提案は、デジタル署名の使用である。各通信コンポーネントは、個々の秘密鍵と公開鍵と与えられる；送り手は、送出するデータに秘密鍵で署名し、データの受け手は、送り手の要求を公開鍵で検証する。無警戒なアプローチは実際に２つの問題を抱えている：送り手側の問題は秘密鍵の保持であり、受け手側の問題は、要求者である送り手の真正の公開鍵の取得である。送り手はその秘密鍵をある場所に保持しなくてはならない。例えば、実行可能なファイルに暗号化されうる、又はある外部記憶装置保持されうる。そして、この鍵をその実行中に、アドレス空間にロードしなくてはならない。いずれにせよ、もし攻撃者が実行可能なファイルのコピー、又はオフライン分析のための秘密鍵をもつアドレス空間のフラグメントを取得できる場合は、そのようなオブジェクトの中に秘密鍵を発見し、それらから取り出すための技術がある。もし、送り手の公開鍵が、あらゆるデータがそうであるように、受け手に渡された場合、悪意あるプログラムはそれ自身の公開鍵をコンポーネントに送ることにより、コンポーネントとの通信を構築することができる。受け手は、署名されたデータを悪意あるプログラムから受け取るであろう。
【０１０３】
通信コンポーネントの２つの分類の区別についてさらに検討する。
【０１０４】
ｉ）その実行内容：
【０１０５】
−ユーザモード：  アクセスコントロールを前提とする実行
【０１０６】
−特権モード：  無制限アクセスでの実行
【０１０７】
ｉｉ）協力モード：
【０１０８】
−特別な目的：  特定のコンポーネントのみとの通信
【０１０９】
−一般：  すべてのコンポーネントとの通信
【０１１０】
第一の区別は、悪意あるプログラムによるコンポーネントの破壊の結果に非常に大きな衝撃をもたらす。第二の区別は、クライアントコンポーネントの権限あるリストをもつサービスを提供するコンポーネントを装備する能力の範囲を決定付ける。
【０１１１】
ユーザモードで実行するコンポーネントは、一方で、オペレーティングシステムのアクセスコントロールを前提としている。しかし、他方では、それらにより保護されうる。ユーザモードにおけるアクセスコントロールの決定は、アカウントと関連付けられているので、悪意あるプログラムは、同じアカウント及びアクセスの許可された他のアカウントに所有されている全てのプログラム、データ、及び他のコンポーネントを貶めることができる。特権モードは、ユーザモードコンポーネントからのフルプロテクションと、同時に、全てのリソースへの無制限のアクセスを提供する。ネガティブな意味においては、このことは、仮に不可能でないとしても、特権モードにおける悪意あるプログラムの実行の制限、又は検知することすら非常に困難であることを意味している。殆どの防御ストラテジーは、すなわち、例えば、管理者モード又はルートモードといった特権モードのアカウントが、悪意あるプログラムを含まないと想定している。特権実行コンテクストを要求するいくらかのコンポーネントが存在するに違いないが、多くのコンポーネントの実行コンテクストの決定は、オペレーティングシステムの設計者の裁量に委ねられている。ウインドウズ２０００を例にとると、全てのデバイスドライバとサービスが特権モードで実行されている。
【０１１２】
オペレーティングシステムのコンポーネントは、殆どの場合、要求に応じてあらゆる他のコンポーネントにサービスを提供することを目的として設計されている。これらの一般コンポーネントはクライアントの同一性や、現在のところ、通信の完全性には注意を払っていない。コンポーネントの動作がクリティカルになると直ちに、この態度がセキュリティ上の脅威をもたらすことは明らかである。もしアプリケーションが、プログラムやドライバといった特別な目的を持ついくつかの独立コンポーネントの通信を要求した場合、そのようなコンポーネントは、所定のコンポーネントのみに対して通信するように、及び上記要件５の要求を確実なものとするように、それら自身の管理すべく設計されうる。
【０１１３】
ｄ）入出力データの完全性と真正性
【０１１４】
この重要な事項は、この発明の対象範囲外である。
【０１１５】
ｅ）プログラム終了の完全性と真正性
【０１１６】
この重要な事項は、本発明の対象範囲外である。
【０１１７】
本発明の両特徴は、単体のコンピュータの実行環境の完全性と真正性の防御のための大きなネットワークにおいて採用される防御手段と技術を用いる。これら技術は：
【０１１８】
−  暗号強度の高いハッシュ関数
【０１１９】
−  デジタル署名
【０１２０】
−  暗号鍵のランタイム生成
【０１２１】
−  変更に対して保護された記憶領域
【０１２２】
本発明は上記要件１から５に対するソリューションを提示することを目的としている。
【０１２３】
Ｄ）本発明の第一の特徴：  コンピュータプログラムのアドレス空間の完全性と真正性の保護
【０１２４】
図４は、本発明の第一の特徴によってコンピュータ装置上で作動するコンピュータプログラムの完全性を保護する方法の操作ステップを例示する概略フローチャートである。コンピュータ装置については、前述のように、あらゆるサイズ、又は稼働レベルのコンピュータシステムであってよい。コンピュータ装置５０の概略が図３に例示してある。それは１つ、又は複数のマイクロプロセッサからなる中央処理部５１、通信リンク、キーボード装置、マウス、又はプリンタのような入出力装置に対してインターフェースとして使用される入出力部５２、それに加えてメモリ装置５３を有する。後者は、例えば、コンピュータのオペレーティングシステムによる変更に対して保護されたスモールエリア５４を有する。図４のプロシージャは方法ステップＳ１０におけるプログラム実行で開始する。その後、続く方法ステップＳ２０において、プログラムのアドレス空間の無権限の変更が起こったか否かをランタイムに検証する。もし上記の場合でなければ、アドレス空間の真正性と完全性が検証され、ステップＳ３０でプログラムの実行が継続される。もしステップＳ２０でアドレス空間の無権限の変更が検知されれば、ステップＳ４０でエラーメッセージが検知され、続く方法ステップＳ４１でプログラムの実行が終了される。
【０１２５】
実施例によると、検知ステップＳ２０は、欠落、追加、又は変更されたプログラムモジュール、又はプログラムのアドレス空間内のランタイムライブラリを認識する。
【０１２６】
検知ステップＳ２０を、図５のフローチャートを参照してさらに詳細に説明する。プログラムの実行が開始した後、プログラムＰのモジュールとランタイムライブラリは方法ステップＳ２１により取得される。そのために、ａｓｍ関数が採用されるやり方を以下、より詳細に説明する。続くステップＳ２２において、モジュールのハッシュ関数とランタイムライブラリが算出される。ステップＳ２２において取得されるこれらのハッシュ関数は、その後、ステップＳ２３において、モジュールとプログラムのランタイムライブラリの予め保持された参照ハッシュ関数、それは以前のプログラムインストール時に算出されたものであるが、と比較される。変更に対して保護された記憶領域（図３のエリア５４又は図７のエリア１２１）に保持される。文書とデータセットのハッシュ関数ｈ（Ｄ）は、間違いなく文書とデータセットＤを認識する。２つの異なる文書が同じハッシュ関数を持つことは理論的に可能である一方で、他方、変更された文章Ｄ’のハッシュ関数ｈ（Ｄ’）はオリジナル文書のそれと同一である可能性があり、ハッシュ関数は数学的値であり、１００ビットから１６０ビット長である。プログラムのアドレス空間の完全性と真正性を保護するためには、非常に小さい記憶領域の変更に対する保護は有効である。
【０１２７】
プログラムのアドレス空間のハッシュ関数を算出するためのプログラムインストールプロセスは、図６のフローチャートに概略的に示されている。
【０１２８】
方法ステップＳ５０のプログラムインストールを開始した後、プログラムＰのモジュールのセットのハッシュ関数ｈ（Ｍ）は続く方法ステップＳ５１で算出される。その後、プログラムＰで使用されるランタイムライブラリの名前が、多くのオペレーティングシステムにより提供されている、いわゆるａｓｍ関数を用いて取得される。続いて、ステップＳ５３において、ランタイムライブラリのハッシュ関数ｈ（Ｌ）が算出され、ステップＳ５４において、ハッシュ関数ｈ（Ｍ）とｈ（Ｌ）、又は連結されたハッシュ関数が、コンピュータシステムの変更に対して保護された記憶領域に保持される。その後、保護された記憶領域への書き込み権限が、ステップＳ５５において、削除される。
【０１２９】
図７は、図６に示されたインストール・プロシージャの間と、図４に示されたプログラム実行の間のいずれかのうちに、プログラムのアドレス空間のハッシュ関数を算出するプロシージャを概略的に示している。実行環境１００は、ａｓｍ関数１０２を提供するサービス機能１０１と、ハッシュ関数１０３を有し、変更に対して保護された記憶領域１２１を含む記憶装置を管理する。
【０１３０】
ａｓｍ関数１０２は、一方で、プログラムＰのアドレス空間１１５における全てのモジュールＭ１，...，Ｍｋの名前に加えて、全てのランタイムライブラリＬ１，...，Ｌｍの名前を返す。その後、モジュールセットのハッシュ関数ｈ（Ｍ）とランタイムライブラリのハッシュ関数ｈ（Ｌ）がハッシュ関数機能１０３を用いて算出される。あるいは、モジュールとライブラリの連結されたハッシュ関数が用いられても良い。
【０１３１】
以下、本発明の第一の特徴である方法の実施例を詳細に説明する。
【０１３２】
前提条件：
【０１３３】
−  変更に対して保護されうるリード・オンリーにセットされた小さい量のストレージ。
【０１３４】
−  ランタイムにアドレス空間に設置されたモジュールの名前を返すａｓｍ関数
【０１３５】
−暗号強度の高いハッシュ関数、例えば１６０ビット
【０１３６】
プログラムＰのためのプロシージャ：
【０１３７】
段階１：  Ｐの前処理
【０１３８】
ｉ）  Ｐにより与えられるモジュールのセットを、Ｍ＝｛Ｍ１，...，Ｍｋ｝とする。
【０１３９】
ｉｉ）  ハッシュ関数ｈでセット値ｈ（Ｍ）＝｛ｈ（Ｍ１），...，ｈ（Ｍｋ）｝を算出する。
【０１４０】
段階２：  Ｐのインストール
【０１４１】
ｉ）  Ｐとｈを送り先にコピー
【０１４２】
ｉｉ）  Ｐに変更に対して保護された記憶領域への書き込み権限を付与
【０１４３】
ｉｉｉ）  ｈ（Ｍ）を変更に対して保護された記憶領域へ設置
【０１４４】
ｉｖ）  Ｐの実行開始
【０１４５】
ｖ）  ａｓｍ関数を用いて、対象コンピュータ上のＰのアドレス空間に設置されたランタイムライブラリの名前のサブセットである、Ｌ＝｛Ｌ１，...，Ｌｍ｝を取得。
【０１４６】
ｖｉ）  ｈでセット値  ｈ（Ｌ）＝｛ｈ（Ｌ１），...，ｈ（Ｌｍ）｝を算出
【０１４７】
ｖｉｉ）  ｈ（Ｌ）  を変更に対して保護された記憶領域に設置
【０１４８】
ｖｉｉｉ）  保護された記憶領域への書き込み権限が、Ｐから削除される。
【０１４９】
ｉｘ）  Ｐの実行を終了
【０１５０】
段階３：  Ｐの実行
【０１５１】
ｉ）  Ｐの実行開始。
【０１５２】
ｉｉ）  ａｓｍ関数を用いて、Ｐのアドレス空間内の全てのランタイムライブラリＬ’とモジュールＭ’の名前のセットを取得する。
【０１５３】
ｉｉｉ）  ｈを用いて、セット値  ｈ（Ｌ’）とｈ（Ｍ’）  を算出する。
【０１５４】
ｉｖ）  変更に対して保護された記憶領域からｈ（Ｍ）とｈ（Ｌ）を読み出す。
【０１５５】
ｖ）  ｈ（Ｌ’）∪ｈ（Ｍ’）＝ｈ（Ｍ）∪ｈ（Ｌ）かどうかテストする。
【０１５６】
ａ）  テストが失敗した場合に、プログラムＰを終了する。
【０１５７】
ｂ）  テストが成功の場合に、プログラムの正常な実行を継続する。
【０１５８】
上述のように、プロシージャの態様によって、段階３のステップ（ｖ）で行われるテストは、欠落したモジュール、追加されたモジュール、及び変更されたモジュールを認識する。もし変更に対する保護（リード・オンリー）記憶領域においてモジュールの場所と名前が保持されていた場合、上記テストはｋのデータの操作を検知するように拡張されうる。たとえば、モジュールが再度命名された、又は異なる場所に移動された場合である。
【０１５９】
発明の第一の特徴は、悪意あるプログラムによってもたらされる脅威を解決する。これらのプログラムは、ユーザアカウント又はコンテクストにおいて実行され、すなわち、動作環境によりこのアカウントにおいて実行される全てのプログラムに付与される権限と特権を取得することとなる。しかしながら、悪意あるプログラムはまた、意図されない、すなわち、ユーザによって権限を与えられて無い動作を行ってもよい。動作環境は、信頼できるプログラムを悪意あるプログラムから見分けることができないので、セキュリティ上の要件に基づいたプログラムは、悪意あるプログラムに対する防御のため、動作環境に依存できない。このようなプログラムは、すなわち動作環境のサポートがあっても、それら自身で防御を確実なものとしなくてはならない。
【０１６０】
以下の、保護されるべきプログラムに対する悪意あるプログラムの典型的な攻撃や本発明の第一の特徴によるプロシージャの防御の質を検討する：
【０１６１】
１．攻撃：  プログラムのアドレス空間において必要なモジュールがそこから取り除かれた。
【０１６２】
防御：  段階３のステップ（ｖ）で行われるテストは、欠落したエレメントをランタイムで検知する。
【０１６３】
２．攻撃：  プログラムのアドレス空間において不要なモジュールがそこに追加された。
【０１６４】
防御：  段階３のステップ（ｖ）で行われるテストは、ランタイムで算出されたモジュールのセットにおける余分のエレメントを検知する。
【０１６５】
３．攻撃：  アドレス空間において必要なモジュールが変更された。
【０１６６】
防御：  段階３のステップ（ｖ）で行われるテストは、ランタイムで算出されたモジュールのセットにおける欠落したエレメントと余分のエレメントの両方を検知する。
【０１６７】
ウイルスの攻撃の検知は、上記に定義されたプログラムのための防御プロシージャを実行する能力に依存する。このことは、以下を意味している。
【０１６８】
１．プログラムのアドレス空間内のモジュールのリストは動作環境により管理される。リストは攻撃者によって操作されてはならない。
【０１６９】
２．ハッシュ関数の使用は、変更に対して保護された記憶領域のサイズの要件を小さな容量に削減する。暗号強度の高いハッシュ関数の要件は、モジュールがそのハッシュ値とユニークに関連付けられうる。
【０１７０】
３．インストール段階では、プログラムの作成者により提供されるモジュールと、保護されるべきシステムの動作環境の製造者により提供されるモジュールの両方が考慮される。一方では、このことは、動作環境の互換性のあるそれぞれのバージョン上で動作する柔軟性をプログラムに与える。他方では、プログラムのアドレス空間内のあらゆるモジュールの更新が、感染したモジュールのために前処理段階やインストール段階の繰り返しを必要とする。
【０１７１】
４．参照ハッシュ値を保持する変更に対して保護された記憶領域は、以下の特性をもつ。
【０１７２】
ａ）プログラム自体が、インストール段階で参照ハッシュ値の保持のための変更に対して保護された記憶領域に対する一時的な変更権限を有しなくてはならない。
【０１７３】
ｂ）他のどのプログラムも、参照ハッシュ値を変更できない。したがって、悪意を有する可能性のあるプログラムは、変更に対して保護された記憶領域に対して、いかなる変更権限も有してはならない。リード・オンリーアクセスは、保持されたハッシュ値が秘密にされておく必要がないため、禁止される必要が無い。
【０１７４】
このタイプの動作環境において、変更に対して保護された記憶領域は、アクセスコントロールとユーザアカウントで実現されうる。
【０１７５】
５．いかなるプログラムも、自らは、自身の完全性を検証できない。それを見つけるのは容易である。なぜなら、攻撃者は、重要なテスト（段階３のステップ（ｖ））を行うモジュールを、このテストが省かれたモジュールを置き換え、すなわち、全体の防御スキームを意味の無いものにしてしまうからである。すなわち、このテストは、その完全性が想定される攻撃者によって貶められる可能性の無い第三者によって行われなくてはならない。オペレーティングシステムにおいては、このことは、当該動作システム又は動作環境により、実現されうる。
【０１７６】
本発明の第一の特徴によるプロシージャは、すなわち、プログラムのアドレス空間の操作を効果的に検知することができる。
【０１７７】
Ｅ）発明の第二の特徴
【０１７８】
本発明の第二の特徴は、２つ又はそれ以上のモジュール間の通信、又はコンピュータシステムの通信主体Ａ，Ｂ，...間の通信に関する。モジュールＡ，Ｂ，...は、多くの（おそらくは悪意の）モジュールによって使用されるメッセージパスシステムを通じて通信すると想定される。
【０１７９】
図８では、モジュールＡ，Ｂ，Ｃ，Ｄを有する演算装置２００を概略的に例示しされている。無論、あらゆる数のモジュールが可能である。モジュールは、管理されたメッセージパッシングシステム、例えば、動作環境を通じて互いに通信する。もし悪意あるプログラムが通信主体間で送信されるデータセットを操作する能力がある場合に、明らかに真正性と完全性は強化されない。しかしながら、デジタル署名はデータの受け手に、これらの特性の侵害を検知する可能性を提供する。適正な鍵を用いた公認のデジタル署名スキームが採用されたとすると、送り手側におけるそれらの信頼性は、他の主体が、秘密鍵を用いたデジタル署名の生成をすることを防止する能力に依存しており、受け手側においては、送り手の真正な公開鍵を所有していることに依存している。
【０１８０】
本発明の第二の特徴による通信方法は図１０のフローチャートに概略的に例示してある。ステップＳ８０において、２つのモジュール間の通信シーケンスが開始する。その後、この通信シーケンスの一部であるモジュールＡ，Ｂのおのおのにおいて、鍵のペア（秘密鍵、公開鍵）がランタイムで生成される（ステップＳ８１）。公開鍵は、通信シーケンスに関係する他の各モジュールに使用可能とする。すなわち、モジュールＡの公開鍵はモジュールＢに使用可能とする。逆もまた然りである。その後、秘密鍵と公開鍵のペアに基づいて、Ａ，Ｂ間におけるあらゆる方向でのデジタル署名付きメッセージの交換が可能となる（ステップＳ８３）。このプロシージャで、メッセージの完全性と真正性に対するどのような侵害（すなわち、メッセージの内容、推定される作成者、送り手の変更）も防止することはできない。しかし、大きなネットワークにおけるデジタル署名を用いたケースのように、そのような侵害を検知することは可能である。コンピュータシステムの２つのモジュール間の通信シーケンスにおける時間は、極めて短く、新たな暗号鍵のセットがそれぞれの新たな通信シーケンスに対して使用されるので、秘密鍵を発見するためのオフライン分析を行うことは不可能である。
【０１８１】
図１１のフローチャートでは、本発明の第二の特徴の特定の実施例によるインストール・プロシージャが概略的に例示されている。ステップＳ９０のモジュールインストールが開始した後、モジュールの変更に対して保護された記憶領域は、ステップＳ９１で定義される。その後、このモジュールのための公開鍵の固定アドレスは、変更に対して保護された記憶領域にハードコードされ（ステップＳ９２）、続いて、ステップＳ９３で、それぞれの通信パートナーの変更に対して保護された記憶領域の公開鍵（そこに対して、及びそこからの安全な通信が可能であるべきモジュール）の固定アドレスもまた、変更に対して保護された記憶領域に保持される。各モジュールはすなわち、ハードコードされたアドレス情報にもとづいて、通信パートナーの公開鍵に容易にアクセス可能である。変更に対する保護により、このアドレス情報は悪意あるプログラムによって変更されえない。
【０１８２】
図９には、本発明の第二の特徴による演算装置の例が、概略的に例示してある。簡略化するために、Ａ，Ｂの２つのモジュールのみが示してある。これらの各モジュールは、デジタル署名に用いる秘密鍵と公開鍵の対応するペアをランタイムに生成するための鍵生成部２１２を有している。Ａ，Ｂの各モジュールはまた、秘密鍵を用いてメッセージにデジタル署名を添付するための署名添付部２１１と、それに加えて公開鍵を用いてデジタル署名を照合するための署名照合部２１０を有する。各モジュールのアドレス領域２１３は、それぞれのモジュールの公開鍵と、他のモジュールの変更に対して保護された記憶領域内の固定アドレスと、ハードコードされる変更に対して保護された領域２１４を有する。
【０１８３】
攻撃者によるオフライン分析を無意味なものにするべく、そして、マン・イン・ザ・ミドル  アタックや、多様な攻撃を防止すべく、本発明の第二の特徴の特定の実施例は、以下の特徴を持つ：
【０１８４】
１．デジタル署名の生成と照合に使用される秘密鍵と公開鍵は、送り手による各通信シーケンスのために、繰り返し、ランタイムで生成される。
【０１８５】
２．そのカレントな公開鍵のデポジットのための変更に対して保護された記憶領域内の固定アドレスは、各通信主体に割り当てられる。
【０１８６】
３．２．で特定される、モジュールが通信する各主体の名前とアドレスは、モジュールにハードコードされる。これらの特徴のためには、以下の前提条件が必要である：
【０１８７】
−変更に対して保護されうる、すなわち、リード・オンリーに設定可能小さな容量の記憶装置。
【０１８８】
−ランタイムにアドレス空間に設置されたモジュールの名前を返すａｓｍ関数
【０１８９】
−暗号強度の高いハッシュ関数
【０１９０】
−デジタル署名を生成、照合する能力
【０１９１】
本発明の第二の特徴による通信方法の例をより詳細に述べる：
【０１９２】
モジュールＡの前処理：
【０１９３】
ｉ）  公開鍵のデポジットのための変更に対して保護された記憶領域内の固定アドレスを、Ａに割り当て、Ａにハードコードする。
【０１９４】
ｉｉ）Ａが通信しようとする各モジュールの公開鍵の固定アドレスをＡにハードコードする。
【０１９５】
ＡとＢ２つのモジュール間での通信（ｎ個の主体に拡張可能）：
【０１９６】
段階１：  全体の前処理
【０１９７】
ｉ）  本発明の第一の特徴の例における段階１から３ので述べたように、各モジュールは、インストールされ、スタートする。
【０１９８】
段階２：  通信の前処理
【０１９９】
ｉ）  ＡとＢは互いに、保護された通信を構築する意思を合図する。
【０２００】
ｉｉ）  Ａは、鍵のペアを生成し、変更に対して保護された記憶領域内のそのアドレスに公開鍵を書き込む（各通信モジュールが、このステップを行う）。
【０２０１】
ｉｉｉ）  Ａは、Ｂの公開鍵を変更に対して保護された記憶領域から選び出す（各通信モジュールが、このステップを行う）。
【０２０２】
ｉｖ）  保護された通信：  ＡとＢはデジタル署名が添付されたメッセージを交換する。
【０２０３】
ｖ）  追加：  Ａは、他のモジュール同様、変更に対して保護された記憶領域内のその公開鍵を無効にする。例えば、ゼロのような同意された無意味な値にすることで行う。
【０２０４】
通信を妨害する悪意あるプログラムの能力は、動作環境の通信モデルにより決定される。本発明による方法の防御の強度に対する本質的な鍵は、通信主体のカレントな公開鍵を保持する小さな変更に対して保護された記憶領域の提供である。以下の特徴がなくてはならない。
【０２０５】
ａ）通信主体自身は、保護された通信を行うことをコミットメントしたのち、ランタイムに生成されたカレントな公開鍵を保持する変更に対して保護された記憶領域への一時的な変更権限を持たなくてはならない。
【０２０６】
ｂ）いかなる他のプログラムも公開鍵を変更できない。したがって、起こりうる悪意あるプログラムは、変更に対して保護された記憶領域（リード・オンリーアクセスは保持された（秘密にしておく必要のない）公開鍵に対して禁止される必要はない）に対するどのような変更権限を持ってはならない。
【０２０７】
本発明の第一の特徴にあるケースのように、動作環境において、このタイプのストレージは、アクセスコントロール又は／及びユーザアカウントで実現されうる。
【０２０８】
以下の起こりうる攻撃と、前述のシステムのもたらす結果について検討する。
【０２０９】
１．マン・イン・ザ・ミドル  アタック：  この攻撃は、攻撃者が、彼が持つ秘密鍵と対をなす彼自身の公開鍵で、１つ、又はそれ以上の主体の公開鍵を置き換える能力を持つことを想定している。
【０２１０】
防御：  悪意あるプログラムが、公開鍵のための記憶領域に対する変更権限を持つことは起こりえない。
【０２１１】
２．攻撃：  公開鍵の真正性は、今や、プログラムが、その通信パートナーの公開鍵の正しいアドレスを有することに依存している。そのアドレスは、プログラムにハードコードされる。悪意あるプログラムは、すなわち、プログラムコードを変更でき、オリジナルのアドレスを偽造したものに置き換えることができる。
【０２１２】
防御：  そのような変更により、本発明の第一の特徴に記載されたプログラムのアドレス空間の完全性テストが不成功に終わるであろう。
【０２１３】
３．攻撃：  通信シーケンスにメッセージが挿入される。
【０２１４】
防御：  デジタル署名は、メッセージの真正性の欠如を明らかにするであろう。
【０２１５】
４．攻撃：  通信主体のプログラムコードのコピーが、オフライン分析のために、ネットワークを介して送信される。
【０２１６】
防御：  そのコードは、何の秘密データも有していない。
【０２１７】
５．攻撃：  ランタイムに生成された秘密鍵は、パーティの仮想メモリにおいてのみ保持される。攻撃者は、通信主体の秘密鍵を探して仮想メモリをサーチする。
【０２１８】
防御：  各通信シーケンスのために新たな鍵が生成される。鍵の長さは、オンライン分析が鍵を貶めるのに不十分であるように選択される。たいていの場合、仮想メモリは、他のプログラムにはアクセス不能であり、スキャンは不可能である。他方、鍵のライフタイムの短さにより、それらの長さは非常に短くできる。そのことは、パターン指向のスキャンの有効性を下げ、無用なものにする。
【０２１９】
保護された通信は、悪意あるプログラムの存在下ですら、行うことが可能である。悪意あるプログラムは、基礎をなす通信モデルがこれを許す限り、通信を妨害できるが、通信の完全性と真正性に対する侵害は、本発明の方法で検知可能である。
【０２２０】
本発明による保護されたプログラムの実行と保護された通信は、基礎的な防御特性を与える多くの動作環境において行うことができる。その結果は、広く使用されているオペレーティングシステム、また同様に、独自の仕様を持つ動作環境に適用可能である。例えば、携帯装置等である。
【図面の簡単な説明】
【０２２１】
【図１】図２は、アドレス空間に対するコンピュータプログラムの実行を示す概略図である。
【図２】図２は、デジタル署名を用いたメッセージの送信のプロシージャを示す概略フローチャートである。
【図３】図３は、本発明が実現されるコンピュータ装置の概略図である。
【図４】図４は、本発明の第一の特徴をもつ実施例の方法ステップを例示する概略図である。
【図５】図５は、図４のステップＳ２０の動作の概略フローチャートである。
【図６】図６は、本発明の第一の特徴をもつ具体的な実施例による、プログラムインストール・プロシージャの概略フローチャートである。
【図７】図７は、本発明の第一の特徴をもつ実施例におけるハッシュ関数生成の動作を例示する概略図である。
【図８】図８は、互いに通信する複数のモジュールを持つ演算装置の概略図である。
【図９】図９は、本発明の第二の特徴をもつ具体的な実施例による、演算装置の概略図である。
【図１０】図１０は、本発明の第二の特徴による方法の具体的な実施例の方法ステップを例示する概略フローチャートである。
【図１１】図１１は、本発明の第二の特徴による具体的な実施例のインストール・プロシージャの方法ステップを例示する概略フローチャートである。
【符号の説明】
【０２２２】
５０：  コンピュータ装置
５１：  処理部
５２：  入出力部
５３：  メモリ
５４：  変更に対して保護された記憶領域
６０：  プログラムのアドレス空間
６１：  ランタイム・ライブラリ
６２：  オブジェクト・モジュール
６３：  開始コマンド
６４：  入力データ
６５：  出力データ
６６：  ドライバ装置
６７：  ハードウェア装置
６８：  ソフトウェアプロセス
６９：  サービス機能
１００：  動作環境
１０１：  サービス機能
１０２：  ａｓｍ関数
１０３：  ハッシュ関数
１１０：  プログラムＰ
１１５：  Ｐのアドレス空間
１２０：  記憶装置
１２１：  変更に対して保護された記憶領域
２００：  演算装置
２１０：  署名照合部
２１１：  署名添付部
２１２：  鍵生成部
２１３：  記憶装置
２１４：  変更に対して保護された記憶領域
【図１】
2005535945.tif 000003
【図２】
2005535945.tif 000004
【図３】
2005535945.tif 000005
【図４】
2005535945.tif 000006
【図５】
2005535945.tif 000007
【図６】
2005535945.tif 000008
【図７】
2005535945.tif 000009
【図８】
2005535945.tif 000010
【図９】
2005535945.tif 000011
【図１０】
2005535945.tif 000012
【図１１】
2005535945.tif 000013
【国際調査報告】
2005535945.tif 000014
2005535945.tif 000015
2005535945.tif 000016
2005535945.tif 000017
2005535945.tif 000018