(57)【要約】セキュアなファームウェア格納及びサービスアクセスを提供する方法及び装置を提供する。１つの例示的な方法は、プレブート環境で命令を実行する要求を受け取ること、命令の身元を特定すること、アクセス制御リストが命令に対応するエントリを含むか否かを判断すること、及び、アクセス制御リストが命令に対応するエントリを含む場合、命令の実行を選択的に許可することを含んでもよい。
2006526219.tif 000002
【特許請求の範囲】
【請求項１】
プレブート環境で命令を実行する要求を受け取ること、
前記命令の身元（identity）を特定すること、
アクセス制御リストが前記命令に対応するエントリを含むか否かを判断すること、及び
前記アクセス制御リストが前記命令に対応するエントリを含む場合、該命令の実行を選択的に許可すること
を含む、実行資源へのアクセスを制御する方法。
【請求項２】
前記アクセス制御リストにおける署名が前記命令の署名と一致する場合に、該命令の実行を許可することをさらに含む、請求項１に記載の実行資源へのアクセスを制御する方法。
【請求項３】
前記命令が署名されている場合に、前記アクセス制御リストが該命令に対応するエントリを含まない場合、該命令の実行を選択的に許可することを含む、請求項１に記載の実行資源へのアクセスを制御する方法。
【請求項４】
前記命令は、サービスコールによって実行されることが要求される、請求項１に記載の実行資源へのアクセスを制御する方法。
【請求項５】
前記命令によって使用され得るシステム資源を、前記アクセス制御リストから確定することを含む、請求項４に記載の実行資源へのアクセスを制御する方法。
【請求項６】
前記サービスコールを実行しているエンティティの身元を特定することを含む、請求項４に記載の実行資源へのアクセスを制御する方法。
【請求項７】
実行される前記命令がメモリの事前定義されたエリア内にあるか否かを判断することを含む、請求項４に記載の実行資源へのアクセスを制御する方法。
【請求項８】
前記命令は、セキュアブートを指示するオペレーティングシステムローダであり、前記アクセス制御リストが前記命令に対応するエントリを含まない場合、リカバリ動作モードに入る、請求項１に記載の実行資源へのアクセスを制御する方法。
【請求項９】
実行されると、機器に対し、
プレブート環境で命令を実行する要求を受け取らせ、
前記命令の身元を特定させ、
アクセス制御リストが前記命令に対応するエントリを含むか否かを判断させ、
前記アクセス制御リストが前記命令に対応するエントリを含む場合、該命令の実行を選択的に許可させる複数の機器アクセス可能命令を有する機器アクセス可能媒体を具備する工業製品。
【請求項１０】
前記複数の機器アクセス可能命令は、実行されると、機器に対し、前記アクセス制御リストにおける署名が前記命令の署名と一致する場合に、該命令の実行を許可させる、請求項９に記載の機器アクセス可能媒体。
【請求項１１】
前記複数の機器アクセス可能命令は、実行されると、機器に対し、前記命令が署名されている場合に前記アクセス制御リストが該命令に対応するエントリを含まない場合、該命令の実行を選択的に許可させる、請求項９に記載の機器アクセス可能媒体。
【請求項１２】
前記命令は、サービスコールによって実行されることが要求される、請求項９に記載の機器アクセス可能媒体。
【請求項１３】
前記複数の機器アクセス可能命令は、実行されると、機器に対し、前記命令によって使用され得るシステム資源を、前記アクセス制御リストから確定させる、請求項９に記載の機器アクセス可能媒体。
【請求項１４】
前記複数の機器アクセス可能命令は、実行されると、機器に対し、前記サービスコールを実行しているエンティティの身元を特定させる、請求項１３に記載の機器アクセス可能媒体。
【請求項１５】
前記複数の機器アクセス可能命令は、実行されると、機器に対し、実行される前記命令がメモリの事前定義されたエリア内にあるか否かを判断させる、請求項１３に記載の機器アクセス可能媒体。
【請求項１６】
前記命令は、セキュアブートを指示するオペレーティングシステムローダであり、前記アクセス制御リストが前記命令に対応するエントリを含まない場合、リカバリ動作モードに入る、請求項９に記載の機器アクセス可能媒体。
【請求項１７】
コードを実行するように構成される実行環境と、
実行される命令と、
前記実行環境に結合され、且つプレブート環境で前記命令を実行する要求を受け取るプラットフォームセキュリティユニットであって、前記命令の身元を特定し、アクセス制御リストが該命令に対応するエントリを含むか否かを判断し、該アクセス制御リストが該命令に対応するエントリを含む場合、前記実行環境による該命令の実行を選択的に許可するように構成されるプラットフォームセキュリティユニットと、
を具備するシステム。
【請求項１８】
前記プラットフォームセキュリティユニットは、前記アクセス制御リストにおける署名が前記命令の署名と一致する場合に、前記実行環境による該命令の実行を許可する、請求項１７に記載のシステム。
【請求項１９】
前記プラットフォームセキュリティユニットは、前記命令が署名されている場合に、前記アクセス制御リストが該命令に対応するエントリを含まない場合、前記実行環境による該命令の実行を選択的に許可する、請求項１７に記載のシステム。
【請求項２０】
前記命令は、サービスコールによって実行されることが要求される、請求項１７に記載のシステム。
【請求項２１】
前記プラットフォームセキュリティユニットは、前記命令によって使用され得るシステム資源を、前記アクセス制御リストから確定する、請求項２０に記載のシステム。
【請求項２２】
前記プラットフォームセキュリティユニットは、前記サービスコールを実行しているエンティティの身元を特定する、請求項２０に記載のシステム。
【請求項２３】
前記プラットフォームセキュリティユニットは、実行される前記命令がメモリの事前定義されたエリア内にあるか否かを判断する、請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ファームウェアに関し、特に、セキュアなファームウェア格納及びサービスアクセスを提供する方法及び装置に関する。
【背景技術】
【０００２】
コンピューティングシステムは、ソフトウェア又はファームウェアが実行されるプロセッサ等のハードウェアを含む。プロセッサは、起動されるか又はリセット信号を受け取ると、ブートシーケンスを実行して、その間、ファームウェアの多数の命令がプレブート環境（すなわち、オペレーティングシステム（ＯＳ）がロードされていない環境）で実行される。
【０００３】
コンピューティングシステムが発展するに伴い、プレブート環境は、サービスが限定された粗野なインタフェースから、ファームウェアコンポーネントがモジュール式である標準ベースのインタフェースまで進歩した。このようなファームウェア構成の一例は、拡張可能ファームウェアインタフェース（extensible firmware interface）（ＥＦＩ）であり、これは、さまざまなシステムエンティティが実行を要求する、サービスを呼び出す等のために呼び出すことができる、豊富な異種のサービスセットを提供する。たとえば、ＥＦＩは、さまざまなサービスが呼び出され得るようにそれらサービスが存在するアドレスを発行するシステムテーブルを通して利用可能となるコアサービスのセットを含む。さらに、ＥＦＩは、グローバル一意識別子（global unique identifier）（ＧＵＩＤ）／ポインタペアを介して、プロトコル等のインタフェースをインストールする機能を含む。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
インタフェースの追加を可能にする、ＥＦＩ等の最近のファームウェアの拡張性と、ほとんどのファームウェアシステムで変数記憶領域及びファイルシステムが保護されないままであるという事実とにより、最近のファームウェアは、ウィルス等からのセキュリティ攻撃を受けやすい状態になっている。たとえば、システムテーブルに列挙されている呼出し可能なインタフェースのフラットな名前空間が露出することにより、さまざまな実行可能エンティティ間で信頼関係を確立することに対し新たな問題が発生する。特に、既知のプレブートファームウェア環境は、認証（すなわち、サービスを要求しているエンティティの身元を確認すること）も認可（すなわち、サービス要求者の権利を確定すること）も実行しない。
【発明を実施するための最良の形態】
【０００５】
以下は、他のコンポーネントもあるが特に、ハードウェアで実行されるソフトウェア又はファームウェアを含むシステム例を開示する。このようなシステムは単に例示的なものであり、限定するものとしてみなすべきではない、ということに留意すべきである。たとえば、これらのハードウェア、ファームウェア及び／又はソフトウェアコンポーネントのうち任意のもの、又はすべてを、専用ハードウェアにおいて排他的に、ソフトウェアにおいて排他的に、ファームウェアにおいて排他的に、又はハードウェア、ファームウェア及び／又はソフトウェアの何らかの組合せで具現化することができる、と考えられる。したがって、以下はシステム例について説明するが、当業者は、それら例がこのようなシステムを実施する唯一の方法ではないということを容易に理解するであろう。
【０００６】
図１の例に示すように、セキュアファームウェア格納及びサービスアクセスシステム１００は、サービス要求、及び／又はプラットフォームセキュリティユニット１０４を介してコードを実行環境１０６にロードする要求を実行するエンティティ及び／又はコード１０２を含む。一般に、以前は、エンティティ及び／又はコード１０２によって提出される、サービスに対する要求は、そのサービスに対する要求が実行される実行環境１０６に直接ルーティングされていた。対照的に、開示するシステム１００では、エンティティ及びコードは、それらの所望のタスクを実行する認可を受けるべく、プラットフォームセキュリティユニット１０４に対してサービスに対する要求を実行するようにインストルメントされる。たとえば、ＥＦＩ１．０２のＬｏａｄＩｍａｇｅ（）サービスは、フラッシュメモリ、ローカルディスクパーティション又はネットワークブートサーバにドライバ又はアプリケーション（すなわち、より一般的にはコード）が発見されると、プラットフォームセキュリティユニット１０４を参照するようにインストルメントされる。さらに、既知のエンティティが、ＥＦＩ１．１０サービスＯｐｅｎＰｒｏｔｏｃｏｌ（）又はＥＦＩ１．０２サービスＨａｎｄｌｅＰｒｏｔｏｃｏｌ（）を通してサービスの位置を特定しようと試みる場合、セキュリティプラットフォームユニット１０４は、参照されたプロトコルを実行することが認可されているか否かを判断する。さらなる例として、後述するように、プラットフォームセキュリティユニット１０４に、プラットフォームセキュリティユニット１０４内に格納されているＲｕｎｔｉｍｅＳｅｒｖｉｃｅｓＭａｓｋのＧｅｔＮｅｘｔＶａｒｉａｂｌｅ（）及びＳｅｔＶａｒｉａｂｌｅ（）サービスを指定することにより変数を固定してもよい。上述したサービスを、認証及び認可のためにプラットフォームセキュリティユニット１０４にアクセスするように命令されるサービス、エンティティ及び／又はコードの例として列挙したが、上記例は単に例示的なものであるということを留意すべきである。たとえば、ＥＦＩ及び／又は他の任意のインタフェース内のすべてのコアサービスが、プラットフォームセキュリティユニット１０４に認可判定を行わせてもよい。
【０００７】
後に詳細に説明するように、プラットフォームセキュリティユニット１０４は、サービスを要求しているエンティティの身元及び／又はロードされるように要求されたコードの身元を特定し（認証）、要求者又はロードされるコードが認可されている権利を特定する（認可）。特に、実行されるコードは、その公開鍵、イメージのＳＨＡ−１ハッシュ、加工された（salted）パスワード、又はそのコードを一意に識別する他の任意の識別子であってもよい、Ｋｏｂｊｅｃｔ（Ｋｏｂｊ）を有する。プラットフォームセキュリティユニット１０４内には、Ｋの計算が「何を」必要とするかと、その計算をいかに実行するかの説明とを記述する一覧表がある。ここではＫｏｗｎｅｒと呼ぶシステム管理者は、プレブート又はランタイムマスクによって定義される、何のコードオブジェクト（Ｋｏｂｊ）を実行することができるか、また実行後に各Ｋｏｂｊが何の許可を受けるかに関するプラットフォームをプロビジョン（提供）する。たとえば、Ｋｏｂｊが認証され実行される場合、Ｋｏｂｊは、そのＫｏｂｊの許可と一貫するタスクしか実行することができない。別法として、Ｋｏｂｊが未知であり（すなわち、Ｋｏｂｊのデータベースに列挙されておらず、したがって認証されない）場合、Ｋｏｂｊはロードも実行もされず、拒否された実行資源に対するＫｏｂｊの要求がログに記録される。
【０００８】
図２に示すように、一例では、プラットフォームセキュリティユニット１０４を、アクセス制御リスト２０４に結合された認証ユニット２０２によって実施してもよく、アクセス制御ユニット２０４は、識別情報２０６と、識別情報２０６に列挙されたエンティティに対応する許容挙動２０８とを含んでもよい。アクセス制御リスト２０４を、アクセス制御リストエディタを含むローカルにホストされた管理インタフェースを介して編集してもよく、又はセキュア転送及び遠隔コンソールを使用してネットワークを越えて編集してもよい。
【０００９】
図５に関して後に詳細に説明するように、特定のシステムにおけるさまざまなエンティティを、識別情報２０６及び許容挙動２０８を格納するデータベースに含まれる情報の関係を決める命名規則に従って命名してもよい。簡単に言えば、識別情報２０６は、たとえば、イーサネット（登録商標）ＭＡＣアドレス、加工されたパスワード、公開鍵、インターネットプロトコル（ＩＰ）アドレス、対称鍵、ポータブル実行可能（portable executable）（ＰＥ）ファイル（たとえば、http://www.microsoft.com/whdc/hwdev/hardware/pecoff.mspxにおいて定義される）のＳＨＡ−１ハッシュ、又は他の任意の、適当な一意の識別情報であってもよい。
【００１０】
ＥＦＩシステムでは、識別情報に対応する許容挙動２０８を、インテル・コーポレーション（Intel Corporation）から入手可能な２０００年１２月１２日に発行されたExtensible Firmware Interface（ＥＦＩ）仕様書、第１．０２版の第３章に定義されている、ブートサービス及びランタイムサービスビットマスクによって表してもよい。さらに、許容挙動２０８は、呼び出すことができるプロトコル又はサービスの恐らくは空リストを含んでもよい。
【００１１】
一般に、動作中、認証ユニット２０２は、エンティティからサービスに対する要求を受け取り、要求側エンティティを識別する。エンティティが識別された後、識別されたエンティティに対応するエントリがあるか識別情報２０６がスキャンされる。識別情報２０６に、識別されたエンティティのエントリが見つかると、許容挙動２０８のエンティティに対し利用可能なサービスのビットマスクが見つかる。ビットマスクによって許可される場合、要求された挙動を実行してもよい。別法として、識別情報２０６にエントリが見つからない場合、要求に対しその要求されたサービスを拒否してもよい。別法として、後にさらに詳細に説明するように、要求の種類に応じて限定された方法で要求を処理してもよい。
【００１２】
上述した説明は、図１のプラットフォームセキュリティユニット１０４を形成するブロックに関連するものとしてさまざまな機能について述べているが、プラットフォームセキュリティユニット１０４の機能を、１つ又は複数のプロセッサシステムによって実行されるソフトウェア又はファームウェアによって実施してもよい。一例では、図３に示すもの等の一例としてのプロセッサシステム３００を使用して、１つ又は複数のプロセスを実施することにより、プラットフォームセキュリティユニットを形成してもよい。プラットフォームセキュリティを提供するためにプロセッサシステムとともに使用してもよい命令、データ構造等に関するさらなる詳細については、一例としてのプロセッサシステム３００の説明に続いて後述する。
【００１３】
一例としてのプロセッサシステム３００は、ランダムアクセスメモリ（ＲＡＭ）３０６、リードオンリメモリ（ＲＯＭ）３０８及びフラッシュメモリ３１０等の関連するメモリ３０４を有するプロセッサ３０２を含む。プロセッサ３０２は、他のコンポーネントがインタフェースされてもよいバス３１２等のインタフェースに結合される。図示する例では、バス３１２にインタフェースされるコンポーネントには、入力デバイス３１４、ディスプレイデバイス３１６、大容量記憶デバイス３１８及び取外し可能記憶デバイスドライブ３２０がある。取外し可能記憶デバイスドライブ３２０は、磁気又は光媒体等の関連する取外し可能記憶媒体３２２を含んでもよい。
【００１４】
一例としてのプロセッサシステム３００は、たとえば、従来のデスクトップパーソナルコンピュータ、ノートブックコンピュータ、ワークステーション又は他の任意のコンピューティングデバイスであってもよい。さらに、一例としてのプロセッサシステム３００を、デジタル信号プロセッサ（ＤＳＰ）ベースのアーキテクチャを使用して実施してもよい。ＤＳＰベースのアーキテクチャでは、バスにインタフェースされたコンポーネントのうちのいくつかをなくしてもよい。
【００１５】
プロセッサ３０２は、マイクロプロセッサ、マイクロコントローラ、ＤＳＰ、又は特定用途向け集積回路等のカスタムハードウェア等、任意のタイプの処理ユニットであってもよい。
【００１６】
プロセッサ３０２に結合されるメモリ３０６〜３１０は、任意の適当なメモリデバイスであってもよく、システム３００の記憶要求を満足するようにサイズが決められてもよい。メモリ３０６〜３１０は、たとえば、後述する機能を実施する命令を格納してもよい。プロセッサ３０２は、実行するためにメモリ３０４からこのような命令を呼び出してもよい。
【００１７】
入力デバイス３１４を、キーボード、マウス、タッチスクリーン、トラックパッド、又はユーザがプロセッサ３０２に情報を提供することができるようにする他の任意のデバイスを使用して実施してもよい。別法として、入力デバイス３１４は、ネットワーク接続、又はプロセッサ３０２から情報を受け取り且つプロセッサ３０２に情報を送出することができる入力ポートであってもよい。
【００１８】
ディスプレイデバイス３１６は、たとえば、液晶ディスプレイ（ＬＣＤ）モニタ、ブラウン管（ＣＲＴ）モニタ、又はプロセッサ３０２とユーザとの間のインタフェースとして作用する他の任意の適当なデバイスであってもよい。図３に図示するようなディスプレイデバイス３１６は、プロセッサ３０２に表示画面をインタフェースするために必要な任意の追加のハードウェアを含む。
【００１９】
大容量記憶デバイス３１８は、たとえば、従来のハードドライブ又はプロセッサ３０２が読取可能な他の任意の磁気若しくは光媒体であってもよい。さらに、システム３００に対してローカルであるように示すが、大容量記憶デバイス３１８を、システム３００からリモートに配置してもよく、したがってシステム３００には入力デバイス３１４を介して結合してもよい。
【００２０】
取外し可能記憶デバイスドライブ３２０は、たとえば、追記型コンパクトディスク（ＣＤ−Ｒ）ドライブ、書換可能コンパクトディスク（ＣＤ−ＲＷ）ドライブ、デジタルバーサタイルディスク（ＤＶＤ）ドライブ又は他の任意の光ドライブ等の光ドライブであってもよい。別法として、たとえば、磁気媒体ドライブであってもよい。取外し可能記憶媒体３２２は、取外し可能記憶デバイスドライブ３２０と動作するように選択される限り、そのドライブ３２０と相補的である。たとえば、取外し可能記憶デバイスドライブ３２０が光ドライブである場合、取外し可能記憶媒体３２２は、ＣＤ−Ｒディスク、ＣＤ−ＲＷディスク、ＤＶＤディスク又は他の任意の適当な光ディスクであってもよい。一方、取外し可能記憶デバイスドライブ３２０が磁気媒体デバイスである場合、取外し可能記憶媒体３２２は、たとえば、ディスケット又は他の任意の適当な磁気記憶媒体であってもよい。
【００２１】
当業者によって容易に理解されるように、実施態様によっては、システム３００のいくつかのコンポーネントを省略してもよい。たとえば、ディスプレイデバイス３１６、大容量記憶デバイス３１８及び取外し可能記憶デバイスドライブ３２２は、省略してもよいコンポーネントの例である。
【００２２】
図４の一例としてのフラッシュマップ４００に示すように、さまざまなコードセグメント又はコードの部分を、フラッシュメモリ（たとえば、図３のフラッシュメモリ３１０）においてファームウェアとして実施してもよい。図４のフラッシュマップに示すように、フラッシュメモリは、プレＥＦＩ初期化（pre-EFI initialization）（ＰＥＩ）部４０２、ドライバ実行環境（driver execution environment）（ＤＸＥ）コア４０４、及び図１のプラットフォームセキュリティユニット１０４に関して説明した機能を実施してもよいセキュリティプラットフォームドライバ４０６によって形成されるトラステッドコンピューティングベース（trusted computing base）（ＴＣＢ）を含む。さらに、フラッシュマップ４００によって表すように、フラッシュメモリは、他のドライバ４０８及び他の雑情報４１０を格納してもよい。一般に、後に詳細に説明するように、プロセッサにより、ＰＥＩ４０２、ＤＸＥコア４０４及びセキュリティプラットフォームドライバ４０６のＴＣＢが最初に実行される。その後、プロセッサに対してなされたサービスに対する要求が、事前にインストールされたプラットフォームセキュリティドライバ４０６によって処理される。概して図１のプラットフォームセキュリティユニット１０４に関して上述したように、セキュリティプラットフォームドライバ４０６は、任意のサービス又は資源要求者の身元を認証して、要求者が、要求したサービスを受け取るように認可されているか否かを判断する。セキュリティプラットフォームドライバ４０６の動作態様に関するさらなる詳細については、図６に関して説明するセキュリティプラットフォームプロセスに関して後述する。
【００２３】
動作時、プロセッサ３０２は、リセットされると、リセットベクトルが示すメモリロケーションで実行を開始する。リセットベクトルは、開示する例では、フラッシュマップ４００のコードの最上ラインを指す。したがって、プロセッサ（たとえば図３のプロセッサ３０２）は、フラッシュマップ４００の最上部によって表されるコードを逐次実行し始め、フラッシュマップ４００の最下部を表すコードが実行されるまでコードを実行し続ける。ＰＥＩ４０２は、プロセッサ３０２によってロードされ実行される最初のコードである。当業者には容易に理解されるように、ＰＥＩ４０２は、他の機能もあるが特に、ＰＥＩ４０２に続くコードを実行するためにプロセッサメモリ３０４を初期化する。
【００２４】
ＰＥＩ４０２がロードされ実行された後、プロセッサ３０２は、当業者には容易に理解されるように、ドライバがロードされ実行され得る実行環境であるＤＸＥコア４０４をロードし実行する。たとえば、図１を参照すると、実行環境１０６を、ＤＸＥコア４０４を使用して実施してもよい。
【００２５】
ＤＸＥコア４０４がロードされ実行された後、ＴＣＢの最後の項目であるセキュリティプラットフォームドライバ４０６がロードされ実行される。ここでまた、図１を参照すると、プラットフォームセキュリティユニット１０４をセキュリティプラットフォームドライバ４０６によって実施してもよい。本明細書で説明するように、セキュリティプラットフォームドライバ４０６は、資源又はサービスに対する要求を受け取り、要求者の身元及び／又は望まれる要求又はサービスの種類に基づいて要求又はサービスに対する許可を選択的に与える。概して、セキュリティプラットフォームドライバ４０６は、要求者の身元を特定し（認証）、要求者が利用可能なサービスを確定する（認可）。
【００２６】
セキュリティプラットフォームドライバ４０６がロードされ実行された後、他のドライバ４０８及び雑命令がセキュリティプラットフォームドライバ４０６によって実行される認証及び認可テストに合格した場合、それらドライバ及び命令をロードし実行してもよい。
【００２７】
図６及び図７の説明を容易にする目的で、図５に、例としての認可データベース関係５００を示し説明する。認可データベース関係５００は、所有者オブジェクト５０２、オブジェクト１  ５０４、第１のプロトコルＧＵＩＤオブジェクト５０６、第２のプロトコルＧＵＩＤオブジェクト５０８及び第ｎのオブジェクト５１０を含む。オブジェクト５０２、５０４及び５１０は、たとえばイーサネット（登録商標）ＭＡＣアドレス、加工されたパスワード、公開鍵、ＩＰアドレス、対称鍵、ＳＨＡ−１ハッシュ又は他の一意の情報であってもよい一意の識別子（Ｋ）によって識別され且つ参照される。
【００２８】
図５の例における所有者オブジェクト５０２は、Ｋｏｗｎｅｒと命名され、所有者の属性を定義する所有者マスクを有する。たとえば、所有者マスクは、所有者オブジェクト５０２が利用可能なランタイム及びプレブート実行サービスを定義してもよい。所有者オブジェクト５０２はまた、それが関連する他のオブジェクトに対する参照も含む。たとえば、図５に示すように、所有者オブジェクト５０２は、Ｋｏｂ１と命名されるオブジェクト１  ５０４を参照する。たとえば、相手先商標製造業者（original equipment manufacturer）（ＯＥＭ）がプロセッサシステム（たとえば、図３のプロセッサシステム３００）をセットアップしている工場のシナリオでは、ＯＥＭは、Ｋｏｗｎｅｒと恐らくはＫｏｗｎｅｒオブジェクトに関連するいくつかのオブジェクトとをインストールしてもよく、Ｋｏｗｎｅｒ及び関連オブジェクトは、ＯＥＭ診断プログラム及びさまざまなブートローダに対するサポートを提供する。
【００２９】
オブジェクト１  ５０４は、１つのオブジェクト５０４に関連する許可を定義するための第１のプロトコルＧＵＩＤ５０６を参照する。第１のプロトコルＧＵＩＤ５０６はさらに、１つのオブジェクト５０４が利用可能であり得るさらなるサービスを定義する第２のプロトコルＧＵＩＤ５０８を参照してもよい。第２のプロトコルＧＵＩＤ５０８は、さらなるＧＵＩＤを参照してもよい。別法として、図５に示すように、第２のプロトコルＧＵＩＤ５０８は、それ以上ＧＵＩＤを参照しなくてもよい。
【００３０】
オブジェクト１  ５０４はまた、第ｎのオブジェクト５１０のような後続するオブジェクトを参照してもよい。第ｎのオブジェクト５１０は、プレブート及びランタイムのためのサービスマスクとして定義され得る許可を含み、また後続オブジェクトを列挙してもよい。しかしながら、図５の例では、第ｎのオブジェクト５１０は、後続オブジェクトを列挙しない。
【００３１】
図６に、一例としてのセキュリティプラットフォームプロセス６００を示す。セキュリティプラットフォームプロセス６００を、１つ又は複数のメモリ（たとえばメモリ３０６〜３１０）に格納され１つ又は複数のプロセッサ（たとえばプロセッサ３０２）によって実行される１つ又は複数のソフトウェアプログラム又は命令のセットを使用して実施してもよい。しかしながら、プラットフォームセキュリティプロセス６００のブロックのうち、いくつか又はすべてを手動で実行してもよく且つ／又は何らかの他のデバイスで実行してもよい。さらに、図６に示すフローチャートを参照してプラットフォームセキュリティプロセス６００について説明するが、当業者は、プラットフォームセキュリティプロセス６００を実行する他の多くの方法を使用してもよいということを容易に理解するであろう。たとえば、ブロックの順序を変更してもよく、１つ又は複数のブロックの動作を変更してもよく、ブロックを結合してもよく、且つ／又はブロックを削除してもよい。
【００３２】
概して、プラットフォームセキュリティプロセス６００は、たとえば、コードをロードし又は実行するように要求する、プレブート時に又はランタイム時にサービスを実行するように要求する等、サービスに対し要求して、このような要求が遂行される場合に指定されたセキュリティルールが守られているか否かを判断する。特に、プラットフォームセキュリティプロセス６００は、認証（すなわち、要求しているエンティティの身元を特定する）及び認可（すなわち、認証された要求しているエンティティの権利を確定する）を実行する。認証及び認可に基づき、プラットフォームセキュリティプロセスは、要求の遂行を選択的に可能にする。
【００３３】
プラットフォームセキュリティプロセス６００は、エンティティがシステムの所有権を取得しようと試みているか否かを判断する（ブロック６０２）ことによって開始する。たとえば、ユーザが新たなパーソナルコンピュータを購入した場合、デフォルトのユーザ名及びパスワードを入力することにより、さまざまなシステムパラメータを変更する権利を主張してもよく、それらパラメータのうちの１つ又は複数は、セキュリティ設定、及びさまざまな命令を実行するか又はさまざまなサービスを提供する許可に関連してもよい。
【００３４】
エンティティが所有権を取得しようと試みている場合（ブロック６０２）、エンティティによって入力されるパスワード（Ｋｉｎｐｕｔ）をテストパスワード（Ｋｔｅｓｔ）と比較する（ブロック６０４）。たとえば、パスワードは、特定の英字文字列及び／又は数字文字列の単純なハッシュであってもよい。このような場合、エンティティによって入力されたパスワードのハッシュがメモリ（メモリ３０６〜３１０のうち任意のもの）に格納されたパスワードのハッシュに一致する場合、所有者の身元を適当なパスワードを提供した身元エンティティに設定する（ブロック６０６）。適当なパスワードを入力した後（すなわち、所有者となった後）、エンティティは、システムのセキュリティ設定のさまざまな態様に対して変更を実行してもよい。たとえば、所有者は、未署名コードの実行を可能又は不能にするようにセキュリティパラメータを設定してもよい。さらに、所有者は、メモリ３０６〜３１０のうちの１つ又は複数内に位置してもよいプラットフォームセキュリティデータベースに列挙されていないエンティティに対するサービスを実行する能力を可能又は不能にしてもよい。これらの機能のすべてを、図６の例のブロック６０６内で実行してもよい。
【００３５】
プロセス６００がブロック６０６の実行を完了した後、入力されたパスワードが格納されたパスワードに等しくない場合（ブロック６０４）、又は所有権が取得されていない場合（ブロック６０２）、プロセス６００は、実行の要求が受け取られたか否かを判断する（ブロック６０８）。実行の要求には、ローカルに又はネットワークから又は他の任意のソースから受け取られた要求が含まれてもよい。要求は、ドライバ、アプリケーション及び／又は他の任意の命令又は命令の集まりの実行を遂行する要求であってもよい。さらに、要求は、ＯＳローダである識別されたＥＦＩアプリケーションをロードする要求を含んでもよい。システムは、ＯｗｎｅｒＭａｓｋが、プラットフォームが「セキュアブート」を要求することを指示するように構成することができる。この動作モードでは、ディスク上の又はネットワークを介してロードされた、ＥＦＩ環境変数ＢｏｏｔＮｅｘｔによって規定されたＯＳローダに対応するイメージに対応するＫｏｂｊがなければならない。ＯＳローダに対するＫｏｂｊがない場合、システムは何らかのリカバリモードに入ることになる。
【００３６】
実行の要求がある場合（ブロック６０８）、プロセス６００は、イメージと呼んでもよい実行のためのコードが、署名されたイメージであるか否かを判断する（ブロック６１０）。イメージは、ハッシュ又は他の何らかの適当な署名のようなデジタル署名等の署名を含む場合、署名されていると言ってもよい。当業者には容易に理解されるように、情報を、送信する前にハッシュ化し秘密鍵で署名してもよい。情報の受信側は、署名された情報を受け取ると、情報を送信するために使用された秘密鍵に関連する公開鍵を用いて受け取った情報の完全性を検査するように試み、その後、最初にハッシュ化された情報を取得するために情報をハッシュ化する。このような構成を使用することにより、工場においてドライバに署名してもよく、プラットフォームセキュリティドライバは、実行される時にドライバ内容を認証してもよい。ハッシュに関するさらなる情報は、たとえばhttp://csrc.nist.gov/publications/fips/fips180-1/fip180-1.txtにおいて見ることができる。公開／秘密鍵ペアを用いてドライバ等のイメージに署名することに関するさらなる情報については、たとえばhttp://www.itl.nist.gov/fipspubs/fip186.htmにおいて見ることができる。
【００３７】
イメージに署名がされている場合（ブロック６１０）、プロセス６００は、資源を要求しているオブジェクト（たとえばＫｏｂｊｅｃｔ）がデータベース（たとえば図４のアクセス制御リスト２０４）にあるか否かを判断する（ブロック６１２）。データベースに、オブジェクトに対応するエントリが見つかると（ブロック６１２）、プロセスは、オブジェクトに添付された署名が、データベースにあるオブジェクトの署名と一致するか否かを判断する（ブロック６１４）。署名が一致すると、ドライバを実行する（ブロック６１６）。
【００３８】
ブロック６１０に関するプロセス６００の論考に戻ると、イメージが署名されていない場合（ブロック６１０）、プロセスは、所有者が未署名コードの実行を許可するか否かを判断する（ブロック６１８）。所有者が未署名コードの実行を許可する場合（ブロック６１８）、プロセスはコードを実行する（ブロック６２０）。別法として、所有者が未署名コードの実行を許可しない場合（ブロック６１８）、コードをロードする試みが失敗して、その失敗をログに記録する（ブロック６２２）。
【００３９】
ブロック６１２に戻ると、オブジェクトがデータベースにない場合（ブロック６１２）、プロセス６００は、所有者が、データベースにない未署名コードの実行を許可するか否かを判断する（ブロック６２４）。所有者がこのようなコードの実行を許可する場合、コードを実行する（ブロック６２０）。別法として、所有者がこのようなコードの実行を許可しない場合、コードのロードが失敗して、その失敗をログに記録する（ブロック６２２）。
【００４０】
プロセス６００が、特定のオブジェクトに対しコード及びデータベースの署名が一致しないと判断した場合（ブロック６１４）、ロードが失敗して、その失敗をログに記録する（ブロック６２２）。
【００４１】
ブロック６０８に戻ると、プロセス６００は、いかなる実行要求も受け取らない場合、任意のサービスコールが受け取られたか否かを判断する（ブロック６２６）。ブロック６２６は、サービスコールの要求が受け取られるまで制御を保持する。サービスコールが受け取られると、サービスコール処理プロセスを呼び出して、制御はそこに移る。サービスコール処理プロセス（ブロック６２８）に関するさらなる詳細については、図７に関連して提供する。
【００４２】
ブロック７００を実施するために使用してもよい一例としてのサービスコール処理プロセス７００を、図７においてさらに詳細に示す。セキュリティプラットフォームプロセス６００と同様に、サービスコール処理プロセス７００を、１つ又は複数のメモリ（たとえばメモリ３０６〜３１０）に格納され１つ又は複数のプロセッサ（たとえばプロセッサ３０２）によって実行される１つ又は複数のソフトウェアプログラム又は命令のセットを使用して実施してもよい。しかしながら、サービスコール処理プロセス７００のブロックのうちのいくつか又はすべてを、手動で実行してもよく且つ／又は他の何らかのデバイスによって実行してもよい。さらに、図７に示すフローチャートを参照してサービスコール処理プロセス７００について説明するが、当業者は、サービスコール処理プロセス７００を実行する他の多くの方法を使用してもよい、ということを容易に理解するであろう。たとえば、ブロックの順序を変更してもよく、１つ又は複数のブロックの動作を変更してもよく、ブロックを結合してもよく、且つ／又はブロックを削除してもよい。さらに、プロセス６００及び７００を、別々の図であるように示すが、当業者は、２つのプロセスを結合して１つの図で表すことができる、ということを容易に理解するであろう。
【００４３】
概して、サービスコール処理プロセス７００は、ブートサービス要求、ランタイムサービス要求及び／又はプロトコルであってもよいサービスコール要求を、セキュアな方法で処理する。特に、プロセス７００は、サービスを要求している呼出し側の身元を特定して、要求されたイメージがデータベースにあるか否かを判断する。そして、プロセス７００は、許可マスク又はプロトコルエントリが存在するか否か、且つ／又は所有者ポリシがすべてのアクセスをサポートするか否かを判断する。プロトコルマスクの存在及び／又は全アクセスポリシに基づき、サービス要求を実行しても無視してもよい。
【００４４】
プロセス７００は、サービスを要求した呼出し側の身元を特定する（ブロック７０２）ことにより実行を開始する。呼出し側の身元を、ロードされたイメージプロトコルのインスタンスをＫｏｂｊｅｃｔと相関させることによって特定してもよい。１つの特定の例では、各ロードされたイメージプロトコルは、メモリにおけるイメージの基底を規定するＩｍａｇｅＢａｓｅフィールドを有し、メモリにおけるイメージのサイズは、ロードされたイメージプロトコルインスタンスのＩｍａｇｅＳｉｚｅフィールドによって定義されることになる。このような構成では、プラットフォームセキュリティドライバは、コールスタック戻り値を調べ、このコーススタックアドレスが任意の（ＩｍａｇｅＢａｓｅ、ＩｍａｇｅＢａｓｅ＋ＩｍａｇｅＬｅｎｇｔｈ）様式内にあるか否かを判断する。様式内にある場合、ＥＦＩ＿ＤＥＶＩＣＥ＿ＰＡＴＨ  ＦｉｌｅＰａｔｈフィールドを使用して、ＫｏｂｊのノードのＥＦＩ＿ＤＥＶＩＣＥ＿ＰＡＴＨを検査し、一致を見つけるように試みる。これは、呼出し側／ドライバへのコールスタック戻りアドレスをＫｏｂｊと相関させることができる１つの技法である。
【００４５】
呼出し側の身元が特定されると（ブロック７０２）、プロセス７００は、インデックスをゼロに設定することによりデータベース（たとえばアクセス制御リスト２０４）にイメージが存在するか否かを判断する（ブロック７０４）。インデックスがリセットされた後、プロセス７００は、さらなるロードされたイメージプロトコルが存在するか否かを判断する（ブロック７０６）。ロードされたイメージプロトコルが存在しない場合（ブロック７０６）、コードは、ＥＦＩコアによってロードされず、したがって実行されない（ブロック７０８）。
【００４６】
別法として、さらなるイメージプロトコルが存在する場合（ブロック７０６）、インデックスをインクリメントする（ブロック７１０）。そして、変数Ｘが基底アドレスと或る範囲だけインクリメントされた基底アドレスとの間にあるか否かを判断する（ブロック７１２）。変数Ｘが基底と或る範囲だけインクリメントされた基底との間にない場合、コードは、ＥＦＩコアによってロードされず、内容はロードされない（ブロック７０８）。
【００４７】
別法として、変数Ｘが範囲内にある場合、プロセス７００は、デバイスパスのインデックスに一致するオブジェクト位置があるか否かを判断する（パス７１４）。それは、オブジェクトがメモリの適当な位置に存在するか否かを示す。オブジェクトが存在する場合、プロセス７００は、許可マスク又はプロトコルエントリが存在するか否かを判断する（ブロック７１６）。許可マスク又はプロトコルが存在しない場合（ブロック７１６）、要求を無視して、イベントをログに記録する（ブロック７１８）。逆に、許可マスク又はプロトコルが存在する場合（ブロック７１６）、要求を実行する（７２０）。要求が無視されるか又は実行された（ブロック７１８又は７２０）後、プロセス７００は制御をプロセス６００に戻して、プロセス６００は、オペレーティングシステムのロード及びプレブート環境の終了を開始するブートサービス終了コマンドを受け取るまで実行を続ける。
【００４８】
メモリに対応するオブジェクトがない場合（ブロック７１４）、プロセス７００は、所有者ポリシがすべてのアクセスをサポートするか否かを判断する（ブロック７２２）。所有者ポリシがすべてのアクセスをサポートする場合（ブロック７２２）、要求を実行する（ブロック７２０）。別法として、所有者ポリシがすべてのアクセスをサポートしない場合、制御をプロセス６００に戻す前に、要求を無視して、イベントをログに記録する（ブロック７２４）。
【００４９】
本明細書では、本発明の教示に従って構成したいくつかの装置について説明したが、本特許の適用範囲はそれらに限定されない。代りに、本特許は、文字通りに又は等価物の原則に基づいて公正に添付の特許請求の範囲内にあるすべての装置、方法及び工業製品を包含する。
【図面の簡単な説明】
【００５０】
【図１】一例としてのセキュアファームウェア格納及びサービスアクセスシステムの図である。
【図２】図１の一例としてのプラットフォームセキュリティユニットのさらなる詳細を示す図である。
【図３】一例としてのセキュアファームウェア格納及びサービスアクセスシステムを実施してもよい一例としてのプロセッサシステムの図である。
【図４】図３のフラッシュメモリにロードしてもよい命令の一例としてのフラッシュマップの図である。
【図５】一例としての認可データベース関係の図である。
【図６】図３の一例としてのプロセッサシステムで実施してもよい一例としてのセキュリティプロセスのフローチャートである。
【図７】図３の一例としてのプロセッサシステムで実施してもよい一例としてのサービスコール処理プロセスのフローチャートである。
【図１】
2006526219.tif 000003
【図２】
2006526219.tif 000004
【図３】
2006526219.tif 000005
【図４】
2006526219.tif 000006
【図５】
2006526219.tif 000007
【図６】
2006526219.tif 000008
【図７】
2006526219.tif 000009
【国際調査報告】
2006526219.tif 000010
2006526219.tif 000011
2006526219.tif 000012