(57)【要約】【課題】データのクリティカルな使用に対してデータにセキュリティクリティカルとマーク付けし、ノンクリティカルな使用にはマーク付けしないままにできるＧｅｔコンテナおよびＳｅｔコンテナを備えるプラットフォームコード用のセキュリティクリティカルデータコンテナを提供する。【解決手段】コード内のクリティカルメソッドの数は減少し、より優れたコード分析が容易になる。コンテナのメソッドは、セキュリティクリティカルとしてマーク付けされ、メソッドを介してしかデータにアクセスできないようになる。Ｇｅｔコンテナの汎用クラスを使用することにより、クリティカルデータへのアクセスは、クリティカルとマーク付けされたクラスのプロパティを通じてのみ行うことができる。汎用クラスインスタンスを指すフィールドは、クリティカルである必要はなく、そのため初期化または存在の検査はノンクリティカルのままにしておくことができる。【選択図】図２Ａ
2006216038.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境において、
コンテナを備えるステップと、
情報により、前記コンテナの特定のメソッドに関連付けられているデータをセキュリティクリティカルとして識別できるようにするステップであって、前記データが高いアクセス権を持つコードによって前記特定のメソッドを介してしかアクセスできないようにすることと、
を備えることを特徴とする方法。
【請求項２】
前記コンテナはｇｅｔコンテナを備え、前記メソッドはｇｅｔメソッドを備え、前記データは高いアクセス権を持つコードによってｇｅｔメソッドを介してしか読み取ることができず、存在／初期化検査は高いアクセス権を持たないコードによって実行できることを特徴とする請求項１に記載の方法。
【請求項３】
前記データは、クリティカルリソースへのアクセスを提供する値を含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記コンテナはｓｅｔコンテナを備え、前記特定のメソッドはｓｅｔメソッドを備え、前記データは高いアクセス権を持つコードによって前記ｓｅｔメソッドを介してしか設定できないことを特徴とする請求項１に記載の方法。
【請求項５】
ｇｅｔメソッドをさらに備え、前記データは高いアクセス権を持たないコードによって前記ｇｅｔメソッドを介して読み取ることができることを特徴とする請求項４に記載の方法。
【請求項６】
前記データは、クリティカルリソースへのアクセスを提供する値を含むことを特徴とする請求項５に記載の方法。
【請求項７】
前記データは、アクセス権が他のコードによって高められるかどうかを示す値を含むことを特徴とする請求項５に記載の方法。
【請求項８】
前記コンテナは、ダウンロードされたコードが実行されるようにするプラットフォームコードにおいて実装され、分析ツールを介して前記プラットフォームコードを分析するステップをさらに備えることを特徴とする請求項１に記載の方法。
【請求項９】
実行されるとき請求項１に記載の方法を実行するコンピュータ実行可能命令を有することを特徴とする少なくとも１つのコンピュータ読取り可能媒体。
【請求項１０】
データ構造を格納しているコンピュータ読取り可能媒体であって、
ｓｅｔメソッドおよびｇｅｔメソッドを含むｓｅｔコンテナと、
前記ｓｅｔメソッドに関連付けられているデータをセキュリティクリティカルとして識別し、前記ｇｅｔメソッドに関連付けられているデータをノンセキュリティクリティカルとして識別する情報とを備え、
前記データは前記ｇｅｔメソッドを介して高いアクセス権を持たないコードによって読み取ることができ、前記データは前記ｓｅｔメソッドを介して高いアクセス権を持つコードによってしか設定することができないことを特徴とするコンピュータ読取り可能媒体。
【請求項１１】
前記データは、クリティカルリソースへのアクセスを提供する値を含むことを特徴とする請求項１０に記載のコンピュータ読取り可能媒体。
【請求項１２】
前記データは、アクセス権が他のコードによって高められるかどうかを示す値を含むことを特徴とする請求項１０に記載のコンピュータ読取り可能媒体。
【請求項１３】
高いアクセス権を持つコードから前記値を設定するよう要求を受け取るステップと、前記値を設定するステップとをさらに備えることを特徴とする請求項１０に記載のコンピュータ読取り可能媒体。
【請求項１４】
高いアクセス権を持たないコードから前記値を読み取るよう要求を受け取るステップと、前記値に対応するデータを返すステップとをさらに備えることを特徴とする請求項１０に記載のコンピュータ読取り可能媒体。
【請求項１５】
前記ｓｅｔコンテナは、ダウンロードされたコードが実行されるようにするプラットフォームコードにおいて実装され、分析ツールを介して前記プラットフォームコードを分析するステップをさらに備えることを特徴とする請求項１０に記載のコンピュータ読取り可能媒体。
【請求項１６】
データ構造を格納しているコンピュータ読取り可能媒体であって、
ｇｅｔメソッドを含むｇｅｔコンテナと、
前記ｇｅｔメソッドに関連付けられているデータがセキュリティクリティカルであることを示す情報とを備え、
前記データは、前記ｇｅｔメソッドを介して高いアクセス権を持つコードによってしか読み取ることができず、存在／初期化検査は高いアクセス権を持たないコードによって実行できることを特徴とするコンピュータ読取り可能媒体。
【請求項１７】
前記データは、クリティカルリソースへのアクセスを提供する値を含むことを特徴とする請求項１６に記載のコンピュータ読取り可能媒体。
【請求項１８】
高いアクセス権を持つコードから前記値を取得するよう要求を受け取るステップと、前記値に対応するデータを返すステップとをさらに備えることを特徴とする請求項１６に記載のコンピュータ読取り可能媒体。
【請求項１９】
前記ｓｅｔコンテナは、ダウンロードされたコードが実行されるようにするプラットフォームコードにおいて実装され、分析ツールを介して前記プラットフォームコードを分析するステップをさらに備えることを特徴とする請求項１６に記載のコンピュータ読取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にコンピュータシステムに関し、より具体的にはコンピュータシステムセキュリティに関する。
【背景技術】
【０００２】
本特許文献の開示の一部には、著作権保護の対象となる資料が含まれる。著作権所有者は、特許商標庁の特許ファイルまたは記録に掲載されているとおりの特許文献または特許情報開示のファクシミリ複製に異議を唱えないが、それ以外においてはすべての著作権を留保する。
【０００３】
現代のコンピューティングにおいて、コンピュータアプリケーションプログラムおよびその他のコードは、インターネットからダウンロードしてインストールすることができる。不明のソースまたは信頼できないソースからダウンロードをする場合、そのようなコードが意図的に悪質なものであったり、あるいは重要データに危害を加えたり重要データに無許可アクセスを行うことができる可能性も高い。しかし、コンピュータユーザがプロンプトを表示されることなくコードをダウンロードし、コードを実行できることで恩恵を受ける状況が数多くあるため、ダウンロードを完全に阻止することは、この問題の実際的な解決策ではない。
【０００４】
本件特許出願人の．ＮＥＴ技術に基づく環境のような一部の環境では、コードが行うことを許される事項を制限することにより、不明または信頼できないコードを実行してしまうこの問題を解決しようと試みている。例えば、基盤となるプラットフォームはその呼び出し側が特定のアクセス権を持つことを要求することができるので、コードは実行に必要なアクセス権を要求できるが、ランタイムはどの程度コードが信頼されるかを評価するポリシーに基づいて、そのコードにアクセス権を認めるだけである。そのようなアクセス権は、ファイルおよびデータベースへのアクセス、インターネットへの接続、ユーザインターフェースを介したユーザとのインタラクション、管理されていないコードの呼び出しなどを行う機能のようなものを含んでいる。コードがそのようなアクセス権を要求する場合にユーザにプロンプト表示することは、１つのポリシーベースの解決策ではあるが、通常のユーザはプロンプトが表示されたときに正しく安全な判断を下す態勢が整っているわけではないため、あまり望ましいとはいえない。
【０００５】
プロンプト表示をせずにアプリケーションをインターネットからダウンロードしてインストールできるようにするプラットフォームのための安全なコードを作成することは、極めて難しい問題である。これは、適切に動作するためにプラットフォーム自体が高められた特権を持つ必要があるためである。高い特権を持つ信頼できないコードを実行する内部方法を不注意に露呈させることにより、信頼できないコードが危険なオペレーションを実行できるようにプラットフォームコードの一部が作成されている場合、そこにはセキュリティの欠陥が存在する可能性がある。一例として、プラットフォームコードは、ウィンドウ上にテキストを提示するなど、システムサービスを操作するために管理されていないコードを呼び出すことができる必要があるが、信頼できないコードはこれを行うことを許されていない。しかし、信頼できないコードがプラットフォームコードの内部メソッドの呼び出しを介して管理されていないコードを呼び出すことができるように、不注意にプラットフォームコードが作成された場合、ここには、セキュリティの欠陥が存在する。
【０００６】
安全に作成されたプラットフォームコードにより、開発者が、実行に高いアクセス権を必要とするか、または高いアクセス権が実行されるかどうか制御するプラットフォームコードの任意の部分に（例えばメタデータを使用して）マーク付けすることができる可能性を高める１つの解決策とは、つまり、プラットフォームコードが危険なオペレーションを実行する「クリティカルな」コードであることをメタデータが示すことである。次に、セキュリティチームおよび静的コード分析ツール（例えば、ＦｘＣｏｐは．ＮＥＴ管理コードアセンブリを検査するそのようなコード分析ツールの１つである）はメタデータを認識し、それにより、高い特権で実行されているプラットフォームコードが信頼できないコードに露出される可能性が大幅に減少するようにプラットフォーム機能を開発することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、そのようなコードおよびデータをクリティカルとしてマーク付けすることは極めて有益であるが、コードを検討する必要のある多くのクリティカルなメソッドという負担をセキュリティチームに負わせる、複雑なコード検討プロセスをもたらす。必要とされているのは、クリティカリティを検討する必要のあるメソッドの数を減らすための安全な方法である。より単純に検討ができることは、プラットフォームコードのあらゆるセキュリティ問題が発見される可能性を高めるからである。
【課題を解決するための手段】
【０００８】
簡潔には、本発明は、データの存在／初期化の検査をクリティカルにすることなく、しかもタイプセーフない方法によってデータにアクセスできるようにして、「クリティカリティ」を記述するメタデータがクラスの任意のデータフィールドに添付されるシステムおよび方法を目的としている。さらに、高いアクセス権を制御するクリティカルデータの場合、データは、データ自体ではなくデータ値を設定するメソッドをクリティカルとしてマーク付けすることにより、ｓｅｔコンテナ内でクリティカルとして処理することができる。したがって、単に値を使用する（取得する）他のコードは、クリティカルである必要はない。その結果、検討される必要のあるプラットフォームコード内のクリティカルなメソッドおよびデータフィールドの数は、セキュリティを損なうことなく大幅に減らされる。
【０００９】
１つの実施形態において、汎用ベースのクラス（ここで汎用とはＣ＋＋テンプレートと類似した．ＮＥＴフレームワーク言語構造体である）は、クリティカルデータ用のコンテナを提供する。汎用クラスを使用することはつまり、クリティカルデータへのＧｅｔアクセスが、クリティカルとマーク付けされたクラスのプロパティを通じてのみ行うことができるということである。しかし、汎用クラスインスタンスを指す実際のフィールドは、クリティカルである必要はなく、そのため透過的な方法によってコードから安全に検査することができる。したがって、本発明は、クリティカルとして追跡されるデータのコンテンツへのアクセスを可能にするが、データの初期化または存在の検査はノンクリティカルのままである。
【００１０】
この目的のために、本発明は「Ｇｅｔ」コンテナを提供し、これを介して（例えばクリティカルリソースのファイルハンドルなど、データがクリティカルリソースへのアクセスを提供する場合のように）クリティカルデータがアクセスされる。コンテナ内のデータの値を取り出すためのｇｅｔメソッドは、これがセキュリティクリティカルであることを示すメタデータでマーク付けされ、これにより、信頼できないコードによるそのデータへのアクセスを可能にするプログラムの欠陥があるかどうかを静的分析ツールが検出する。しかし、ｇｅｔメソッドがマーク付けされているため、検査自体がクリティカルになることなく、データは存在／初期化（例えばヌルチェックが行われる）を検査される。その結果、検査するコードはクリティカルとしてマーク付けされる必要はなくなり、セキュリティの検討を必要とするプラットフォームコードの量を大幅に減少させる。
【００１１】
本発明はさらに、「Ｓｅｔ」コンテナも提供し、コードがアクセス権を高めるかどうかを指示するためにブールまたはその他の変数が使用されている状況を処理する。そのようなデータはコードがアクセス権を高めるかどうかを制御するので、データを設定することはクリティカルとなり、それ以外の場合は信頼できないコードからの呼び出しはアクセス許可を高めることができる。値が適切に設定されたならば実際にアクセス許可を高めるコードなど、ｓｅｔメソッドを呼び出さない他のコードは、（例えばｇｅｔメソッドを介して）値を取得する必要があるだけであり、このためクリティカルコードである必要はない。Ｓｅｔコンテナの結果として、プラットフォームコード内のクリティカルメソッドの数も、大幅に減らされる。
【００１２】
その他の利点は、付属の図と併せて以下の詳細な説明を読めば明らかになろう。
【発明を実施するための最良の形態】
【００１３】
図１は、本発明を実装できる適切なコンピューティングシステム環境１００の実施例を示している。コンピューティングシステム環境１００は、適切なコンピューティング環境の一例に過ぎず、本発明の使用の範囲または機能にいかなる制限を提案することも意図するものではない。さらに、コンピューティング環境１００は、模範的なオペレーティング環境１００に示された１つのコンポーネントまたはその組合せに関して依存関係または必要条件を有するものと解釈すべきではない。
【００１４】
本発明は、数多くの他の一般的な用途もしくは特殊用途のコンピュータシステム環境または構成により動作可能である。本発明と共に使用するために最適な既知のコンピュータシステム、環境、および／または構成の例としては、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップ装置、タブレット装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、セットトップボックス、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピューティング環境などがあげられるが、これらに限定されることはない。
【００１５】
本発明は、コンピュータによって実行されるプログラムモジュールなど、コンピュータ実行可能命令の一般的な文脈に即して説明することができる。一般に、プログラムモジュールには、特定のタスクを実行するかまたは特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。本発明はさらに、タスクが通信ネットワークを通じてリンクされたリモート処理装置によって実行される分散コンピューティング環境においても実施することができる。分散コンピューティング環境において、プログラムモジュールは、メモリ記憶装置を含むローカルおよび／またはリモートのコンピュータストレージ媒体に配置される。
【００１６】
図１を参照すると、本発明を実装するための模範的なシステムは、コンピュータ１１０の形態の汎用コンピュータ装置を含んでいる。コンピュータ１１０のコンポーネントは、処理装置１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステムコンポーネントを処理装置１２０に接続するシステムバス１２１を含むことができる。システムバス１２１は、メモリバスまたはメモリコントローラ、周辺バス、および様々なバスアーキテクチャのいずれかを使用するローカルバスを含む、任意の複数のタイプのバス構造であってもよい。限定的ではなく例示的に、そのようなアーキテクチャには、ＩＳＡバス、ＭＣＡバス、ＥＩＳＡバス、ＶＥＳＡローカルバス、およびメザニンバスとも呼ばれるＰＣＩバスが含まれている。
【００１７】
コンピュータ１１０は通常、各種のコンピュータ読取り可能媒体を含んでいる。コンピュータ読取り可能媒体は、コンピュータ１１０がアクセスでき、揮発性および不揮発性媒体、取り外し可能および固定式の媒体を含む任意の使用可能な媒体であってもよい。一例として、コンピュータ読取り可能媒体は、コンピュータ記憶媒体および通信媒体を備えることができるが、これらに限定されることはない。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュールおよびその他のデータなどの情報のストレージのための任意の方法または技術において実装された揮発性および不揮発性の、取り外し可能および固定式の媒体を含んでいる。コンピュータストレージ媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリその他のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤその他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージその他の磁気記憶装置、あるいは所望の情報を格納するために使用することができ、コンピュータ１１０によってアクセスすることができる他の媒体を含んでいるが、これらに限定されることはない。通信媒体は通常、コンピュータ可読命令、データ構造、プログラムモジュール、またはその他のデータを搬送波などの搬送メカニズムのような変調データ信号で組み入れ、任意の情報伝達媒体を含んでいる。「変調データ信号」という用語は、情報をコード化するような方法によって、１つまたは複数の特性セットを設定されまたは変更された信号を意味する。例えば、通信媒体は、有線ネットワークまたは直接配線接続のような有線媒体、および音響、ＲＦ、赤外線など無線媒体を含んでいるが、これらに限定されることはない。上記の任意の組合せも、コンピュータ読取り可能媒体の範囲に含まれる。
【００１８】
システムメモリ１３０は、読み取り専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２のような揮発性メモリおよび／または不揮発性メモリの形態でコンピュータ記憶媒体を含んでいる。起動時などにコンピュータ１１０内の構成要素間の情報の転送を助ける基本ルーチンを含むＢＩＯＳ（基本入出力システム）１３３は通常、ＲＯＭ１３１に格納される。ＲＡＭ１３２は通常、処理装置１２０によって即時アクセス可能および／または現在操作中のデータおよび／またはプログラムモジュールを含んでいる。限定的ではなく例示的に、図１では、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７を示している。
【００１９】
コンピュータ１１０は、他の取り外し可能／固定式、揮発性／不揮発性のコンピュータ記憶媒体を含めることもできる。ほんの一例として、図１では、固定の不揮発性磁気媒体との間の読み取りまたは書き込みを行うハードディスクドライブ１４１、取り外し可能の不揮発性磁気ディスク１５２との間の読み取りまたは書き込みを行う磁気ディスクドライブ１５１、およびＣＤ−ＲＯＭその他の光媒体などの取り外し可能の不揮発性光ディスク１５６との間の読み取りまたは書き込みを行う光ディスクドライブ１５５を示している。模範的なオペレーティング環境において使用することができる他の取り外し可能／固定式、揮発性／不揮発性コンピュータ記憶媒体は、磁気テープカセット、フラッシュメモリカード、ＤＶＤ、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどを含むが、これらに限定されることはない。ハードディスクドライブ１４１は通常、インターフェース１４０などの固定式メモリインターフェースを通じてシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は通常、インターフェース１５０などの取り外し可能メモリインターフェースによってシステムバス１２１に接続される。
【００２０】
図１に示されている前述のドライブおよびその関連付けられたコンピュータ記憶媒体は、コンピュータ１１０のコンピュータ可読命令、データ構造、プログラムモジュール、およびその他のデータのストレージを提供する。例えば、図１において、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７を格納するように示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、その他のプログラムモジュール１３６、およびプログラムデータ１３７と同じにすることも、または異なるものにすることもできることに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、その他のプログラムモジュール１４６、およびプログラムデータ１４７は、少なくともそれらが異なるコピーであることを示すために本明細書において異なる番号を付けてある。ユーザは、タブレットまたは電子デジタイザ１６４、マイクロフォン１６３、キーボード１６２および一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス１６１などの入力装置を介してコンピュータ１１０にコマンドおよび情報を入力することができる。図１に図示されていない他の入力装置としては、ジョイスティック、ゲームパッド、衛星放送用パラボラアンテナ、スキャナなどを含むことができる。上記およびその他の入力装置は、システムバスに接続されているユーザ入力インターフェース１６０を介して処理装置１２０に接続されることが多いが、パラレルポート、ゲームポート、またはＵＳＢなど他のインターフェースおよびバス構造によって接続することもできる。モニタ１９１またはその他の種類の表示装置も、ビデオインターフェース１９０などのインターフェースを介してシステムバス１２１に接続することができる。モニタ１９１はさらに、タッチスクリーンパネルなどと統合することができる。モニタおよび／またはタッチスクリーンパネルは、タブレットタイプのパーソナルコンピュータの場合のように、コンピューティング装置１１０が組み込まれるハウジングに物理的に結合できることに留意されたい。さらに、コンピューティング装置１１０のようなコンピュータは、出力周辺インターフェース１９４などを介して接続できるスピーカ１９５およびプリンタ１９６などの他の周辺出力装置を含むこともできる。
【００２１】
コンピュータ１１０は、リモートコンピュータ１８０など、１つまたは複数のリモートコンピュータへの論理接続を使用するネットワーク化された環境において動作することができる。リモートコンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたはその他の共通ネットワークノードであってもよく、通常は上記でパーソナルコンピュータ１１０に関連して説明されている要素の多くまたはすべてを含んでいるが、図１においては記憶装置１８１のみが示されている。図１に示されている論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１およびワイドエリアネットワーク（ＷＡＮ）１７３を含んでいるが、他のネットワークを含むこともできる。そのようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットで一般化している。
【００２２】
ＬＡＮネットワーク環境に使用される場合、コンピュータ１１０はネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境に使用される場合、コンピュータ１１０は通常、モデム１７２またはインターネットなどのＷＡＮ１７３にわたる通信を確立するための他の手段を含んでいる。モデム１７２は、内蔵または外付けであってもよく、ユーザ入力インターフェース１６０または他の適切なメカニズムを介してシステムバス１２１に接続することができる。ネットワーク化された環境において、コンピュータ１１０に関連して示されるプログラムモジュール、またはその部分は、リモート記憶装置に格納することもできる。限定的ではなく例示的に、図１では、リモートアプリケーションプログラム１８５をメモリ素子１８１に常駐するものとして示している。示されているネットワーク接続が模範的なものであり、コンピュータ間の通信リンクを確立する他の手段も使用できることを理解されたい。
【００２３】
セキュリティクリティカルデータコンテナ
本発明は一般に、クリティカルにすべきデータの存在／初期化の検査を行うことなく、「クリティカリティ」を記述するメタデータがデータに添付されるシステムおよび方法を目的としている。本発明は主として、プラットフォームコードで用いるＣ＃サンプルコードを使用して汎用（Ｃ＋＋テンプレートと類似した．ＮＥＴフレームワーク言語構造体）クラスコンテナを参照して説明されることが理解されよう。これらは唯一の例であるが、本発明は、．ＮＥＴ、Ｃ＃、プラットフォームコードまたは本明細書に示される例に限定されることはない。本発明を実装する多数の方法は代替方法として実行可能であり、そのようなものとして、本発明は本明細書に使用される特定の例のいずれにも限定されるのではなく、一般にコンピューティングにおいて便宜および利点をもたらす様々な方法に使用することができる。
【００２４】
図２Ａおよび図２Ｂは、信頼できないコードを含む他のコードによって呼び出すことのできる内部メソッドと共に、様々なオブジェクト２０４〜２０８を備えるプラットフォームコード２０２を示している。オブジェクト２０５を介して表されるように、一部のコードはノンクリティカルであり、一方オブジェクト２０４および２０６〜２０８を介して表されるように、その他のコードはセキュリティクリティカルである。意図せずして、ノンクリティカルコード２０５への呼び出しが次にオブジェクト２０８のコードのサブセットなどのセキュリティクリティカルコードを呼び出せるようにすることによってなど、内部メソッドが直接または間接的にクリティカリティルールに違反する方法があってはならないことは、容易に理解されよう。
【００２５】
本発明の態様によれば、クリティカルデータのためのコンテナが提供され、そこでメソッドが呼び出し側に要求されている内容に応じてデータをクリティカルにするかどうか選択的に制御する。そのようなコンテナの１つは、ｇｅｔコンテナであり、クリティカルとマーク付けされるｇｅｔメソッドを含んでいる。それによりコードは、信頼できないコードがデータ値を取得する方法がないように検査される。
【００２６】
具体的には、Ｇｅｔコンテナの汎用クラスを使用することにより、クリティカルデータへのアクセスは、クリティカルとマーク付けされたクラスのプロパティを通じてのみ行うことができる。しかし、汎用クラスインスタンスを指す実際のフィールドはクリティカルである必要はなく、データの存在／初期化はノンクリティカルな方法で、つまりアプリケーションプログラムのアクセス権で実行するコードによって、コードから安全に検査することができる。したがって、本発明は、データの初期化または存在の検査をノンクリティカルにしながら、クリティカルとして追跡されるデータのコンテンツへのアクセスを可能にする。
【００２７】
一例として、クリティカルなリソースにアクセスを提供するデータなどの、クリティカルデータを考察する。信頼できないプログラムがこのデータを取得できる場合、クリティカリティのルールに違反する。しかし、データをクリティカルとしてマーク付けすることは、クリティカルデータを含むすべてのオペレーションもクリティカルにする必要があることを分析ツールが要求することを意味し、他のオペレーションがデータそのものを要求していない場合であっても複雑さが増すが、それでもデータが存在するかどうかを検査する（例えばヌルチェック）だけである。本発明のクリティカルコンテナを使用せずに値を取得する以下のサンプルコードを考察する。以下に示すように、変数バーがクリティカルであるため、ヌルチェックもクリティカルである。
【００２８】
【表１】
2006216038.tif 000003
【００２９】
本発明のコンテナは、Ｇｅｔ要求およびデータに関連するその他の要求を区別する方法を提供する。（図２Ａでオブジェクト２０６によって表されている）Ｇｅｔクラスの実装を例示する、Ｇｅｔコンテナにおける以下のサンプルコード（Ｃ＃）を考察する。
【００３０】
【表２】
2006216038.tif 000004
【００３１】
図示されているように、コンテナ内のＧｅｔメソッドは、データ（＿ｖａｌｕｅ）を取得することはセキュリティクリティカルであることを示すメタデータでマーク付けされ（［ＳｅｃｕｒｉｔｙＣｒｉｔｉｃａｌ］タグ）、これにより、静的分析ツールは、信頼できないコードによるそのデータへのアクセスを可能にする欠陥があるかどうかを検出する。したがって、前述のファイルハンドル例において、分析ツールは、高い特権を備える信頼できるコードのみがファイルハンドルの値を取得できることを検査する。
【００３２】
（図２Ａでブロック２１０によって表される）宣言は以下のとおりである。
【００３３】
【表３】
2006216038.tif 000005
【００３４】
（図２Ａでブロック２１２によって表される）初期化は以下のとおりである。
【００３５】
【表４】
2006216038.tif 000006
【００３６】
（図２Ａでブロック２１４によって表される）クリティカルデータに到達する使用法は以下のとおりである。
【００３７】
【表５】
2006216038.tif 000007
【００３８】
Ｇｅｔメソッドはデータ（値）ではなくセキュリティクリティカルとしてマーク付けされているため、データは検査自体がクリティカルになることなく、存在／初期化（例えばヌルチェックが行われる）を検査される。クリティカルとマーク付けされるメソッドの数が減少することによって、セキュリティの検討を必要とするプラットフォームコードの量を、大幅に減少させる。以下の例では、（図２Ａでブロック２１６および２１７によって表される）ヌルの検査を行う。
【００３９】
【表６】
2006216038.tif 000008
【００４０】
本発明のもう１つの態様によれば、コードがアクセス権を高めるかどうかを指示するためにブールまたはその他の変数が使用されている状況を処理するように、「Ｓｅｔ」コンテナが提供される。そのようなデータの値はコードがアクセス権を高めるかどうかを制御するので、データを設定することはクリティカルになる。ｓｅｔメソッドを呼び出さない他のコード（例えばｒｅａｄメソッド）は、値を変更できないので、クリティカルではない。Ｓｅｔコンテナの結果として、プラットフォームコード内のクリティカルメソッドの数も、大幅に減らされる。
【００４１】
例を比較することにより、本発明のクリティカルコンテナを使用せずにクリティカル値を設定することを考察する。以下に示すように、読み取りはクリティカルである。
【００４２】
【表７】
2006216038.tif 000009
【００４３】
本発明のクリティカルコンテナの態様によれば、代わりにＳｅｔコンテナＳｅｃｕｒｉｔｙＣｒｉｔｉｃａｌＤａｔａＳｅｔｔｅｒ（ＳＣＤＳ、図２Ｂでオブジェクト２０８によって表される）の以下のサンプルコードを考察する。
【００４４】
【表８】
2006216038.tif 000010
【００４５】
このコードは、セキュリティクリティカルと見なされる値を設定するメソッドを含むことに留意されたい。その結果、ｓｅｔメソッドは、［ＳｅｃｕｒｉｔｙＣｒｉｔｉｃａｌ］メタデータでタグ付けされる。
【００４６】
（図２Ｂでブロック２２０によって表される）ＳｅｃｕｒｉｔｙＣｒｉｔｉｃａｌＤａｔａＳｅｔｔｅｒの宣言は以下のとおりである。
【００４７】
【表９】
2006216038.tif 000011
【００４８】
（図２Ｂでブロック２２２によって表される）初期化では、初期化により＿ｉｓＷｉｎｄｏｗｓＦｏｎｔの値が設定され、そのためセキュリティクリティカルであることに留意されたい。これにより、信頼できないコードは、インストールされているＷｉｎｄｏｗｓ（登録商標）ベースのフォント以外を使用することができない。
【００４９】
【表１０】
2006216038.tif 000012
【００５０】
図２Ｂでブロック２２４によって表されるように、他のプラットフォームコードは＿ｉｓＷｉｎｄｏｗｓＦｏｎｔの値を設定できることに留意されたい。そのようなコードもまた、セキュリティクリティカルのマーク付けをする必要がある。
【００５１】
＿ｉｓＷｉｎｄｏｗｓＦｏｎｔの値を読み取る（取得する）ことはクリティカルとは見なされず、そのためオブジェクトのｇｅｔメソッドの使用はセキュリティクリティカルメタデータを含まないコードによって達成することができる（図２Ｂのブロック２２６および２２７によって表される）。
【００５２】
【表１１】
2006216038.tif 000013
【００５３】
図３は、データへのメソッドを介するアクセスがセキュリティクリティカルメタデータタグを介して制限される場合に、セキュリティクリティカルコードだけがセキュリティクリティカルデータコンテナ内のデータを使用できるようにするためプラットフォームコード２０２を評価する分析ツール３３０を示している。結果３３２は、セキュリティチームおよび／または開発者によって検討され、コード内の欠陥を除去することができる。
【００５４】
図４は、信頼できないコード４４０と共に稼働するコンパイル済みプラットフォーム４０２を示している。本発明のクリティカルコンテナの態様によれば、開発者がクリティカルデータをＧｅｔまたはＳｅｔコンテナに適切に配置したとすれば、信頼できないコード４４０は安全に収容されているデータに不正にアクセスして危険なオペレーションを実行することはできなくなる。例えば、コード、データおよび／またはメソッドがクリティカルな場合を指示するコンパイル済みコード４０２と共に属性等を保持することによって、危険なオペレーションの実行時検査を行うことが可能であることに留意されたい。
【００５５】
前述の詳細な説明から明らかなように、データのクリティカルな使用に対してデータに原則的にセキュリティクリティカルとマーク付けし、ノンクリティカルな使用にはマーク付けしないようにできるＧｅｔコンテナおよびＳｅｔコンテナが提供される。これは、使用とは無関係に全体としてデータにマーク付けするのではなく、コンテナ内の個々のメソッドにマーク付けすることにより達成される。したがって本発明は、検討を必要とするプラットフォームコードの量を減らし、プラットフォームコードにおいてセキュリティ問題が発見される可能性を高める。
【００５６】
本発明には、様々な変更および代替的な構成が可能であるが、その特定の説明されている実施形態は、図に示され詳細に説明されている。ただし、本発明を開示されている特定の形態に限定する意図はなく、むしろ、本発明の精神および範囲に含まれるすべての変更、代替構造、および等価物を網羅することを意図している。
【図面の簡単な説明】
【００５７】
【図１】本発明を組み込むことができるコンピューティング環境を一般的に示すブロック図である。
【図２Ａ】本発明の様々な態様によるｓｅｔおよびｇｅｔコンテナを含むプラットフォームコードを示す図である。
【図２Ｂ】本発明の様々な態様によるｓｅｔおよびｇｅｔコンテナを含むプラットフォームコードを示す図である。
【図３】本発明の様々な態様によるセキュリティクリティカルデータコンテナでプラットフォームコードを分析するコード分析ツールを示すブロック図である。
【図４】本発明の様々な態様によるセキュリティクリティカルデータコンテナを有するコードに基づいてコンパイル済みプラットフォームコードで実行する信頼できないコードを示すブロック図である。
【符号の説明】
【００５８】
１１０  コンピュータ
１４１  ハードディスクドライブ
１５１  磁気ディスクドライブ
１５５  光ディスクドライブ
【図１】
2006216038.tif 000014
【図２Ａ】
2006216038.tif 000015
【図２Ｂ】
2006216038.tif 000016
【図３】
2006216038.tif 000017
【図４】
2006216038.tif 000018