(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-06-19
(45)【発行日】2024-06-27
(54)【発明の名称】ファームウェアのアンチロールバック
(51)【国際特許分類】
G06F 21/57 20130101AFI20240620BHJP
G06F 9/4401 20180101ALI20240620BHJP
【FI】
G06F21/57 350
G06F9/4401
(21)【出願番号】P 2021571836
(86)(22)【出願日】2020-06-18
(86)【国際出願番号】 IB2020000490
(87)【国際公開番号】W WO2021001683
(87)【国際公開日】2021-01-07
【審査請求日】2023-06-01
(32)【優先日】2019-07-03
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】カシャカマナサン ナダラジャ
(72)【発明者】
【氏名】ベネディクト チェン
【審査官】田中 啓介
(56)【参考文献】
【文献】特開2017-21434(JP,A)
【文献】特表2015-533444(JP,A)
【文献】米国特許出願公開第2014/0250290(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F8/00-8/38
G06F8/60-8/77
G06F9/44-9/445、9/451
G06F21/12-21/16
G06F21/50-21/57
G09C1/00-5/00
H04K1/00-3/00
H04L9/00-9/40
(57)【特許請求の範囲】
【請求項1】
コンピューティングプラットフォームのファームウェアを検証する方法であって、
セキュリティプロセッサをブートすることと、
前記セキュリティプロセッサにおいて、ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得することと、
前記セキュリティプロセッサにおいて、ファームウェアセキュリティテーブルのテーブルSPLが前記最小SPL以上であることを検証することであって、前記ファームウェアセキュリティテーブルは、ファームウェアコードモジュールの複数のファームウェア識別子と、各ファームウェア識別子に関連付けられた複数のチェックSPL値と、を含む、ことと、
ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得することと、(b)前記ファームウェアセキュリティテーブルにアクセスして、各チェックSPL値を取得することと、(c)前記各ファームウェアSPL値が前記各チェックSPL値以上であるかどうかをチェックすることと、によって、複数のファームウェアコードモジュールを検証することと、を含む、
方法。
【請求項2】
前記複数のファームウェアコードモジュールを検証する前に、ブートローダSPL値を含むブートローダにアクセスして、前記ブートローダSPL値が、前記ファームウェアセキュリティテーブルに記憶された関連するブートローダチェックSPL値以上であるかどうかをチェックすることと、
前記ブートローダSPL値が関連するブートローダチェックSPL値以上である場合に、前記ブートローダを前記セキュリティプロセッサにロードし、前記ブートローダを実行することと、
前記ブートローダSPL値が関連するブートローダチェックSPL値以上でない場合に、リカバリ手順を行うことと、をさらに含み、
前記ブートローダは、前記複数のファームウェアコードモジュールの検証を行う、
請求項1の方法。
【請求項3】
前記ブートローダを前記セキュリティプロセッサにロードすることは、不揮発性メモリからロードすることを含む、
請求項2の方法。
【請求項4】
前記セキュリティプロセッサをブートすることは、前記セキュリティプロセッサに統合されたセキュアリードオンリメモリ(ROM)からブートすることを含む、
請求項1の方法。
【請求項5】
前記ファームウェアセキュリティテーブルから前記セキュリティプロセッサのランダムアクセスメモリ(RAM)にデータをロードすることと、
前記複数のファームウェアコードモジュールを検証する場合に、ロードされた前記データにアクセスすることと、をさらに含む、
請求項1の方法。
【請求項6】
前記ファームウェアセキュリティテーブルをアップデートすることと、前記ファームウェアセキュリティテーブルをアップデートすることに関連して、前記テーブルSPLを増加させ、新しい最小SPL値を前記ライトワンスメモリビットのセットに書き込むことと、をさらに含む、
請求項1の方法。
【請求項7】
前記複数のファームウェアコードモジュールのうち選択されたファームウェアコードモジュールを検証した後に、前記セキュリティプロセッサの制御下で、選択されたファームウェアコードモジュールをプロセッサにロードし、前記プロセッサを初期化することをさらに含む、
請求項1の方法。
【請求項8】
前記ライトワンスメモリビットのセットを読み取ることは、ワンタイムプログラマブルヒューズのセットを読み取ることを含む、
請求項1の方法。
【請求項9】
セキュリティプロセッサであって、
マイクロコントローラコアと、
前記マイクロコントローラコアに結合されたライトワンスメモリビットのセットと、
前記マイクロコントローラコアに結合されたランダムアクセスメモリ(RAM)と
、を備え、
前記セキュリティプロセッサは、
前記セキュリティプロセッサをブートすることと、
前記ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得することと、
ファームウェアセキュリティテーブルのテーブルSPLが前記最小SPL以上であることを検証することであって、前記ファームウェアセキュリティテーブルは、ファームウェアコードモジュールの複数のファームウェア識別子と、各ファームウェア識別子に関連付けられた複数のチェックSPL値と、を含む、ことと、
ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得することと、(b)前記ファームウェアセキュリティテーブルにアクセスして、各チェックSPL値を取得することと、(c)前記各ファームウェアSPL値が前記各チェックSPL値以上であるかどうかをチェックすることと、によって、複数のファームウェアコードモジュールを検証することと、
を行うように動作する、
セキュリティプロセッサ。
【請求項10】
前記セキュリティプロセッサは、
前記複数のファームウェアコードモジュールを検証する前に、ブートローダSPL値を含むブートローダにアクセスして、前記ブートローダSPL値が、前記ファームウェアセキュリティテーブルに記憶された関連するブートローダチェックSPL値以上であるかどうかをチェックすることと、
前記ブートローダSPL値が関連するブートローダチェックSPL値以上である場合に、前記ブートローダを前記セキュリティプロセッサにロードし、前記ブートローダを実行することと、
前記ブートローダSPL値が関連するブートローダチェックSPL値以上でない場合に、リカバリ手順を行うことと、
を行うように動作し、
前記ブートローダは、前記複数のファームウェアコードモジュールの検証を行う、
請求項9の
セキュリティプロセッサ。
【請求項11】
前記ブートローダを前記セキュリティプロセッサにロードすることは
、不揮発性メモリからロードすることを含む、
請求項10の
セキュリティプロセッサ。
【請求項12】
前記不揮発性メモリは、前記セキュリティプロセッサの外部にある、
請求項11のセキュリティプロセッサ。
【請求項13】
前記セキュリティプロセッサに結合されたセキュアリードオンリメモリ(ROM)を備え、
前記セキュリティプロセッサをブートすることは、前
記セキュアROMからブートすることを含む、
請求項
10の
セキュリティプロセッサ。
【請求項14】
前記セキュリティプロセッサは、前記ファームウェアセキュリティテーブルへのアップデートを検出することと、前記ファームウェアセキュリティテーブルのアップデートに関連して、前記テーブルSPLを増加させ、新しい最小SPL値を前記ライトワンスメモリビットのセットに書き込むことと、を行うように動作する、
請求項
10の
セキュリティプロセッサ。
【請求項15】
不揮発性メモリと、
前記不揮発性メモリに結合されたシステムオンチップと、を備えるデータ処理プラットフォームであって、
前記システムオンチップは、
1つ以上の処理コアを含むプロセッサと、
マイクロコントローラコアと、前記マイクロコントローラコアに結合されたライトワンスメモリビットのセットと、前記マイクロコントローラコアに結合されたランダムアクセスメモリ(RAM)と、前記マイクロコントローラコアに結合されたセキュアブートリードオンリメモリ(ROM)と、を含むセキュリティプロセッサと、を備え、
前記セキュリティプロセッサは、
前記セキュリティプロセッサをブートすることと、
前記ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得することと、
ファームウェアセキュリティテーブルのテーブルSPLが前記最小SPL以上であることを検証することであって、前記ファームウェアセキュリティテーブルは、ファームウェアコードモジュールの複数のファームウェア識別子と、各ファームウェア識別子に関連付けられた複数のチェックSPL値と、を含む、ことと、
ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得することと、(b)前記ファームウェアセキュリティテーブルにアクセスして、各チェックSPL値を取得することと、(c)前記各ファームウェアSPL値が前記各チェックSPL値以上であるかどうかをチェックすることと、によって、複数のファームウェアコードモジュールを検証することと、
を行うように動作する、
データ処理プラットフォーム。
【発明の詳細な説明】
【背景技術】
【0001】
新しいコンピュータ製品のファームウェアがリリースされると、製品の起動後に脆弱性が発見されることがある。脆弱性が発見されると、可能であれば、ハードウェア、ファームウェア及び/又はソフトウェアのアップデートによって脆弱性を軽減することができる。このようなケースでは、脆弱性が重大であり、ソフトウェア又はファームウェアによって対処可能である場合、脆弱であると見なされるソフトウェア又はファームウェアのバージョンがシステムで実行されないように、取り消しメカニズム(revocation mechanism)を実装することが望ましい。このようなケースでは、機能を維持するために、ソフトウェア又はファームウェアのインフィールドアップグレード(in-field upgrade)を行う必要がある。
【0002】
ファームウェアアップグレードのセキュリティを管理するために、ファームウェアのアンチロールバック機能が開発された。一部のアンチロールバック機能は、ワンタイムプログラマブルヒューズ(one time programmable fuses)等のライトワンスメモリビット(write-once memory bits)を使用して、特定のファームウェアの許可バージョン番号を追跡する。しかしながら、通常、これらの解決ソリューションに利用可能なワンタイムプログラマブルヒューズの数は限定されている。さらに、これらの解決ソリューションは、複雑なコンピューティングプラットフォームで生じるファームウェアアップデートの数が原因で、必要となるライトワンスメモリビットの数が増大する。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、アンチロールバックセキュリティ機能を含むアクセラレーテッドプロセッシングユニット(APU)のブロック図である。
【
図2】いくつかの実施形態による、PSPのより詳細なブロック図である。
【
図3】いくつかの実施形態による、ファームウェアを検証及びロードするプロセスを示すフローである。
【
図4】いくつかの実施形態による、ファームウェア及びソフトウェアを検証及びロードする別のプロセスを示すフロー図である。
【
図5】いくつかの実施形態による、ファームウェアセキュリティテーブル(FST)を示す図である。
【
図6】いくつかの実施形態による、ファームウェアモジュールを示す図である。
【発明を実施するための形態】
【0004】
以下の説明において、異なる図面において同じ符号を使用することは、類似又は同一のアイテムを示す。特に断りの無い限り、「結合される(coupled)」という用語及びその関連する動詞の形態は、本技術分野において周知の手段による直接接続及び間接電気接続の両方を含み、特に断りの無い限り、直接接続という記載は、適切な形態の間接電気接続を使用した代替的な実施形態を意味する。
【0005】
方法は、コンピューティングプラットフォームのファームウェアを検証する。方法は、セキュリティプロセッサをブートすることと、セキュリティプロセッサにおいて、ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得することと、を含む。方法は、ファームウェアセキュリティテーブルのテーブルSPLが最小SPL以上であることを検証し、ファームウェアセキュリティテーブルは、ファームウェアコードモジュールの複数のファームウェア識別子と、ファームウェア識別子の各々に関連付けられた複数のチェックSPL値と、を含む。また、方法は、ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得すること、(b)ファームウェアセキュリティテーブルにアクセスして、各チェックSPL値を取得すること、及び、(c)各ファームウェアSPL値が各チェックSPL値以上であるかどうかをチェックすることによって、複数のファームウェアコードモジュールを検証する。
【0006】
データ処理プラットフォームは、不揮発性メモリと、不揮発性メモリに結合されたシステムオンチップと、を含む。システムオンチップは、1つ以上の処理コアを有するプロセッサと、マイクロコントローラコアを含むセキュリティプロセッサと、マイクロコントローラコアに結合されたライトワンスメモリビットのセットと、マイクロコントローラコアに結合されたランダムアクセスメモリ(RAM)と、マイクロコントローラコアに結合されたセキュアブートリードオンリメモリ(ROM)と、を備える。セキュリティプロセッサは、セキュリティプロセッサをブートし、ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得するように動作する。セキュリティプロセッサは、ファームウェアセキュリティテーブルのテーブルSPLが最小SPL以上であることを検証し、ファームウェアセキュリティテーブルは、ファームウェアコードモジュールの複数のファームウェア識別子と、各ファームウェア識別子に関連付けられた複数のチェックSPL値と、を含む。また、セキュリティプロセッサは、ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得すること、(b)ファームウェアセキュリティテーブルにアクセスして、各チェックSPL値を取得すること、及び、(c)各ファームウェアSPL値が各チェックSPL値以上であるかどうかをチェックすることによって、複数のファームウェアコードモジュールを検証する。
【0007】
セキュリティプロセッサは、マイクロコントローラコアと、マイクロコントローラコアに結合されたライトワンスメモリビットのセットと、マイクロコントローラコアに結合されたRAMと、マイクロコントローラコアに結合されたセキュアブートROMと、を備える。セキュリティプロセッサは、セキュリティプロセッサをブートし、ライトワンスメモリビットのセットを読み取って、最小SPLを取得するように動作する。セキュリティプロセッサは、ファームウェアセキュリティテーブルのテーブルSPLが最小SPL以上であることを検証し、ファームウェアセキュリティテーブルは、ファームウェアコードモジュールの複数のファームウェア識別子と、各ファームウェア識別子に関連付けられた複数のチェックSPL値と、を含む。また、セキュリティプロセッサは、ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得すること、(b)ファームウェアセキュリティテーブルにアクセスして、各チェックSPL値を取得すること、及び、(c)各ファームウェアSPL値が各チェックSPL値以上であるかどうかをチェックすることによって、複数のファームウェアコードモジュールを検証する。
【0008】
1つ以上の有形の非一時的なコンピュータ可読記憶媒体は、セキュリティプロセッサによって実行可能な命令を含むプログラム製品を保持する。命令は、セキュリティプロセッサをブートし、セキュリティプロセッサにおいて、ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得するために実行可能である。命令は、ファームウェアセキュリティテーブルのテーブルSPLが最小SPL以上であることを検証するためにさらに実行可能であり、ファームウェアセキュリティテーブルは、ファームウェアコードモジュールの複数のファームウェア識別子と、各ファームウェア識別子に関連付けられた複数のチェックSPL値と、を含む。命令は、ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得すること、(b)ファームウェアセキュリティテーブルにアクセスして、各チェックSPL値を取得すること、及び、(c)各ファームウェアSPL値が、各チェックSPL値以上であるかどうかをチェックすることによって、複数のファームウェアコードモジュールを検証するためにさらに実行可能である。
【0009】
図1は、いくつかの実施形態による、アンチロールバックセキュリティ機能を含むアクセラレーテッドプロセッシングユニット(APU)100のブロック図である。APU100は、様々なホストデータ処理プラットフォームの一部であってもよいシステムオンチップ(SoC)として実装される。本実施形態では、APUが示されているが、中央処理装置(CPU)又はグラフィックスプロセッシングユニット(GPU)等の他のデータ処理プラットフォームが使用されてもよい。APU100は、一般的に、CPUコアコンプレックス110と、グラフィックスコア120と、ディスプレイエンジン130のセットと、メモリ管理ハブ140と、データファブリック150と、周辺機器コントローラ160のセットと、周辺機器バスコントローラ170のセットと、システム管理ユニット(SMU)180と、プラットフォームセキュリティプロセッサ(PSP)210と、フラッシュメモリ220と、メモリコントローラ190のセットと、を備える。
【0010】
CPUコアコンプレックス110は、CPUコア112とCPUコア114とを含む。この例においては、CPUコアコンプレックス110は、2つのCPUコアを含むが、他の実施形態においては、CPUコアコンプレックス110は、任意の数のCPUコアを含むことができる。CPUコア112,114の各々は、制御ファブリックを構成するシステム管理ネットワーク(SMN)145と、データファブリック150と、に双方向接続されており、メモリアクセス要求をデータファブリック150に提供することができる。CPUコア112,114の各々は、単一コアであってもよいし、キャッシュ等の特定のリソースを共有する2つ以上の単一コアを含むコアコンプレックスであってもよい。
【0011】
グラフィックスコア120は、頂点処理、フラグメント処理、シェーディング、テクスチャブレンディング等のグラフィックス動作を高度に統合された並列形式で実行可能な高性能のグラフィックスプロセッシングユニット(GPU)である。グラフィックスコア120は、SMN145と、データファブリック150と、に双方向接続されており、メモリアクセス要求をデータファブリック150に提供することができる。これに関連して、APU100は、CPUコアコンプレックス110及びグラフィックスコア120が同じメモリ空間を共有するユニファイドメモリアーキテクチャ、又は、CPUコアコンプレックス110及びグラフィックスコア120がメモリ空間の一部を共有するメモリアーキテクチャの何れかをサポートすることができ、グラフィックスコア120は、CPUコアコンプレックス110がアクセスできないプライベートグラフィックスメモリも使用する。
【0012】
ディスプレイエンジン130は、モニタに表示するために、グラフィックスコア120によって生成されたオブジェクトをレンダリングし、ラスタライズする。グラフィックスコア120及びディスプレイエンジン130は、メモリ内の適切なアドレスへの均一な変換のために共通メモリ管理ハブ140に双方向接続されており、メモリ管理ハブ140は、このようなメモリアクセスを生成し、メモリシステムから返信された読み出しデータを受信するために、データファブリック150に双方向接続されている。
【0013】
データファブリック150は、任意のメモリアクセスエージェントとメモリコントローラ190との間でメモリアクセス要求及びメモリ応答をルーティングするためのクロスバースイッチを含む。また、データファブリック150は、システム構成に基づいてメモリアクセスの宛先を決定するために基本入出力システム(BIOS)によって定義されるシステムメモリマップと、各仮想接続のためのバッファと、を含む。
【0014】
周辺機器コントローラ160は、USBコントローラ162と、シリアルアドバンスドテクノロジアタッチメント(SATA)インタフェースコントローラ164と、を含み、これらの各々は、システムハブ166と、SMN145と、に双方向接続されている。これらの2つのコントローラは、APU100において使用され得る周辺機器コントローラの例示に過ぎない。
【0015】
周辺機器バスコントローラ170は、システムコントローラハブ172と、周辺機器コントローラハブ174と、を含み、これらの各々は、入力/出力(I/O)ハブ176と、SMN145と、に双方向接続されている。システムコントローラハブ172は、適切な通信リンクを介してフラッシュメモリ220に接続する。また、I/Oハブ176は、システムハブ166と、データファブリック150と、に双方向接続されている。したがって、例えば、CPUコアは、データファブリック150がI/Oハブ176を介してルーティングするアクセスを介して、USBコントローラ162、SATAインタフェースコントローラ164、システムコントローラハブ172又は周辺機器コントローラハブ174のレジスタをプログラミングすることができる。
【0016】
SMU180は、APU100上のリソースの動作を制御し、これらの間の通信を同期させるローカルコントローラである。SMU180は、APU100上の様々なプロセッサの起動シーケンスを管理し、リセット、イネーブル及び他の信号を介して複数のオフチップデバイスを制御する。また、SMU180は、様々なプロセッサ及び他の機能ブロックの電源を管理する。
【0017】
プラットフォームセキュリティプロセッサ(PSP)210は、APU100に搭載されたファームウェアブートプロセスを制御するローカルセキュリティコントローラである。PSP210は、以下にさらに説明するように、特定のソフトウェア検証及びファームウェアアンチロールバック(FAR)機能を行う。
【0018】
SoCの実施形態を示しているが、これは限定的なものではなく、他のコンピューティングプラットフォームも、本明細書に記載のFAR技術から恩恵を受け得る。
【0019】
図2は、いくつかの実施形態による、PSP210のより詳細なブロック図である。PSP210は、マイクロコントローラコア212と、マイクロコントローラコア212に接続されたスタティックRAM(SRAM)216等のRAMと、マイクロコントローラコア212に接続されたブートROM218と、マイクロコントローラコア212に接続された複数のライトワンスメモリビット214と、を備える。
【0020】
一般的に、PSP210は、APU100のセキュリティプロセッサとして動作する。PSP210は、セキュアな検証を行うために使用される暗号論理回路や、SMN145及びデータファブリック150と通信するためのインタフェース論理回路等の追加の機能ブロック(明確にするために図示省略)を含むことができる。動作中、PSP210は、本明細書に記載のFAR機能を実施することを含むAPU100のセキュアブートを行い、CPUコアコンプレックス110及びAPU100の他の周辺機器コントローラによって要求される他のセキュリティ関連機能を行う。
【0021】
ブートROM218は、好ましくは、改ざん防止機能を備えたセキュアブートROMであり、PSP210を初期化するための実行可能コード及び構成データを保持する。
【0022】
ライトワンスメモリビット214は、好ましくは、後述する最小セキュリティパッチレベル(SPL)を記憶するためのアレイとして構成された32ビットアレイ等の複数のライトワンスビットを含む。ライトワンスメモリビット214は、他の値を追跡するために使用されるシングルビット又は他のビットアレイを含んでもよい。ビットは、好ましくは、PSP210と共にオンチップに配置されるヒューズとして実装されるが、任意の適切なライトワンス技術が使用されてもよい。この特定のセキュリティプロセッサの実施形態が一例として与えられているが、適切なセキュアメモリ及びライトワンスメモリビットと組み合わせた場合に本明細書に記載の機能を実施する他のタイプのセキュリティプロセッサが採用されてもよい。
【0023】
図3は、いくつかの実施形態による、ファームウェアを検証及びロードするプロセス300を示すフロー図である。プロセス300は、一般的に、PSP210等のセキュリティプロセッサで実行され、ハードウェアルートオブトラスト(hardware root of trust)として機能するライトワンスセキュリティパッチレベル(SPL)を定義するFAR機能を実施する。最小SPLは、ファームウェアが以前のバージョンにロールバックされるのを抑制するように、重大なアップデートがファームウェアに行われたときに更新される最小バージョン番号である。プロセス300は、ブロック302で開始し、セキュリティプロセッサに統合されたセキュアROM等のブートROMからセキュリティプロセッサをブートする。この実施形態では、セキュリティプロセッサがブートされるブートROMコードは、ブロック320までプロセス300を制御する命令を含み、ブロック320で、ブートローダコードは、プロセス300を実行及び制御することができる。
【0024】
ブロック304で、プロセス300は、SECURE状態が有効にされるかどうかをチェックする。このチェックは、1つ以上のライトワンスビット(通常、工場出荷時の設定時に書き込まれるか焼き込まれる)をチェックして、SECURE状態が望ましいことと、FAR機能が有効にされることと、を判別することを含むことができる。SECURE状態が有効でない場合、プロセス300は、ブロック306に進み、FAR機能を使用せずに、ホストプラットフォームの非セキュアブートを行う。
【0025】
ブロック304でSECURE状態が有効にされる場合、プロセス300は、ブロック308に進み、ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得する。読み取りに失敗した場合、又は、無効な値を返した場合、プロセス300は、ブロック310に進み、ブートプロセスを停止する。このような停止は、停止の理由を記憶する不揮発性メモリに対して失敗のレコードを記憶することを含む。
【0026】
ブロック308でライトワンスメモリビットの読み取りに成功した後、ブロック312で、ファームウェアセキュリティテーブル(FST)がロードされ、検証される。通常、FSTは、ホストSoCに搭載されてもよい不揮発性メモリ、又は、
図1のフラッシュメモリ220等の別個のチップであってもよい不揮発性メモリから、セキュリティプロセッサに搭載されたSRAM216にロードされる。FSTは、ファームウェアコードモジュールの複数のファームウェア識別子と、各ファームウェア識別子に関連付けられた複数のチェックSPL値と、を含む。これについては、
図5及び
図6を参照してさらに説明する。FST検証は、記憶された署名又は他の適切な値に対してFSTの暗号チェックを行って、FSTが変更されていないことを確認することを含む。ブロック312で検証に失敗すると、ブロック313でリカバリ手順が開始される。この手順では、ブートを停止してもよいし、最小SPLチェックを満たす以前のFSTバージョンが使用可能な場合にはそのバージョンでリカバリを試みてもよい。セーフモードへの非セキュアブート、又は、他の適切なリカバリ手順を使用してもよい。
【0027】
ブロック312で、FSTのロード及び検証に成功すると、ブロック314で、FSTに記憶されたテーブルSPL値を読み取り、テーブルSPLがブロック308で取得された最小SPL以上であることを検証する。テーブルSPLがこのチェックに合格しない場合、プロセス300は、ブロック313のリカバリ手順に進む。
【0028】
テーブルSPLがブロック314のチェックに合格すると、ブロック316で、ブートローダがロードされ、検証される。ブートローダは、フラッシュメモリ220(
図1)等のオフチップの不揮発性メモリからロードされることが好ましい。検証は、ブートローダ実行可能コードの署名と記憶された値との比較、又は、公開鍵を用いた署名のチェック等の適切な周知の暗号検証を含む。ブートローダがロード及び検証に失敗した場合、プロセス300は、ブロック313のリカバリ手順に進む。
【0029】
ブロック316で、ブートローダがロード及び検証に成功すると、ブロック318で、ブートローダSPLが、FSTからのブートローダチェックSPLと比較される。この比較は、ブートローダSPL値が、FSTに記憶されたブートローダチェックSPL値以上であるかどうかをチェックすることを含む。ブートローダFSTは、
図6を参照して説明するブートローダ等のファームウェアヘッダから、ブートローダと共に取得されることが好ましい。ブロック318でチェックに失敗すると、プロセス300は、ブロック313のリカバリ手順に進む。
【0030】
ブロック318でチェックに合格すると、ブロック320で、ブートローダがセキュリティプロセッサにロードされ、実行される。この時点で、ブートローダは、プロセス300を制御して、ホストプラットフォームをブートするのに必要な残りのファームウェアモジュールを検証する。プロセス300は、ブロック322に進み、ブートローダは、所望のファームウェアモジュールが全てロードされるまで、ホストシステム上の様々なコントローラのファームウェアモジュールのロード、確認(validate)及び検証(verify)の反復を開始する。ロード及び検証は上述したものと同様に進み、署名又は他の暗号チェックが各ファームウェアモジュールに関して計算され、記憶された値と比較される。ファームウェアモジュールがロード及び検証に失敗した場合、プロセス300は、ブロック313のリカバリ手順に進む。
【0031】
ブロック322で、ファームウェアモジュールが検証に合格すると、ブロック324で、悪意のあるロールバックアクティビティを抑制するためのファームウェアモジュールの検証を進める。検証は、ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得すること、(b)FSTにアクセスして、各チェックSPL値を取得すること、及び、(c)各ファームウェアSPL値が各チェックSPL値以上であるかどうかをチェックすることを含む。ファームウェアSPL値は、ファームウェアモジュールと共にファームウェアヘッダに記憶されるのが好ましい。
【0032】
ブロック324で検証に合格すると、ブロック326で、ファームウェアは、ホストプラットフォーム上の対象のコントローラにロードされる。ブロック326は、ファームウェアをロード及び実行するために、セキュリティプロセッサから対象のコントローラへのコマンドを含んでもよい。ブロック324で検証に失敗すると、プロセス300は、ブロック313のリカバリ手順に進む。
【0033】
ブロック326で各ファームウェアモジュールがロードされた後、プロセス300は、ブロック322に進み、全てのモジュールがロードされるまで、次のファームウェアモジュールをロード及び検証する。
【0034】
本実施形態では、1つのFSTが使用されているが、他の実施形態では、複数のFSTを使用してもよく、各FSTは、本明細書に記載のFSTと同様に、ライトワンスメモリSPL値又はFSTのエントリに対してチェックされるSPL値を有する。例えば、ブートローダは、セキュアオペレーティングシステムのためのファームウェアモジュールのロード及び検証を提供してもよい。このために補助的なFSTを使用してもよく、これは、セキュリティプロセッサ上で動作するブートローダによって検証され、次に、CPUコアコンプレックス110(
図1)等の別のプロセッサの制御下にある追加のファームウェアモジュールを検証するために、セキュアオペレーティングシステムに利用可能にされる。このような場合、セキュリティプロセッサは、ファームウェアモジュールをロードするための、又は、ファームウェアモジュールをロードして検証するためのセキュアオペレーティングシステムからの要求を満たしてもよい。
【0035】
プロセス300は、ファームウェアモジュールを検証することを含むが、他のタイプのモジュールをFSTに対して検証して、アンチロールバック機能を提供してもよい。例えば、セキュアオペレーティングシステムモジュール又はライブラリは、上述したファームウェアモジュールと同様に検証及びロードされてもよい。
【0036】
プロセス300は、この実施形態では、セキュアブートROMからの実行可能コードの制御の下で開始し、制御をブートローダに渡すが、他のバージョンは、異なる方法でセキュリティプロセッサを動作させてもよい。いくつかの実施形態では、セキュアブートROMは、ブートローダをロードすることなく、全てのファームウェアモジュールの検証を行ってもよい。
図4のプロセス等の他のバージョンでは、ブートローダは、ライトワンスメモリビットを読み取り、FSTを検証するプロセスを制御してもよい。
【0037】
理解されるように、ファームウェアアップデートを検証するためのFSTの本明細書に記載の使用は、ライトワンスメモリ内でファームウェアバージョンを直接追跡する技術よりも、必要とするライトワンスメモリビットが少ないという利点がある。最小SPLに対するFSTの検証は、ライトワンスメモリの直接使用と同様のセキュリティレベルを提供するが、回路面積の使用が少ない。
【0038】
図4は、いくつかの実施形態による、ファームウェア及びソフトウェアを検証及びロードする別のプロセス400のフロー図である。プロセス400は、プロセス300と同様の多くの動作を有するが、ブートROMコードにテーブルSPLの初期の検証を制御させるのではなく、ブートローダを実行するセキュリティプロセッサによって行われる。この技術は、上記のアンチロールバック機能を維持しながら、セキュリティプロセッサの設定性(configurability)とアップグレード性(upgradeability)を向上させる。
【0039】
プロセス400は、ブロック402で開始し、セキュリティプロセッサが、オフチップ不揮発性メモリに記憶されたブートローダを実行する。ブロック404,406は、ブートROMコードの代わりにブートローダの制御下にあることを除いて、ブロック304,306と同様に進行する。ブロック404で、プロセス400は、SECURE状態が有効にされるかどうかをチェックする。SECURE状態が有効にされない場合、プロセス300は、ブロック306に進み、FAR機能を使用せずに、ホストプラットフォームの非セキュアブートを行う。
【0040】
ブロック404で、SECURE状態が有効にされる場合、プロセス400は、ブロック408に進み、ブートローダの制御下で、セキュリティプロセッサは、ライトワンスメモリビットのセットを読み取って、最小セキュリティパッチレベル(SPL)を取得する。読み取りに失敗した場合又は無効な値を返した場合、プロセス400は、ブロック410に進み、ブートプロセスを停止する。
【0041】
ブロック408でライトワンスメモリビットの読み取りに成功した後、ブロック412で、ファームウェアセキュリティテーブル(FST)がロードされ、検証される。FSTは、
図3に関して説明したFSTと同様である。ブロック412で検証に失敗すると、ブロック413のリカバリ手順に移行する。この手順では、ブートを停止してもよいし、ブロック414で最小SPLチェックを満たす以前のFSTバージョンが利用可能である場合、そのバージョンでリカバリを試みてもよい。セーフモードへの非セキュアブート、又は、他の適切なリカバリ手順を使用してもよい。
【0042】
ブロック412で、FSTのロード及び検証に成功した場合、ブロック414で、セキュリティプロセッサは、ブートローダの制御下で、FSTに記憶されたテーブルSPL値を読み取り、アップデートが必要かどうかを確認するためにテーブルSPLをチェックするシーケンスを行う。ブロック414は、テーブルSPLがブロック408で取得された最小SPLよりも小さいかどうかをチェックする。小さい場合、プロセス400は、ブロック413のリカバリ手順に進む。
【0043】
ブロック414で、テーブルSPLが最小SPLよりも小さくない場合であっても、依然として、最小SPLへのアップデートを必要とする場合がある。ブロック415では、テーブルSPLが最小SPLと等しいかどうかをチェックする。等しくない場合、プロセス400は、ブロック416に進み、ライトワンスメモリビットで最小SPLをアップデートする必要かあるかどうかをチェックする。このチェックは、最小SPLへのアップデートを必要とするファームウェアアップデートが行われたことを検出する。チェックは、アップデートが行われた場合に、セキュアアップデートコードによって構成することができる1つ以上の設定を使用して実施されてもよい。ヒューズ等のライトワンスメモリビットは、SPLアップデートフラグとして機能してもよく、そのビットが、SPLアップデートが必要であることを示すように予め設定されているかどうかを確認するためにセキュアプロセッサによってチェックされてもよい。このようなビットは、通常、複数のアップデートを可能にするセキュリティプロセッサに搭載されている多くのビットの1つである。設定されている場合、ブートローダは、最小SPL値をアップデートする必要がある。ライトワンスビットに加えて、又は、その代わりに、アップデートを検出するために別のチェックが行われてもよい。例えば、SPLアップデートフラグをライトワンスメモリビットに設定する必要があることを示すBIOSフラグが設定されてもよい。このようなシナリオは、BIOSがセキュアであると信頼されているアーキテクチャでのみ使用すべきである。BIOSフラグがSPLアップデートフラグを必要とする場合、プロセス400は、他のアクションを行う前に、SPLアップデートフラグを設定する。ブロック416で、最小SPLアップデートが必要とされない場合、プロセス400は、ブロック418に進む。
【0044】
ブロック416で、最小SPLアップデートを必要とするアップデートが検出された場合、ブロック417は、新しい値をライトワンスメモリビットに書き込むことによって、最小SPLをテーブルSPLに設定する。最小SPLへのアップデートは、リブートを必要としてもよいし、ブロック418に進んでもよい。
【0045】
ブロック418は、ブートローダSPLがFSTのブートローダチェックSPL以上であるかどうかをチェックすることによって、ブートローダを検証する。ブートローダSPLがこのチェックに合格しない場合、プロセス400は、ブロック413のリカバリ手順に進む。
【0046】
ブロック418でブートローダSPLがチェックに合格すると、プロセス400は、ブロック422に進み、ファームウェアモジュールのロード、確認及び検証を開始する。ブロック422で、ブートローダは、所望のファームウェアモジュールが全てロードされるまで、ホストシステム上の様々なコントローラのファームウェアモジュールのロード、確認及び検証の反復を開始する。ロード及び検証は上述したものと同様に進み、署名又は他の暗号チェックがファームウェアモジュール毎に計算され、記憶された値と比較される。ファームウェアモジュールがロード及び検証に成功しない場合、プロセス400は、ブロック413のリカバリ手順に進む。
【0047】
ブロック422でファームウェアモジュールが検証に合格すると、ブロック424で、悪意のあるロールバックアクティビティを抑制するためのファームウェアモジュールの検証を進める。検証は、ファームウェアコードモジュール毎に、(a)各ファームウェアモジュールにアクセスして、各ファームウェアSPL値を取得すること、(b)FSTにアクセスして、各チェックSPL値を取得すること、及び、(c)各ファームウェアSPL値が各チェックSPL値以上であるかどうかをチェックすることを含む。ファームウェアSPL値は、ファームウェアモジュールと共にファームウェアヘッダに記憶されるのが好ましい。
【0048】
ブロック424で検証に合格すると、ブロック426で、ファームウェアは、ホストプラットフォーム上の対象のコントローラにロードされる。ブロック426は、ファームウェアをロード及び実行するためのセキュリティプロセッサから対象のコントローラへのコマンドを含む。ブロック424で検証に失敗すると、プロセス400は、ブロック413のリカバリ手順に進む。ブロック426で各ファームウェアモジュールがロードされた後、プロセス400は、ブロック422に進み、全てのモジュールがロードされるまで、次のファームウェアモジュールをロードして検証する。
【0049】
ブロック415,416,417で最小SPL値をアップデートする手順は、
図3のプロセス300に統合されてもよく、ブートROM又はブートローダの制御下で行われてもよいことに留意されたい。
【0050】
図5は、いくつかの実施形態による、ファームウェアセキュリティテーブル(FST)500を示す図である。上述したように、FST500は、好ましくは、フラッシュメモリ等の不揮発性メモリに記憶され、その後、PSP210によってSRAM216(
図2)にロードされ、ファームウェアの検証に使用される。FST500は、ファームウェアイメージID列によって示されるように、ファームウェアコードモジュールのファームウェア識別子のセットを含む。FST500は、各々のファームウェア識別子に関連付けられた複数のチェックSPL値を含む。
【0051】
図6は、いくつかの実施形態による、ファームウェアモジュール600を示す図である。ファームウェアモジュール600は、本明細書のFAR技術と共に使用される実行可能なファームウェアプログラムコードとファームウェアヘッダとを含む。ファームウェアヘッダは、ファイルヘッダとして存在するか、不揮発性メモリに記憶されたファームウェア実行可能コードに関連付けられる。ファームウェアヘッダは、FSTの関連IDと一致するファームウェアイメージIDを含む。ヘッダバージョンは、ヘッダのバージョンを識別し、ヘッダフォーマットの解釈に使用されてもよい。FSTに記憶された関連するSPL値に対してチェックする上記の検証に使用されるファームウェアSPLが含まれる。署名等の他のデータ項目もファームウェアヘッダに含まれてよい。さらに、同様の構造が、セキュリティプロセッサによって検証される他のファームウェア又はソフトウェア(例えば、セキュアオペレーティングシステム(OS)実行可能コード又は他のソフトウェアコード等)と共に使用されてもよい。
【0052】
図1のAPU100若しくはその一部、又は、本明細書の技術を使用するデータ処理プラットフォームの他の実施形態は、プログラムによって読み取ることができ、集積回路を製造するために直接的又は間接的に使用することができるデータベース又は他のデータ構造の形態のコンピュータアクセス可能なデータ構造によって記述又は表現されてもよい。例えば、このデータ構造は、Verilog又はVHDL等の高レベル設計言語(HDL)におけるハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)記述であってもよい。記述は、合成ツールによって読み取られてもよく、合成ツールは、記述を合成して、合成ライブラリからゲートのリストを含むネットリストを生成してもよい。ネットリストは、集積回路を含むハードウェアの機能を表すゲートのセットを含む。次に、ネットリストは、マスクに適用される幾何学形状を記述するデータ集合を生成するために配置され、ルーティングされてもよい。次に、マスクは、集積回路を製造するために様々な半導体製造工程において使用されてもよい。或いは、コンピュータアクセス可能な記憶媒体上のデータベースは、必要に応じて、ネットリスト(合成ライブラリの有無にかかわらず)若しくはデータセット、又は、グラフィックデータシステム(GDS)IIデータであってもよい。
【0053】
特定の実施形態を説明したが、これらの実施形態に対する様々な修正が当業者に明らかであろう。例えば、ライトワンスメモリビットに記憶された最小SPLをそれぞれ有する複数のFSTが使用されてもよい。他のタイプのソフトウェアがFSTを使用して検証されてもよい。ライトワンスメモリビット、ブートROM、及び、不揮発性メモリの特定の位置は、セキュリティの制約内で変更されてもよい。さらに、セキュリティプロセッサは、ホストシステムの他のプロセッサ又はコントローラに対するサービスとして、FSTに記憶されたSPL値に対してファームウェアモジュール又はソフトウェアモジュールの検証を行ってもよい。本明細書に記載のセキュアFAR機能を変更することなく、FSTに記憶されたデータ値に対して様々な暗号化スキームが使用されてもよい。
【0054】
したがって、添付の特許請求の範囲は、開示の範囲内に収まる開示された実施形態の全ての修正をカバーすることを意図している。