(57)【要約】電子デバイス内の安全なプログラム解釈方法に関する。解釈対象プログラムがロードされ、スタブ実行可能ファイルがプロトタイプ・スタブ実行可能ファイルを使用して形成される。スタブ実行可能ファイルは、解釈対象プログラムと関連付けられる。また、少なくとも１つの第２のケイパビリティが、解釈対象プログラムに割り当てられ、スタブ実行可能ファイルにも割り当てられる。スタブ実行可能ファイルは、共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して解釈対象プログラムを解釈する。インタープリタ・エンジンは、解釈対象プログラムが外部の解釈対象プログラム・コード・セクションを参照しているかどうかをチェックする。インタープリタ・エンジンは、外部の解釈対象プログラム・コード・セクションに関する少なくとも１つの第２のケイパビリティを推論する。インタープリタ・エンジンは、少なくとも１つの第１のケイパビリティが少なくとも１つの第２のケイパビリティのサブセットでない場合は、外部の解釈対象プログラム・コード・セクションの実行を許可しないようにする。【選択図】    図３
2008521111.tif 000002
【特許請求の範囲】
【請求項１】
電子デバイス内の安全なプログラム解釈方法であって、
前記電子デバイス内の少なくとも１つの共有インタープリタ・ライブラリとプロトタイプ・スタブ実行可能ファイルとを提供するステップと、
解釈対象プログラムを前記電子デバイスにロードするステップと、
前記電子デバイス内の前記プロトタイプ・スタブ実行可能ファイルを使用してスタブ実行可能ファイルを形成するステップと、
前記電子デバイス内の前記スタブ実行可能ファイルを前記解釈対象プログラムと関連付けるステップと、
少なくとも１つの第２のケイパビリティを前記スタブ実行可能ファイルに割り当てるステップと、
前記スタブ実行可能ファイルを前記電子デバイス内で実行するステップと
を含む方法。
【請求項２】
前記スタブ実行可能ファイルが前記解釈対象プログラムを前記少なくとも１つの共有インタープリタ・ライブラリに示すステップと、
前記スタブ実行可能ファイルが前記少なくとも１つの共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記解釈対象プログラムを解釈するステップと、
外部の解釈対象プログラム・コード・セクションが前記解釈対象プログラムによって参照されているかどうかをチェックするステップと、
前記外部の解釈対象プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推論するステップと、
前記少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部の解釈対象プログラム・コード・セクションの実行を許可しないようにするステップと
を更に含む請求項１に記載の方法。
【請求項３】
前記外部の解釈対象プログラム・コード・セクションを前記電子デバイスにロードするステップと、
前記スタブ実行可能ファイルを別個のプロセス・コンテキストで実行するステップと
を更に含む請求項２に記載の方法。
【請求項４】
前記解釈対象プログラム・コード・セクションをロードする前記ステップは、それをネットワーク・サーバから前記電子デバイスにダウンロードするステップを含む、請求項２に記載の方法。
【請求項５】
信頼レベルを前記外部の解釈対象プログラム・コード・セクションに付与するステップと、
前記少なくとも１つの第１のケイパビリティを前記信頼レベルに基づいて判定するステップと
を更に含む請求項２に記載の方法。
【請求項６】
解釈対象プログラム・コード・セクションに関する信頼性カテゴリを、前記電子デバイスの前記ファイル・システム内に所在する前記解釈対象プログラム・コード・セクションを含むファイルに関する少なくとも１つの位置に基づいて判定し、前記解釈対象プログラム・コード・セクションが信頼されるリモート送信者から受信されたものかどうかを判定するステップと、
前記信頼レベルを前記信頼性カテゴリに基づいて付与するステップと
を更に含む請求項５に記載の方法。
【請求項７】
前記解釈対象プログラムをロードする前記ステップは、前記解釈対象プログラムをネットワーク・サーバからダウンロードするステップを含む、請求項１に記載の方法。
【請求項８】
前記少なくとも１つの共有インタープリタ・ライブラリと前記プロトタイプ・スタブ実行可能ファイルとを提供する前記ステップは、それらをネットワーク・サーバから前記電子デバイスにダウンロードするステップを含む、請求項１に記載の方法。
【請求項９】
前記解釈対象プログラムは、前記電子デバイス内で一意の識別子を使用して識別される、請求項１に記載の方法。
【請求項１０】
前記電子デバイスは、モバイル端末である、請求項１に記載の方法。
【請求項１１】
前記電子デバイスは、ＳＹＭＢＩＡＮ（登録商標）オペレーティング・システム・デバイスである、請求項１に記載の方法。
【請求項１２】
前記電子デバイスは、汎用パケット無線システム（ＧＰＲＳ）端末又はユニバーサル・モバイル・テレコミュニケーション・システム（ＵＭＴＳ）端末である、請求項１に記載の方法。
【請求項１３】
電子デバイスであって、
インタープリタ・エンジンを実装するように構成された少なくとも１つの共有インタープリタ・ライブラリと、
解釈対象プログラムを前記電子デバイスにロードし、プロトタイプ・スタブ実行可能ファイルを使用してスタブ実行可能ファイルを形成し、前記スタブ実行可能ファイルを前記解釈対象プログラムと関連付け、前記少なくとも１つの第２のケイパビリティを前記スタブ実行可能ファイルに割り当てるように構成されたインストーラ・エンティティと、
前記スタブ実行可能ファイルを実行するように構成されたオペレーティング・システム・エンティティと
を備える電子デバイス。
【請求項１４】
前記少なくとも１つの共有インタープリタ・ライブラリは更に、
外部の解釈対象プログラム・コード・セクションが解釈対象プログラムによって参照されているかどうかをチェックし、
前記外部の解釈対象プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推論し、
少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部の解釈対象プログラム・コード・セクションの実行を許可しないように構成される、
請求項１３に記載の電子デバイス。
【請求項１５】
前記少なくとも１つの解釈対象プログラム・コード・セクションをロードする前記ステップは、それをネットワーク・サーバから前記電子デバイスにダウンロードするステップを含む、請求項１４に記載の電子デバイス。
【請求項１６】
前記インストーラ・エンティティは更に、前記外部の解釈対象プログラム・コード・セクションを前記電子デバイスにロードするように構成され、前記オペレーティング・システム・エンティティは更に、前記スタブ実行可能ファイルを別個のプロセス・コンテキストで実行するように構成される、請求項１４に記載の電子デバイス。
【請求項１７】
前記少なくとも１つの共有インタープリタ・ライブラリは更に、信頼レベルを前記外部の解釈対象プログラム・コード・セクションに付与し、前記少なくとも１つの第１のケイパビリティを前記信頼レベルに基づいて判定するように構成される、請求項１４に記載の電子デバイス。
【請求項１８】
前記解釈対象プログラムをロードする前記ステップは、前記解釈対象プログラムをネットワーク・サーバからダウンロードするステップを含む、請求項１３に記載の電子デバイス。
【請求項１９】
前記インストーラ・エンティティは更に、前記少なくとも１つの共有インタープリタ・ライブラリと前記プロトタイプ・スタブ実行可能ファイルとをネットワーク・サーバから前記電子デバイスにダウンロードするように構成される、請求項１３に記載の電子デバイス。
【請求項２０】
前記オペレーティング・システム・エンティティは更に、前記解釈対象プログラムを一意の識別子を使用して識別するように構成される、請求項１３に記載の電子デバイス。
【請求項２１】
前記電子デバイスは、モバイル端末である、請求項１３に記載の電子デバイス。
【請求項２２】
前記電子デバイスは、ＳＹＭＢＩＡＮ（登録商標）オペレーティング・システム・デバイスである、請求項１３に記載の電子デバイス。
【請求項２３】
前記電子デバイスは、汎用パケット無線システム（ＧＰＲＳ）端末又はユニバーサル・モバイル・テレコミュニケーション・システム（ＵＭＴＳ）端末である、請求項１３に記載の電子デバイス。
【請求項２４】
コンピュータ・プログラムであって、データ処理システム上で実行されたときに、
解釈対象プログラムをロードするステップと、
プロトタイプ・スタブ実行可能ファイルを使用してスタブ実行可能ファイルを形成するステップと、
前記スタブ実行可能ファイルを前記解釈対象プログラムと関連付けるステップと、
少なくとも１つの第２のケイパビリティを前記解釈対象プログラムに割り当てるステップと、
前記少なくとも１つの第２のケイパビリティを前記スタブ実行可能ファイルと関連付けるステップと、
前記スタブ実行可能ファイルを実行するステップと、
前記スタブ実行可能ファイルが前記解釈対象プログラムを少なくとも１つの共有インタープリタ・ライブラリに示すステップと、
前記スタブ実行可能ファイルが前記共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記解釈対象プログラムを解釈するステップと
を実施するように適合されたコードを含むコンピュータ・プログラム。
【請求項２５】
前記コンピュータ・プログラムは、コンピュータ可読媒体に記憶される、請求項２４に記載のコンピュータ・プログラム。
【請求項２６】
前記コンピュータ可読媒体は、取り外し可能なメモリ・カードである、請求項２５に記載のコンピュータ・プログラム。
【請求項２７】
前記コンピュータ可読媒体は、磁気ディスク又は光ディスクである、請求項２５に記載のコンピュータ・プログラム。
【請求項２８】
コンピュータ・プログラムであって、データ処理システム上で実行されたときに、
前記コンピュータ・プログラムに関連する少なくとも１つのケイパビリティを解釈対象プログラムに提供するステップと、
前記解釈対象プログラムに関する情報を前記コンピュータ・プログラムに割り当てられた安全なソースから取得するステップと、
前記解釈対象プログラムを、解釈対象プログラム・コードを解釈するインタープリタ・エンジンを実装する少なくとも１つの関数を含む、少なくとも１つの共有インタープリタ・ライブラリに示すステップと、
前記共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記解釈対象プログラムを解釈するステップと
を実施するように適合されたコードを含むコンピュータ・プログラム。
【請求項２９】
前記安全なソースは、電子デバイス内の安全なディレクトリである、請求項２８に記載のコンピュータ・プログラム。
【請求項３０】
前記コンピュータ・プログラムは、コンピュータ可読媒体に記憶される、請求項２８に記載のコンピュータ・プログラム。
【請求項３１】
前記コンピュータ可読媒体は、取り外し可能なメモリ・カードである、請求項３０に記載のコンピュータ・プログラム。
【請求項３２】
前記コンピュータ可読媒体は、磁気ディスク又は光ディスクである、請求項３０に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は解釈型プログラミング言語に関するものである。特に、本発明は電子デバイス内の安全なプログラム解釈方法に関するものである。
【背景技術】
【０００２】
電子通信デバイスではセキュリティが重要な要素となっている。現代のモバイル端末は、シンプルな携帯電話からパーソナル・コンピュータと同様のアプリケーションを備える多目的通信デバイスへと進化を遂げている。これらの通信デバイスには、インターネット・ブラウジング、Ｅメール、マルチメディア・コール等のような様々なサービスが装備されている。モバイル端末向けの１つの重要な技術には、Ｊａｖａ(登録商標)、Ｐｅｒｌ、ＰＨＰ、Ｐｙｔｈｏｎ等のような様々な解釈型言語がある。これらの解釈型言語を用いることにより、モバイル端末で利用可能な付加価値サービス及びゲームの種類は飛躍的に増加している。これらの解釈型言語を使用して開発されるソフトウェアは、別個のプログラムと共有のライブラリとを含んでいる。これらのプログラム及びライブラリは、ネットワーク・サーバから無線を介してモバイル端末にダウンロードすることができる。
【０００３】
ソフトウェアのダウンロードは主に、前記モバイル端末に設けられたブラウザを利用して行われる。ユーザが前記ネットワークからダウンロードするアプリケーションを信頼できることが重要となる。適切なセキュリティ手順が前記モバイル端末に適用されない限り、悪意のあるコードを前記モバイル端末に仕掛けることは非常に簡単である。悪意のあるコードは、モバイル端末の様々な不具合を引き起こす恐れがある。例えば、電話がユーザへの適切な通知なしに課金サービスの番号にセットアップされる恐れがあり、前記モバイル端末から情報が収集され盗まれる恐れもあり、前記モバイル端末がある種のモバイル決済システムをサポートしている場合には、前記ユーザになりすまして課金購入が行われる恐れもある。
【０００４】
これまでに報告された悪意のあるプログラムのいくつかの実例には、別のプラットフォーム上のインタープリタ内で実行される解釈型言語を使用して作成されたものが存在する。これらの悪意のあるプログラムは、解釈型環境又はホスト環境あるいはその両方を標的としている。前記悪意のあるプログラムの動作が可能になった理由は、前記インタープリタの実行環境がそれらのプログラムを他の解釈対象プログラム又はホスト・プラットフォームから適切に隔離することができなかったためである。
【０００５】
本願の文脈において、アプリケーションの隔離は、前記プログラムの永続的な状態と実行時の振る舞いとを分離するものとして定義される。各プログラムは互いのデータを自発的に共有することができ、あるいは他のプログラムの振る舞いに反応することができる。
【０００６】
当業界の専門家に周知の現行機能としては、データ・ケージング、実行時のプロセスの隔離、ケイパビリティ・フレームワーク（ｃａｐａｂｉｌｉｔｙ  ｆｒａｍｅｗｏｒｋ）、プロセス識別子、プロセス間通信（ＩＰＣ）認証、トラステッド・コンピューティング・ベース、境界防衛、及びオペレーティング・システムのソフトウェア・インストール・プログラムが挙げられる。
【０００７】
プログラムは、これらの機能を連動させて互いに隔離され、トラステッド・コンピューティング・ベースから隔離され、重要なシステム・インターフェイスから隔離される。現行のオペレーティング・システムの特筆すべき特徴は、ポリシーが前記プロセスの境界で強制される故に、前記システムがプロセスの隔離に基づいており、したがってプログラムの隔離に基づいている点である。トラステッド・コンピューティング・ベースを用いることによって、各プログラムが各々の特権を高める能力も否認される。
【０００８】
安全なカーネルは、ネイティブ・プログラムを互いに隔離する。つまり、リソースに対するケイパビリティ又はアクセス権を互いに隔離されていないプログラムに付与することが不可能となる。ケイパビリティを互いに隔離されていないアプリケーションに付与することが可能である場合は、前記ケイパビリティが悪意のあるコードに「漏洩」しないという保証はないことになる。アプリケーションの隔離は本質的に、前記ケイパビリティ・フレームワークの極めて重要な基盤といえる。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上述の各セキュリティ機能は、悪意のある又は欠陥のあるプログラムが前記プラットフォーム、データ、又は前記システム上の他のプログラムに損害を与えるのを防止する際に役立つ。これらの機能は、アプリケーションの隔離がネイティブ・プログラムに対して適用されるように設計されている。前記システム仕様は現時点で、アプリケーションの隔離を解釈対象プログラムに適用する手法については示唆していない。本発明はこれを達成する方法を提案する。
【課題を解決するための手段】
【００１０】
本発明は、電子デバイス内の安全なプログラム解釈方法に関するものである。前記方法は、前記電子デバイス内の少なくとも１つの共有インタープリタ・ライブラリとプロトタイプ・スタブ実行可能ファイル（ｅｘｅｃｕｔａｂｌｅ）とを提供するステップと、解釈対象プログラムを前記電子デバイスにロードするステップと、前記電子デバイス内の前記プロトタイプ・スタブ実行可能ファイルを使用してスタブ実行可能ファイルを形成するステップと、前記電子デバイス内の前記スタブ実行可能ファイルを前記解釈対象プログラムと関連付けるステップと、少なくとも１つの第２のケイパビリティを前記スタブ実行可能ファイルに割り当てるステップと、前記スタブ実行可能ファイルを前記電子デバイス内で実行するステップとを含む。
【００１１】
本発明は、電子デバイスであって、インタープリタ・エンジンを実装するように構成された少なくとも１つの共有インタープリタ・ライブラリと、解釈対象プログラムを前記電子デバイスにロードし、プロトタイプ・スタブ実行可能ファイルを使用してスタブ実行可能ファイルを形成し、少なくとも１つの第２のケイパビリティを前記スタブ実行可能ファイルに割り当て、前記少なくとも１つの第２のケイパビリティを前記スタブ実行可能ファイルと関連付けるように構成されたインストーラ・エンティティと、前記スタブ実行可能ファイルを実行するように構成されたオペレーティング・システム・エンティティとを備える電子デバイスにも関する。
【００１２】
本発明は、コンピュータ・プログラムであって、データ処理システム上で実行されたときに、解釈対象プログラムをロードするステップと、プロトタイプ・スタブ実行可能ファイルを使用してスタブ実行可能ファイルを形成するステップと、前記スタブ実行可能ファイルを前記解釈対象プログラムと関連付けるステップと、少なくとも１つの第２のケイパビリティを前記解釈対象プログラムに割り当てるステップと、前記少なくとも１つの第２のケイパビリティを前記スタブ実行可能ファイルと関連付けるステップと、前記スタブ実行可能ファイルを実行するステップと、前記スタブ実行可能ファイルが前記解釈対象プログラムを少なくとも１つの共有インタープリタ・ライブラリに示すステップと、前記スタブ実行可能ファイルが前記共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記解釈対象プログラムを解釈するステップとを実施するように適合されたコードを含むコンピュータ・プログラムにも関する。
【００１３】
本発明は、コンピュータ・プログラムであって、データ処理システム上で実行されたときに、前記コンピュータ・プログラムに関連する少なくとも１つのケイパビリティを解釈対象プログラムに提供するステップと、解釈対象プログラムに関する情報を前記コンピュータ・プログラムに割り当てられた安全なソースから取得するステップと、前記解釈対象プログラムを、解釈対象プログラム・コードを解釈するインタープリタ・エンジンを実装する少なくとも１つの関数を含む少なくとも１つの共有インタープリタ・ライブラリに示すステップと、前記共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記解釈対象プログラムを解釈するステップとを実施するように適合されたコードを含むコンピュータ・プログラムにも関する。
【００１４】
本発明の一実施形態において、前記方法は更に、前記スタブ実行可能ファイルが前記解釈対象プログラムを前記少なくとも１つの共有インタープリタ・ライブラリに示すステップと、前記スタブ実行可能ファイルが前記少なくとも１つの共有インタープリタ・ライブラリ内の少なくとも１つの関数を呼び出して前記解釈対象プログラムを解釈するステップと、外部の解釈対象プログラム・コード・セクションが前記解釈対象プログラムによって参照されているかどうかをチェックするステップと、前記外部の解釈対象プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推論するステップと、前記少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部の解釈対象プログラム・コード・セクションの実行を許可しないようにするステップとを含む。
【００１５】
本発明の一実施形態において、前記少なくとも１つの共有インタープリタ・ライブラリは更に、外部の解釈対象プログラム・コード・セクションが解釈対象プログラムによって参照されているかどうかをチェックし、前記外部の解釈対象プログラム・コード・セクションに関する少なくとも１つの第１のケイパビリティを推論し、少なくとも１つの第２のケイパビリティが前記少なくとも１つの第１のケイパビリティのサブセットでない場合は、前記外部の解釈対象プログラム・コード・セクションの実行を許可しないように構成される。
【００１６】
本発明の一実施形態において、前記安全なソースは、電子デバイス内の安全なディレクトリである。前記安全なソースは、例えばコンピュータ・プログラム・コード自体であっても前記コンピュータ・プログラムを記憶するディレクトリであってもよい。前記解釈対象プログラムに関する前記情報は、前記解釈対象プログラムのファイル名であってもよい。前記安全なソースは、前記コンピュータ・プログラムを含むファイルのファイル名を前記コンピュータ・プログラムに提供するオペレーティング・システムであってもよい。
【００１７】
「外部の解釈対象プログラム・コード・セクション」という前記用語は、前記解釈対象プログラム自体の外部、例えば前記電子デバイス内の前記解釈対象プログラム用に予約されたディレクトリ以外のディレクトリから取得される、解釈対象プログラム・コード・セクションを指すことに留意していただきたい。例えば、前記外部の解釈対象プログラム・コード・セクションは、共有インタープリタ・ライブラリから読み出されてもよい。外部の解釈対象プログラム・コード・セクションは、前記解釈対象プログラムの解釈中に無線を介して取得されてもよい。「少なくとも１つの第１のケイパビリティ」という前記用語は、前記外部の解釈対象プログラム・コード・セクション、例えば共有インタープリタ・ライブラリに割り当てられる１組のケイパビリティを指す。「少なくとも１つの第２のケイパビリティ」という前記用語は、前記スタブ実行可能ファイルの１組のケイパビリティを指す。単一のケイパビリティは、オペレーティング・システム、データ通信、又は電子デバイスの管理に関するいくつかの個々の演算又は関数を含むことができることに留意していただきたい。言い換えれば、いくつかの機能は便宜上、単一のケイパビリティにグループ化されていることもある。プログラム又はプログラム・コードの断片は、１組のケイパビリティと関連付けられている可能性もある。ケイパビリティは、前記電子デバイス内のリソース又は機能へのアクセス権を付与するものであるが、アクセス権が付与されない場合には、前記プログラム又はプログラム・コードがそれらのリソース又は機能を使用することはできなくなる。前記ケイパビリティは、前記電子デバイス内の前記プログラムにサービスする前記オペレーティング・システム又は前記機能によって監視される。
【００１８】
本発明の一実施形態では、解釈対象プログラム・コード・セクションに関する信頼性カテゴリが、前記電子デバイスの前記ファイル・システム内に所在する前記解釈対象プログラム・コード・セクションを含むファイルに関する少なくとも１つの位置に基づいて判定され、前記解釈対象プログラム・コード・セクションが信頼されるリモート送信者から受信されたものかどうかが判定され、前記信頼レベルが、前記信頼性カテゴリに基づいて付与される。
【００１９】
本発明の一実施形態では、任意のデータの実行が、前記少なくとも１つのインタープリタ・ライブラリ内で無効化される。このことは、例えば前記インタープリタ・エンジンが任意のデータを実行するための関数にアクセスできなくなることを意味する。そのような関数をコールしようとする試みがあると、前記インタープリタ・エンジンでエラーが発生することになる。本発明の一実施形態において、前記スタブ実行可能ファイルは、別個のプロセス・コンテキストで実行される。前記無効化は、前記インタープリタ・エンジンをコンパイルして前記少なくとも１つの共有インタープリタ・ライブラリを生成する前に実施されてもよい。次に、このように無効化されたバージョンが前記電子デバイスに提供される。
【００２０】
本発明の一実施形態において、前記外部の解釈対象プログラム・コード・セクションは、例えば無線を介してネットワーク・サーバから前記電子デバイスにロードされる。本発明の一実施形態において、前記外部の解釈対象プログラム・コード・セクションは、解釈対象プログラム・コードを含む共有インタープリタ・ライブラリ内の関数である。前記外部の解釈対象プログラム・コード・セクションは、前記解釈対象プログラム・コードが前記解釈対象プログラム自体から前記インタープリタ・エンジンに引き渡されるように、前記解釈対象プログラムによって任意のデータに基づいて形成されてもよい。
【００２１】
本発明の一実施形態では、信頼レベルが前記共有インタープリタ・ライブラリに付与される。前記信頼レベルは、前記ユーザによって又は前記インストーラ・エンティティによって自動的に付与することができる。前記インストーラ・エンティティが前記信頼レベルを自動的に付与する場合、前記信頼レベルは、ネットワーク・サーバから提供された信頼レベル情報を検査することによって取得することができる。前記信頼レベル情報には運営者の署名が付されていることもある。前記署名はまた、サービス・プロバイダから付されていることも、他の任意の信頼されるエンティティから付されていることもある。前記信頼レベルは、前記少なくとも１つの第１のケイパビリティを前記オペレーティング・システム・エンティティ・レベル又は前記インストーラ・エンティティ・レベルで判定するのに使用される。
【００２２】
本発明の一実施形態において、前記解釈対象プログラムをロードする前記ステップは、前記解釈対象プログラムをネットワーク・サーバからダウンロードするステップを含む。
【００２３】
本発明の一実施形態において、前記少なくとも１つの共有インタープリタ・ライブラリと前記プロトタイプ・スタブ実行可能ファイルとを提供する前記ステップは、それらをネットワーク・サーバから前記電子デバイスにダウンロードするステップを含む。
【００２４】
本発明の一実施形態において、前記少なくとも１つの共有インタープリタ・ライブラリをロードする前記ステップは、それらをネットワーク・サーバから前記電子デバイスにダウンロードするステップを含む。
【００２５】
本発明の一実施形態において、前記解釈対象プログラムは、前記電子デバイス内で一意の識別子を使用して識別される。前記一意の識別子は、例えば前記オペレーティング・システム・エンティティ及び前記インストーラ・エンティティが前記解釈対象プログラム及び前記スタブ実行可能ファイルを参照するのに使用することができる。前記少なくとも１つの第２のケイパビリティは、前記オペレーティング・システム・エンティティによって前記一意の識別子と関連付けられてもよい。
【００２６】
本発明の一実施形態において、前記電子デバイスは、モバイル端末を含む。本発明の一実施形態において、前記電子デバイスは、ＳＹＭＢＩＡＮ（登録商標）オペレーティング・システム・デバイスを含む。
【００２７】
本発明の一実施形態において、前記電子デバイスは、汎用パケット無線システム（ＧＰＲＳ）端末又はユニバーサル・モバイル・テレコミュニケーション・システム（ＵＭＴＳ）端末を含む。
【００２８】
本発明の一実施形態において、前記コンピュータ・プログラムは、コンピュータ可読媒体に記憶される。前記コンピュータ可読媒体は、取り外し可能なメモリ・カード、磁気ディスク、光ディスク、あるいは磁気テープであってもよい。
【００２９】
本発明の一実施形態において、前記電子デバイスは、例えばラップトップ・コンピュータ、パームトップ・コンピュータ、モバイル端末、携帯情報端末（ＰＤＡ）等のモバイル・デバイスである。本発明の一実施形態において、前記電子デバイスは、デスクトップ・コンピュータ又はメインフレーム・コンピュータである。
【００３０】
本発明の利点は、ロードされる解釈対象プログラムの信頼性の向上に関するものである。本発明を用いれば、プログラム又はプログラム・コードがインタープリタ内で実行される度に、通常であればネイティブ・オペレーティング・システム内の１組のケイパビリティを有する任意の単一のアプリケーションにしか見えないはずの前記ネイティブ・オペレーティング・システム内の実行可能プログラムが、解釈対象プログラム及びプログラム・コードに適用されるように、ケイパビリティの定義を行うことが可能となる。
【００３１】
本明細書の一部を構成し本発明の十分な理解を与えるために添付した各図面は、本発明の諸実施形態を図示するものであり、以下の詳細な説明と併せて読めば本発明の諸原理がより理解しやすくなるはずである。
【発明を実施するための最良の形態】
【００３２】
ここで、本発明の諸実施形態を詳細に説明する。諸実施形態の実例は添付図面に示されている。
【００３３】
図１は、本発明に係る電子デバイス内のディレクトリ・ツリーの一例を示すブロック図である。前記電子デバイスは図３に示すとおりである。本発明の一実施形態において、前記電子デバイスは、ＳＹＭＢＩＡＮ（登録商標）オペレーティング・システム・デバイスである。前記ディレクトリ・ツリーは、本発明に係る電子デバイスに記憶される前記方法に不可欠なファイルにはどのようなものが存在し、それらの相互関係がどのようなものかを示している。図１にはルート・ノード１００が存在し、このルート・ノードにはサブ・ディレクトリ１０１、１０２、及び１０３が連結されている。前記サブ・ディレクトリ１０１は、インタープリタを実装するバイナリ・ファイルを記憶している。前記インタープリタは、例えばＪａｖａ（登録商標）インタープリタ、Ｐｅｒｌインタープリタ、ＰＨＰインタープリタ、あるいはＰｙｔｈｏｎインタープリタであってもよい。サブ・ディレクトリ１０１にはファイル１１１、１１２、及び１１３が存在する。ファイル１１１は、コンパイラを使用して生成されたプログラム・ソース・コード又はバイト・コードを直接実行するインタープリタ・エンジンを含んでいる。
【００３４】
前記インタープリタ・エンジンによって解釈される前記プログラム・ソース・コード又は前記バイト・コードを、以下では「解釈対象プログラム・コード」と呼ぶ。前記コンパイラは、人間が読むことのできるソース・コードを解釈し、それをバイト・コードにコンパイルする。しかしながら、前記バイト・コードは、前記インタープリタ・エンジンが実行できる任意の中間言語であってもよいことに留意していただきたい。前記中間言語は、マシン実行に最適などのようなフォーマットであってもよい。当該フォーマットは、必ずしも１バイトのサイズの演算コードを含んでいる必要はない。ファイル１１１は本質的に、前記インタープリタ・エンジンを実行するための関数を含む動的リンク・ライブラリ（ＤＬＬ）である。ファイル１１２は、最終的にそれ自体が実行されたときにファイル１１１内に配置されている前記インタープリタ・エンジンを呼び出すことになる、スタブ・インタープリタ実行可能ファイルである。ファイル１１３は、解釈対象プログラムが前記電子デバイスにインストールされる度にファイル１１２を用いて形成されるものである。
【００３５】
サブ・ディレクトリ１０２は、前記インタープリタ・エンジンを使用して解釈されるプログラムを含む。サブ・ディレクトリ１０２は、前記解釈対象プログラムを含むファイル１２１を含んでいる。前記サブ・ディレクトリ名の＜ＳＩＤ＞という要素は、前記解釈対象プログラムに割り当て済みのセキュリティ識別子（ＳＩＤ）を表している。前記ＳＩＤは、前記解釈対象プログラムを一意に識別するものであり、これを用いることでケイパビリティを前記解釈対象プログラムに割り当てることが可能となる。ケイパビリティは、ＳＩＤを使用して識別されたアプリケーションから呼び出すことができるオペレーティング・システム関数又はオペレーティング・システム関数セットに相当する。ケイパビリティの実例としては、リモート・ネットワークを介して例えばリモート・インターネット・サーバとの通信をセットアップするケイパビリティ、及び前記電子デバイスに記憶されているファイルにアクセスするケイパビリティが挙げられる。単一のケイパビリティは、関連するいくつかの関数及び演算を含むことができる。例えば、ＩＰソケットに関するすべての関数が単一のケイパビリティを含むこともできる。他のケイパビリティは、電力管理、Ｂｌｕｅｔｏｏｔｈ（登録商標）を利用したローカル通信、あるいは赤外線及び低レベル無線プロトコル処理に関するものもある。
【００３６】
サブ・ディレクトリ１０３は、ファイル１２１に記憶される前記解釈対象プログラム等のような解釈対象プログラムから呼び出される関数を含む共有ライブラリを含んでいる。前記共有ライブラリは、ファイル１３１に記憶される。サブ・ディレクトリ１３２は、前記共有ライブラリを前記電子デバイス内で管理する手法に関するポリシーが規定されるポリシー・ファイルも含んでいる。前記ポリシー・ファイルは、／ｒｅｓｏｕｒｃｅ／＜ｌａｎｇ＞ディレクトリの管理手法と、前記インタープリタをあるスクリプトについて起動するｌａｎｇ−＜ｖｅｒｓｉｏｎ＞−ｓｔｕｂ−ｉｎｔｅｒｐｒｅｔｅｒ．ｅｘｅの作成手法とを定義する。ポリシー定義ファイルを使用する利点は、前記ソフトウェア・インストール・プログラムのコンテキストでインタープリタ特有の外部コードが実行されないことである。すべてのインタープリタのポリシーを相互参照することができ、また、それらのポリシーを実装する前にエラー及び競合の有無をチェックすることもできる。また、この場合に必要な前記ポリシーのサポートは極めて単純なものである。
【００３７】
前記共有インタープリタ・ライブラリには、信頼レベル、つまり前記ライブラリ内の関数について許可される１組のケイパビリティが割り当てられる。前記１組のケイパビリティは、運営者によって決定され又はユーザによって決定される。運営者が決定を行った場合には、前記ケイパビリティは、前記ファイルがネットワーク・サーバからダウンロードされたときに前記電子デバイスに示される。前記ケイパビリティは、例えば前記運営者のデジタル署名を使用して署名が付されるように検証される。ユーザが決定を行った場合には、前記ライブラリについてどのケイパビリティが許可されることになるかを示すプロンプトが前記ユーザに示される。前記共有インタープリタ・ライブラリに割り当てられた前記ケイパビリティは、前記ライブラリについてどの機能が検査され、その結果、どの機能が信頼できるものと見なされるかを反映することになる。例えば、あるライブラリがファイルを前記電子デバイスにダウンロードする上で安全なものと見なされたとしても、前記電子デバイス内のファイルを読み出すことは許可されないこともある。
【００３８】
図２Ａ及び図２Ｂは、本発明の一実施形態に係る安全なプログラム解釈方法を示すフローチャートである。
ステップ２０２で、主要なインタープリタ・コード、即ち前記インタープリタ・エンジンを含む共有インタープリタ・ライブラリが、前記電子デバイスに提供される。前記共有ライブラリは、例えば前記ネイティブ・オペレーティング・システムの一部として提供することも、前記ユーザが前記インタープリタのダウンロードを要求したときに、無線を介してネットワーク・サーバから前記電子デバイスにダウンロードすることもできる。
【００３９】
ステップ２０４で、単一の解釈対象プログラムを解釈する前記インタープリタ・エンジンを呼び出すのに必要な関数を含むプロトタイプ・スタブ実行可能ファイルが、前記電子デバイスに提供される。前記プロトタイプ・スタブ実行可能ファイルは、例えば前記ネイティブ・オペレーティング・システムの一部として提供することも、前記ユーザが前記インタープリタを前記ネットワーク・サーバからダウンロードすることを要求したときに、無線を介して前記電子デバイスにダウンロードすることもできる。前記主要なインタープリタ・コードと前記プロトタイプ・スタブ実行可能ファイルとを含む前記共有インタープリタ・ライブラリのインストールは、それらを前記電子デバイス内の不揮発性メモリに記憶する別個のインストーラ・エンティティで実施することができる。
【００４０】
本発明の一実施形態において、共有インタープリタ・ライブラリは、前記電子デバイスにもロードされる。前記共有ライブラリは、磁気ディスク又は光ディスクあるいは取り外し可能なメモリ・カード等のような取り外し可能なメモリ媒体を使用して前記電子デバイスにロードすることも、無線を介して前記電子デバイスにダウンロードすることもできる。前記共有インタープリタ・ライブラリのインストールは、それを前記電子デバイス内の不揮発性メモリに記憶する別個のインストーラ・エンティティで実施することができる。
【００４１】
ステップ２０６では任意選択で、信頼レベルが前記電子デバイス内の共有インタープリタ・ライブラリに付与される。前記信頼レベルは、前記共有インタープリタ・ライブラリに割り当てられる１組のケイパビリティを指定する。前記信頼レベルの付与に関する判断は、前記電子デバイスから信頼される運営者又は他の任意のエンティティによって署名が付された信頼レベル情報に基づいて行うことができる。前記信頼は、例えば公開鍵基盤（ＰＫＩ）や信頼チェーン等を利用して確立される。前記電子デバイスの前記ユーザは、前記信頼レベルの付与に関する判断を、前記電子デバイスのユーザ・インターフェイスを介して明示的に指定することもできる。
【００４２】
ステップ２０８で、前記解釈対象プログラムが前記電子デバイスにロードされる。前記解釈対象プログラムは、例えば無線を介してダウンロードされる。前記解釈対象プログラムは、前記ユーザによってＷＷＷページ又はＷＡＰページから選択されていることもある。前記解釈対象プログラムは、例えば前記電子デバイスが接続を確立しているネットワーク・サーバからダウンロードされる。前記解釈対象プログラムのインストールは、インストーラ・エンティティによって実施することができる。本発明の一実施形態において、前記解釈対象プログラムは、磁気ディスク又は光ディスクあるいは取り外し可能なメモリ・カード等のような取り外し可能なメモリ媒体を使用して前記電子デバイスにロードすることもできる。
【００４３】
ステップ２１０で、一意の識別子が前記解釈対象プログラムに割り当てられる。前記解釈対象プログラムは、前記電子デバイスにダウンロードされている前記共有ライブラリ内の関数を使用することができる。前記一意の識別子は、一意の識別子を前記電子デバイス内で実行される各アプリケーションに割り振る責任を担う機関から取得される。
【００４４】
ステップ２１２で、前記解釈対象プログラムに付与すべきケイパビリティが前記電子デバイスで判定される。例えば、前記ケイパビリティは、前記解釈対象プログラムの前記解釈対象プログラム・コードを分析することによって判定され、あるいは、前記ネットワーク・サーバ又は取り外し可能なメモリ媒体から前記解釈対象プログラムに関して提供される別個のファイル又はデータ構造の形で指定されることもある。また、どのようなケイパビリティも付与されない解釈対象プログラムが存在する可能性もある。そのような場合には、前記解釈対象プログラムは単に情報を表示装置にレンダリングし、キーボードを使用するユーザと対話することしか許可されない。
【００４５】
ステップ２１４で、前記スタブ実行可能ファイルを使用してスタブ実行可能ファイルが形成される。前記スタブ実行可能ファイルは、前記インタープリタ・エンジンを呼び出し、前記インタープリタ・エンジンに対する前記解釈対象プログラムを判定するために形成されるものである。前記スタブ実行可能ファイルは、前記プロトタイプ・スタブ実行可能ファイルを使用して形成される。前記スタブ実行可能ファイルは、例えば前記共有インタープリタ・ライブラリに関して又は前記解釈対象プログラムに関して提供される別個のポリシー・ファイルに含まれる命令を使用して形成することもできる。スタブ実行可能ファイルの形成は、インストーラ・エンティティによって実施することができる。
【００４６】
ステップ２１６で、前記スタブ実行可能ファイルからの他のプログラムの実行が無効化される。前記無効化は、例えば前記スタブ実行可能ファイルによって実行されることになる前記解釈対象プログラムが前記インタープリタ・エンジンに明示的に示されるように達成される。前記解釈対象プログラムは、例えば図１のファイル１２１等のようなそれ自体のファイル名を提供することによって示される。
【００４７】
ステップ２１８で、前記解釈対象プログラムについて判定された前記ケイパビリティは、ステップ２１４で形成された前記電子デバイス内の前記スタブ実行可能ファイルに割り当てられる。前記スタブ実行可能ファイルは、前記オペレーティング・システムのセキュリティ機能に関する前記解釈対象プログラムを表すことになる。前記スタブ実行可能ファイルは前記インタープリタ・エンジンを呼び出し、前記解釈対象プログラムを前記インタープリタ・エンジンに提供するのに使用されることから、前記解釈対象プログラム又は前記共有インタープリタ・ライブラリ内の関数以外のどのような解釈対象プログラム・コードも実行されないことが保証される。言い換えれば、解釈対象プログラムがスタブ実行可能ファイルを使用せずに前記インタープリタ・エンジンで実行される可能性はない。
【００４８】
標識「Ａ」は、図２Ａに示される前記方法が図２Ｂに続くポイントを表している。
ステップ２２０で、前記解釈対象プログラムを前記スタブ実行可能ファイル及び前記インタープリタ・エンジンを用いて解釈する前記プロセスが、前記電子デバイスの前記オペレーティング・システムによって別個のプロセス・コンテキストで実行される。各解釈対象プログラム毎に別個のプロセス・コンテキストが存在する。
ステップ２２２では、前記プログラムが終了したかどうかが前記インタープリタ・エンジンによってチェックされる。前記プログラムが終了していない場合は、ステップ２２４に進む。
【００４９】
ステップ２２４では、外部の解釈対象プログラム・コードを解釈すべきかどうかが前記インタープリタ・エンジンによってチェックされる。外部の解釈対象プログラム・コードを解釈すべき場合にはステップ２２６に進み、そうでない場合にはステップ２２０に進む。外部の解釈対象プログラム・コードの一例は、共有インタープリタ・ライブラリに含まれるコードである。外部の解釈対象プログラム・コードの別の実例は、現在のコードの解釈中に前記電子デバイスによって受信されたコードである。
【００５０】
ステップ２２６では、前記インタープリタ・エンジンによって、前記外部の解釈対象プログラム・コードの前記信頼レベルと、前記スタブ実行可能ファイルの前記ケイパビリティとの比較が行われる。前記スタブ実行可能ファイルの前記ケイパビリティが、前記外部の解釈対象プログラム・コード、即ち、例えば前記共有インタープリタ・ライブラリ等の前記信頼レベルに関連する前記ケイパビリティのサブセットであることが判定される。所与の信頼レベルは、外部の解釈対象プログラム・コードに割り当てられた１組のケイパビリティを一意に指定する。前記信頼レベルは、例えば前記電子デバイス内のファイル・システムにおける前記外部の解釈対象プログラム・コードの位置に基づいて推論される。例えば、前記コードが前記解釈対象プログラムの前記ディレクトリや言語特有の信頼ディレクトリ等のような信頼されるディレクトリ内に配置されている場合は、少なくとも前記解釈対象プログラムの前記ケイパビリティが付与される。前記スタブ実行可能ファイルの前記ケイパビリティが前記信頼レベルに関連する前記ケイパビリティのサブセットでない場合、つまり、前記スタブ実行可能ファイルが前記外部の解釈対象プログラム・コードについて指定された１組のケイパビリティに属さないケイパビリティを有する場合には、前記インタープリタ・エンジンは、前記信頼レベルを逸脱（ｅｘｃｅｅｄ）しているものと見なす。
【００５１】
ステップ２２８で、前記インタープリタ・エンジンは、前記信頼レベルを逸脱しているかどうかをチェックする。前記信頼レベルを逸脱している場合にはステップ２３０に進み、そうでない場合にはステップ２２０に進む。
ステップ２３０で、前記インタープリタ・エンジンは前記プログラムの実行を許可しないようにする。その際は前記ユーザに対して適切なエラー・メッセージを示すことができ、前記スタブ実行可能ファイルの実行は終了する。
【００５２】
図３は、本発明に係る電子デバイス３００を示すブロック図である。電子デバイス３００は、第１のメモリ（図示せず）と、第２のメモリ（図示せず）とを備える。前記第１のメモリは揮発性ＲＡＭワーク・メモリであり、前記第２のメモリは不揮発性メモリである。本発明の一実施形態において、前記第１及び第２のメモリは同一の不揮発性メモリである。前記電子デバイスは、プロセッサ（図示せず）も備える。
【００５３】
図３には、前記電子デバイス内のソフトウェアを示すボックス３０２が存在する。前記ソフトウェアは少なくとも、オペレーティング・システム・エンティティ３１６と、インストーラ・エンティティ３０４と、通信エンティティ３０６とを備える。前記ソフトウェアは、インタープリタ・エンジン３１０と、インタープリタ・エンジン３１０に関連するスタブ実行可能ファイル３０８とを備えることもできる。インタープリタ・エンジン３１０は、解釈対象プログラム３１２等のような解釈対象プログラムの解釈対象プログラム・コードを実行する。前記解釈対象プログラムは、共有ライブラリ３１４に記憶されている少なくとも１つの関数を使用することができる。共有ライブラリ３１４は、インタープリタ・エンジン３１０によって実行される前記解釈対象プログラム・コードで指定された関数を含む。共有ライブラリ３１４は、前記電子デバイスのネイティブ・マシン・コードで指定される関数を含むこともできる。スタブ実行可能ファイル３０８は、インタープリタ・エンジン３１０で所与の解釈対象プログラムのインスタンスを呼び出すのに使用される。インタープリタ・エンジン３１０では、同一のスタブ実行可能ファイルを使用して他の解釈対象プログラムを呼び出すことはできない。通信エンティティ３０６は、前記電子デバイス内の通信関連タスクを実施する。通信エンティティ３０６は、無線インターフェイス通信に使用され、インターネット等のようなリモート・ネットワークとの通信を行うプロトコル・スタックを備える。通信エンティティ３０６が解釈対象プログラム３１２を前記リモート・ネットワークから受信すると、解釈対象プログラム３１２はインストーラ・エンティティ３０４に提供される。インストーラ・エンティティ３０４は、解釈対象プログラム３１２を電子デバイス内の不揮発性メモリに記憶する。インストーラ・エンティティ３０４は、解釈対象プログラム３１２特有のスタブ実行可能ファイルを作成する。
【００５４】
本発明の一実施形態において、インストーラ・エンティティは、解釈対象プログラム３１２を電子デバイス３００内の前記不揮発性メモリにインストールするときに必要なファイルを形成する際に、ポリシー・ファイルを使用する。インストーラ・エンティティ３０４には、共有ライブラリ３１４が電子デバイス３００にダウンロードされたときに共有ライブラリ３１４を不揮発性メモリにインストールし、共有ライブラリ３１４を構成する責任を負わせることもできる。同様に、インストーラ・エンティティには、前記インタープリタが電子デバイス３００にダウンロードされたときにインタープリタ・エンジン３１０及びプロトタイプ・スタブを不揮発性メモリにインストールし、それらを構成する責任を負わせることもできる。オペレーティング・システム・エンティティ３１６又はインストーラ・エンティティ３０４には、信頼レベル及びケイパビリティを共有ライブラリ及び解釈対象プログラムに割り当てる責任を負わせることができる。本発明の一実施形態において、インストーラ・エンティティ３０４は、電子デバイス３００内で実行されるアプリケーションである。
【００５５】
本発明の一実施形態において、スタブ実行可能ファイル３０８は、電子デバイス３００内のオペレーティング・システム・エンティティ３１６の制御下で実行されるアプリケーションである。インタープリタ・エンジン３１０は、電子デバイス３００の前記ネイティブ・マシン・コード内の動的リンク・ライブラリである。各関数は、スタブ実行可能ファイル３０８によって前記動的リンク・ライブラリから呼び出される。
【００５６】
以下では、本発明の前記方法がＳＹＭＢＩＡＮ（登録商標）オペレーティング・システム環境で適用される本発明の一実施形態について説明する。解釈対象アプリケーションを他の解釈対象アプリケーション及び前記ホスト・プラットフォームから隔離する重要性は、それらの解釈対象プログラムによって操作されるデータ及びそれらの解釈対象プログラムから提供される機能の重要性に関係する。インタープリタについて１つのプログラムしか実装されない場合には、アプリケーションの隔離は暗黙的に実施される。
【００５７】
前記アプリケーションの大部分が単一のインタープリタを使用して実装される場合には、アプリケーションの隔離が極めて重要となる。前記インタープリタによってプラットフォーム・セキュリティが正しく適用されない場合には、前記プラットフォームのセキュリティ機能の大部分が使用されないことになる。これによって他の解釈対象プログラムの貴重なデータが悪意のあるプログラムの標的となる恐れがある。
【００５８】
Ｍｉｃｒｏｓｏｆｔ社のマクロウイルス問題は、前記課題がどの程度深刻なものかを示す最悪のケースの一例である。プログラム（例えばＷｏｒｄやＥｘｃｅｌ等）が実行される環境が安全でない場合には、基盤となるオペレーティング・システムが安全であるかどうかは問題ではない。
【００５９】
統合とは、前記オペレーティング・システムのプラットフォーム・セキュリティに関する構文及び意味体系の重要な側面が前記解釈対象プログラムに提供されることを意味する。統合には次の機能が必要とされる。即ち、解釈対象プログラムは一意の識別子を有していなければならないこと、解釈対象プログラムは専用のプライベート・ディレクトリを有していなければならないこと、共有コード・ライブラリは信頼レベルを有していなければならず、前記信頼レベルは個々のプログラムと同様に管理されなければならないこと、解釈対象プログラムはそれ自体に割り当てられたケイパビリティ・セットを有していなければならないこと、各解釈対象プログラムは別個のプロセス・コンテキストで実行されなければならないこと、ならびに、解釈対象プログラムはそれ自体のケイパビリティ・セットによって制限されなければならないことである。
【００６０】
これらの機能を実装するために提案される方法は以下の事項に基づいており、その趣旨は次のとおりである。インタープリタ実行可能ファイルを／ｓｙｓ／ｂｉｎ／ｌａｎｇ−＜ｖｅｒｓｉｏｎ＞−ｉｎｔｅｒｐｒｅｔｅｒ．ｄｌｌ（＜ｖｅｒｓｉｏｎ＞部は前記インタープリタのバージョンを示す）というＤＬＬ内に配置し、他の任意のプログラムに関するＳＩＤ／ＶＩＤペアが各解釈対象プログラムに割り当てられる度に、スタブ実行可能ファイル／ｓｙｓ／ｂｉｎ／ｌａｎｇ−＜ｖｅｒｓｉｏｎ＞−ｓｔｕｂ−ｉｎｔｅｒｐｒｅｔｅｒ．ｅｘｅ（＜ｖｅｒｓｉｏｎ＞部は前記インタープリタのバージョンを示す）を作成し、前記解釈対象プログラムの各ファイルを／ｐｒｉｖａｔｅ／＜ＳＩＤ＞／ディレクトリ内に配置し、各解釈対象プログラムＸについて、前記／ｓｙｓ／ｂｉｎ／ｌａｎｇ−＜ｖｅｒｓｉｏｎ＞−ｓｔｕｂ−ｉｎｔｅｒｐｒｅｔｅｒ．ｅｘｅを／ｓｙｓ／ｂｉｎ／ｉｎｔｅｒｐｒｅｔｅｄ−ｐｒｏｇｒａｍ−Ｘ．ｅｘｅにコピーし、前記解釈対象プログラムＸが有するべきケイパビリティを前記解釈対象プログラムＸに割り当て、前記スタブ実行可能ファイルは常にそれ自体のプライベート・ディレクトリから指定されたプログラムを実行し、汎用的な共有コードを／ｒｅｓｏｕｒｃｅ／＜ｌａｎｇ＞／ｌｉｂ内に配置し、必要とされるネイティブＤＬＬがあればそれを／ｓｙｓ／ｂｉｎ内に配置し、共有コードの管理に使用されるポリシーを規定するファイルを／ｒｅｓｏｕｒｃｅ／＜ｌａｎｇ＞／ｐｏｌｉｃｙ．ｔｘｔ配下に配置する。
【００６１】
本ソリューションは本質的に、各解釈対象プログラムを、それらがネイティブ・オペレーティング・システム・プログラムに見えるような形で前記ネイティブ・オペレーティング・システムのプラットフォーム・セキュリティにマッピングするものである。別の利点は、ケイパビリティがネイティブ・プログラムに割り当てられたときと同様のユーザ体験が維持されることである。本ソリューションでは、共有コードに信頼レベルをどのように割り当てるかについては依然として解決されていない。これについては次のセクションで論じる。
【００６２】
先に提案した設計では、前記解釈対象プログラムの外部の個々のコードに信頼レベルをどのように割り当てるかについて完全には解決されていない。前記課題が問題となるのは次の理由による。大部分の解釈型言語では、当該言語の範囲内で（例えばＰｅｒｌやＰｙｔｈｏｎではｅｖａｌ（）関数を介して）前記インタープリタにアクセスすることが可能となる。したがって、任意のＩ／Ｏソースを使用して即時実行可能なコードを提供することが可能である（このことは実際ネイティブ・プログラムにも当てはまることであるが、そのようなコードの存在によって認証は拒否されることになる）。
【００６３】
インタープリタの外部Ｉ／Ｏを監視することに基づいて、どのような入力データがコードとして使用され、どのような入力データがデータとして使用されているかを演繹することができる。
前記スタブ・インタープリタ実行可能ファイルを使用することにより、ケイパビリティをプログラムに付与する簡潔な手法が提供されるが、既存のオペレーティング・システムの仕組みを使用してケイパビリティを任意の入力に付与することは容易なことではない。
【００６４】
上記の考察から、信頼レベルを汎用的なコードに付与するための実用的な仕組みはいずれも、実際のインタープリタの支援を必要とすることは明らかである。そのために利用可能な２つの選択肢が存在する。即ち、信頼されないコードがケイパビリティを利用して実行されることになるコードについて、それ自体のロード／実行を拒否する選択肢と、実行時に前記コードがどのようなソースに由来するものであるかに応じて、より低いケイパビリティを導入する選択肢とが存在する。
【００６５】
ケイパビリティを実行時に調整することにより前記オペレーティング・システムのカーネルを変更する必要が生じることもある。１つの妥協案としては、スクリプトのプライベート・ディレクトリ以外のソースに由来するコードについて、それ自体のロード及び実行を無効化するケイパビリティを有するインタープリタを必要とする案がある。
【００６６】
ＳＩＤ／ＶＩＤ値は、／ｓｙｓ／ｒｅｓｏｕｒｃｅ内の共有コード・ライブラリに対しては割り当てられない。ＳＩＤ／ＶＩＤ値は、／ｓｙｓ／ｂｉｎ配下のバイナリだけに割り当てられる。解釈対象プログラム間で共有される解釈対象プログラム・コードをどのように管理するかを記述するポリシー・ファイルのフォーマットが定義される。前記ポリシー・ファイルは次の事項を定義する。
●／ｓｙｓ／ｒｅｓｏｕｒｃｅ／＜ｌａｎｇ＞ディレクトリの管理手法
●前記インタープリタをあるスクリプトについて起動するｌａｎｇ−＜ｖｅｒｓｉｏｎ＞−ｓｔｕｂ−ｉｎｔｅｒｐｒｅｔｅｒ．ｅｘｅの作成手法
【００６７】
前記／ｓｙｓディレクトリへの書込みは、前記インストーラ・エンティティだけが行うことができるが、当該ディレクトリの読出しは、すべてのプログラムが行うことができる。前記／ｐｒｉｖａｔｅ／＜ＳＩＤ＞ディレクトリは、当該ディレクトリ内にあるインストーラ・エンティティ又はプログラムだけが読み出すことのできるディレクトリである。前記電子デバイスが前記ディレクトリの実際の名前ではなく上記の２つのタイプのディレクトリを有するという原則は、不可欠なものである。
【００６８】
ポリシー定義ファイルを使用する利点は、ＳＷＩｎｓｔａｌｌ、即ち前記ソフトウェア・インストール・プログラムのコンテキストでインタープリタ特有の外部コードが実行されないことである。すべてのインタープリタのポリシーを相互参照することができ、また、それらのポリシーを実装する前にエラー及び競合の有無をチェックすることもできる。また、この場合に必要な前記ポリシーのサポートは極めて単純なものである。
【００６９】
前記インタープリタには次の機能が実装されるべきである。
●前記スクリプト内で使用されるデフォルト・ディレクトリは、／ｐｒｉｖａｔｅ／＜ＳＩＤ＞である。グローバル読出し可能／書込み可能なファイルについてはその旨を明示的に宣言しなければならない。
●前記プログラムに何らかのケイパビリティ（ユーザ・ケイパビリティを含む）が付与されている場合は、前記プライベート・ディレクトリ及び前記／ｓｙｓ／ｒｅｓｏｕｒｃｅディレクトリの外部のコードの実行は無効化される。本機能を無効化する特別な「開発者スイッチ（ｄｅｖｅｌｏｐｅｒ−ｓｗｉｔｃｈ）」を有することが望まれる可能性もある。
●ユーザ・ケイパビリティが付与されている場合には、プログラム・コードは、前記プログラムのプライベート・ディレクトリ及び前記共有コード・ディレクトリからしかロードすることができない。
●システム・ケイパビリティが付与されている場合には、プログラム・コードは、前記プログラムのプライベート・ディレクトリからしかロードすることができない。
【００７０】
本発明の基本的な概念は、技術の進歩に伴って様々な手法で実施できることが当業者には理解されるであろう。したがって、本発明及び本発明の諸実施形態は、上述の実例に限定されるものではなく、以下の各クレームの範囲内で様々な形をとることができる。
【図面の簡単な説明】
【００７１】
【図１】本発明に係る電子デバイス内のディレクトリ・ツリーの一例を示すブロック図である。
【図２Ａ】本発明の一実施形態に係るプログラムの安全な解釈方法を示すフローチャートである（その１）。
【図２Ｂ】本発明の一実施形態に係るプログラムの安全な解釈方法を示すフローチャートである（その２）。
【図３】本発明に係る電子デバイスを示すブロック図である。
【図１】
2008521111.tif 000003
【図２Ａ】
2008521111.tif 000004
【図２Ｂ】
2008521111.tif 000005
【図３】
2008521111.tif 000006
【国際調査報告】
2008521111.tif 000007
2008521111.tif 000008
2008521111.tif 000009