特表2015-537322(P2015-537322A)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧
特表2015-537322仮想化環境を検出するためのユーザ・トラステッド・デバイス
<>
  • 特表2015537322-仮想化環境を検出するためのユーザ・トラステッド・デバイス 図000003
  • 特表2015537322-仮想化環境を検出するためのユーザ・トラステッド・デバイス 図000004
  • 特表2015537322-仮想化環境を検出するためのユーザ・トラステッド・デバイス 図000005
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】特表2015-537322(P2015-537322A)
(43)【公表日】2015年12月24日
(54)【発明の名称】仮想化環境を検出するためのユーザ・トラステッド・デバイス
(51)【国際特許分類】
   G06F 21/57 20130101AFI20151201BHJP
   G06F 9/445 20060101ALI20151201BHJP
【FI】
   G06F21/57 350
   G06F9/06 610J
【審査請求】未請求
【予備審査請求】未請求
【全頁数】36
(21)【出願番号】特願2015-547210(P2015-547210)
(86)(22)【出願日】2013年11月26日
(85)【翻訳文提出日】2015年5月28日
(86)【国際出願番号】IB2013060408
(87)【国際公開番号】WO2014091343
(87)【国際公開日】20140619
(31)【優先権主張番号】1222583.5
(32)【優先日】2012年12月14日
(33)【優先権主張国】GB
(81)【指定国】 AP(BW,GH,GM,KE,LR,LS,MW,MZ,NA,RW,SD,SL,SZ,TZ,UG,ZM,ZW),EA(AM,AZ,BY,KG,KZ,RU,TJ,TM),EP(AL,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LT,LU,LV,MC,MK,MT,NL,NO,PL,PT,RO,RS,SE,SI,SK,SM,TR),OA(BF,BJ,CF,CG,CI,CM,GA,GN,GQ,GW,KM,ML,MR,NE,SN,TD,TG),AE,AG,AL,AM,AO,AT,AU,AZ,BA,BB,BG,BH,BN,BR,BW,BY,BZ,CA,CH,CL,CN,CO,CR,CU,CZ,DE,DK,DM,DO,DZ,EC,EE,EG,ES,FI,GB,GD,GE,GH,GM,GT,HN,HR,HU,ID,IL,IN,IR,IS,JP,KE,KG,KN,KP,KR,KZ,LA,LC,LK,LR,LS,LT,LU,LY,MA,MD,ME,MG,MK,MN,MW,MX,MY,MZ,NA,NG,NI,NO,NZ,OM,PA,PE,PG,PH,PL,PT,QA,RO,RS,RU,RW,SA,SC,SD,SE,SG,SK,SL,SM,ST,SV,SY,TH,TJ,TM,TN,TR,TT,TZ,UA,UG,US
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】ベンチュ、ミヒャエル
(72)【発明者】
【氏名】クシュビント、トーマス
(72)【発明者】
【氏名】シャーデ、アンドレアス
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AE10
5B376AE12
5B376AE13
5B376AE15
5B376AE42
5B376AE67
(57)【要約】
【課題】コンピュータ(101)がユーザ・トラステッド・デバイス(10)から起動することを可能にするための方法を提供する。
【解決手段】本発明は特に、コンピュータ(101)がユーザ・トラステッド・デバイス(10)から起動することを可能にするための方法を対象とし、ユーザ・トラステッド・デバイス(10)は前記コンピュータ(101)との接続(S2)を可能にする接続インタフェース(12)を含み、この方法は、前記接続インタフェース(12)を介したユーザ・トラステッド・デバイスと前記コンピュータ(101)との接続(S2)の際に、前記コンピュータ(101)がユーザ・トラステッド・デバイス(10)からの起動を開始することを可能にするステップ(S3)と、コンピュータ(101)のプロセッサ(105)に対して、仮想化感知コードを実行すること(S7)、および実行完了の際に完了データを発行すること(S8)を指示するステップであって、この完了データは仮想化感知コードおよびプロセッサ(105)によるその実行に依存するものである、ステップと、前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップ(S9〜S14)と、その実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ(101)がユーザ・トラステッド・デバイス(10)からの起動を完了することを可能にするステップ(S15)とを含む。本発明はさらに、この方法を可能にするユーザ・トラステッド・デバイスおよび関連するシステムを対象とする。
【選択図】図3
【特許請求の範囲】
【請求項1】
ユーザ・トラステッド・デバイス(10)であって、
コンピュータ(101)との接続を可能にする接続インタフェース(12)と、
複数のモジュール(15、16、17)を保存する永続的メモリ(14)とを含み、前記モジュールは、前記接続インタフェース(12)を介した前記ユーザ・トラステッド・デバイス(10)と前記コンピュータ(101)との接続の際に、
前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を開始することを可能にし、
前記コンピュータ(101)のプロセッサ(105)に対して、起動を開始する際に仮想化感知コードを実行することと、実行完了の際に完了データを発行することとを指示し、
こうした完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定し、かつ、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を完了することを可能にするように構成される、ユーザ・トラステッド・デバイス(10)。
【請求項2】
前記複数のモジュールは、
前記コンピュータ(101)が前記デバイス(10)からの起動を開始および完了することを可能にするブートローダ(16)と、
前記仮想化感知コードを実行し、かつ前記完了データを発行することを前記プロセッサ(105)に指示するために前記コンピュータ(101)において実行可能なプロセッサ命令モジュール(15)と、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成された検証モジュール(17)とを含み、前記検証モジュール(17)は、前記デバイス(10)もしくは前記コンピュータ(101)またはその両方において実行可能であり、
前記ブートローダ(16)は、前記ユーザ・トラステッド・デバイス(10)と前記コンピュータ(101)との接続の際に初期化ファームウェア(122)によって検出可能であり、かつ前記ファームウェア(122)が前記プロセッサ命令モジュール(15)を以後の前記コンピュータ(101)における実行のために前記コンピュータ(101)に移すことを開始するための命令を含む、請求項1に記載のユーザ・トラステッド・デバイス(10)。
【請求項3】
前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記プロセッサが前記コンピュータ(101)および好ましくは前記プロセッサ自体によって支援される1つまたはそれ以上の機能のリストを前記完了データの一部として生成するように設計された仮想化感知コードを実行することを前記プロセッサ(105)に指示するように構成される、請求項2に記載のユーザ・トラステッド・デバイス(10)。
【請求項4】
前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの計算量に依存する最終状態値を前記完了データの一部として生成することを前記プロセッサ(105)に指示するように構成され、
かつ好ましくは、前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記仮想化感知コードを実行する前の前記プロセッサの状態を反映する初期状態値を生成することを前記プロセッサ(105)に指示するように構成される、請求項2または3に記載のユーザ・トラステッド・デバイス(10)。
【請求項5】
前記検証モジュール(17)はさらに、
前記初期状態値および前記最終状態値に基づいて、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを生成し、かつ
前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するように構成される、請求項4に記載のユーザ・トラステッド・デバイス(10)。
【請求項6】
前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成することを前記プロセッサ(105)に指示するように構成され、
かつ前記検証モジュール(17)はさらに、前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される、請求項4に記載のユーザ・トラステッド・デバイス(10)。
【請求項7】
前記検証モジュール(17)はさらに、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、好ましくは前記コンピュータ(101)を介してサーバ(30)に接続するよう指示するように構成される、請求項2から6のいずれか1項に記載のユーザ・トラステッド・デバイス(10)。
【請求項8】
前記検証モジュール(17)はさらに、
−前記サーバ(30)に接続するために、ネットワーク・カード(124)によって可能にされるネットワーク(165)を通じた通信を開始するために、前記ファームウェア(122)と対話することでその後前記コンピュータ(101)の前記ネットワーク・カード(124)と対話するステップ、
−前記サーバに接続するために、前記ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、前記ユーザ・トラステッド・デバイス(10)に保存されたネットワーク・カード・ドライバにアクセスして、前記コンピュータ(101)のネットワーク・カード(124)と直接対話するステップ、および
−好ましくは前記ブートローダを介して前記ファームウェア(122)と対話することによって、前記コンピュータ(101)を介して前記サーバに接続するために必要である前記コンピュータのオペレーティング・システムを部分的に実行するステップ
のうちの1つまたはそれ以上を実行するように構成される、請求項7に記載のユーザ・トラステッド・デバイス(10)。
【請求項9】
前記仮想化感知コードは、
−前記プロセッサを保護モードからリアル・モードに切換えるための命令、もしくは前記プロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方、
−前記プロセッサがマシン固有レジスタを読取るための命令、および
−前記プロセッサがマシン固有レジスタに書込むための命令
のうちの1つまたはそれ以上を含む、請求項1から8のいずれか1項に記載のユーザ・トラステッド・デバイス(10)。
【請求項10】
コンピュータ(101)がユーザ・トラステッド・デバイス(10)から起動することを可能にするための方法であって、前記ユーザ・トラステッド・デバイス(10)は前記コンピュータ(101)との接続(S2)を可能にする接続インタフェース(12)を含み、前記方法は、
前記接続インタフェース(12)を介した前記ユーザ・トラステッド・デバイスと前記コンピュータ(101)との接続(S2)の際に、前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を開始することを可能にするステップ(S3)と、
前記コンピュータ(101)のプロセッサ(105)に対して、
仮想化感知コードを実行すること(S7)、および
実行完了の際に完了データを発行すること(S8)を指示するステップであって、前記完了データは前記仮想化感知コードおよび前記プロセッサ(105)によるその実行に依存するものである、ステップと、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するステップ(S9〜S13)と、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を完了することを可能にするステップ(S15)とを含む、方法。
【請求項11】
前記ユーザ・トラステッド・デバイス(10)と前記コンピュータ(101)との接続の際に、前記コンピュータ(101)の初期化ファームウェア(122)と対話することによって、
前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を開始することを可能にし(S3)、かつ
プロセッサ命令モジュール(15)を以後の前記コンピュータ(101)における実行(S5〜S6)のために前記コンピュータ(101)に移すことを開始する(S4)ことによって、前記プロセッサ(105)に前記仮想化感知コードを実行させ(S7)、かつ実行完了の際に前記完了データを発行させる(S8)、ステップをさらに含む、請求項10に記載の方法。
【請求項12】
前記実行が仮想化環境においてなされなかったかどうかを判定するステップ(S9〜S14)は、前記デバイス(10)もしくは前記コンピュータ(101)またはその両方において検証モジュール(17)を実行するステップ(S9)を含み、前記検証モジュール(17)を実行するステップ(S9)は好ましくは、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定する(S11)ために、より好ましくは前記コンピュータ(101)を介してサーバ(30)に接続するステップ(S10)を含む、請求項10または11に記載の方法。
【請求項13】
前記プロセッサ(105)はさらに、前記コンピュータ(101)および好ましくは前記プロセッサ自体によって支援される1つまたはそれ以上の機能のリストを前記完了データの一部として生成する(S8)ように指示される、請求項10から12のいずれか1項に記載の方法。
【請求項14】
前記プロセッサ(105)はさらに、前記仮想化感知コードを実行するために必要とされた前記プロセッサの計算量に依存する最終状態値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成する(S8)ように指示され、
好ましくは、前記プロセッサ(105)はさらに、前記仮想化感知コードを実行する(S7)前の初期状態値を生成する(S6)ように指示される、請求項10から13のいずれか1項に記載の方法。
【請求項15】
コンピュータ(101)がユーザ・トラステッド・デバイス(10)から起動することを可能にするためのコンピュータ・プログラム製品であって、前記コンピュータ・プログラム製品は、ともに具現化される複数のモジュール(15、16、17)を有するコンピュータ読取り可能記憶媒体を含み、前記複数のモジュールは、請求項10から14に記載のいずれかの方法のすべてのステップを実行することを可能にする、コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は一般的に、コンピュータをユーザ・トラステッド・デバイスから起動させることを可能にするユーザ・トラステッド・デバイスの分野、ならびに関連するデバイス、システムおよび方法に関する。
【背景技術】
【0002】
過去に調整も調査もされていない任意のコンピュータ(例、従業員の私物PC)においてソフトウェアが実行されることを可能にしつつ、その実行がたとえば企業/会社のPCにおける実行と同程度に安全(セキュア)であることを確実にする技術が必要とされている。こうした技術によって、信頼のある(トラステッド)「ブリング・ユア・オウン(bring your own)」(BYO)コンピューティング作業環境が可能になる。BYOは一般的に、「ブリング・ユア・オウン・デバイス(Bring your own device)」(BYOD)、「ブリング・ユア・オウン・テクノロジ(bring your own technology)」(BYOT)、または密接に関係する「ブリング・ユア・オウン・ビヘイビア(bring your own behavior)」(BYOB)に関するものである。BYODまたはBYOTは、従業員が仕事に個人のモバイル・デバイスを持ち込んで使用し、雇用者のeメール、データベースおよびファイルにアクセスし、一方でこうしたデバイスを家でも用いるために、同じデバイスを通じて個人のアプリケーション/データにアクセスすることをいかにしてなし得るかという企業/ビジネス・ポリシに関わるものである。BYOBは、このことをハードウェアを越えてデバイス上で用いられるソフトウェアにも広げたものである。
【0003】
今日、コンピュータ上で実行されるあらゆるソフトウェアは、PCのオペレーティング・システムに存在し得るいくつものウイルスおよび悪意あるソフトウェア(マルウェア)による攻撃を受け得ることが公知である。この問題に対する解決策の1つは、たとえば典型的にセキュア・デバイスであるユーザ・トラステッド・デバイスに保存されるなどした外部起動媒体からPCを再始動させて、その外部媒体から、新しくかつセキュリティの観点からクリーンなオペレーティング・システム(operating system:OS)を始動させるというものである。
【0004】
しかし、このアプローチは特に1つの顕著な技術的問題点を有することを本発明者らは認識しており、本発明はその問題点の解決を目的とするものである。
【0005】
加えて、外部起動媒体はしばしば(セキュアな耐タンパ・デバイスを含む)トラステッド・デバイス上に提供され、このタイプのデバイスは一般的に公知である。たとえば、オンラインのトランザクションに対して開発された解決策は、いわゆるゾーン・トラステッド情報チャネル(Zone Trusted Information Channel)(または略してZTIC)である。ZTICは、トランザクション・データの認証のためのセキュアな非プログラマブル・デバイスである。ZTICはサーバに対するセキュアなエンド・ツー・エンドのネットワーク接続を維持するため、ZTIC自体が悪意あるソフトウェアの攻撃に対して耐タンパであり、かつZTICはそれが接続するホストとは独立した自身の入力および出力構成要素を有するため、ZTICディスプレイに示されるデータは本物である。より詳細なことは、たとえば非特許文献1などに見出され得る。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】“The Zurich Trusted Information Channel−An Efficient Defence against Man−in−the−Middle and Malicious Software Attacks”,Thomas Weigold,Thorsten Kramp,Reto Hermann,Frank Hoering,Peter Buhler,Michael Baentsch.In P.Lipp,A.−R.SadeghiおよびK.−M.Koch(編):TRUST 2008,LNCS 4968,p.75−91,2008.Springer−Verlag Berlin Heidelberg 2008
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の目的は、仮想化環境を検出するためのユーザ・トラステッド・デバイスを提供することである。
【課題を解決するための手段】
【0008】
第1の局面に従うと、本発明はユーザ・トラステッド・デバイスとして具現化され、このユーザ・トラステッド・デバイスは、
コンピュータとの接続を可能にする接続インタフェースと、
複数のモジュールを保存する永続的メモリとを含み、これらのモジュールは、前記接続インタフェースを介したユーザ・トラステッド・デバイスと前記コンピュータとの接続の際に、
前記コンピュータがユーザ・トラステッド・デバイスからの起動を開始することを可能にし、
コンピュータのプロセッサに対して、起動を開始する際に仮想化感知コードを実行することと、実行完了の際に完了データを発行することとを指示し、
こうした完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定し、かつ、
その実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータがユーザ・トラステッド・デバイスからの起動を完了することを可能にするように構成される。
【0009】
好ましくは、前記モジュールは、
前記コンピュータがデバイスからの起動を開始および完了することを可能にするブートローダと、
仮想化感知コードを実行し、かつ完了データを発行することをプロセッサに指示するためにコンピュータにおいて実行可能なプロセッサ命令モジュールと、
前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成された検証モジュールとを含み、この検証モジュールはデバイスもしくはコンピュータまたはその両方において実行可能であり、
ブートローダは、ユーザ・トラステッド・デバイスと前記コンピュータとの接続の際に初期化ファームウェアによって検出可能であり、かつファームウェアが前記プロセッサ命令モジュールを以後のコンピュータにおける実行のためにコンピュータに移すことを開始するための命令を含む。
【0010】
第1のクラスの実施形態に従うと、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、プロセッサがコンピュータおよび好ましくはプロセッサ自体によって支援される1つまたはそれ以上の機能のリストを完了データの一部として生成するように設計された仮想化感知コードを実行することをプロセッサに指示するように構成される。
【0011】
第2のクラスの実施形態に従うと、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、前記仮想化感知コードを実行するために必要とされるプロセッサの計算量に依存する最終状態値を完了データの一部として生成することをプロセッサに指示するように構成され、かつ好ましくは、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、前記仮想化感知コードを実行する前のプロセッサの状態を反映する初期状態値を生成することをプロセッサに指示するように構成される。
【0012】
実施形態において、検証モジュールは、初期状態値および最終状態値に基づいて、仮想化感知コードを実行するために必要とされるプロセッサの計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを生成するためにデバイスにおいて実行可能であり、かつ検証モジュールはさらに、前記プロセッサ使用値に基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される。
【0013】
他の実施形態において、プロセッサ命令モジュールはさらに、コンピュータにおける実行の際に、仮想化感知コードを実行するために必要とされるプロセッサの計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを完了データの一部として生成することをプロセッサに指示するように構成され、検証モジュールはさらに、前記プロセッサ使用値に基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される。
【0014】
有利には、検証モジュールはさらに、その実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、好ましくは前記コンピュータを介してサーバに接続するよう指示するように構成されてもよい。
【0015】
たとえば、検証モジュールは次のステップの1つまたはそれ以上を実行するように構成されてもよい。
−サーバに接続するために、ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、前記ファームウェアと対話することでその後コンピュータの前記ネットワーク・カードと対話するステップ、
−サーバに接続するために、ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、ユーザ・トラステッド・デバイスに保存されたネットワーク・カード・ドライバにアクセスして、コンピュータの前記ネットワーク・カードと直接対話するステップ、および
−好ましくはブートローダを介してファームウェアと対話することによって、コンピュータを介してサーバに接続するために必要である前記コンピュータのオペレーティング・システムを部分的に実行するステップ。
【0016】
好ましくは、仮想化感知コードは次のうちの1つまたはそれ以上を含む。
−プロセッサを保護モードからリアル・モードに切換えるための命令、もしくはプロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方、
−プロセッサがマシン固有レジスタを読取るための命令、および
−プロセッサがマシン固有レジスタに書込むための命令。
【0017】
別の局面に従うと、本発明はコンピュータがユーザ・トラステッド・デバイスから起動することを可能にするための方法として具現化され、このユーザ・トラステッド・デバイスは前記コンピュータとの接続を可能にする接続インタフェースを含み、この方法は、
前記接続インタフェースを介したユーザ・トラステッド・デバイスと前記コンピュータとの接続の際に、前記コンピュータがユーザ・トラステッド・デバイスからの起動を開始することを可能にするステップと、
コンピュータのプロセッサに対して、
仮想化感知コードを実行すること、および
実行完了の際に完了データを発行することを指示するステップであって、この完了データは仮想化感知コードおよびプロセッサによるその実行に依存するものである、ステップと、
前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップと、
その実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータがユーザ・トラステッド・デバイスからの起動を完了することを可能にするステップとを含む。
【0018】
好ましくは、この方法はさらに、ユーザ・トラステッド・デバイスとコンピュータとの接続の際に、前記コンピュータの初期化ファームウェアと対話することによって、
前記コンピュータがユーザ・トラステッド・デバイスからの起動を開始することを可能にし、かつ
プロセッサ命令モジュールを以後のコンピュータにおける実行のためにコンピュータに移すことを開始することによって、プロセッサに仮想化感知コードを実行させ、かつ実行完了の際に完了データを発行させる、ステップを含む。
【0019】
好ましい実施形態において、実行が仮想化環境においてなされなかったかどうかを判定するステップは、デバイスもしくはコンピュータまたはその両方において検証モジュールを実行するステップを含み、検証モジュールを実行するステップは好ましくは、その実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、より好ましくは前記コンピュータを介してサーバに接続するステップを含む。
【0020】
前記第1のクラスの実施形態に従うと、プロセッサはさらに、コンピュータおよび好ましくはプロセッサ自体によって支援される1つまたはそれ以上の機能のリストを完了データの一部として生成するように指示される。
【0021】
前記第2のクラスの実施形態に従うと、プロセッサはさらに、仮想化感知コードを実行するために必要とされたプロセッサの計算量に依存する最終状態値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを完了データの一部として生成するように指示され、
好ましくは、プロセッサはさらに、仮想化感知コードを実行する前の初期状態値を生成するように指示される。
【0022】
最後の局面に従うと、本発明はコンピュータがユーザ・トラステッド・デバイスから起動することを可能にするためのコンピュータ・プログラム製品として具現化され、このコンピュータ・プログラム製品は、ともに具現化されるモジュールを有するコンピュータ読取り可能記憶媒体を含み、このモジュールは、上の実施形態に従ういずれかの方法のすべてのステップを実行することを可能にする。
【0023】
添付の図面を参照して、限定的でない実施例として、本発明を具現化するデバイス、システムおよび方法を説明する。
【図面の簡単な説明】
【0024】
図1】本発明の実施形態に含まれる1つまたはそれ以上の方法ステップを実現するために好適な汎用コンピュータ・システムを概略的に表す図である。
図2】実施形態に含まれるユーザ・トラステッド・デバイスの選択された構成要素を概略的に示す図である。
図3】実施形態のとおりに、図1に示されるものなどのユーザ・トラステッド・デバイスからコンピュータが起動することを可能にするための方法の高レベル・ステップを示す流れ図である。
【発明を実施するための形態】
【0025】
以下の説明は、次のように構成されている。最初に一般的な実施形態および高レベルの変形について説明する(セクション1)。次のセクションは、より特定的な実施形態および技術的実施の詳細に向けられたものである(セクション2)。
【0026】
1.一般的な実施形態および高レベルの変形
図1は、本発明の実施形態に含まれる方法ステップを実現するために好適な一般的コンピュータ・システムを表す。
【0027】
本明細書に記載される方法はほとんど非対話型であり、たとえばサーバまたは埋込みシステムなどのコンピュータ・システムによって自動化されることが認識されるだろう。例示的実施形態において、本明細書に記載される方法は、(部分的に)対話型または非対話型のシステムにおいて実現されてもよい。さらに、これらの方法はソフトウェア(例、ファームウェア)、ハードウェア、またはその組み合わせにおいて実現されてもよい。例示的実施形態において、本明細書に記載される方法は、実行可能なプログラムとしてソフトウェアにおいて実現され、特定目的または汎用のデジタル・コンピュータ、たとえばパーソナル・コンピュータ、ワークステーション、ミニコンピュータ、またはメインフレーム・コンピュータなどによって実行される。したがって、最も一般的なシステム100は汎用コンピュータ101を含む。
【0028】
図1に示されるとおりのハードウェア・アーキテクチャに関する例示的実施形態において、コンピュータ101はプロセッサ105と、メモリ・コントローラ115に結合されたメモリ110と、ローカル入力/出力コントローラ135を介して通信的に結合された1つまたはそれ以上の入力もしくは出力またはその両方の(input and/or output)(I/O)デバイス(または周辺装置)10、145とを含む。当該技術分野において公知であるとおり、入力/出力コントローラ135は、1つもしくはそれ以上のバス、またはその他の有線もしくはワイヤレス接続であってもよいが、それに限定されない。入力/出力コントローラ135は、通信を可能にするために、たとえばコントローラ、バッファ(キャッシュ)、ドライバ、リピータおよび受信機などの付加的な構成要素を有してもよく、それらは簡潔のために省略されている。さらに、ローカル・インタフェースは、前述の構成要素間の適切な通信を可能にするためのアドレス、制御、もしくはデータ接続、またはその組み合わせを含んでもよい。本明細書に記載されるとおり、I/Oデバイス10、145は一般的に、当該技術分野において公知である任意の汎用暗号カードまたはスマート・カードを含んでもよい。これらのデバイスの1つは、以下に詳細に考察されるユーザ・トラステッド・デバイス10である。
【0029】
プロセッサ105は、ソフトウェア、特にメモリ110に保存されるソフトウェアを実行するためのハードウェア・デバイスである。プロセッサ105は、任意の特注プロセッサまたは商業的に入手可能なプロセッサ、中央処理ユニット(central processing unit:CPU)、コンピュータ101に関連するいくつかのプロセッサの中の補助プロセッサ、(マイクロチップまたはチップ・セットの形の)半導体に基づくマイクロプロセッサ、マクロプロセッサ、またはソフトウェア命令を実行するための一般的にあらゆるデバイスであってもよい。
【0030】
メモリ110は、揮発性記憶素子(例、ランダム・アクセス・メモリ(random access memory)(RAM、たとえばDRAM、SRAM、SDRAMなど))および不揮発性(永続的)記憶素子(例、ROM、消去可能プログラマブル・リード・オンリ・メモリ(erasable programmable read only memory:EPROM)、電気的消去可能プログラマブル・リード・オンリ・メモリ(electronically erasable programmable read only memory:EEPROM)、プログラマブル・リード・オンリ・メモリ(programmable read only memory:PROM)、テープ、コンパクト・ディスク・リード・オンリ・メモリ(compact disc read only memory:CD−ROM)、ディスク、ディスケット、カートリッジ、カセットまたはその類似物など)のいずれか1つまたはその組み合わせを含んでもよい。さらに、メモリ110は電子、磁気、光学、もしくはその他のタイプの記憶媒体またはその組み合わせを組み込んでもよい。なおメモリ110は、さまざまな構成要素が互いに離れた位置にあるがプロセッサ105によってアクセス可能であるような分散型アーキテクチャを有してもよい。特に、メモリ110は所与のメモリ部分121を含み、そのメモリ部分121にプロセッサ命令モジュール(processor instruction module)(すなわちPIM)15およびおそらくは検証モジュール17の全体または一部が以後の実行のために移されてもよい。
【0031】
メモリ110内のソフトウェアは1つまたはそれ以上の別個のプログラムを含んでもよく、そのプログラムの各々は、論理関数、特に本発明の実施形態に関与する関数を実施するために実行可能な命令のリストを含む。図1の実施例において、いくつかの条件が確認されたときにコンピュータ101がユーザ・トラステッド・デバイス10からの起動を開始および完了することを可能にするための命令がメモリ110にロードされてもよい。
【0032】
本明細書において考察される新規の方法は、ホスト101において任意のOSが完全にロードされる「前に」少なくとも部分的に動作するものである(ステップの少なくともいくつかは、ハードウェアにより近い別のレベルで動作し、それによってコンピュータ101の正常な挙動が影響を受ける)が、メモリ110内のソフトウェアは好適なオペレーティング・システム(OS)111を含んでもよい。一旦(もし)ロードされると、OS111は他のコンピュータ・プログラムの実行を本質的に制御して、スケジューリング、入力−出力制御、ファイルおよびデータ管理、メモリ管理、ならびに通信制御および関連するサービスを提供する。
【0033】
なお、ロードされるべきOSは、最初にコンピュータのハード・ディスク・ドライブ120に保存されていないことが好ましい。これは特に、私物コンピュータを、そこに保存された所有者のプライベート・データのいずれも用いることなく始動させるというシナリオの場合であろう。しかし状況によっては、コンピュータのハード・ディスクの別個の区域に、トラステッド・デバイスによって始動されるOSをキャッシュすることが有用であり得る。以下に説明される好ましい実施形態において、ロードされるべきOSは最初にユーザ・デバイス10に含まれているか、ネットワークを通じてロードされるか、またはコンピュータのハード・ドライブにキャッシュされる。後者の場合には、典型的にOSのシグネチャが確認される。
【0034】
本明細書に記載される方法の少なくとも一部は、ソース・プログラム、実行可能プログラム(オブジェクト・コード)、スクリプト、または実行されるべき命令のセットを含むあらゆるその他のエンティティの形であってもよい。ソース・プログラムのとき、次いでそのプログラムは、デバイス10もしくはホスト101またはその両方のメモリ(単数または複数)に含まれても含まれなくてもよいコンパイラ、アセンブラ、またはインタープリタなどを介して変換される必要がある。さらに、これらの方法は、データおよび方法のクラスを有するオブジェクト指向プログラミング言語として書かれてもよいし、ルーチン、サブルーチン、もしくは関数、またはその組み合わせを有する手続き型プログラミング言語として書かれてもよい。すべての場合に、本明細書において考察される新規の方法は、必要とされるときにはファームウェア122に関連し、かつ必要に応じてデバイスのCPU11に関連して適切に動作するように設計される。
【0035】
例示的実施形態において、入力/出力コントローラ135には従来のキーボード150およびマウス155が結合されてもよい。たとえばI/Oデバイス145などのその他の出力デバイスは、たとえばプリンタ、スキャナ、およびマイクロホンなどであるがそれに限定されない入力デバイスを含んでもよい。最後に、I/Oデバイス10、145は入力および出力の両方と通信するデバイスをさらに含んでもよく、それはたとえば(他のファイル、デバイス、システムまたはネットワークにアクセスするための)ネットワーク・インタフェース・カード(network interface card:NIC)または変調器/復調器、無線周波数(radio frequency:RF)またはその他のトランシーバ、電話インタフェース、ブリッジ、およびルータなどであるが、それに限定されない。本明細書において説明されるとおり、I/Oデバイス10、145は、当該技術分野において公知である任意の汎用暗号カードまたはスマート・カードであってもよい。システム100はさらに、ディスプレイ130に結合されたディスプレイ・コントローラ125を含んでもよい。例示的実施形態において、システム100はさらに、ネットワーク165に結合するためのネットワーク・インタフェース160を含んでもよい。ネットワーク165は、コンピュータ101と、任意の外部サーバおよびクライアントなどとの間の広帯域接続を介した通信のための、IPに基づくネットワークであってもよい。ネットワーク165は、コンピュータ101と、たとえばサーバ30などの外部システムとの間でデータを送受信する。例示的実施形態において、ネットワーク165は、サービス・プロバイダによって管理されるマネージドIPネットワークであってもよい。ネットワーク165は、たとえばWiFi、WiMaxなどのワイヤレス・プロトコルおよび技術を用いるなどして、ワイヤレスの態様で実現されてもよい。加えてネットワーク165は、たとえばローカル・エリア・ネットワーク、広域ネットワーク、メトロポリタン・エリア・ネットワーク、インターネット・ネットワーク、またはその他の類似のタイプのネットワーク環境などのパケット交換ネットワークであってもよい。ネットワーク165は、固定ワイヤレス・ネットワーク、ワイヤレス・ローカル・エリア・ネットワーク(local area network:LAN)、ワイヤレス広域ネットワーク(wide area network:WAN)、パーソナル・エリア・ネットワーク(personal area network:PAN)、仮想プライベート・ネットワーク(virtual private network:VPN)、イントラネット、またはその他の好適なネットワーク・システムであってもよく、信号を受信および送信するための機器を含む。
【0036】
コンピュータ101がPC、ワークステーション、またはインテリジェント・デバイスなどであるとき、メモリ110内のソフトウェアは、基本入出力システム(basic input output system:BIOS)またはあらゆる類似の初期化ソフトウェア122をさらに含んでもよい。BIOSは、始動時にハードウェアを初期化およびテストする基本的ソフトウェア・ルーチンのセットである。別様には、一般的にOSを始動して、ハードウェア・デバイス間でデータを移すことを支援することが可能である。コンピュータ101が活動化されるときにBIOSが実行され得るように、BIOSは典型的にROMに保存される。
【0037】
本明細書に記載される方法を実現する目的のために、BIOS122は特に起動プロセスを開始および完了させるため、ならびにおそらくはネットワークを通じた通信を開始するために使用(対話)されてもよい。しかしより一般的には、その目的のために、あらゆる好適なファームウェア122またはファームウェアに対するインタフェース(すなわち、ソフトウェア・スタックにおいて任意のOS111の「下で」動作する、永続的メモリならびにそこに保存されるプログラム・コードおよびデータの組み合わせ)が用いられてもよい。これは典型的にはBIOSである。しかし、好適なファームウェア122またはそれに対するインタフェースの例は、プリブート実行環境(Preboot eXecution Environment:PXE)BIOS、いわゆるエクステンシブル・ファームウェア・インタフェース(Extensible Firmware Interface:EFI)BIOS、またはさらに、ユニファイド・エクステンシブル・ファームウェア・インタフェース(Unified Extensible Firmware Interface:UEFI)を含む。後者は、オペレーティング・システムとプラットフォーム・ファームウェアとの間のソフトウェア・インタフェースを規定する仕様である。UEFIはBIOSファームウェア・インタフェースに取って代わることが意図されており、今日すべてのIBM(IBM社の登録商標)のPC準拠コンピュータに存在する。実際には、ほとんどのUEFIイメージがBIOSサービスに対するレガシ・サポートを有する。より一般的には、BIOSサービスまたは同等のサービスに対するレガシ・サポートを有するあらゆるファームウェアは、本明細書に記載される方法を実現する目的のために予期され得る。さらにより一般的には、ソフトウェア・スタックにおいてオペレーティング・システムの下で動作するあらゆる初期化ファームウェアは、本発明を実現する目的のために招集され得る。
【0038】
コンピュータ101が動作中であるとき、プロセッサ105は、メモリ110内に保存されたソフトウェアを実行し、メモリ110とデータを通信し、かつソフトウェアに従ってコンピュータ101の動作を広く制御するように構成される。本明細書に記載される方法の全体または一部、典型的に後者は、プロセッサ105によって読取られ、おそらくはプロセッサ105内にバッファされ、次いで実行される。
【0039】
ソフトウェアにおいて実現され得る、本明細書に記載される方法の部分は、任意のコンピュータ関連のシステムもしくは方法による使用、またはそれに関連する使用のための任意のコンピュータ読取り可能媒体に保存されてもよい。
【0040】
当業者に認識されるとおり、本発明の局面はシステム、方法またはコンピュータ・プログラム製品として具現化されてもよい。したがって本発明の局面は、完全にハードウェアの実施形態、完全にファームウェアもしくはソフトウェアまたはその両方の実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなど)、またはファームウェア/ソフトウェアおよびハードウェアの局面を組み合わせた実施形態の形を取ってもよく、本明細書においてこれらはすべて一般的に「モジュール」、「コンピュータ化された方法」、「プロセス」または「スキーム」などと呼ばれることがある。さらに、本発明の局面は、コンピュータ読取り可能プログラム・コードが具現化されている1つまたはそれ以上のコンピュータ読取り可能媒体(単数または複数)において具現化されるコンピュータ・プログラム製品の形を取ってもよい。
【0041】
1つまたはそれ以上のコンピュータ読取り可能媒体(単数または複数)の任意の組み合わせが用いられてもよい。コンピュータ読取り可能媒体は、コンピュータ読取り可能信号媒体またはコンピュータ読取り可能記憶媒体であってもよい。コンピュータ読取り可能記憶媒体は、たとえば電子、磁気、光学、電磁気、赤外、または半導体のシステム、装置、もしくはデバイス、または前述のもののあらゆる好適な組み合わせなどであってもよいがそれに限定されない。コンピュータ読取り可能記憶媒体のより特定的な例(非網羅的なリスト)は以下を含む。すなわち、1つまたはそれ以上のワイヤを有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能プログラマブル・リード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ(CD−ROM)、光学記憶装置、磁気記憶装置、または前述のもののあらゆる好適な組み合わせである。本文書の状況において、コンピュータ読取り可能記憶媒体は、命令実行システム、装置またはデバイスによる使用、またはそれに関連する使用のためのプログラムを含有または保存し得るあらゆる有形の媒体であってもよい。
【0042】
コンピュータ読取り可能信号媒体は、たとえばベースバンド内で、または搬送波の部分などとして媒体内で具現化されるコンピュータ読取り可能プログラム・コードを有する伝播データ信号を含んでもよい。こうした伝播信号は、電磁気信号、光学信号、またはそのあらゆる好適な組み合わせを含むがそれに限定されないさまざまな形のいずれかを取ってもよい。コンピュータ読取り可能信号媒体は、コンピュータ読取り可能記憶媒体ではなく、かつ命令実行システム、装置またはデバイスによる使用、またはそれに関連する使用のためのプログラムを通信、伝播または移送できるあらゆるコンピュータ読取り可能媒体であってもよい。
【0043】
コンピュータ読取り可能媒体において具現化されるプログラム・コードは、ワイヤレス、ワイヤライン、光ファイバ・ケーブル、RFなど、または前述のもののあらゆる好適な組み合わせを含むがそれに限定されない任意の適切な媒体を用いて送信されてもよい。
【0044】
本発明の局面のための動作を行うためのコンピュータ・プログラム・コードは、オブジェクト指向プログラミング言語、たとえばJava(R)、Smalltalk(R)、またはC++など、および従来の手続き型プログラミング言語、たとえば「C」プログラミング言語または類似のプログラミング言語などを含む、1つまたはそれ以上のプログラミング言語のあらゆる組み合わせで書かれていてもよい。プログラム・コードは、すべてがユーザのコンピュータで実行されてもよいし、(スタンド・アロン・ソフトウェア・パッケージとして)部分的にユーザのコンピュータで実行されてもよいし、さらに部分的に次のうちの2つまたはそれ以上で実行されてもよい。すなわち、ユーザのコンピュータ101、ユーザ・トラステッド・デバイス10、およびリモート・コンピュータ30である。ホスト・コンピュータおよびサーバは、ローカル・エリア・ネットワーク(LAN)、広域ネットワーク(WAN)、外部コンピュータへの接続(インターネット・サービス・プロバイダを使用するインターネット)を含むあらゆるタイプのネットワークを通じて接続されてもよい。
【0045】
本発明の実施形態に従う方法、装置(システム)およびコンピュータ・プログラム製品の流れ図もしくはブロック図またはその両方を参照して、本発明の局面を以下に説明する。流れ図もしくはブロック図またはその両方の各ブロック、および流れ図もしくはブロック図またはその両方におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実現され得ることが理解されるだろう。これらのコンピュータ・プログラム命令が、汎用コンピュータもしくは特定目的のコンピュータ、またはマシンを生成するためのその他のプログラマブル・データ処理装置のプロセッサに与えられることによって、そのコンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行された命令が、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定された機能/動作を実現するための手段を作成するようにしてもよい。
【0046】
さらに、これらのコンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置またはその他のデバイスに特定の態様で機能するよう指示できるコンピュータ読取り可能媒体の中に保存されることによって、コンピュータ読取り可能媒体に保存された命令が、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定された機能/動作を実現する命令を含む製造品を生成するようにしてもよい。
【0047】
さらに、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置またはその他のデバイスにロードされて、そのコンピュータ、その他のプログラマブル装置またはその他のデバイスにおいて一連の動作ステップを行わせることにより、コンピュータまたはその他のプログラマブル装置において実行された命令が、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定された機能/動作を実現するためのプロセスを提供するような、コンピュータに実現されるプロセスを生成してもよい。
【0048】
図面中の流れ図およびブロック図は、本発明のさまざまな実施形態に従うシステム、方法およびコンピュータ・プログラム製品の実現可能なアーキテクチャ、機能および動作を例示するものである。これに関して、流れ図またはブロック図における各ブロックは、指定された論理関数(単数または複数)を実施するための1つまたはそれ以上の実行可能な命令を含むモジュール、セグメント、またはコードの部分を表していてもよい。さらに、いくつかの代替的な実現においては、ブロック中に示される機能が図面に示される以外の順序で起こってもよいことに留意すべきである。たとえば、連続して示される2つのブロックは、伴われる機能に依存して、実際には実質的に同時に実行されてもよいし、それらのブロックがときには逆の順序で実行されてもよい。さらに、ブロック図もしくは流れ図またはその両方の各ブロック、およびブロック図もしくは流れ図またはその両方のブロックの組み合わせは、指定された機能もしくは動作を行う特定目的のハードウェアに基づくシステム、または特定目的のハードウェアとコンピュータ命令との組み合わせによって実現され得ることを注記する。
【0049】
前に触れたとおり、コンピュータを外部起動媒体から再始動し、外部媒体から「クリーンな」OS(セキュリティの観点からの「クリーン」)または別様のトラステッドOSを始動することは、PCにおいて実行されるあらゆるソフトウェアがPCのオペレーティング・システムに存在し得るウイルスまたは悪意あるソフトウェア(マルウェア)による攻撃を受け得るという問題を解決する1つのやり方である。
【0050】
しかし、本発明者らが認識したとおり、このアプローチは特に次の疑問を抱かせるものである。PCを再始動したのは果たして本物のユーザであるか?または、新たに始動したクリーンなOSを悪意ある仮想化環境が改ざんし始めているだろうか。さらに、セキュリティに無頓着であるか、もしくは利便性を好むか、またはその両方であるユーザが、コンピュータの再始動を回避するためにこうした概念を用いようとする可能性もあるだろう。
【0051】
一般的に図1から図3を参照して、セキュア・デバイス10(またはより一般的にユーザ・トラステッド・デバイス、加えて外部トラスト・アンカーとも呼ばれる)に関する本発明の局面を最初に説明する。このデバイスは企業または個人のデバイスであり、すなわち会社またはユーザが所有して制御するデバイス、たとえばUSBデバイス、好ましくはUSBフラッシュ・ドライブ(統合されたユニバーサル・シリアル・バス(Universal Serial Bus:USB)インタフェースに加えてフラッシュ・メモリを含むデータ記憶装置)、携帯電話またはパーソナル・デジタル・アシスタント(personal digital assistant:PDA)など、このユーザのみが使用するか、またはこのユーザが勤める会社によって所有され制御されるデバイスである。典型的に、このデバイスの重さは200g未満、好ましくは60g未満、より好ましくは40g未満である。このデバイス10を「セキュア」にするために寄与し得る付加的な局面を後で考察する。
【0052】
このデバイスは少なくとも、コンピュータ101との接続を可能にする接続インタフェース12と、特にいくつかのモジュール15、16、17を保存する永続的メモリ14とを含む。後者は、前記インタフェース12を介したデバイス10とコンピュータ101との接続の際に、デバイス10もしくはコンピュータ101またはその両方におけるいくつかの動作の実行を可能にするように設計される。
【0053】
こうしたデバイス10およびコンピュータ101が提供されるものと想定する(図3のステップS1)。次いで、デバイスの接続の際に(ステップS2)、上記の動作は本質的に高レベルにおいて以下のステップに存在する。
1.前記コンピュータ101がユーザ・トラステッド・デバイス10からの起動を開始することを可能にするステップ(ステップS3)。
2.プロセッサ105に何らかの参照コードを実行する(ステップS7)よう指示するステップ。
○なお、このコードは好ましくはデバイス10自身によって、たとえばプロセッサ命令モジュール15などによって提供される。変形においては、コードの識別子またはさらにアドレスがプロセッサ105に送られてもよい。このコードは典型的に、テストされるマシンに依存し得るいくつかの命令を含む。
○このコードは仮想化環境を感知するように選択されるために「仮想化感知コード」と呼ばれる。すなわち、このコードは仮想化環境において実行されるか、またはネイティブに実行されるかによって実行の態様が異なり、異なる実行特性を生じさせる。実行特性は、特に以下の点が異なっていてもよい。
■その実行によって生成される結果(これは以下に記載される第1のクラスの実施形態に関する)、もしくは
■タイミング特性、プロセッサ・サイクルなどによって測定可能な計算量(第2のクラスの実施形態)、またはその両方。
・たとえば、x86ベースPCに対して特に興味深い計算は、リアル・モードと保護モードとの切換えを行うことであろう。
・仮想化感知コードの他の例は後に示す。
○プロセッサへの命令に従い、コンピュータ101が起動を開始している間、すなわち起動プロセスが始まった後から完了する前まで、すなわちOSの主要/重要な構成要素がロードされる前に、仮想化感知コードの実行がなされる。
○プロセッサ105はさらに、実行完了の際に何らかの完了データ(例、結果、タイムスタンプ、またはタイムスタンプ可能な事象など)を発行するよう指示される、図3のステップS8。
3.次の動作セット(S9〜S13)は、完了データに基づいて、その実行が仮想化環境においてなされなかったかどうか(または同等に、その実行がたとえばネイティブなどの安全な環境でなされたかどうか)を判定することである。
4.最後に、もしその実行が仮想化環境においてなされなかったと判定されれば、コンピュータ101がデバイス10からの起動を完了する(ステップS15)ことが可能にされてもよい。特に下記のセクション2.1において考察されるとおり、実施形態において、この条件は間接的に確認され、たとえばユーザとの対話が必要とされてもよい。仮想化環境において実行されないという条件は必ずしも十分条件ではない。それは本発明の状況において必要条件である。特に下記のセクション2.2において考察されるとおり、他の条件が含まれてもよい(例、BIOSもテストされてもよい)。
○もしその実行が仮想化環境においてなされなかったと判定されれば、起動プロセスは継続され(ステップS15)、たとえばさらなるデータ、キー、ソフトウェア、ブート・イメージなどがその目的のためにコンピュータ101に提供されてもよい。
○反対に、もしその実行が仮想化環境においてなされたと判定されれば、次いで起動プロセスは中止される(ステップS14)。デバイス10はたとえばシャットダウンされてもよく、すなわちコンピュータ101にデータ、キー、ソフトウェアなどは与えられない。
○中間の状況が予期されてもよく、その場合には制限されたバージョンのOS(すべての構成要素は許可されない)または変更されたバージョンのOSがロードされて、コンピュータ101をクリーンにするためのパッチ/プログラムがロードされてもよい。
【0054】
コンピュータ101は典型的にはパーソナル・コンピュータ(personal computer:PC)であり、好ましくは可搬使用のためのPC、ノートブックもしくはネットブック、またはPDAまたはスマートフォンである。本明細書においては、簡潔のためにそれを(ホスト)コンピュータまたはPCと呼ぶ。
【0055】
要約すると、本発明の基礎をなす原理は次のとおりである。
−モジュール15〜17は、ユーザがそれらを信頼できるように最初にトラステッド・デバイス10に保存される。
−それらのモジュールはPCにおいて少なくとも部分的に実行可能であることによって、PCのプロセッサが仮想化感知コードを実行するよう強制する。
−前記モジュールは実行の結果を分析させることによって、その環境が仮想化されていないことを確認し、もしそうであれば起動プロセスが継続される。
【0056】
仮想化環境を識別することは、特に以下の理由から有利である。
・変更されたBIOSは、実際にはコンピュータが仮想化されているときに、トラステッド・デバイス10がホスト・コンピュータから正常に起動されたように装い得る。仮想化されたコンピュータはトラステッド・デバイスに対して実コンピュータと同様の提示を行うだろうが、仮想化層が適合するとみなすときにいつでもトラステッド・デバイスを用いて開始されようとするシステムを変更できるように、特定のコンピュータ命令を変更しているかもしれない。
・ユーザは自発的に、トラステッド・デバイスの上に/それを介して提供されたシステムを、仮想化環境において起動しようとするかもしれない。そうする理由は、私物PCを再起動する必要をなくして、すでに開始したプライベート・プログラムを維持するためかもしれない。すなわち、企業の仕事をするために自身のプライベート・プログラムを停止して、企業の仕事が終わったときにそれらを再始動させる必要をなくすためである。しかし、ユーザはそうすることによって、トラステッド・デバイスからのシステムを上記と同じリスクにさらすことになる。すなわち、このシステムは、仮想マシン実行の一部として感知計算が行われることを認識するコンピュータ上に存在するあらゆるマルウェアに露出されるだろう。
【0057】
上記の2つの理由から、トラステッド・デバイス10は、そのデバイスに対して提示されたコンピュータ101が実際のものか仮想化されたものかを識別できることが望ましく、それが本解決策である。
【0058】
ここで図2をより特定的に参照すると、実施形態において、前記モジュール15〜17は以下のとおりに分解される。
−PC101がデバイス10からの起動を開始する(および最終的に完了する)ことを可能にするブートローダ16、
−本質的にPCにおいて、PCのプロセッサ105に対し、仮想化感知コードを実行することと、完了データを発行することとを指示するために実行可能であるプロセッサ命令モジュール(すなわちPIM)15、および
−検証モジュール17。このモジュールは、デバイス10もしくはコンピュータ101またはその両方において実行可能であり、完了データを(直接的または間接的に)分析するように設計されている。
【0059】
ブートローダ16は、トラステッド・デバイス10がPC101と接続される際に、たとえばBIOS122などの初期化ファームウェアによって検出可能である。ブートローダはさらに、PIM15をPCにおける以後の実行のためにPC101に移すことを開始するための、ファームウェア122に対する命令を含む。
【0060】
なお、モジュール15および17は単一のエンティティとみなされてもよく(それを仮想化分析モジュール(virtualization analysis module)すなわちVAMと呼ぶ)、その機能はプロセッサに指示することだけではなく、完了データを分析することも行う。
【0061】
前に触れたとおり、第1のクラスの実施形態において、PIM15はプロセッサ105に対して、コンピュータ101、好ましくはプロセッサ自体によって支援される機能のリストを完了データの一部として生成させるコードを実行するように指示してもよい。こうした機能の1つは、CPUによってハードウェア仮想化支援が提供されるかどうかである(すなわち、CPUの機能レジスタ内に設定されるvtxビットと、対応するモデル固有レジスタ内のvtxイネーブル・ビットとの形である)。もしそうではないのに、cpuid命令によって報告されるCPUはハードウェア仮想化が可能であれば、これはソフトウェアにおいてこれらの命令をエミュレートしない仮想化環境内での実行を示すものである。その他のこうした能力は、システムに存在するハードウェアに対して、仮想化されたグラフィックス(典型的な準仮想化環境の場合)カードが存在するか、または実際のものが存在するかをチェックすることである。
【0062】
次に、検証モジュールまたはVAMは、支援される機能のリストを何らかの基準データと比較して、その実行が仮想化環境においてなされたかどうかを結論付けてもよい。こうした動作はCPU105によって直接実行されてもよいし、ユーザ・デバイス10において実行されてもよいし、デバイスおよびCPUにおいて共同で実行されてもよい。
【0063】
しかし、もっとロバストなのは、プロセッサ105が実行完了の際に完了データの一部として最終状態値を生成または使用するようにさせることである。この値は、プロセッサが仮想化感知コードを実行するために必要とされたプロセッサの計算量に依存するものであり、すなわちそれに影響される。こうした値はたとえばタイムスタンプ、またはデバイス10もしくはその任意のモジュールに対する命令(デバイス10またはPCにおいて実行されるものとする)であって、受信の際にタイムスタンプされ得るものなどであってもよい。さらに、この値はプロセッサ・サイクル数、所与の数の先行サイクルまたは所与の時間の間の最大CPU使用、実行後の時刻などであるか、またはそれを参照するものであってもよい。この値を何らかの好適な基準値と比較することによって、次いでその実行が仮想化環境においてなされたかどうかを結論付けることが可能である。
【0064】
第2のクラスの実施形態は、第1のクラスの実施形態よりも信頼性が高い。なぜなら、プロセッサ105またはマシン101によって支援される特定の機能が(例、ベンダによって)無効にされたために非仮想化環境を確認することが容易でなくなることがあるためである。
【0065】
好ましくは、プロセッサ105は初期状態値、すなわち仮想化感知コードを実行する前のプロセッサの状態を反映する値をさらに生成または使用してもよい。ここでも、初期状態値はタイムスタンプ、デバイス10またはそのモジュールに対する命令、プロセッサ・サイクル数、時刻などであってもよい。
【0066】
初期値および最終値の両方を有することで、プロセッサ使用値、すなわち仮想化感知コードを実行するために必要とされた計算量を直接的かつ明確に定量化する値が容易に得られる。こうしたプロセッサ使用値は、たとえば計算持続時間、プロセッサ・サイクル数、または任意の好適なカウンタなどであってもよい。さらに、プロセッサ使用値は初期値とは独立して生成されてもよい。たとえば、(所与の数の先行サイクルまたは所与の先行時間の間の)最大CPU使用は、所与の命令セットを実行するために必要とされる計算量を示すものとなる。
【0067】
最終状態値はすでに十分であり得るが、上に定義されたプロセッサ使用値を用いることで、(それは実行に必要とされる計算量を直接的かつ明確に定量化しているため)より直接的かつ関連性のある比較が可能になる。
【0068】
次に検証モジュール17は、最終状態値/プロセッサ使用値を分析し、次いでその実行が仮想化環境においてなされなかったかどうかを判定するために関与する。その目的のために、検証モジュール17は、デバイス10において入手可能であるか、または第三者30を介して入手可能である基準値と、最終状態値/プロセッサ使用値とを単純に比較してもよい。変形において、検証モジュール17は結論を出す前に、プロセッサ105によって実行されたものと同じ仮想化感知コードの(デバイス10または第三者30において行われる)同時実行をトリガした後に、比較に進んでもよい。
【0069】
加えて、プロセッサ使用値の算出は、その目的のために記録または発行された初期および最終状態値を用いて、プロセッサ105によって直接行われてもよいし、(デバイスまたはPCのいずれかにおいて実行中の)検証モジュール17によって行われてもよいことに留意されたい。しかしながら、この算出はデバイスにおいて実行することが好ましい(実行のためにCPU11を伴う事柄)。なぜなら、デバイス10内で算出された使用値は容易に操作され得ないため、こうした解は改ざんされにくいからである。しかし、(PC101とデバイス10との間に)余分な通信オーバーヘッドが必要となるために、いくらか不正確さが加わるおそれがある。
【0070】
検証モジュール17による最終状態値またはプロセッサ使用値の分析は、PCまたはデバイス10において行われてもよい。使用値の算出および分析をデバイスで実行するか、それともPCで実行するかは、PCの既知であるかまたは検出された通信オーバーヘッド特性に基づいて、設計段階で決められてもよいし、実行時に動的に決められてもよい。
【0071】
プロセッサ使用値の算出がプロセッサに任される(例、PCにおいてカウンタが増分される)ときには、CPUのタイムスタンプ・カウンタに依拠することが好ましい。このカウンタはCPUサイクルをカウントするため、非常に正確である。CPUのタイムスタンプ・カウンタを改ざんすることは、かなりの労力を要する。
【0072】
一連の動作の例は次のとおりである。
1.トラステッド・デバイス10およびPC101が提供される。
2.デバイス10がPC101に差し込まれる。
3.初期化ファームウェア122によってブートローダ16が検出され、PCがデバイス10からの起動を開始する。
4.ブートローダ16はPCに、PIM15(またはVAM15+17)を所与のメモリ位置121に移すよう指示する。
5.PIM15が実行を開始する、すなわちそれがプロセッサ105によって実行される。
6.実行中に、プロセッサに対するPIMの命令によって、プロセッサは
a.初期状態値を記録(または発行)し、
b.PIM15によって示される仮想化感知コードの実行を開始し、
c.最終状態値を記録し、
d.たとえば持続時間などのプロセッサ使用値を算出する。
7.次に、検証モジュール17またはVAM15+17は、CPU105もしくはデバイスのプロセッサ11またはその両方に対する命令によって、以下の動作をトリガするための介入を行う。
a.プロセッサ使用値と基準値とを比較する(またはさらに別の、たとえば外部エンティティ30などに比較するよう指示する)こと、および
b.その実行が仮想化環境においてなされたかどうかを結論付けること。
【0073】
後で考察されるとおり、最後の2つの動作はCPU105によって、またはユーザ・デバイス10において直接実行されてもよいし、デバイスおよびCPUにおいて共同で実行されてもよいし、さらに別のエンティティ30を伴って実行されてもよい。
【0074】
仮想化感知コードは1つまたはそれ以上の命令を含んでもよい。前に触れたとおり、その例は、プロセッサを保護モードからリアル・モードに切換えるための命令、もしくはプロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方である。こうした命令は、x86ベースPCにとって特に有利である。その計算はハードウェアで行うことができ、迅速である。これに対し、仮想マシン内で実行されるとき、仮想マシンはこれらの命令をキャッチし(これはCPU例外を通じてのみ行われ得る)、次いでそれらをソフトウェアまたはさらに長時間かかる他の機構において実行する必要がある。たとえハードウェア仮想化支援を有するCPUであっても、これをハードウェアで行うことはできない。なぜならリアル・モードはレガシとみなされ、これらの機能に対してハードウェア仮想化は利用できないからである。
【0075】
本状況において有利に用いられ得る仮想化感知命令の他の例も存在する。たとえば、
−プロセッサがマシン固有レジスタを読取るための命令、すなわち「rdmsr」、
−プロセッサがマシン固有レジスタに書込むための命令(「wrmsr」)、もしくは
−いわゆるa20ゲートを可能にするための命令(しかしこれは複雑な実施を必要とするために好ましくない)、またはその組み合わせなどである。
より一般的には、ネイティブに実行されるときと仮想化環境において実行されるときとで異なるリソース特性を有するあらゆるその他の命令が予期され得る。
【0076】
例示の目的のために、すべての命令がプロセッサ105によって実行されるものと想定する(プロセッサ使用値の算出を含む)。その場合には典型的に、PIM/VAM15、17の2種類の命令(セットアップ命令対仮想化感知コード)が区別され、図3を参照してそれらを説明する。
a.初期セットアップ
i.プロセッサ105を保護モード(protected mode)(以下PM)にして、プロセッサが保護モードであることを確認する。
ii.以後の計算(ステップS7)および完了データ発行(ステップS8)のためにメモリを割り当てる。
iii.開始時刻を記録する(ステップS6)。
b.仮想化感知命令は、たとえば以下のいずれかを用いてもよい。
i.以下を含むモード切換え命令。
1.PMからリアル・モード(real mode)(以下RM)への切換え、比較すると仮想化環境の方がエミュレートする時間が長くなる。
2.RMからPMへの切換え。
ii.マシン固有レジスタを読取る(read machine specific register)ための読取り命令(rdmsr)。
iii.マシン固有レジスタに書込む(write to machine specific register)ための書込み命令(wrmsr)。
なお、仮想化感知命令は、PIM/VAMからの命令の際にプロセッサによって呼び出される(プロセッサによって実行される)サブルーチンによって実行されてもよい。たとえばグラフィックス・カードなど、仮想化される必要のある他のハードウェア構成要素を仮想化感知命令が含んでいるときに、この選択肢は特に好ましい。この場合、仮想化感知コードはグラフィックス処理ユニット(Graphics Processing Unit:GPU)と対話して、仮想化環境において実行されるときにソフトウェアにおいてエミュレートされる必要があるためにより長い時間がかかるような命令を実行する。他の予想される変形も存在する。
c.最終セットアップ
i.最終状態値(例、終了時刻)を記録する。
ii.プロセッサ使用値(例、持続時間)を計算する。
iii.基準値と比較する。
iv.仮想化環境に関して結論を出す。
【0077】
ここでも、上記実施例において最終セットアップはプロセッサ105に向けられることが想定されているが、最終動作はプロセッサもしくはデバイス10またはその両方において行われてもよい。最終命令が少なくとも部分的にデバイス10に向けられる場合、これらの命令は、プロセッサがデバイス10に対して最終命令を実行するよう信号を送るようにするために、多少異なる態様で配置される必要がある。
【0078】
前に暗示されていた可能性は、得られたプロセッサ使用値(または最終状態値のみ)の分析の一部またはすべてを達成するために、たとえばサーバ30(図1を参照)などの第三者を関与させることである。その場合、検証モジュール17はさらに、デバイスまたは好ましくはコンピュータ101に対して、サーバ30と接続するよう指示するように構成される。「中央」サーバは、さまざまな可能性のある常に変化するマシン状態に関してより容易に更新され得る。
【0079】
その目的のために、検証モジュール17は、以下のうちの1つまたはそれ以上と対話するように構成されてもよい。
−(ネットワーク・カード124によって可能にされる)ネットワーク165を通じた通信を開始してサーバ30に接続するために、初期化ファームウェア122と対話することによって、その後コンピュータ101のネットワーク・カード124と対話する。
−コンピュータ101のネットワーク・カード124と直接対話する。これは、この場合にはトラステッド・デバイス10に保存されたネットワーク・カード・ドライバにアクセスすることを必要とする。
−たとえばブートローダなどを介してファームウェア122と対話することによって、コンピュータ101のOSを部分的に実行し、すなわちPC101を介してサーバ30に接続するために必要なOSの構成要素をロードする。
【0080】
デバイス10と外部エンティティ30との間の通信は、次の手段によって行われることが好ましい。
−コンピュータ101を通じたサーバ30からデバイス10へのHTTP接続、
−エンド−エンド認証、ならびに
−必要であれば、デバイス10のセキュア・メモリ141に保存され得るシグネチャおよびその他の暗号化データ13。
【0081】
根本的な代替形として、たとえばサーバに直接接続するために、たとえばネットワーク・デバイス(有線またはワイヤレス)などのネットワーク・アクセス手段をデバイス10に装備することが好ましいことがある。こうした解決策は、多少高価になる。しかし、サーバに接触するためにコンピュータ101と付加的な対話を行う必要がないため、待ち時間が低減される。ここでも、サーバ30との通信にエンド−エンド認証および暗号化が用いられてもよい。
【0082】
次に、図2をより特定的に参照して、永続的メモリ14は好ましくは以下を含む。
−PIM15またはVAM15−17の第1の部分151(または所与の部分)が保存され得るセキュア・メモリ141、および
−モジュール(単数または複数)15、17の第2の部分152(またはその他の部分)が保存され得る、たとえばSDカードなどの非セキュア・メモリ142。
【0083】
セキュア・メモリの存在によって、ユーザ・トラステッド・デバイスはセキュア・デバイスとなる。たとえば、モジュール15の一部は暗号化されて非セキュア・メモリ142に存在してもよく、一方で対応する暗号化キー13がセキュア・メモリ141に保存されてもよい。セキュア・メモリは典型的に、コスト上の理由から128koまたは256koに制限される。よってそれは、たとえばハッシュ/シグネチャ13などの暗号化データを保存するためだけに用いられ得ることが好ましい。したがって、モジュールの一部分151がセキュア・メモリ141に存在してもよく、一方でモジュールの他の部分152は暗号化されて非セキュア・メモリ142に存在してもよい。同様に、ブートローダ16はセキュア・メモリ141に存在するシグネチャによって暗号化されて、SDカードに存在してもよい。コンピュータ101がブートローダの所与のブロックまたは任意のデータ・チャンクを要求するとき、デバイスのCPU11はメモリ14内に存在するソフトウェアによって、たとえばセキュア・メモリ141に保存される暗号化データを用いるなどして要求されたブロックを復号化するように促される。
【0084】
好ましくは、メモリの制約のために、セキュア・メモリに存在するモジュール(単数または複数)15−17の部分(単数または複数)は、セキュア・メモリのサイズの半分未満を占める。しかし理想的には、モジュールのすべての部分ができる限り小さいメモリを占有する。たとえば、モジュール15のいくつかの実施では、モジュール15−17の各部分に対して4ko未満を用いるもののテストに成功している(およそ32ko、典型的には64ko未満を消費する、ネットワーク・サーバに接触するためのコードは除く)。リモート・サーバに接触するための機能を実現するコードは、ユーザ・トラステッド・デバイス10に保存される複数のモジュールに共有され得ることを当業者は認識するだろう。
【0085】
デバイス10の接続インタフェース12は、たとえば次のタイプのものであってもよい。
−ユニバーサル・シリアル・バスすなわちUSB、
−外部の小型コンピュータ・システム・インタフェース(Small Computer System Interface)すなわちSCSI、
−外部のシリアル・アドバンスト・テクノロジ・アタッチメント(Serial Advanced Technology Attachment)すなわちSATA、
−Firewire(R)、または
−Thunderbolt(R)。
しかし、より一般的には、コンピュータが外部デバイス10から起動することを可能にするのは、あらゆる現行または将来のコネクタ(有線またはワイヤレス)であってもよい。加えて、その同じインタフェース12がさらに、たとえばプロジェクタ、プリンタ、または任意のその他の出力デバイスなどの任意の外部デバイスと、ユーザ・トラステッド・デバイス10とが通信することを可能にしてもよい。
【0086】
通常どおり、ユーザ・トラステッド・デバイス10には、メモリに結合されたたとえば暗号プロセッサなどの処理手段(またはコンピューティング手段、すなわちCPU)11が設けられてもよく、メモリはより一般的には永続的メモリ14を含み、好ましくは非永続的メモリも含む(明確に示されていないが、非永続的メモリは処理手段11の一部と考えられ得る)。
【0087】
この状況において、永続的メモリは特に、処理手段11、105によって実行される、たとえば上述のモジュール15〜17などのコンピュータ化された方法を保存する。もちろん、本明細書に記載されるモジュール15〜17は、異なる機能が設けられ、かつデバイスおよびコンピュータにおいて実行可能な単一のモジュールと考えられてもよい。
【0088】
必要であれば、セキュア・デバイス10は、たとえば非セキュア・メモリ142または任意のスマート・カードなどのメモリ・カードに保存されたユーザの信用証明を読取るためのカード・リーダを有する。好適な使用は、たとえばカードに保存されたユーザの信用証明などのこうしたデータから安全に行われ得る。特に、ホスト101を介し、かつこうしたデータを用いて、ユーザ(または厳密にいえばデバイス10)と、たとえばサーバ30などの第三者との間に信頼できる接続を確立できる。変形において、ユーザの信用証明はセキュア・デバイスに直接保存されてもよい。ユーザとの対話を可能にするために、さらなるインタフェース(制御ボタンおよびディスプレイなど)が提供されてもよい。
【0089】
次に、同様に本発明は、コンピュータ101がユーザ・トラステッド・デバイス10から起動することを可能にするための方法と考えられてもよい。この方法は少なくとも、デバイス10を参照してすでに説明された以下の必須のステップを含む。
−トラステッド・デバイスがデバイス10の接続インタフェース12を介してコンピュータ101と接続されるS2際に、コンピュータ101がトラステッド・デバイス10からの起動を開始することを可能にするステップS3、
−プロセッサ105に対して、
○仮想化感知コードを実行することS7と、
○実行完了の際に完了データを発行することS8とを指示するステップ、
−前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップS9〜S13、および
−その実行が仮想化環境においてなされなかったと判定されたときに、コンピュータ101がユーザ・トラステッド・デバイス10からの起動を完了することを可能にするステップS15。
【0090】
前にすでに述べたとおり、以下のことを行うために、初期化ファームウェア122と対話するためにブートローダが関与することが好ましい。
−前記コンピュータ101がユーザ・トラステッド・デバイス10からの起動を開始することを可能にすることS3、および
−PIM15(またはVAM15+17)を以後の実行S5〜S6のためにコンピュータ101に移すことを開始することS4。すでに説明したとおり、これによってプロセッサ105は仮想化感知コードを実行しS7、かつ完了の際に完了データを発行するS8。
【0091】
加えて、判定ステップS9〜S13は、デバイス10もしくはコンピュータ101またはその両方において実行される検証モジュール17と、好ましくはコンピュータ101を介して接続されるサーバ30とを伴っていてもよい。
【0092】
よって検証モジュール17は、
−デバイス10またはコンピュータ101において完了データを局所的に評価してもよいし、
−たとえば前記完了データを基準データと比較することなどによって完了データを評価するサーバに接続してもよい。
【0093】
後者の場合、サーバは比較に進んで、その実行が仮想化環境においてなされたか否かを結論付けてもよいし(その場合、モジュール17は単に、起動を完了するか、または何らかの他の動作を行うかを示す命令をサーバから受信する)、またはサーバはその評価の結果を検証モジュール17に通信し、モジュール17が判定を完了して、その実行が仮想化環境においてなされたかどうかを結論付けてもよい。スキームの複雑さによって、必要であれば、付加的なステップおよびサーバとの通信ステップが含まれてもよい。
【0094】
必要であれば、検証モジュール17は、たとえば第1のテストからの疑わしい結果を明瞭にするなどのために、プロセッサ105による付加的な命令の実行をトリガしてもよい、ステップS16。
【0095】
上記の実施形態は添付の図面を参照しながら簡潔に説明されており、いくつかの変形に適応してもよい。上記の機能のいくつかの組み合わせが予期されてもよい。その例を次のセクションに示す。
【0096】
2.特定的実施形態/技術的実施の詳細
ここでは、前のセクションで考察されたいくつかの任意の機能を組み合わせた特定的実施形態について考察する。加えて、仮想化感知コードが仮想化環境において実行されるかどうか(セクション2.1)を補足するものとして、PCのファームウェア122が改ざんされたかどうかを識別することを可能にする新規の方法をセクション2.2に提供する。実施形態において用いられ得る命令の典型的な例をセクション2.3に示す。
【0097】
2.1 仮想マシン内の実行を検出する、特定的実施形態および変形
特定的実施形態においては、以下の一連のステップが実施される。トラステッド・デバイス10がPC101に接続され、PCが再始動され、ブートローダが検出され、PIM15が以後の実行のためにすでにPCに移されたものと想定する。
1.トラステッド・デバイス10は、PC101において既知の計算が始まったことを知らされる。外部デバイス10は、初期状態時刻、すなわちちょうどその計算が開始されたときの、前の最終既知時間値を記録する。
2.計算が開始される。その計算自体が、ネイティブに実行されたときと仮想化環境で実行されたときとでそのタイミング特性が異なるという性質のものであり、それはたとえばリアル・モードと保護モードとの切換えを行う命令などである。より一般的には、もしハードウェアを用いることができればプロセッサが迅速に実行できるような任意の命令である。こうした命令の例は、rdmsr、wrmsr(前述のとおり、モデル固有レジスタ命令の読取り/書込み)、または対応するモデル固有レジスタにおいても設定されるときにはrdtsc(タイムスタンプ・カウンタの読取り(read timestamp counter))である。その他の例は、たとえばx86アセンブリ命令マニュアルなどに見出され得る。
3.計算が終了すると、外部デバイス10に接触する。
4.次いでトラステッド・デバイスは、その計算にどれ位時間がかかったかをチェックし、基準値(たとえばデバイス10の内部などにおいて同じ計算を同時に実行することなどによって得られてもよいし、予め計算されていてもよい)との比較に基づいて、その計算が仮想化環境において実行された可能性を定める。
a.これまでに本発明者らが調べた中で最速の仮想化支援は、コードをネイティブに実行するときよりも約8倍長い。
b.仮想化環境は高速デスクトップPCにおいて実行されたのに対し、ネイティブ環境は平均的なノートブックPCであったため、同じハードウェアにおける時間差は8という因子よりも大きいことが予測される。これは、提案されるテスト・コードが仮想化環境で実行されたか否かを判定するために十分な余地を与える。
c.たとえば、もっと小さい因子が閾値因子として選択されてもよい。たとえば因子4など(これはすでに警告的である)。
5.外部デバイス10が仮想マシンの存在を識別するとき、外部デバイス10は動作を中止してもよいし、好ましくはユーザもしくはセキュアに接続されたサーバ30またはその両方に対して、動作を中止して作業を停止するように知らせてもよい。
6.もし仮想化環境が検出されなければ、デバイスは、たとえばデバイス10に保存され得るさらなるソフトウェア構成要素をPCが検索することを可能にするなどのために動作を続けるか、または、実行されるべきソフトウェアに対する暗号化キーもしくはその他の認証トークンまたは前述のとおりのクリーンなOSを与える。
【0098】
上記ステップの複数の変形が予期され得る。
・上記の項目1および3は、たとえばPCのタイムスタンプ・カウンタ(time stamp counter:TSC)など、仮想化環境によって操作できないか、または操作が困難である任意のタイミング・ソースと組み合わされてもよい。
・得られたタイミング値をPC内のCPUと相関させることによって、それが仮想マシンの下で実行されたか否かのさらに良好な推定を得てもよい。
・上記の項目4において、完全に自動化されたプロセスの代わりに、デバイスがユーザに情報を提示して、OSの起動に進むかどうかをユーザに尋ねてもよい。これは、ユーザが信頼されている(かつ、こうした判定を行い得ると考えられる)場合を対象とする。たとえば、PCが所与の命令を実行するのに30msかかり、それは典型的にクリーンな環境において10〜15msかかるものであり、一方で悪意ある実行は典型的に100msを要するという事実がユーザに知らされてもよい。この場合、ユーザは、たとえば自身のマシンが古いためにこの計算時間は妥当であると結論付けてもよい。別の例において、タイミングが65msと示されるとき、ユーザは、たとえばそのマシンが最近の高速のものであり、タイミングは7〜10msの範囲のはずであることから、悪意ある環境と結論付けてもよい。
・この情報は客観的に提示されてもよいし、さらに符号化されてもよい(緑、赤または橙色のフラグ、123など)。
・こうした設計上の変形は、コンピュータが日々高速化するという事実に適応することを助ける。しかし、これはユーザ側の知識を必要とする。
・項目4において、サーバに進行の許可を求めるために、導入部において引用した非特許文献1に別様に記載されるとおりに、外部デバイスがサーバと対話してもよい。
【0099】
上記の方法はヒューリスティックなものであり、攻撃を準備するためのリソースおよび時間を有する確信的な攻撃者を止めることはない。しかしおそらく、彼が攻撃を起こすときまでに新たなバージョンのソフトウェアが利用可能になり、攻撃者は再び自身のセットアップを変更する必要が生じるだろう。言換えると、上記の方法は単に任意の攻撃者に対するより多くの障害を置くことによって、そのシステムへの不正侵入を2桁のオーダで困難にすることを意図するものである。
【0100】
2.2 改ざんされたBIOSを検出する
本発明者らも認識しているとおり、コンピュータを外部起動媒体から再始動して、外部媒体から「クリーンな」OSまたは別様のトラステッドOSを始動することは、別の疑問を抱かせる。すなわち、そのBIOS、およびより一般的にはPCの始動に関与した任意の初期化ファームウェア122は信頼できるものだろうか?実際に、コンピュータを始動している間に他の初期化ファームウェアの実行が促されるか、または促されたかもしれず、それも感染され得る。
【0101】
この付加的な問題を解決するために、実施形態において、デバイス10は付加的な動作をトリガするかまたは実行することができてもよく、その動作は高レベルにおける次のステップからなる。
1.コンピュータ101がデバイス10からの起動を開始する際に(または仮想化がチェックされた後に)、ファームウェア・データをコード(すなわちマッピング・コード)にマップするステップであって、このファームウェア・データは、初期化ファームウェア122のプログラム・コード、もしくは起動開始の際にたとえばBIOS122などの初期化ファームウェアによってアクセス可能なデータ、またはその両方を含む、ステップ、
2.このマッピング・コードの信頼性を証明するステップ、および
3.マッピング・コードが証明されたとき(これは、仮想化環境が関与していないことを判定できるかどうかに加えたさらなる条件である)に、コンピュータ101がデバイス10からの起動を完了することを可能にするステップ。
【0102】
この付加的な方法は、初期化ファームウェアのプログラム・コード、もしくは起動開始の際に初期化ファームウェアによってアクセス可能なデータ、またはその両方を含むデータを得た後に、こうしたファームウェア・データをチェックすることによって、こうしたファームウェアの信頼性を証明することを可能にする。よって実施形態において、コンピュータは、仮想化環境が関与していないことを判定できるかどうかに加えて、ファームウェア・データが証明されたときにのみ、外部起動媒体10からの起動プロセスを完了してもよい。
【0103】
ここでも、この付加的アプローチの重要な要素は、それが通常のPC、PDAなどよりも本質的にマルウェアまたは攻撃者によるアクセスがかなり困難であるPC外部トラスト・アンカー10を必要とすることである。これらの付加的ステップの別の重要な要素は、適切なときに、すなわちOSが始動される(または少なくとも完全に始動される)前にPCに関する重要な情報を集めて、それをたとえばセキュアなチャネルなどを介して信頼できる分析に報告し、最後にクリーンなOSの実行を開始するかどうかに関する判定を行うことである。
【0104】
どの重要な情報、すなわちどのファームウェア・データを用いるかに関して、いくつかの予想される変形が存在する。ファームウェアのプログラム・コード自体を用いることは、攻撃者がプログラム・コードを変更することを防止するのですでに十分である。ファームウェアのプログラム・コード自体とは独立して、たとえば初期化ファームウェアに対する構成データなど、初期化ファームウェアによってアクセス可能なデータを用いることも有利である。なぜなら、実際には構成データ(のみ)が改ざん可能だからである。よって、初期化ファームウェアのファームウェア・プログラム・コードと、初期化ファームウェアによってアクセス可能なデータとの両方を用いることが理想的である。構成データに関しては、たとえば、始動時に、ファームウェア122の専用であるか、またはファームウェア122によってアクセス可能なROMまたはCMOS ROM上で計算されるハッシュ値(よってファームウェアのプログラム・コードおよび構成データの両方を含む)、およびあらゆるその他のキー識別ストリングなどが用いられてもよい。こうしたデータは、ファームウェアおよびそのファームウェアの状態を特徴付けるため、前記初期化ファームウェアが損なわれているかどうかに関する堅実な根拠を提供する。
【0105】
加えて、こうしたデータを単一のコードにマップすることによって、迅速なチェックすなわち迅速な証明が可能になる。たとえば、BIOSのROM、BIOSのCMOS ROM上で計算されたハッシュ値、もしくはその他のキーBIOS識別ストリング、またはその両方が用いられてもよい。より一般的には、その後のチェックを容易にするために、ファームウェア・データセットを、好ましくはたとえば単一の整数などの固定長のコードにマップできる、任意のアルゴリズム/サブルーチンが用いられてもよい。多くの点からハッシュ関数を用いることがより適切であると考えられるが、単純なチェックサムが依拠されてもよい。所望のセキュリティ・レベルによっては、なおもフィンガープリント、すなわち相当量のデータセットを一意に識別するための高性能ハッシュ関数、暗号ハッシュ関数、またはさらにランダム化関数を用いることが好まれてもよい。
【0106】
コード・マッピングは、仮想化環境をテストする前または後に行われてもよい。再起動の必要はない。たとえば、仮想化チェックおよびCMOSチェックサムを実行する順序は問題にならない。しかし、両方のデータ項目(仮想化データおよびハードウェア・フィンガープリント)がデータベース内で計算されてチェックされることが有利である。このやり方で、仮想化およびハードウェア・フィンガープリントの両方がホワイト・リストに適合する必要がある。加えて、仮想化およびハードウェア・フィンガープリントは、独立にではなく相関的にテストされてもよい。たとえば、それ自体は許容可能な仮想化データが得られて、それをそれ自体は許容可能なハードウェア・フィンガープリントと対にしたときに、正しいと識別されない組み合わせが形成される、すなわち仮想化データが正しいハードウェア・プロファイルと適合しないことがある。たとえば、ハードウェア・フィンガープリントは高速コンピュータを有するPCを識別しているのに、仮想化データは低速コンピュータのタイムスタンプを生成するとき、たとえば同じデータベース内などでこれら2つを組み合わせて、得られた組み合わせをチェックすることによって、そのことを識別できる。
【0107】
たとえば、セクション2.1および2.2に記載される2つのアプローチを組み合わせて、本発明は、ユーザ・トラステッド・デバイス、またはそれに応じて、コンピュータ101がユーザ・トラステッド・デバイス10から起動することを可能にするための方法として具現化されてもよい。本質的に、ここでもユーザ・トラステッド・デバイス10は、前記コンピュータ101との接続S2を可能にする接続インタフェース12を含み、かつこの方法は、
1.前記接続インタフェース12を介したデバイス10と前記コンピュータ101との接続の際に、コンピュータ101がデバイス10からの起動を開始することを可能にするステップと、
2.ファームウェア・データをマッピング・コードにマップするステップであって、ファームウェア・データは、初期化ファームウェアのコード、もしくは起動開始の際にコンピュータの初期化ファームウェア122によってアクセス可能なデータ、またはその両方、および好ましくは初期化ファームウェアのハードウェア・データセットを含む、ステップと、
3.マッピング・コードの信頼性を証明するステップと、
4.コンピュータ101のプロセッサ105に対して、
a.仮想化感知コードを実行すること、および
b.実行完了の際に完了データを発行することを指示するステップであって、この完了データは仮想化感知コードおよびプロセッサ105によるその実行に依存する、ステップと、
5.前記完了データに基づいて、その実行が仮想化環境においてなされなかったかどうかを判定するステップと、
6.以下の場合、すなわち
a.その実行が仮想化環境においてなされなかったことが判定され、かつ
b.マッピング・コードが証明されるか、または
c.仮想化メトリクス、マッピング・コード、およびマッピング・コードと(に関して)相関させた仮想化メトリクスが正しいときに、
前記コンピュータ101がユーザ・トラステッド・デバイス10からの起動を完了することを可能にするステップとを含む。
【0108】
なお、変形においてはステップ2〜3をステップ4〜5の後に行っても、並行して行っても、インタレースして行ってもよい。
【0109】
前に言及したとおり、上記のステップ2および4の間に再起動は必要ない。しかし最後のコメントとして注記すると、コンピュータは、(上記のステップ1を実行するため、すなわち起動を開始するために)デバイス10がそれに接続された後、または別様にそれが外部デバイス10から始動される状態にされたときに、大抵(再)始動される必要がある。したがって、たとえば次の選択肢が考えられる。
・コンピュータ101は停止しており、デバイス10を差し込み、コンピュータを始動するか、または
・コンピュータ101はすでに走行しており、デバイスを差し込み、コンピュータを再始動する。
【0110】
2.3 実施形態において用いられる命令の例
前に仮想化感知命令の例について考察した。ここでは、本発明の実施形態を実現するために有利に用いられ得る(一連の)他の命令の例を以下に示す。本質的に同じことを達成するために用いられ得る、同じ/類似の機能を有する他の命令が存在することを当業者は認識するだろう。
【0111】
最初に、BIOS情報(「ファームウェア構成データ」)の読取りを可能にするAPIの例を以下に示す。
outb(cmos_data_address,0x70);
data_at_address=inb(0x71);
ここで、cmos_data_addressは0...max_cmos_data_addressの範囲で反復される。ファームウェアのプログラム・コード自体、もしくはその構成データ、またはその両方を読取るためのその他の類似の命令は、インテル(Intel)(R)82802AB/82802ACファームウェア・ハブ(Firmware Hub:FWH)によって提供される。
【0112】
EFI BIOSにおいて、特にたとえばインテル(R)ファームウェア・ハブなどが用いられるときには、BIOS情報を得るために同じ命令が用いられてもよい。
【0113】
次に、PCからユーザ・トラステッド・デバイスと対話することを可能にする命令の例を示す。
ユーザ・トラステッド・デバイス(大容量記憶装置)からブロックを読取る
mov ah,42h
mov dl,the_drive_to_read_from
mov ds:si,disk_address_packet_describing_what_to_read
int 13h
【0114】
ユーザ・トラステッド・デバイス(大容量記憶装置)にブロックを書込む
mov ah,43h
mov dl,the_drive_to_write_to
mov ds:si,disk_address_packet_describing_what_to_write
int 13h
【0115】
EFI BIOSにおいて、いわゆるEFI_DISK_IO_PROTOCOLまたはEFI_BLOCK_IO_PROTOCOLが用いられてもよく、これらはどちらも読取りおよび書込み機能を提供する。
【0116】
当業者にとって、好適なディスクI/Oコマンドは容易にアクセス可能である。
【0117】
最後に、PXE BIOSを初期化するためにモジュールによって使用され得る一連の命令の例は、以下を含むがこれに限定されない。
UNDI ROMをロードする
PXENV_START_UNDI
PXENV_UNDI_STARTUP
PXENV_UNDI_INITIALIZE
PXENV_UNDI_OPEN
【0118】
ネットワーク・カード124を介してサーバ30にパケットを送るために、付加的な命令(例、PXENV_UNDI_TRANSMIT)が追加されてもよい。こうした命令によって、モジュールはホストにおける実行の際に、ネットワーク・カード124を初期化するためにPXE BIOS122と対話し、それによってネットワークを通じた通信が開始され得る。
【0119】
EFI_SIMPLE_NETWORK APIにおいては、EFIおよびUEFI BIOSによって類似の命令が提供される(初期化、開始、停止、受信、送信)。BIOSはさらに、TCP/IPスタックのより高レベルのプロトコル実施、および同様に使用され得るその他のネットワーキング・プロトコルを提供してもよい。
【0120】
限られた数の実施形態、変形および添付の図面を参照して本発明を説明したが、本発明の範囲から逸脱することなく、さまざまな変更が加えられてもよいし、同等物が置換されてもよいことが当業者に理解されるだろう。特に、所与の実施形態、変形において述べられるか、または図面に示される特徴(デバイスまたは方法の形)は、本発明の範囲から逸脱することなく、別の実施形態、変形または図面における別の特徴と組み合わされるか、または置き換えられてもよい。したがって、上記の実施形態または変形のいずれかに関して記載された特徴のさまざまな組み合わせが予期されてもよく、それらは添付の請求項の範囲内にとどまる。加えて、本発明の範囲から逸脱することなく、特定の状況または材料を本発明の教示に適合させるために、多くの軽微な修正が加えられてもよい。したがって、本発明は開示される特定の実施形態に限定されず、本発明は添付の請求項の範囲内にあるすべての実施形態を含むことが意図される。さらに、上記において明確に触れられたもの以外の多くのその他の変形が予期され得る。たとえば、説明を明瞭にするために、主要な機能はそれぞれのモジュール15、16、17に割り当てられるものと記載されている。しかし、これらの機能のうちの異なる機能が各々に設けられた1つまたはそれ以上のモジュールに分散された同じ機能によって、本発明の実施形態が同等に説明され得る。たとえば、ブートローダ16およびPIM15は単一のモジュールとみなされてもよく、それはおそらくは「ブートローダ」と呼ばれる一方で、本明細書に別様に記載されるものと同じ機能を実行してもよい。
【符号の説明】
【0121】
10 ユーザ・トラステッド・デバイス
11 セキュア・デバイスのCPU
12 接続インタフェース
14 永続的メモリ
141 セキュア・メモリ
142 非セキュア・メモリ
15 プロセッサ命令モジュール(PIM)
151 プロセッサ命令モジュール(PIM)の第1の部分
152 プロセッサ命令モジュール(PIM)の第2の部分
16 ブートローダ
17 検証モジュール
30 サーバ
15、17 仮想化分析モジュール(VAM)
100 一般的コンピュータ・システム
101 ホスト・コンピュータ
105 コンピュータ・プロセッサ
110 メモリ
111 オペレーティング・システム(OS)
115 メモリ・コントローラ
120 物理記憶媒体(物理ディスク)
122 ホスト・コンピュータのファームウェア(BIOS)
124 ネットワーク・カード
125 ディスプレイ・コントローラ
130 ディスプレイ
145 I/Oデバイス(または周辺装置)
150 キーボード
155 マウス
165 ネットワーク
図1
図2
図3
【手続補正書】
【提出日】2015年6月30日
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ユーザ・トラステッド・デバイス(10)であって、
コンピュータ(101)との接続を可能にする接続インタフェース(12)と、
複数のモジュール(15、16、17)を保存する永続的メモリ(14)とを含み、前記モジュールは、前記接続インタフェース(12)を介した前記ユーザ・トラステッド・デバイス(10)と前記コンピュータ(101)との接続の際に、
前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を開始することを可能にし、
前記コンピュータ(101)のプロセッサ(105)に対して、起動を開始する際に仮想化感知コードを実行することと、実行完了の際に完了データを発行することとを指示し、
こうした完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定し、かつ、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を完了することを可能にするように構成される、ユーザ・トラステッド・デバイス(10)。
【請求項2】
前記複数のモジュールは、
前記コンピュータ(101)が前記デバイス(10)からの起動を開始および完了することを可能にするブートローダ(16)と、
前記仮想化感知コードを実行し、かつ前記完了データを発行することを前記プロセッサ(105)に指示するために前記コンピュータ(101)において実行可能なプロセッサ命令モジュール(15)と、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成された検証モジュール(17)とを含み、前記検証モジュール(17)は、前記デバイス(10)もしくは前記コンピュータ(101)またはその両方において実行可能であり、
前記ブートローダ(16)は、前記ユーザ・トラステッド・デバイス(10)と前記コンピュータ(101)との接続の際に初期化ファームウェア(122)によって検出可能であり、かつ前記ファームウェア(122)が前記プロセッサ命令モジュール(15)を以後の前記コンピュータ(101)における実行のために前記コンピュータ(101)に移すことを開始するための命令を含む、請求項1に記載のユーザ・トラステッド・デバイス(10)。
【請求項3】
前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記プロセッサが前記コンピュータ(101)および前記プロセッサ自体によって支援される1つまたはそれ以上の機能のリストを前記完了データの一部として生成するように設計された仮想化感知コードを実行することを前記プロセッサ(105)に指示するように構成される、請求項2に記載のユーザ・トラステッド・デバイス(10)。
【請求項4】
前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの計算量に依存する最終状態値を前記完了データの一部として生成することを前記プロセッサ(105)に指示するように構成され、
かつ、前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記仮想化感知コードを実行する前の前記プロセッサの状態を反映する初期状態値を生成することを前記プロセッサ(105)に指示するように構成される、請求項2または3に記載のユーザ・トラステッド・デバイス(10)。
【請求項5】
前記検証モジュール(17)はさらに、
前記初期状態値および前記最終状態値に基づいて、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを生成し、かつ
前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するように構成される、請求項4に記載のユーザ・トラステッド・デバイス(10)。
【請求項6】
前記プロセッサ命令モジュール(15)はさらに、前記コンピュータ(101)における実行の際に、前記仮想化感知コードを実行するために必要とされる前記プロセッサの前記計算量を定量化するプロセッサ使用値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成することを前記プロセッサ(105)に指示するように構成され、
かつ前記検証モジュール(17)はさらに、前記プロセッサ使用値に基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するよう指示するように構成される、請求項4に記載のユーザ・トラステッド・デバイス(10)。
【請求項7】
前記検証モジュール(17)はさらに、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定するために、前記コンピュータ(101)を介してサーバ(30)に接続するよう指示するように構成される、請求項2から6のいずれか1項に記載のユーザ・トラステッド・デバイス(10)。
【請求項8】
前記検証モジュール(17)はさらに、
−前記サーバ(30)に接続するために、ネットワーク・カード(124)によって可能にされるネットワーク(165)を通じた通信を開始するために、前記ファームウェア(122)と対話することでその後前記コンピュータ(101)の前記ネットワーク・カード(124)と対話するステップ、
−前記サーバに接続するために、前記ネットワーク・カードによって可能にされるネットワークを通じた通信を開始するために、前記ユーザ・トラステッド・デバイス(10)に保存されたネットワーク・カード・ドライバにアクセスして、前記コンピュータ(101)のネットワーク・カード(124)と直接対話するステップ、および
−好ましくは前記ブートローダを介して前記ファームウェア(122)と対話することによって、前記コンピュータ(101)を介して前記サーバに接続するために必要である前記コンピュータのオペレーティング・システムを部分的に実行するステップ
のうちの1つまたはそれ以上を実行するように構成される、請求項7に記載のユーザ・トラステッド・デバイス(10)。
【請求項9】
前記仮想化感知コードは、
−前記プロセッサを保護モードからリアル・モードに切換えるための命令、もしくは前記プロセッサをリアル・モードから保護モードに切換えるための命令、またはその両方、
−前記プロセッサがマシン固有レジスタを読取るための命令、および
−前記プロセッサがマシン固有レジスタに書込むための命令
のうちの1つまたはそれ以上を含む、請求項1から8のいずれか1項に記載のユーザ・トラステッド・デバイス(10)。
【請求項10】
コンピュータ(101)がユーザ・トラステッド・デバイス(10)から起動することを可能にするための方法であって、前記ユーザ・トラステッド・デバイス(10)は前記コンピュータ(101)との接続(S2)を可能にする接続インタフェース(12)を含み、前記方法は、
前記接続インタフェース(12)を介した前記ユーザ・トラステッド・デバイスと前記コンピュータ(101)との接続(S2)の際に、前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を開始することを可能にするステップ(S3)と、
前記コンピュータ(101)のプロセッサ(105)に対して、
仮想化感知コードを実行すること(S7)、および
実行完了の際に完了データを発行すること(S8)を指示するステップであって、前記完了データは前記仮想化感知コードおよび前記プロセッサ(105)によるその実行に依存するものである、ステップと、
前記完了データに基づいて、前記実行が仮想化環境においてなされなかったかどうかを判定するステップ(S9〜S13)と、
前記実行が仮想化環境においてなされなかったと判定するときに、前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を完了することを可能にするステップ(S15)とを含む、方法。
【請求項11】
前記ユーザ・トラステッド・デバイス(10)と前記コンピュータ(101)との接続の際に、前記コンピュータ(101)の初期化ファームウェア(122)と対話することによって、
前記コンピュータ(101)が前記ユーザ・トラステッド・デバイス(10)からの起動を開始することを可能にし(S3)、かつ
プロセッサ命令モジュール(15)を以後の前記コンピュータ(101)における実行(S5〜S6)のために前記コンピュータ(101)に移すことを開始する(S4)ことによって、前記プロセッサ(105)に前記仮想化感知コードを実行させ(S7)、かつ実行完了の際に前記完了データを発行させる(S8)、ステップをさらに含む、請求項10に記載の方法。
【請求項12】
前記実行が仮想化環境においてなされなかったかどうかを判定するステップ(S9〜S14)は、前記デバイス(10)もしくは前記コンピュータ(101)またはその両方において検証モジュール(17)を実行するステップ(S9)を含み、前記検証モジュール(17)を実行するステップ(S9)は好ましくは、前記実行が仮想化環境においてなされなかったかどうかをサーバにおいて少なくとも部分的に判定する(S11)ために、前記コンピュータ(101)を介してサーバ(30)に接続するステップ(S10)を含む、請求項10または11に記載の方法。
【請求項13】
前記プロセッサ(105)はさらに、前記コンピュータ(101)および前記プロセッサ自体によって支援される1つまたはそれ以上の機能のリストを前記完了データの一部として生成する(S8)ように指示される、請求項10から12のいずれか1項に記載の方法。
【請求項14】
前記プロセッサ(105)はさらに、前記仮想化感知コードを実行するために必要とされた前記プロセッサの計算量に依存する最終状態値、たとえば計算持続時間、プロセッサ・サイクル数、またはカウンタなどを前記完了データの一部として生成する(S8)ように指示され、
前記プロセッサ(105)はさらに、前記仮想化感知コードを実行する(S7)前の初期状態値を生成する(S6)ように指示される、請求項10から13のいずれか1項に記載の方法。
【請求項15】
コンピュータ(101)がユーザ・トラステッド・デバイス(10)から起動することを可能にするためのコンピュータ・プログラムであって、前記コンピュータ・プログラムは、ともに具現化される複数のモジュール(15、16、17)を含み、前記複数のモジュールは、請求項10から14に記載のいずれかの方法のすべてを実行することを可能にする、コンピュータ・プログラム。
【国際調査報告】