(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5767751
(24)【登録日】2015年6月26日
(45)【発行日】2015年8月19日
(54)【発明の名称】BIOSを検証する方法、コンピューティングプラットフォーム、およびプログラム
(51)【国際特許分類】
G06F 21/57 20130101AFI20150730BHJP
G06F 9/445 20060101ALI20150730BHJP
G06F 11/00 20060101ALI20150730BHJP
【FI】
G06F21/57 350
G06F21/57 320
G06F9/06 610K
G06F9/06 630A
【請求項の数】25
【全頁数】19
(21)【出願番号】特願2014-519289(P2014-519289)
(86)(22)【出願日】2012年7月5日
(65)【公表番号】特表2014-518428(P2014-518428A)
(43)【公表日】2014年7月28日
(86)【国際出願番号】US2012045551
(87)【国際公開番号】WO2013006698
(87)【国際公開日】20130110
【審査請求日】2014年1月21日
(31)【優先権主張番号】13/178,338
(32)【優先日】2011年7月7日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】ヘルド、ジェームズ、ピー.
(72)【発明者】
【氏名】ロビンソン、スコット、エイチ.
(72)【発明者】
【氏名】ジマー、ヴィンセント、ジェイ.
【審査官】
児玉 崇晶
(56)【参考文献】
【文献】
米国特許出願公開第2006/0101310(US,A1)
【文献】
特開2003−108257(JP,A)
【文献】
国際公開第2009/044533(WO,A1)
【文献】
特表2008−521092(JP,A)
【文献】
特開2009−169841(JP,A)
【文献】
特開2011−129105(JP,A)
【文献】
特開2010−108487(JP,A)
【文献】
特開2006−106914(JP,A)
【文献】
特開2005−141561(JP,A)
【文献】
米国特許出願公開第2009/0327684(US,A1)
【文献】
特表2006−522377(JP,A)
【文献】
米国特許出願公開第2007/0192611(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/57
G06F 9/445
G06F 11/00
(57)【特許請求の範囲】
【請求項1】
コンピューティングプラットフォームのベーシックインプットアウトプットシステム(BIOS)を検証する方法であって、
前記コンピューティングプラットフォームのプロセッサにプロセッサ初期化モジュールが含まれていて、前記プロセッサ初期化モジュールが初期化ファームウェア検証モジュールを含み、リセットに応じて前記プロセッサ初期化モジュールを実行する段階と、
前記初期化ファームウェア検証モジュールを用いて、前記コンピューティングプラットフォームのプロセッサパッケージ内のROMに格納されている初期化ファームウェアの検証を試みる段階と、
再プログラミング可能な不揮発性メモリに含まれている前記BIOSの検証を、前記初期化ファームウェアを用いて試みる段階とを、
備え、
前記初期化ファームウェア検証モジュールは、前記ROMに格納される、方法。
【請求項2】
前記コンピューティングプラットフォームの制御を前記BIOSに渡す段階と、
前記初期化ファームウェアおよび前記BIOSのうち少なくとも一方の検証が失敗した場合、プラットフォーム機能が限定された検疫モードで動作するよう前記コンピューティングプラットフォームを設定する段階と、
をさらに備える、請求項1に記載の方法。
【請求項3】
前記初期化ファームウェアおよび前記BIOSのうち少なくとも一方の検証が失敗した場合、前記初期化ファームウェアが実行されないようにする段階、前記BIOSが実行されないようにする段階、修復を開始する段階、モデル固有レジスタを用いて前記検証の失敗を報告する段階、前記プロセッサを停止させる段階、前記コンピューティングプラットフォームをシャットダウンする段階、および、プラットフォーム機能が限定された検疫モードで動作するよう前記コンピューティングプラットフォームを設定する段階の少なくとも1つ、を更に備える、請求項1または2に記載の方法。
【請求項4】
前記初期化ファームウェアの検証が失敗したことに応じて、前記初期化ファームウェアを更新する段階をさらに備える、請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記初期化ファームウェアおよび前記BIOSのうち少なくとも一方の検証が失敗した場合、前記コンピューティングプラットフォームのマイクロプロセッササブシステムを用いたアウトオブバンド通信を利用して、ネットワークを介して前記BIOSを更新する段階、をさらに備える、請求項1から4のいずれか一項に記載の方法。
【請求項6】
モデル固有レジスタに候補BIOSファームウェアの更新が書き込まれることに応じて、前記初期化ファームウェア検証モジュールおよび前記初期化ファームウェアの実行をトリガする段階をさらに備える、請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記初期化ファームウェアの検証が失敗したことに応じて、
初期化ファームウェアのバックアップコピーへロールオーバーする段階、および前記初期化ファームウェアの以前のイメージにロールバックする段階の少なくとも1つ、をさらに備える、請求項1から6のいずれか一項に記載の方法。
【請求項8】
前記BIOSの複製であるバックアップBIOSを格納する、前記再プログラミング可能な不揮発性メモリとは別の不揮発性メモリをさらに備え、
前記別の不揮発性メモリは、前記BIOSの検証が失敗することに応じてアクセスされる、請求項1から7のいずれか一項に記載の方法。
【請求項9】
前記初期化ファームウェア検証モジュールは前記プロセッサ内のROM領域に格納され、前記初期化ファームウェアは前記プロセッサパッケージ内の不揮発性メモリのROM領域に格納される、請求項1から8のいずれか一項に記載の方法。
【請求項10】
プロセッサパッケージと、
ベーシックインプットアウトプットシステムファームウェア(BIOSファームウェア)が格納されている再プログラミング可能な不揮発性メモリと
を備えるコンピューティングプラットフォームであって、
前記プロセッサパッケージは、
初期化ファームウェア検証モジュールを含むプロセッサ初期化モジュールを含むプロセッサと、
初期化ファームウェアが格納されているROMと
を有し、
前記初期化ファームウェア検証モジュールは、前記ROMに格納され、
前記プロセッサは、
前記コンピューティングプラットフォームのリセットに応じて前記プロセッサ初期化モジュールを実行し、
前記初期化ファームウェア検証モジュールを用いて前記初期化ファームウェアの検証を試みて、
前記初期化ファームウェアを用いて前記BIOSファームウェアの検証を試みる、
コンピューティングプラットフォーム。
【請求項11】
前記プロセッサはさらに、前記コンピューティングプラットフォームの制御を前記BIOSファームウェアに渡し、
前記初期化ファームウェアおよび前記BIOSファームウェアのうち少なくとも一方の検証が失敗すると、プラットフォーム機能が限定された検疫モードで動作するよう前記コンピューティングプラットフォームを設定する、請求項10に記載のコンピューティングプラットフォーム。
【請求項12】
前記プロセッサはさらに、
前記初期化ファームウェアおよび前記BIOSファームウェアのうち少なくとも一方の検証が失敗すると、前記初期化ファームウェアが実行されないようにすること、前記BIOSファームウェアが実行されないようにすること、修復を開始すること、モデル固有レジスタを用いて前記検証の失敗を報告すること、前記プロセッサを停止させること、前記コンピューティングプラットフォームをシャットダウンすること、および、プラットフォーム機能が限定された検疫モードで動作するよう前記コンピューティングプラットフォームを設定することの少なくとも1つを実行する、請求項10または11に記載のコンピューティングプラットフォーム。
【請求項13】
前記プロセッサはさらに、前記初期化ファームウェアの検証が失敗したことに応じて、前記初期化ファームウェアを更新する、請求項10から12のいずれか一項に記載のコンピューティングプラットフォーム。
【請求項14】
アウトオブバンド通信を利用してネットワークを介して前記BIOSファームウェアを更新するマイクロプロセッササブシステムをさらに備える、請求項10から13のいずれか一項に記載のコンピューティングプラットフォーム。
【請求項15】
モデル固有レジスタをさらに備え、
前記プロセッサは、前記モデル固有レジスタに候補BIOSファームウェアの更新が書き込まれることに応じて、前記初期化ファームウェア検証モジュールおよび前記初期化ファームウェアを実行する、請求項10から14のいずれか一項に記載のコンピューティングプラットフォーム。
【請求項16】
前記プロセッサはさらに、
前記初期化ファームウェアの検証が失敗したことに応じて、
初期化ファームウェアのバックアップコピーへロールオーバーすることおよび前記初期化ファームウェアの以前のイメージにロールバックすることの少なくとも1つ、を実行する、請求項10から15のいずれか一項に記載のコンピューティングプラットフォーム。
【請求項17】
前記BIOSの複製であるバックアップBIOSを格納する、前記再プログラミング可能な不揮発性メモリとは別の不揮発性メモリをさらに備え、
前記別の不揮発性メモリは、前記BIOSの検証が失敗することに応じてアクセスされる、請求項10から16のいずれか一項に記載のコンピューティングプラットフォーム。
【請求項18】
プロセッサ初期化モジュールはコンピューティングプラットフォームのプロセッサに含まれるように構成されていて、前記プロセッサ初期化モジュールが初期化ファームウェア検証モジュールを含み、リセットに応じて前記プロセッサ初期化モジュールを実行する手順と、
前記初期化ファームウェア検証モジュールを用いて、前記コンピューティングプラットフォームのプロセッサパッケージ内のROMに格納されるように構成されている初期化ファームウェアの検証を試みる手順と、
再プログラミング可能な不揮発性メモリに含まれるように構成されているBIOSの検証を、前記初期化ファームウェアを用いて試みる手順と、
をコンピュータに実行させ、
前記初期化ファームウェア検証モジュールは、前記ROMに格納される、
プログラム。
【請求項19】
前記コンピューティングプラットフォームの制御を前記BIOSに渡す手順と、
前記初期化ファームウェアおよび前記BIOSのうち少なくとも一方の検証が失敗した場合、プラットフォーム機能が限定された検疫モードで動作するよう前記コンピューティングプラットフォームを設定する手順と、
を前記コンピュータにさらに実行させる、請求項18に記載のプログラム。
【請求項20】
前記初期化ファームウェアおよび前記BIOSのうち少なくとも一方の検証が失敗した場合、前記初期化ファームウェアが実行されないようにする手順、前記BIOSが実行されないようにする手順、修復を開始する手順、モデル固有レジスタを用いて前記検証の失敗を報告する手順、前記プロセッサを停止させる手順、前記コンピューティングプラットフォームをシャットダウンする手順、および、プラットフォーム機能が限定された検疫モードで動作するよう前記コンピューティングプラットフォームを設定する手順の少なくとも1つ、を前記コンピュータにさらに実行させる、請求項18または19に記載のプログラム。
【請求項21】
前記初期化ファームウェアの検証が失敗したことに応じて、前記初期化ファームウェアを更新する手順を前記コンピュータにさらに実行させる、請求項18から20のいずれか一項に記載のプログラム。
【請求項22】
前記初期化ファームウェアおよび前記BIOSのうち少なくとも一方の検証が失敗した場合、前記コンピューティングプラットフォームのマイクロプロセッササブシステムを用いたアウトオブバンド通信を利用して、ネットワークを介して前記BIOSを更新する手順、を前記コンピュータにさらに実行させる、請求項18から21のいずれか一項に記載のプログラム。
【請求項23】
モデル固有レジスタに候補BIOSファームウェアの更新が書き込まれることに応じて、前記初期化ファームウェア検証モジュールおよび前記初期化ファームウェアの実行をトリガする手順を前記コンピュータにさらに実行させる、請求項18から22のいずれか一項に記載のプログラム。
【請求項24】
前記初期化ファームウェアの検証が失敗したことに応じて、
初期化ファームウェアのバックアップコピーへロールオーバーする手順および前記初期化ファームウェアの以前のイメージにロールバックする手順の少なくとも1つ、を前記コンピュータにさらに実行させる、請求項18から23のいずれか一項に記載のプログラム。
【請求項25】
前記BIOSの複製であるバックアップBIOSを格納する、前記再プログラミング可能な不揮発性メモリとは別の不揮発性メモリをさらに備え、
前記別の不揮発性メモリは、前記BIOSの検証が失敗することに応じてアクセスされる、請求項18から24のいずれか一項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、BIOS保護に関する。特に、BIOSフラッシュ攻撃に対する保護および通知に関する。
【背景技術】
【0002】
コンピューティングデバイス、パーソナルコンピュータ、ワークステーションおよびサーバ(以下では、「コンピュータ」と呼ぶ)は通常、コンピュータハードウェア(例えば、プロセッサ、チップセット、メモリ等)とオペレーティングシステム(OS)との間のインターフェースとして、ベーシックインプットアウトプットシステム(BIOS)を備える。BIOSは、コンピュータの低レベルハードウェアサービス、例えば、コンピュータマザーボードに対応付けられている基本的なキーボード、ビデオ、ディスクドライブ、入出力(I/O)ポートおよびチップセットドライバ(例えば、メモリコントローラ)の初期化およびイネーブル化を行うためのファームウェアコードおよび/またはソフトウェアコードを有する。
【0003】
ベーシックインプットアウトプットシステム(BIOS)等のファームウェアによるコンピュータシステムの初期化および設定は、プレブートフェーズで実施される。プロセッサは、リセット後、BIOSファームウェアを格納している不揮発性ストレージデバイスに対してマッピングされている所定のアドレスを参照する。プロセッサは順次、BIOS命令をフェッチする。これらのBIOS命令によって、コンピュータは通常、電子ハードウェアを初期化し、周辺デバイスを初期化し、オペレーティングシステムをブートする。UEFI(ユニファイド・エクステンシブル・ファームウェア・インターフェース)は、セキュリティ(SEC)フェーズ、プラットフォーム環境初期化(PEI)フェーズ、ドライバ実行環境(DXE)フェーズおよびブートデバイス選択(BDS)フェーズ等、複数のフェーズを含む最新型のBIOSファームウェアアーキテクチャである。
【0004】
プラットフォームファームウェアのセキュリティを侵害する方法は常に発展している。プラットフォームファームウェアのセキュリティを侵害することで、ツールはシステムを攻撃することができるようになる。セキュリティが侵害されたファームウェアは、ソフトウェア攻撃とは異なり、検出が困難で修復が難しい。セキュリティが侵害されたファームウェアは概して、大半のウイルス対策ツールおよびスパイウェア対策ツールを含むシステムのソフトウェアレイヤに対して不可視である。ファームウェアは不可視であるが存在し続けるので、悪意あるルートキットにとってファームウェアは理想的な対象となる。ルートキットは、実行中のソフトウェアに対して最高の特権を実現すると同時に可視性は最低限まで抑えられている、プラットフォーム中に含まれているコンパクトでドーマント方式の悪意あるフックである。ルートキットの主な機能は、攻撃を実行することか、または、感染したシステム上の他のウイルスおよびワームに対してAPIを提供することである。
【0005】
BIOSは通常、プログラミングのやり直しが可能になるように、フラッシュメモリに格納されている。そして、プログラミングは、フォームファクタおよびエンドユーザの利便性を考慮して、ジャンパ変更を行うことなく実行されるとしてよい。このようにプログラミングのやり直しが可能であるので、権限を持たない人物および/またはマルウェアによる攻撃に対して脆弱になる。BIOSにおける脆弱性も同様に悪用される可能性がある。システムBIOSへのアクセスによって、システムリブートの後も存在し続けるルートキットがインストールされ得る。ウイルス対策ソフトウェアは、このような「持続性」のルートキットを高い信頼性で検出することができないとしてよい。
【0006】
場合によっては、BIOSは真のROMに格納されて、プログラミングのやり直しができないようにすることもある。しかし、BIOS更新およびその他の正当な修正は必要である。これらの修正は、システムおよびBIOSを格納しているROMに対して物理的にアクセスすることによってのみ実現されるものである。
【図面の簡単な説明】
【0007】
請求の対象となる主題の特徴および利点は、これらの主題に対応するものとして以下に記載する実施形態の詳細な説明から明らかになるであろう。以下に記載する説明は、添付図面を参照しつつ考慮されたい。添付図面は以下の通りである。
【
図1】本開示のさまざまな実施形態に応じたシステム(コンピューティングプラットフォーム)を示す図である。
【
図2】本開示の一実施形態に応じたフラッシュメモリに格納されている情報の格納構成の一例を示す図である。
【
図3】本開示に応じた、BIOSを検証する処理の一例を説明するフローチャートである。
【
図4】本開示に応じたBIOSを検証する処理の一例を説明する別のフローチャートである。
【
図5】本開示の一実施形態に応じた、リセットからOSブートまでのブート処理に対応する処理を説明する図である。 以下に記載する「発明を実施するための形態」は実施形態例を参照するが、当業者には多くの変更例、変形例および変化例が明らかである。
【発明を実施するための形態】
【0008】
本開示は概して、BIOSストレージ攻撃に対する保護および通知を行うシステム(および方法)を提供する。システム(コンピューティングプラットフォーム)の一例によると、プロセッサと、当該プロセッサに結合されているオフダイ不揮発性メモリとを有するプロセッサ部を備える。プロセッサは、プロセッサ初期化モジュールを含み、揮発性および不揮発性のメモリを含むとしてよい。プロセッサ初期化モジュールは初期化ファームウェア検証モジュールを含み、プロセッサ部は初期化ファームウェアを含む。初期化ファームウェアは、プロセッサの命令セットアーキテクチャ(ISA)に書き込まれているとしてよく、オフダイ不揮発性メモリに格納されているとしてよい。
【0009】
プロセッサ初期化モジュールは、プロセッサの内部初期化を実行するべく、リセットに応じて最初に実行されるように構成されている。リセットは、電源オンによって、および/または、モデル固有レジスタの状態によってトリガされるとしてよい。本明細書で用いる場合、「リセット」という用語は、フロー制御がプロセッサ初期化モジュールに戻る再スタートイベントである。リセットは、システムの電気コンポーネントが再スタートの前に電力供給を停止させる「電源オンリセット」を含む。メモリのコンテンツは、その後の修復のために保存されるとしてもよいし、保存されないとしてもよい。リセットはさらに、システムの電気コンポーネントへの電力供給が維持される「CPU限定リセット」を含む。
【0010】
初期化ファームウェア検証モジュールは、プロセッサ初期化モジュールの一部として、初期化ファームウェアを検証するように構成されている(つまり、検証または認証しようと試みる)。プロセッサ初期化モジュールおよび/または初期化ファームウェア検証モジュールは、プロセッサの揮発性および/または不揮発性のメモリに格納されているマイクロコード、回路および/または状態情報を含むとしてよい。初期化ファームウェアは、初期化ファームウェア検証モジュールの後に実行されるように構成されており、BIOSを検証するように構成されている(つまり、検証するよう試みる)。初期化ファームウェアは、プロセッサのISAの形式に準拠しているか、または、内部形式に準拠しているとしてよい。初期化ファームウェアおよび/またはBIOSの検証が失敗すると、システムは1以上の応答を開始するように構成されている。応答は、これらに限定されないが、初期化ファームウェアおよび/またはBIOSが実行されないようにすること、(例えば、アウトオブバンド(OOB)通信を利用して)修復を開始すること、検証が失敗したことをモデル固有レジスタ(MSR)を用いて報告すること、停止すること、シャットダウンすること、および/または、BIOSを実行させ、オペレーティングシステム(OS)をブートさせるべく、「検疫モード」で動作するようコンピューティングプラットフォームを設定すること、を含む。検疫モードでは、システムの一部の機能はBIOSおよびOSに対して利用不可能になるとしてよい。
【0011】
プロセッサ初期化モジュール、初期化ファームウェア検証モジュールおよび初期化ファームウェアは、プロセッサパッケージの一部であり、通常はプロセッサ製造者以外は利用できないという利点がある。初期化ファームウェアの生成元および正当性はプロセッサ部によって保証されるとしてよく、初期化ファームウェアはパーティション化されたメモリを含む分離実行モードで実行され得る。UEFI BIOSとは異なり、内部プロセッサの初期化/リセットおよびファームウェアインターフェースは、一般的に利用可能にはならないとしてよい。検疫モードで動作させることによって、BIOS検証が失敗した際には、動作が全て停止するのではなく、動作が限定されることになる。この後、BIOS検証の失敗はユーザに通知されるとしてよい。例えば、BIOSは、例えば、マザーボード上での物理的なジャンパ設定を利用することで、ローカルに更新されるとしてよい。別の例を挙げると、BIOSは、ネットワークを介してリモートエージェントとのOOB通信を利用して、更新されるとしてよい。
【0012】
<システムアーキテクチャ>
図1は、本開示のさまざまな実施形態に応じたシステムを示す図である。
図1のシステム100は、プロセッサ部102と、システムメモリ(RAM)104(OS150を含む)と、プラットフォームコントローラハブ(PCH)106と、トラステッドプラットフォームモジュール(TPM)108と、1以上のディスクドライブ110と、マイクロプロセッササブシステム112と、EEPROM114と、ネットワークポート116とを備えるとしてよい。システム100は、ネットワーク120およびネットワークポート116を介してリモートエージェント118に結合されているとしてよい。TPM108は、一の別箇のブロックとして図示されているが、一部の実施形態によると、マイクロプロセッササブシステム112に含まれるとしてもよい。
【0013】
システム100の概略を説明すると、プロセッサ部102は、初期化ファームウェア検証モジュール128を含むプロセッサ初期化モジュール126を実行するように構成されており、システムリセットに応じて、例えば、システムの電力オンおよび/またはモデル固有レジスタ(MSR)の状態に応じて、初期化ファームウェア130を実行するとしてよい。プロセッサ初期化モジュール126および初期化ファームウェア検証モジュール128は、マイクロコードおよび/または回路で実現されるとしてよい。初期化ファームウェア検証モジュール128は、初期化ファームウェア130を検証するように構成されており、初期化ファームウェア130はBIOSを検証するように構成されている。初期化ファームウェア検証モジュール128は、ダイ上(つまり、プロセッサ122のダイ上)および/またはパッケージ上(つまり、プロセッサ部102内)に含まれているとしてよい。例えば、専用のステートマシンおよび/または埋め込み(従属)コントローラが、検証動作を支援および/または実施するとしてよい。このような専用のステートマシンおよび/または埋め込みコントローラは、プロセッサ部102に含まれるとしてよい。例えば、初期化ファームウェア130は、検証済みのブートを実施するべく、暗号署名されたBIOSに対して暗号化インテグリティチェックを実行するとしてよい。BIOS検証が失敗すると、プロセッサ部102は1以上の応答を開始するように構成されている。応答には、これらに限定されないが、BIOS(およびOS)アクセスを制限すること、および/または、一部のシステム技術をディセーブルすること(つまり、検疫モードでブートすること)、(例えば、報告のために)モデル固有レジスタを更新すること、(例えば、アウトオブバンド(OOB)機能を利用して)修復を開始すること、BIOSの動作を中止させること、OSのブートを中止させること、停止させること、シャットダウンすること、および/または、これらの組み合わせが含まれる。本明細書で説明するように、特定の応答を、製造時に選択するとしてよく、および/または、プロセッサ設定および/または初期化ファームウェアを更新することによって選択するとしてよい。
【0014】
プロセッサ部102は、プロセッサ(CPU)122およびオフダイ不揮発性メモリ124を有するとしてよい。例えば、オフダイ不揮発性メモリ124は、プロセッサ122およびオフダイ不揮発性メモリ124を含むプロセッサ部パッケージに含まれるとしてもよい。別の例を挙げると、不揮発性メモリ124は、プロセッサ122内に、例えば、同じダイに含まれるとしてよい。プロセッサ122は、不揮発性メモリ123、プロセッサ初期化モジュール126、初期化ファームウェア検証モジュール128、pMSR132および/またはeMSR133を含むとしてよい。初期化ファームウェア検証モジュール128は、プロセッサ初期化モジュール126に含まれるとしてもよいし、または、別箇のモジュールとして構成してもよい。プロセッサ初期化モジュール126および/または初期化ファームウェア検証モジュール128は、揮発性および/または不揮発性メモリに格納されているマイクロコード、回路および/または状態情報を含むとしてよい。
【0015】
オンダイ型および/またはオンパッケージ型の不揮発性メモリは、複数の不揮発性メモリ技術、例えば、これらに限定されないが、コンテンツが製造時に設定されるリードオンリー型(例えば、ROM)、製造時に更新可能なもの(例えば、ヒューズ)、および/または、現場で更新可能なもの(例えば、ヒューズ、フラッシュ)を含むとしてよい。例えば、プロセッサ不揮発性メモリ123は、マイクロコードおよび/または他の持続性のプロセッサ状態情報を格納するように構成されているとしてよい。オフダイ不揮発性メモリ124は、初期化ファームウェア130を格納するように構成されている。初期化ファームウェア検証モジュール128および初期化ファームウェア130は通常、プロセッサ製造者によって生成されるとしてよく、製造プロセス時に格納されるとしてよい。プロセッサ部102は、初期化ファームウェア検証モジュール128および初期化ファームウェア130を含み、比較的セキュアであるとしてよく、概してマルウェアによる攻撃では到達できないとしてよい。初期化ファームウェア検証モジュール128(例えば、ヒューズおよび/または再プログラミング可能なステートマシンを含む)および初期化ファームウェア130は、例えば、暗号鍵を用いて、セキュアに更新されるとしてよい。
【0016】
プロセッサ不揮発性メモリ123の少なくとも一部は、1以上のモデル固有レジスタ(MSR)132、133を介してアクセス可能であるとしてよい。MSRは、プロセッサ設定にアクセスし、および/または、プロセッサ設定を制御するように構成されているとしてよい。MSRは、持続性MSR(pMSR)132および/または一時性MSR(eMSR)133を含むとしてよい。持続性MSR132は、複数の電力サイクルにわたって持続するように構成されており、つまり、不揮発性と見なされるとしてよい。一時性MSR133は、システム100が電力供給を受けて実行中の間に限り持続するように構成されていて、つまり、揮発性と見なされるとしてよい。pMSR132およびeMSR133の両方は、設定ポリシーを公表すると共にプロセッサ122の状態を第三者に報告する。例えば、MSR132、133は、電力管理機能をオンオフ制御するために、エラーを報告するために、状態を報告するために、および/または、特定の機能(例えば、ハイパーバイザ)をオンオフ制御するために、用いられるとしてよい。一部の実施形態によると、eMSR133は、検証の失敗を報告するために用いられるとしてよい。例えば、BIOS検証が失敗すると、BIOS_VERIFICATION MSRが設定されるとしてよい。BIOS_VERIFICATION MSRを一時性MSR133として設定することによって、BIOSベンダは、コンピューティングプラットフォームの動作寿命の間はBIOSを更新することが出来るという利点がある。
【0017】
一般的に、MSR132、133は、読出MSR命令(例えば、状態へのアクセス)または書込MSR命令(例えば、MSRのコンテンツの変更)を用いて、第三者の関数によってアクセスされるとしてよい。MSR132、133の一部は「不変」であるとしてよい。これは、不変のMSRのコンテンツは、アウトオブバンド方式またはインバンド方式のプロセッサISAコード実行動作で第三者によって変更できないことを意味する。例えば、BIOS_VERIFICATION MSRは不変MSRであるとしてよい。マルウェアは、不変MSRのコンテンツを変更できないので、不変MSRは、例えば、BIOSの状態を報告するチャネルとして比較的セキュアであるとしてよい。一実施形態によると、MSR132、133は、初期化ファームウェア検証モジュール128および初期化ファームウェア130および対応付けられている検証動作の実行をトリガするPlatform_Update MSRを含むとしてよい。例えば、Platform_Update MSRは、
候補BIOSファームウェア
の更新が書き込まれると、実行をトリガするとしてよい。
【0018】
プロセッサ部102は、システム100のリセットに応じて、初期化ファームウェア検証モジュール128を含むプロセッサ初期化モジュール126を実行するように構成されている。プロセッサ部102は、モデル固有レジスタ、例えば、Platform_Update MSRに基づいて、プロセッサ初期化モジュール126および初期化ファームウェア検証モジュール128を実行するとしてよい。初期化ファームウェア検証モジュール128は、本明細書で説明しているように、初期化ファームウェア130を検証する。初期化ファームウェア130の検証が失敗すると、初期化ファームウェア検証モジュール128は、本明細書で説明するように、1以上の応答を開始するとしてよい。例えば、プロセッサ初期化モジュール126および初期化ファームウェア検証モジュール128は、揮発性および/または不揮発性のストレージに格納されているマイクロコード、回路および/または状態情報を含むとしてよい。初期化ファームウェア130の検証が成功すると、プロセッサ部102は初期化ファームウェア130を実行する。このように、初期化ファームウェアは、BIOSを検証する前に、確認(検証)されるとしてよい。本明細書で説明する方法およびシステムは、プロセッサ初期化モジュール126および初期化ファームウェア検証モジュール128に根差したトラストチェーンを構築し、初期化ファームウェア130まで拡張した後、BIOS134へと拡張するように構成されている。
【0019】
EEPROM114は、BIOS134、ファームウェアインターフェーステーブル(FIT)136およびマネジビリティエンジン(ME)ファームウェア138を格納する。EEPROM114は、プログラミングし直すことが可能であり、BIOS134を更新することが可能になる。BIOS134は、例えば、マイクロプロセッササブシステム112およびマネジビリティエンジンファームウェア138を介してネットワーク120に結合されているので、リモートプログラミングが可能であるとしてよい。例えば、EEPROM114は、ローカルまたはリモートに再プログラミング可能なフラッシュメモリであってよい。例えば、フラッシュメモリは、NOR型フラッシュメモリであってよい。NOR型フラッシュメモリは通常、NAND型フラッシュメモリよりも小型で、バイト単位で書込可能、ブロック単位で消去可能であり(例えば、NOR型の場合は1メガバイトから16メガバイトであるのに対して、NAND型の場合はギガバイト単位)、通常はexecute−in−place型のコードについて利用される。EEPROM114は、別の種類の再プログラミング可能で不揮発性のストレージであってもよく、これらに限定されないが、抵抗型および/または電荷型のメモリ(例えば、フェライトコアメモリ)、相変化メモリ(PCM)、磁気型メモリ(MRAM)、カーボンナノチューブ型不揮発性メモリ技術等であってもよい。このような技術は、再プログラミング可能な場合には「不揮発性RAM」または「NVRAM」と呼ばれるとしてよく、ヒューズ/ヒューズアレイ等の一回のみ書込み可能なストレージを含むとしてよい。NOR型フラッシュおよびフラッシュメモリについて本明細書で説明しているが、本開示に応じて他の不揮発性メモリ技術を利用するとしてもよい。利用する特定のメモリ技術は、システム要件に応じて決まるとしてよく、設計実行である。
【0020】
図2は、フラッシュメモリ114に格納されている情報について格納構成200の一例を示す図である。フラッシュは、BIOS初期化モジュール202、BIOS204および他のファームウェア206を備えるとしてよい。BIOS初期化モジュール202は、プロセッサリセットベクトル208、FITポインタ210およびFIT構造212を有するとしてよい。FIT構造212は、FIT終端マーカー214、BIOS初期化モジュールポインタ216、検証証明書218および/またはFITヘッダ220を含むとしてよい。
図2のFIT構造212は
図1のFIT136に対応し、
図2のBIOS204は
図1のBIOS134に対応する。
【0021】
FIT136は、フラッシュメモリ114に格納されている、BIOS134を含むファームウェアに対してインターフェース(つまり、ポインタ)を提供する。FIT136が空であるか、または、ヌル化されている場合、プロセッサブートストラップは、デフォルトプロセッサブートストラップまたはリセットベクトルアドレスに戻るとしてよい。FIT136は、空でない場合、実行可能なコードおよび/またはデータを記述するように構成されているさまざまなレコードを含むとしてよい。このようなレコードは、ポインタおよびその他のメタデータ、例えば、デフォルトリセットベクトルアドレスに代えて、または、これに加えて、実行されるべきフラッシュメモリ内のコードブロック/データブロックへのポインタを含むとしてよい。FIT136または同様のメカニズムは、プロセッサのデフォルトリセットベクトル208を用いて実現されるデフォルト動作に代えて、または、これに加えて、別の仕様および/または機能のロードを可能にするように構成されている。この構成は、システムのカスタマイズ化およびパッチングには有用であるとしてよい。初期化ファームウェア130は、FIT構造212内のポインタ(例えば、BIOS初期化モジュールポインタ216)を用いてフラッシュ114におけるBIOS134の位置を特定するとしてよい。一部の実施形態によると、初期化ファームウェア130は、フラッシュ114検索処理および/またはプラットフォームストラップ処理等の他の技術を利用して、BIOS134の位置を決定するとしてよい。
【0022】
BIOS134は、ハードウェアを初期化および試験して、OS150をロードする。再プログラミング可能であることによって、BIOS134は、(EEPROM114の代わりとなることなく)更新が可能になるが、悪意あるプログラムによる攻撃手段ともなり得る。BIOS134のセキュリティを侵害した悪意あるプログラムは通常、比較的高い特権レベルで実行されるので、従来のマルウェア対策プログラムでは検出するのが困難である。本開示に応じた初期化ファームウェア検証モジュール128および初期化ファームウェア130は、プロセッサ122がBIOS134のコードをフェッチおよび/または実行する前に実行されるように構成されているので、セキュリティが侵害されたBIOSを実行前に検出するという利点がある。BIOS134のセキュリティが侵害されている場合(つまり、検証が失敗すると)、初期化ファームウェア130は、本明細書で説明するように、1以上の応答を開始するように構成されている。例えば、セキュリティが侵害されたシステムを検出することに応じて、別のFITエントリが、EEPROM114内の格納構造200における修復BIOSブロックを指し示すように構成されるとしてよい。別の例によると、EEPROM114は、セキュリティが侵害されたシステムを検出することに応じてアクセス(デコード)されるEEPROM114の別領域(または、別箇のEEPROM)にBIOS134の複製を格納しているとしてよい。言い換えると、システム100は、BIOS134の検証が失敗した場合に実行されるべき「バックアップ」BIOSを含むとしてよい。バックアップBIOSは、EEPROM114に格納されているとしてもよいし、および/または、別のEEPROMに格納されているとしてよい。
【0023】
図1を再度参照すると、マイクロプロセッササブシステム112は、埋め込みマイクロプロセッサ140、キャッシュメモリ142および不揮発性メモリ(ROM)144を含むとしてよい。マイクロプロセッササブシステム112は、フラッシュメモリ114に格納されているマネジビリティエンジンファームウェア138を実行する。本実施形態では、マイクロプロセッササブシステム112は、プラットフォームコントローラハブ(PCH)106を介してプロセッサ部102に結合されており、ネットワークポート116を介してネットワーク120およびリモートエージェント118に結合されている。マイクロプロセッササブシステム112は、アウトオブバンド通信を可能とする。アウトオブバンド通信は、マイクロプロセッササブシステム112とプロセッサ部102との間で、および/または、システム100とリモートエージェント118との間で行われるとしてよい。例えば、BIOS134の検証が失敗すると、マイクロプロセッササブシステム112(およびマネジビリティエンジンファームウェア138)は、リモートエージェント118との間でOOB通信を行って、更新後の検証済みのBIOSをリモートエージェント118から取得するとしてよい。これは、フラッシュメモリ114に実際に現場で物理的にアクセスすることなく、攻撃されたフラッシュメモリに格納されているBIOSをリモートに更新および/または認証することが可能になるという利点がある。
【0024】
このため、リセット(例えば、電源オンに対応するリセットおよび/またはモデル固有レジスタの状態に基づくリセット)に応じて、システム100は、プロセッサ初期化モジュール126を実行して初期化シーケンス(つまり、プロセッサ122の初期化フェーズ)、および、プロセッサ部102に含まれている初期化ファームウェア130を検証する初期化ファームウェア検証モジュール128を実行する。システム100はさらに、初期化ファームウェア130を実行してBIOS134を検証する。初期化ファームウェア130および/またはBIOS134の検証が失敗すると、システム100はさらに、これらに限定されないが、システム(コンピューティングプラットフォーム)を設定して機能が限定された検疫モードでブートさせること、(例えば、OOB機能を用いて)修復プロセスを開始すること、1以上のMSRを利用して検証ステータスを報告すること、初期化ファームウェアおよび/またはBIOSが実行されないようにすること、シャットダウンすること、および/または、プロセッサを停止させること等の1以上の応答を開始する。BIOS134とは異なり、プロセッサ部102に含まれているプロセッサ初期化モジュール126、初期化ファームウェア検証モジュール128および初期化ファームウェア130は、比較的アクセスし難く(例えば、オンダイ型か、または、プロセッサパッケージ基板上にある)、公開されているインターフェースプロトコルを概して含んでいないという利点がある。プロセッサ初期化モジュール126、初期化ファームウェア検証モジュール128、初期化ファームウェア130およびプロセッサ部102のこのような構成によって、BIOS134が認証される理由となる「信頼のルート」が得られる。
【0025】
<方法の一例>
図3は、本開示に応じたBIOSを検証(認証)するための処理の一例を示すフローチャート300を示す図である。本実施形態で図示している処理は、システム100に対応付けられている回路、ファームウェアモジュールおよび/またはソフトウェアモジュール(例えば、CPU122を含むプロセッサ部102)によって実行されるとしてよい。処理フローは、処理305で開始されるとしてよい。処理305は、例えば、電源オンリセットまたはCPU限定リセット等のリセットを含む。処理310は、プロセッサ初期化モジュールを実行することを含む。処理310は、初期化ファームウェア検証モジュールを実行することを含み、電源オンに対応付けられている他のプロセッサ動作を含むとしてよい。初期化ファームウェアが認証されるか否か(つまり、検証が成功するか否か)は、処理315で判断されるとしてよい。
【0026】
初期化ファームウェアが認証されれば、処理330において初期化ファームウェアが実行されるとしてよい。BIOSが認証されるか否かは、処理335で判断するとしてよい。BIOSが認証されると、処理340において完全システムブートがイネーブルされるとしてよい。例えば、この認証のための検証には、デフォルトリセットベクトル経路または別のFIT仕様の経路またはモジュールに沿った1以上のBIOS要素が含まれるとしてよい。「完全システムブート」は、全てのシステム機能をBIOSおよびOSが利用可能であることを意味している。処理345は、制御をBIOSに移行することを含むとしてよい。例えば、初期化ファームウェア130は、システム100の制御をBIOS134に渡すとしてよい。処理350は、初期化システムハードウェアを含むシステムをブートすることと、OSをロードすることとを含むとしてよい。
【0027】
初期化ファームウェアが認証されない場合、および/または、BIOSが認証されない場合(つまり、検証に失敗する場合)、1以上の応答が処理355で開始されるとしてよい。初期化ファームウェア検証モジュール128は、初期化ファームウェアの検証が失敗すると、1以上の応答を選択および開始するように構成されているとしてよい。初期化ファームウェア130は、BIOSの検証が失敗すると、1以上の応答を選択および開始するように構成されているとしてよい。これらの応答は、処理360、365、370(および375)、380、385、390および395のうち1以上を含むとしてよい。処理380は停止することを含む。例えば、プロセッサ122は処理380において停止するとしてよい。処理385は、初期化ファームウェアおよび/またはBIOSの実行を停止させることを含む。システム(例えば、システム100)は、処理395においてシャットダウンするとしてよい。
【0028】
処理360は、システムを検疫モード(つまり、動作が制限または限定されたモード)でブートさせることを含む。検疫モードでは、一部のシステム機能および/または一部のシステムコンポーネントへのアクセスは、ディセーブルされるとしてよい。検疫モードは、初期化ファームウェアおよび/またはBIOSの検証が失敗した場合に、システム機能を限定できるように構成されている。例えば、ハイパーバイザ等の「相対的に高位の」システム機能をディセーブルするとしてよい。処理365は、モデル固有レジスタ(MSR)を更新することを含む。モデル固有レジスタの更新は、初期化ファームウェアおよび/またはBIOSの検証の失敗を通知するように構成されているとしてよい。モデル固有レジスタは、不変レジスタであってよく、第三者による変更が禁止されており、比較的セキュアな報告方法が実現される。例えば、MSRが更新されると、失敗条件の詳細な内容を通知することなく、失敗を通知するとしてよい。このように報告を制限することで、攻撃者が失敗条件の詳細な内容を利用して検出機能のセキュリティを侵害しないようにする。
【0029】
処理370において修復プロセスが開始されるとしてよい。処理370は、リセットを含む初回再試行を可能とするように構成されているクロスリセット状態を維持すること、初期化ファームウェアおよび/またはBIOSのバックアップコピーへロールオーバーすること、初期化ファームウェアおよび/またはBIOSの以前のイメージにロールバックすること、および/または、初期化ファームウェアおよび/またはBIOSを更新することを含むとしてよい。初期化ファームウェアのバックアップコピーが存在するか否かは、不揮発性メモリに関連する特性に応じて決まるとしてよい。処理370における再試行回数は制限があるとしてよい。例えば、再試行回数が所定値に到達すると修復プロセスを終了させるようトリガするカウンタが実現されているとしてよい。別の例によると、ロールオーバーまたはロールバックによって持続状態が修正され、この後に再試行すると修復プロセスの終了がトリガされるとしてもよい。初期化ファームウェアおよび/またはBIOSは、セキュア技術(つまり、暗号化技術)を用いて更新するとしてよい。
【0030】
処理370は、アウトオブバンド(OOB)通信を介して初期化ファームウェアおよび/またはBIOSを更新することを含むとしてよい。例えば、
図1のマイクロプロセッササブシステム112は、OOB通信を利用してリモートエージェント118との間でネットワーク120を介して通信を行い、更新後のセキュリティ侵害されていないBIOSを取得するとしてよい。例えば、更新後のBIOSは、検証が失敗したBIOSよりもmonotone改定バージョンが上であるとしてよい(例えば、以前の、例えば、エラーを含むBIOSに戻るロールバック攻撃を回避するため)。マイクロプロセッササブシステム112はさらに、取得したBIOSでフラッシュメモリ114をプログラミングし直すとしてよい。この後、処理375においてリセットを開始するとしてよい。
【0031】
処理390は、時間遅延を実現することを含むとしてよい。例えば、時間遅延は応答同士の間に挿入されるとしてよい。別の例を挙げると、処理370において時間遅延が再試行同士の間に挿入されるとしてよい。時間遅延は、攻撃の頻度、および、攻撃が成功または失敗と評価される頻度を低減するように構成されている。
【0032】
処理360、365、370、375、380、385、390および395で説明した応答は、個別に実行されるとしてもよいし、または、組み合わせて実行するとしてもよい。特定の応答は、予め定められて、例えば、オフダイ不揮発性メモリ124に格納されているとしてよい。例えば、応答は、さまざまなタイミングで、さまざまな方法を利用して選択されるとしてもよい。例えば、これらに限定されないが、製造時に、最初の動作時に、ジャンパを利用して、特別な保護されているユーザによる最初のセットアップによって、および/または、初期化ファームウェア検証モジュールおよび/または初期化ファームウェアを更新することで、選択するとしてよい。
【0033】
このため、フローチャート300に図示されているように、プロセッサ初期化モジュールおよび初期化ファームウェア検証モジュールは、初期化ファームウェアおよびBIOSより前に実行されるように構成されており、初期化ファームウェアおよびBIOSを認証するとしてよい。初期化ファームウェアおよび/またはBIOSの検証が失敗すると、1以上の応答が開始されるとしてよい。応答の一部は、システム、例えば、システム100を検疫モードで動作させ、初期化ファームウェアおよび/またはBIOSを更新させ、および/または、初期化ファームウェアおよび/またはBIOSの検証の失敗を通知させるように構成されているという利点がある。したがって、BIOS検証の失敗に対する応答は、システム100を停止させることに限定されない。
【0034】
図4は、本開示に応じたBIOSを検証するための処理の一例を示す別のフローチャート400を示す図である。本実施形態で図示している処理は、システム100に対応付けられている回路、ファームウェアモジュールおよび/またはソフトウェアモジュール(例えば、CPU122を含むプロセッサ部102)によって実行されるとしてよい。
図4において、BIOSを認証するための処理は
図1の初期化ROM127に対応する初期化ROM402に含まれており、BIOSに関連付けられる処理はBIOS134に対応するUEFI(BIOS)ファームウェア404に含まれる。
【0035】
プログラムフローは処理405で開始されるとしてよい。処理405は、システムリセットに応じて実施されるとしてよい。処理405は、初期化ファームウェア検証モジュールを含むプロセッサ初期化モジュールの実行、および、初期化ファームウェアの検証、および、初期化ファームウェアの実行を含むとしてよい。初期化ファームウェア検証モジュールが初期化ファームウェアの検証に成功すると、プロセッサは初期化ファームウェアの実行を開始するとしてよい。処理405は任意で、基本的なメモリ機能を初期化すること(例えば、システムメモリを構築すること)、および/または、インターコネクトファブリック等の他のシステム素子を初期化することを含むとしてよい。クイックパスインターフェースは、プロセッササブシステムと、プラットフォームコントローラハブおよび/またはマイクロプロセッササブシステムとを相互接続するインターコネクトファブリックの一例である。処理410は、署名済みのマニフェストを持つファームウェアインターフェーステーブル(FIT)およびOEM BIOSブロックがフラッシュメモリに存在するか否かを判断することを含む。例えば、TPM108を含むシステムでは、処理410は、マニフェストのハッシュと、TPM108のNVデータレジスタに格納されているハッシュ値とを比較することで、署名済みのマニフェストのインテグリティを確認することを含むとしてよい。
【0036】
フラッシュメモリに署名済みのマニフェストを持つファームウェアインターフェーステーブル(FIT)が存在しない場合、または、OEM BIOSブロックが存在しない場合、処理415が実行されるとしてよい。処理415は、不変モデル固有レジスタ(NOT_SIGNED_MSR)を設定すること、および/または、プロセッササブシステムを停止させることを含む。フラッシュメモリに署名済みマニフェストを持つFITが存在する場合、および、OEM BIOSブロックが存在する場合、処理420が実行されるとしてよい。処理420は、署名済みマニフェストおよび対応するOEM UEFI BIOSファームウェアボリュームを読み出すことを含む。処理420はさらに、リモート証明機関(CA)との間で署名済みマニフェスト(デジタル署名)を検証することを含むとしてよい。例えば、署名済みのマニフェストの認証は、マイクロプロセッササブシステム112およびマネジビリティエンジンファームウェア138を利用してOOB方式で実行されるとしてよい。
【0037】
デジタル署名が一致し、対応する公開鍵が無効化されておらず期限が切れておらず、および、IN_UPDATE_MSRモデル固有レジスタが偽を示しているか否かは、処理425において判断されるとしてよい。上記の条件が否定される場合、FITの次のエントリを処理430で読み出すとしてよい。FITエントリが全て完了したか否かは、処理435で判断するとしてよい。FITエントリが全て完了している場合(つまり、FITには試験していないエントリが無い場合)、処理415を実行するとしてよい。デジタル署名が一致し、対応する公開鍵が無効化されておらず期限が切れておらず、IN_UPDATE_MSRモデル固有レジスタが偽である場合、処理440において完全ブートがイネーブルされるとしてよい。完全ブートは、高位の技術および他のハードウェア機能をイネーブルすることを含むとしてよい。
【0038】
処理445は、セキュリティ(SEC)フェーズ、プラットフォーム環境初期化(PEI)フェーズおよび/またはドライバ実行環境(DXE)を含むUEFI BIOSファームウェアへ制御を渡すことを含むとしてよい。UEFIファームウェア更新が存在するか否かを処理450において判断するとしてよい。UEFIファームウェア更新が存在する場合、処理455において、この更新はUEFIファームウェア確認処理を用いて検証されるとしてよい。処理460は、モデル固有レジスタIN_UPDATE MSRを設定して、フラッシュメモリにおいてUEFIファームウェアを更新して、モデル固有レジスタIN_UPDATE MSRをクリアすることを含む。この後、処理465においてリセットを開始するとしてよい。UEFIファームウェア更新が存在しない場合、UEFI BIOSファームウェアは処理470においてブートを終了するとしてよい。
【0039】
図5は、リセットからOSブートまでのブートプロセス500に対応付けられている処理を示す図である。
図5のブートプロセス500は、本明細書で説明している、BIOSファームウェアの検証が成功する場合に対応する。プロセス500には、2つのフェーズ(フェーズ1およびフェーズ2)が存在し、複数のサブフェーズが存在するとしてよい。プロセス500は、リセット(例えば、電源オンリセットまたはCPU限定リセット)502によって開始されるとしてよい。リセットに応じて、初期化ファームウェア検証モジュールを含むプロセッサ初期化モジュールを、サブフェーズ504において、本明細書で説明するように実行するとしてよい。初期化ファームウェア検証モジュールは、本明細書で説明しているように、FITの位置を特定して、初期化ファームウェアを認証するように構成されているとしてよい。初期化ファームウェアはこの後、本明細書で説明しているように、サブフェーズ506において、OEM BIOSを検証し、および/または、インターコネクトファブリック(例えば、QPI)およびシステムメモリをイネーブルするとしてよい。サブフェーズ504およびサブフェーズ506はフェーズ1に含まれている。フェーズ1の処理は、プロセッサ初期化モジュールおよび初期化ファームウェアによって実行されるとしてよく、このため比較的セキュアであるとしてよい。UEFI BIOSファームウェアはこの後、サブフェーズ508において、プラットフォーム(例えば、システム100)を初期化するとしてよい。これには、SEC、PEIおよびDXEが含まれる。SECは、一時的なメモリストレージを構築する。これらに限定されないが、プロセッサCAR(Cache As RAM)を利用してPEIコアおよびPEIモジュールを実行する。DXEが開始されると、初期化したメモリが利用可能になるはずである。DXEは、PCI、UI、USB、I/O、レガシーBIOS、SMBIOSおよび/またはACPIを含むとしてよい。このプロセスは、オペレーティングシステムのブートを開始することに対応する、ブートデバイス選択のサブフェーズ510で終了するとしてよい。サブフェーズ508およびサブフェーズ510はフェーズ2に含まれている。フェーズ1は、初期化ファームウェア検証およびBIOS検証を含む。フェーズ2は、認証が済んだUEFI BIOSファームウェアおよびブートデバイス選択の開始および実行を含む。
【0040】
一般的に、本開示ではBIOSストレージ攻撃に対する保護および通知を実行するシステム(および方法)を提供する。システムの一例を挙げると、プロセッサ不揮発性メモリに格納されているプロセッサ制御および/またはデータ状態を含むプロセッサ初期化モジュールと、プロセッサに結合されており、プロセッサパッケージにおいて不揮発性メモリに格納されている初期化ファームウェアとを備える。初期化ファームウェア検証モジュールを含むプロセッサ初期化モジュールはリセットに応じて最初に実行され、初期化ファームウェア検証モジュールは初期化ファームウェアを検証するように構成されている。初期化ファームウェアは、初期化ファームウェア検証モジュールによる検証の後に実行され、BIOSを検証するように構成されている。初期化ファームウェアおよび/またはBIOSの検証が失敗すると、システムは、初期化ファームウェアおよび/またはBIOSが実行されないようにすること、(例えば、アウトオブバンド(OOB)通信を利用して)修復を開始すること、モデル固有レジスタ(MSR)を利用して検証の失敗を報告すること、プロセッサを停止させること、シャットダウンすること、および/または、機能を限定した(「検疫」)モードでBIOSを実行させオペレーティングシステム(OS)をブートさせることのうち少なくとも一つを実行するように構成されている。検疫モードでは、BIOSおよびOSがシステムの一部の機能を利用できないようになっているとしてよい。
【0041】
「回路」という用語は、本明細書の任意の実施形態で用いる場合、例えば、ハードワイヤード回路、プログラム可能回路、ステートマシン回路、埋込コントローラ、および/または、プログラム可能回路が実行する命令を格納しているファームウェアを、単独または組み合わせて、含むとしてよい。
【0042】
OS150は、任意の汎用オペレーティングシステムまたはカスタムオペレーティングシステムを含むとしてよい。例えば、OS150は、Microsoft Windows(登録商標)、HP−UX、Linux(登録商標)またはUNIX(登録商標)および/または他の汎用オペレーティングシステムを利用して実現するとしてよい。
【0043】
図3、
図4および
図5ではさまざまな実施形態に応じて方法を図示しているが、図示した処理のうち全てが任意の実施形態で必要ではないと理解されたい。本開示の他の実施形態では
図3、
図4および/または
図5に図示している処理を、図面には具体的に示していないが本開示に十分に準拠した方法で組み合わせ得ることを本明細書では十分に考慮している。このため、一の図面で明確に図示していない特徴および/または処理に関する請求項は、本開示の範囲および内容に含まれるものとする。
【0044】
本明細書で説明している実施形態は、例えば、ハードウェア、ソフトウェアおよび/またはファームウェアを用いて本明細書で説明した方法および/または処理を実行することで実現されるとしてよい。本明細書で説明している特定の実施形態は、機械が実行すると当該機械が本明細書で説明した方法および/または処理を実行するような機械実行可能命令を格納している有形の機械可読媒体として提供されるとしてよい。有形の機械可読媒体は、これらに限定されないが、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリーメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)および光磁気ディスク等の任意の種類のディスク、リードオンリーメモリ(ROM)等の半導体デバイス、ダイナミックランダムアクセスメモリ(RAM)およびスタティックRAM等のRAM、消去可能プログラム可能リードオンリーメモリ(EPROM)、電気的消去可能プログラム可能リードオンリーメモリ(EEPROM)、フラッシュメモリ、磁気カードまたは光カード、または、電子命令を格納するのに適した任意の種類の有形媒体を含むとしてよい。機械は、任意の適切なプロセッシングプラットフォーム、デバイスまたはシステム、コンピューティングプラットフォーム、デバイスまたはシステムを含むとしてよく、ハードウェアおよび/またはソフトウェアの任意の適切な組み合わせを用いて実現されるとしてよい。命令は、任意の適切な種類のコードを含むとしてよく、任意の適切なプログラミング言語を用いて実現されるとしてよい。
【0045】
このため、本開示の一実施形態によると、コンピューティングプラットフォームのベーシックインプットアウトプットシステム(BIOS)を検証する方法が提供される。当該方法は、コンピューティングプラットフォームのプロセッサにプロセッサ初期化モジュールが含まれていて、プロセッサ初期化モジュールが初期化ファームウェア検証モジュールを含み、リセットに応じてプロセッサ初期化モジュールを実行する段階と、初期化ファームウェア検証モジュールを用いてコンピューティングプラットフォームのプロセッサパッケージ内の不揮発性メモリに格納されている初期化ファームウェアの検証を試みる段階と、再プログラミング可能な不揮発性メモリに含まれているBIOSの検証を初期化ファームウェアを用いて試みる段階と、初期化ファームウェアおよびBIOSのうち少なくとも一方の検証が失敗した場合、少なくとも一の応答を開始する段階とを備える。
【0046】
別の実施形態によると、本開示はコンピューティングプラットフォームを提供する。当該コンピューティングプラットフォームは、プロセッサ初期化モジュールを含むプロセッサと、初期化ファームウェアを格納しているオフダイ不揮発性メモリとを有するプロセッサパッケージを備える。プロセッサ初期化モジュールは、初期化ファームウェア検証モジュールを含む。当該コンピューティングプラットフォームはさらに、ベーシックインプットアウトプットシステム(BIOS)ファームウェアを格納している再プログラミング可能な不揮発性メモリを備える。当該プロセッサは、コンピューティングプラットフォームのリセットに応じてプロセッサ初期化モジュールを実行し、初期化ファームウェア検証モジュールを用いて初期化ファームウェアの検証を試みて、初期化ファームウェアを用いてBIOSファームウェアの検証を試みて、初期化ファームウェアおよびBIOSファームウェアの少なくとも一方の検証が失敗すると、少なくとも一の応答を開始する。
【0047】
別の実施形態によると、本開示は、1以上のプロセッサで実行すると1以上のプロセッサが以下の手順を含む処理を実行するような命令を格納している有形のコンピュータ可読媒体を提供する。当該処理は、コンピューティングプラットフォームのプロセッサにプロセッサ初期化モジュールが含まれていて、プロセッサ初期化モジュールが初期化ファームウェア検証モジュールを含み、リセットに応じてプロセッサ初期化モジュールを実行する手順と、初期化ファームウェア検証モジュールを用いてコンピューティングプラットフォームのプロセッサパッケージ内の不揮発性メモリに格納されている初期化ファームウェアの検証を試みる手順と、再プログラミング可能な不揮発性メモリに含まれているBIOSの検証を初期化ファームウェアを用いて試みる手順と、初期化ファームウェアおよびBIOSのうち少なくとも一方の検証が失敗した場合、少なくとも一の応答を開始する手順とを有する。
【0048】
本明細書で用いた用語および表現は、説明のために用いているのであって限定を目的としたものではなく、特定の用語および表現を利用したとしても、図示および説明した特徴の均等物(またはその一部)を除外する意図はなく、請求項の範囲内においてさまざまな変形例が可能であると認められたい。したがって、請求項はこのような均等例をすべて含むものとする。
【0049】
さまざまな特徴、側面および実施形態を本明細書で説明してきた。特徴、側面および実施形態は、当業者であれば理解されるように、互いに組み合わせ可能であると同時に、変更および変形も可能である。本開示は、このため、このような組み合わせ例、変更例および変形例を含むものと見なされるべきである。