JP7425797B2 - ファームウェアのセキュアな検証 - Google Patents

ファームウェアのセキュアな検証 Download PDF

Info

Publication number
JP7425797B2
JP7425797B2 JP2021532127A JP2021532127A JP7425797B2 JP 7425797 B2 JP7425797 B2 JP 7425797B2 JP 2021532127 A JP2021532127 A JP 2021532127A JP 2021532127 A JP2021532127 A JP 2021532127A JP 7425797 B2 JP7425797 B2 JP 7425797B2
Authority
JP
Japan
Prior art keywords
firmware
recovery
security processor
hash
computing system
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021532127A
Other languages
English (en)
Other versions
JP2022536817A (ja
Inventor
スパングラー,ランドール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of JP2022536817A publication Critical patent/JP2022536817A/ja
Priority to JP2024006881A priority Critical patent/JP2024050647A/ja
Application granted granted Critical
Publication of JP7425797B2 publication Critical patent/JP7425797B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/572Secure firmware programming, e.g. of basic input output system [BIOS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3664Environments for testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/58Random or pseudo-random number generators
    • G06F7/588Random number generators, i.e. based on natural stochastic processes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4403Processor initialisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • H04L9/3239Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving non-keyed hash functions, e.g. modification detection codes [MDCs], MD5, SHA or RIPEMD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Quality & Reliability (AREA)
  • Pure & Applied Mathematics (AREA)
  • Power Engineering (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)
  • Stored Programmes (AREA)

Description

背景
一部のコンピューティングシステムは、電源投入後のまたはリセットに続く「ブート」プロセスの一部としてシステムファームウェアを実行する。一部のコンピューティングシステムは、システムファームウェアの代わりに「リカバリ」ファームウェアを実行することにより、安定した、リカバリされた状態に戻ることができる。セキュリティのために、コンピューティングシステムは、システムファームウェアおよびリカバリファームウェアの一部を、システムメモリに対する同時物理アクセスによってのみオーバーライドできるシステムメモリの永続的な書込保護領域に、保持することができる。一部のコンピューティングシステムは、さらに製造者の検証プロセスを実行することにより、ファームウェアおよびリカバリファームウェアの完全性(integrity)を保証し、場合によっては、ハードウェア固有の検証鍵(たとえば焼かれてアプリケーションプロセッサのヒューズになったもの)を用いて、システムファームウェアが公式ソースからのものであることを保証する。
そのため、セキュリティおよび完全性は、ハードウェア固有の検証鍵を管理する能力およびコンピューティングシステムがシステムメモリを書込保護する能力を含む、製造者のプロプライエタリ検証プロセス次第となる場合がある。書込保護機能は、たとえばシステムメモリへの物理アクセス権を有するユーザによって侵害される可能性がある。書込保護機能および製造中にハードウェアに割り当てられるハードウェア固有の検証鍵に頼りすぎると、コンピューティングシステムが実行するシステムファームウェアおよびリカバリファームウェアのユーザビリティ、カスタマイズ、およびこれらのファームウェアに対するユーザ制御を、不必要に制限する場合がある。
概要
システムファームウェアおよびリカバリファームウェアをセキュアに検証することにより、製造者のプロプライエタリ検証プロセス、ハードウェア固有の鍵、またはシステムメモリの固有の書込保護機能に依存することなくシステムの完全性を保証する、コンピューティングシステムについて説明する。このコンピューティングシステムは、集積回路製造者のマスクROM(読出専用メモリ)検証プロセスから独立してファームウェアおよびリカバリファームウェアを検証するためのプロセスを定義するファームウェア管理パラメータを保持するセキュリティプロセッサに依拠する。このセキュリティプロセッサは、ファームウェアまたはリカバリファームウェアが、適切に署名されかつ過去に実行されたバージョンと一致することを保証する、または、もし異なっていても、コンパイル時にファームウェアに埋め込まれた予想結果と一致する検証結果(たとえば生成されたハッシュ値)をもたらすことを保証する。このようにして、コンピューティングシステムは、当該コンピューティングシステム内で実行されるファームウェアおよびリカバリファームウェアのユーザビリティ、カスタマイズ、およびこれらのファームウェアに対するユーザ制御を改善する。
一例において説明するコンピューティングシステムは、アプリケーションプロセッサと、ファームウェアおよび対応するリカバリファームウェアを含むメモリと、セキュリティプロセッサとを備え、セキュリティプロセッサは、アプリケーションプロセッサがファームウェアまたはリカバリファームウェアを実行する条件として、ファームウェアまたはリカバリファームウェアの検証を、ファームウェアが保持するファームウェアまたはリカバリファームウェアの予想ハッシュを決定し、予想ハッシュがファームウェアまたはリカバリファームウェアの生成されたハッシュと一致するか否かに基づいてファームウェアまたはリカバリファームウェアを検証することにより、行うように構成されている。
他の例において説明する方法は、コンピューティングシステムのセキュリティプロセッサが、コンピューティングシステムのメモリに格納されたファームウェアから、ファームウェアの予想ハッシュを決定するステップと、メモリに格納されたファームウェアの生成されたハッシュを決定するステップと、セキュリティプロセッサが、予想ハッシュが生成されたハッシュに対応するという判断に応じてファームウェアを検証するステップとを含む。
もう1つの例におけるコンピュータ読取可能記憶媒体は命令を含み、命令は、実行されると、コンピューティングシステムのセキュリティプロセッサを、コンピューティングシステムのメモリに格納されたファームウェアから、ファームウェアの予想ハッシュを決定することと、メモリに格納されたファームウェアの生成されたハッシュを決定することと、予想ハッシュが生成されたハッシュに対応するという判断に応じてファームウェアを検証することとを実行するように構成する。
1つ以上の実装形態の詳細を、添付の図面および以下の説明に記載する。その他の特徴および利点は、上記説明および図面ならびに請求項から明らかであろう。この概要は、詳細な説明および図面においてさらに記載する主題を導入するために設けたものである。したがって、この概要は、本質的な特徴を述べたものとみなされてはならず、クレームされている主題の範囲を限定するために使用されているとみなされてはならない。
リカバリファームウェアのセキュアな検証の1つ以上の側面の詳細を以下で説明する。この説明および図面において異なる例に使用される同一の参照番号は、同様の要素を示す。
ファームウェアおよびリカバリファームウェアを検証するように構成されたコンピューティングシステムの一例を示す概念図である。 ファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。 リカバリファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。 ファームウェアまたはリカバリファームウェアの確率的または部分検証を実行するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。 ファームウェアおよびリカバリファームウェアのセキュアな検証を実行するように構成されたコンピューティングデバイスを示す概念図である。
詳細な説明
一部のコンピューティングシステムでは、アプリケーションプロセッサが、オペレーティングシステム(OS)をロードし実行する条件として、システムファームウェアを実行する。システムメモリの書込保護された部分は、システムファームウェアの読出専用部分を格納することができ、システムメモリの読み書き可能な部分は、システムファームウェアの読み書き可能な(または保護されていない)部分を格納することができる。システムメモリの書込保護された部分はさらに、コンピューティングシステムがリカバリモードで動作するときに実行する特化された「リカバリファームウェア」を含み得る。リカバリファームウェアは、リカバリイベント中にシステムファームウェアの代わりに実行されて、コンピューティングシステムを安定したリカバリモードで動作するように構成することを、意図している。
検証されたブートプロセス中、コンピューティングシステムのセキュリティプロセッサは、セキュリティプロセッサの内部メモリに格納された自身のセキュリティプロセッサファームウェア(たとえば「Cr50」)をセキュリティプロセッサが検証できるまで、アプリケーションプロセッサがシステムファームウェアを実行しないようにしてもよい。セキュリティプロセッサのファームウェアの検証および実行後に、セキュリティプロセッサは、アプリケーションプロセッサが、検証されたブートプロセスを続行することを可能にする。
可能にされると、アプリケーションプロセッサは、「マスクROM」(たとえばアプリケーションプロセッサの内部にあり製造中に予めプログラミングされた一種の読出専用メモリ)に埋め込まれた命令を、システムメモリの書込保護された部分におけるシステムファームウェアの読出専用部分の位置を特定しこの読出専用部分を取り出すために、実行する。マスクROMは、システムファームウェアの読出専用部分を実行する前にプロプライエタリ検証プロセスを実行するようにアプリケーションプロセッサを構成してもよい。たとえば、プロプライエタリ検証プロセスは、システムファームウェアの読出専用部分がアプリケーションプロセッサ内のハードコーディングされた(焼かれてアプリケーションプロセッサのヒューズにされた)独特のハードウェア固有鍵を用いて署名されたことを、アプリケーションプロセッサに検証させてもよい。マスクROMが、この独特のハードウェア固有鍵を用いてシステムファームウェアの読出専用部分を検証できる場合、アプリケーションプロセッサは、読出専用システムファームウェアを実行する。マスクROMに依拠してシステムファームウェアを検証することにより、独特のハードウェア固有鍵を用いて署名されておらずしたがって検証できないであろう「非公式の」第三者またはユーザによってカスタマイズされたファームウェアをユーザがインストールすることを、防止することができる。
システムファームウェアの読み書き可能部分を実行する条件として、読出専用部分は、読み書き可能部分がコンパイル中に「公式」ルート鍵で署名されたことを検証する。コンピューティングシステムは、システムメモリの書込保護された部分にルート鍵を格納することができる。システムメモリの書込保護された部分は破損することがないと仮定して、アプリケーションプロセッサは、システムファームウェアの読み書き可能部分がルート鍵で署名されたという判断に応じて、システムファームウェアの読み書き可能部分をロードし実行する。
同様に、コンピューティングシステムがリカバリモードで実行されている場合、システムファームウェアの読出専用部分は、リカバリファームウェアを実行する前に、リカバリファームウェアがルート鍵で署名されたことを検証することにより、システムの完全性を保つ。システムメモリの書込保護された部分は破損していないという仮定を継続し、アプリケーションプロセッサは、リカバリファームウェアがルート鍵で署名されたという判断に応じて、リカバリファームウェアをロードし実行する。リカバリファームウェアがリカバリ鍵を生成できない場合、コンピューティングシステムは、リカバリ鍵を生成できるリカバリファームウェアの公式バージョンがインストールされて実行されるまで、リカバリファームウェアの実行を控える。
一部のコンピューティングシステムは、このようにして、検証できないシステムファームウェアおよびリカバリファームウェアの実行を防止することができるが、この検証されたブートプロセスは、ユーザビリティ、カスタマイズ、およびユーザ制御を禁止する。ハードウェア固有の「公式」ルート鍵は、認証された開発者だけが発見できる場合がある。さらに、コンピューティングシステムのセキュリティおよび完全性は、ハードウェア固有の鍵と、システムメモリの書込保護された部分が「公式」ルート鍵を保護できるという暗黙の信頼とに、依存する。しかしながら、公式ルート鍵は、システムメモリへの物理アクセス権を有する、そうでなければシステムメモリの書込保護された部分を侵害する方法を発見する高度なユーザによって侵害される可能性がある。そのため、この種の検証されたブートのセキュア度が低くなり得るだけでなく、認証された開発者ではないが第三者またはカスタムファームウェアを実行することを所望する正規ユーザがそうすることを妨げることで、コンピューティングシステムのユーザビリティ、カスタマイズ、およびユーザ制御を不必要に制限する場合がある。
セキュリティおよび完全性を犠牲にすることなくファームウェアのカスタマイズおよびユーザ制御を促進するコンピューティングシステムについて説明する。このコンピューティングシステムは、製造者のプロプライエタリ検証プロセス、ハードウェア固有の鍵、またはシステムメモリの固有の書込保護機能に頼ることなく、システムファームウェアおよびリカバリファームウェアを検証するように構成されたセキュリティプロセッサおよびアプリケーションプロセッサに依拠する。代わりに、セキュリティプロセッサは、たとえばハードウェア固有の鍵を含む集積回路製造者のマスクROM(読出専用メモリ)検証プロセスから独立して、ファームウェアおよびリカバリファームウェアを検証するための完璧度(degree of thoroughness)を含むプロセスを定義するファームウェア管理パラメータに一部基づいて、ファームウェアを検証する。一例として、ファームウェア管理パラメータは、部分もしくは確率的検証の実行、完全もしくはフル検証の実行、または、検証なしを、指定してもよい。
システムファームウェアのヘッダ署名および/またはボディ署名の検証後、セキュリティプロセッサは、システムメモリに格納されたシステムファームウェアのそれぞれのブロックに対応付けられるハッシュ(たとえばSHA-256)値を生成する。セキュリティプロセッサは、生成したハッシュ値を、ファームウェアボディの読出専用部分からセキュリティプロセッサが導出した予想ハッシュ値と比較する。
リカバリファームウェアは、典型的に、システムファームウェアがサポートしない低レベルドライバおよびユーザインターフェイスをサポートするので、一般的にはシステムファームウェアよりもサイズが大きい。そのため、セキュリティプロセッサは、より高性能のアプリケーションプロセッサに依拠してリカバリファームウェアを検証してもよい。リカバリファームウェアのヘッダおよび/またはボディの署名の検証後、アプリケーションプロセッサは、システムメモリに格納されたリカバリファームウェアのそれぞれのブロックに対応付けられるハッシュ値を生成する。アプリケーションプロセッサは、たとえばシステムファームウェアの最初のブートアップおよび実行の成功に続いて、(たとえばオペレーティングシステムが実行するバックグラウンドタスクとして)リカバリファームウェアについてのハッシュ値を自動的に生成し格納してもよい。
アプリケーションプロセッサは、生成したハッシュ値を、ファームウェアボディの読出専用部分からアプリケーションプロセッサが導出した予想ハッシュ値と比較する。予想ハッシュ値と生成したハッシュ値とが不一致である場合、アプリケーションプロセッサは、リカバリファームウェアが検証に失敗したことをセキュリティプロセッサに通知し、リカバリファームウェアの実行を控える。リカバリファームウェアの予想ハッシュ値と生成したハッシュ値とが一致する場合、アプリケーションプロセッサはリカバリファームウェアを実行する。
リカバリファームウェアがアプリケーションプロセッサによる照合に失敗したことに応じて、セキュリティプロセッサは、ファームウェア管理パラメータに基づいてリカバリファームウェアを検証しようと試みてもよい。セキュリティプロセッサは、生成したハッシュ値のうちの一部のみを予想ハッシュ値と照合することによってリカバリファームウェアを部分的に検証してもよい。これに代えて、セキュリティプロセッサは、フル検証を実行し生成したハッシュ値を予想ハッシュ値と照合してもよい、またはブロック照合全体を省略することによって検証を全く行わないことにしてもよい。
このようにして、コンピューティングシステムは、集積回路製造者のマスクROM検証プロセスから独立して、かつハードウェア固有の鍵に頼ることなく、ファームウェアおよびリカバリファームウェアを検証することができる。代わりに、コンピューティングシステムは、セキュリティプロセッサに依拠して、システムファームウェアが、適切に署名されかつ過去に実行されたバージョンと一致することを保証する、または、もし異なっていても、コンパイル時にファームウェアに埋め込まれた予想結果と一致する検証結果(たとえば生成されたハッシュ値)をもたらすことを保証する。このようにして、コンピューティングシステムは、当該コンピューティングシステム内で実行されるファームウェアおよびリカバリファームウェアのユーザビリティ、カスタマイズ、およびこれらのファームウェアに対するユーザ制御を改善することができる。一例としてのコンピューティングシステムは、公式ファームウェアバージョンまたは予め定められたハードウェア鍵の恩恵を受けずに、システムの完全性を犠牲にすることなくカスタムまたは第三者ファームウェアをセキュアに実行することができる。
ファームウェアの検証を、プロセッサ固有のハードウェア鍵の知識から切り離すことにより、本開示の技術は、コンピューティングシステムがより多様なファームウェアおよびリカバリファームウェアプログラムを実行できるようにすることができる。ファームウェア開発者はもはや、ファームウェア開発者と進んで連携する場合もそうでない場合もあるハードウェア製造者が制御し得るハードウェア固有の検証鍵の製品知識を暗示しこの検証鍵に頼る必要はない。
加えて、本開示の技術は、コンピューティングシステムが、今までコンピューティングシステムが晒されていたであろう攻撃よりも広いまたはそれとは異なる範囲の攻撃から防御できるようにすることができる。たとえば、以前のシステムは、システムメモリの書込保護に依拠しており、攻撃者がシステムメモリをオーバーライドできる唯一の方法は、メモリチップまたはマザーボードを含むコンピューティングシステムへの物理アクセスを経由することであった。これは、「悪意あるメイド」攻撃と呼ばれ、何者かがデバイスを長期間管理せずに放置するというシナリオを指している(たとえばこのデバイスにアクセスするためにホテルのメイドを装った攻撃者が存在するときに)。しかしながら、一部のコンピューティングシステムは、たとえば自身がデバイスへの長期アクセス権を有する認証済ユーザである可能性があるユーザによる、その他の種類の攻撃から防御しなければならない。たとえば、一部の学校は、コンピューティングデバイスを、学生に、学生の使用に関する厳しいポリシーを付けて支給する。学校は、場合によっては立法基準によるエンタープライズポリシーを用いて、学生が自身のデバイスに対して実施できることを制限する。一部の学生は、これらの制限を好まず、そのため、エンタープライズポリシーを回避しようと試みる場合がある。学生は長期間デバイスにアクセスできるので、書込保護に依拠してポリシー制限を強化するのは現実的ではないであろう。その他の政府機関または民間企業の場合、自身の物理的セキュリティに隙間がある場合があり、それが、攻撃者が悪意のあるメイド攻撃を伝搬させるのに十分に長い時間デバイスを物理的に制御することを可能にする。
どちらのケースでも、デバイスの所有者は、攻撃を検出し攻撃時にデバイス機能を制限することを望むであろう。この制限は、ディスク上のユーザデータの解読を拒否すること、過去に保存されたクレデンシャルをウェブサイトまたは無線アクセスポイントに提供することを拒否すること、またはブートを完全に拒否すること等の、ある範囲の形態を取り得る。また、所有者の、ブート速度に対する追加保護の影響に対する許容範囲が、変化する場合もある。通常のユーザは、ある程度のセキュリティ低下と引き換えにブートの高速化を好むであろう。これは、一部のユーザが短く簡単に推測されるパスワードをどのように使用し得るかということと、非常によく似ている。企業ユーザは、たとえセキュリティがブート時間を数秒長くするとしても、よりセキュアなブートを好むであろう。
別のシナリオにおいて、攻撃者が、デバイスを、ファームウェアを変更した(たとえば悪意あるコードをデバイスに埋込んだ)後に、店舗に返却する場合がある。店舗は、このデバイスを新規顧客に再販する前に、デバイス上のファームウェアが変更されていないことを保証しなければならない。同様に、デバイスが学校、政府機関、および企業に返却されることがある。いわゆる「店内返却」のためにファームウェアを検証する既存のプロセスは、遅く手作業であり第2のデバイスを必要とすることがある。
上記シナリオのうちの各シナリオについて、本開示の技術は、店舗、学校、企業などが、これらのより広いまたは異なる範囲の攻撃からの防御を、コンピューティングシステムに依拠してファームウェアまたはリカバリファームウェアの実行前にファームウェアおよびリカバリファームウェアを自動的に検証することにより、実施できるようにすることができる。このようにして、認証されたユーザではなく、デバイスの実際の所有者が、当該所有者が制御するコンピューティングシステムの完全性を、システムの完全性を手作業で検証しなくても、保証することができる。
図1は、リカバリファームウェアのセキュアな検証を実行するように構成された一例としてのコンピューティングシステム100を示す概念図である。コンピューティングシステム100は、任意の種類のモバイルまたは非モバイルコンピューティングシステムの一部を形成していてもよい。モバイルコンピューティングシステムにおいて、コンピューティングシステム100は、携帯電話、ラップトップコンピュータ、ウェアラブルデバイス(たとえば腕時計、眼鏡、ヘッドフォン、衣類)、タブレット、自動車/車両デバイス、携帯ゲーム装置、電子リーダーデバイス、および遠隔制御装置の、1つ以上の構成要素を表していてもよい。モバイルコンピューティングシステムにおいて、コンピューティングシステム100は、サーバ、ネットワークデバイス(たとえばルータ、スイッチ、ファイアウォール)、デスクトップコンピュータ、テレビデバイス、エンターテイメントセットトップデバイス、サーモスタットデバイス、ガレージドアオープナーデバイス、他の家庭用装置または家電、テーブルトップアシスタントデバイス、スピーカデバイス、非携帯ゲーム装置、およびビジネス会議機器の、1つ以上の構成要素を表していてもよい。
コンピューティングシステム100は、システムオンチップ(SoC)の一部であってもよい。たとえば、コンピューティングシステム100は、従来の中央処理装置(CPU)または中央コントローラ処理アーキテクチャに代わる携帯電話の処理構成要素であってもよい。コンピューティングシステム100の分散型処理アーキテクチャは、携帯電話がCPUの性能ボトルネックの影響を受けるようにするのではなく、携帯電話が、そうでなければ単一のCPUが実行しなければならない作業をオフロードすることを可能にしてもよい。
図1のコンピューティングシステム100は、アプリケーションプロセッサ102と、ストレージ104と、メモリ106と、セキュリティプロセッサ108とを含む。コンピューティングシステム100の上記およびその他の構成要素は、バス110、112、および114ならびに制御リンク116Aおよび116Bを介してさまざまな方法で通信可能に結合される。コンピューティングシステム100は、図1に示されるものよりも多いまたは少ない構成要素、バス、またはリンクを含み得る。
コンピューティングシステム100は、バス110、112、および114を含む。アプリケーションプロセッサ102は、ストレージ104のコントローラと、ストレージバス110を介してデータをやり取りすることによって通信し、そうすることで、アプリケーションプロセッサ102はストレージ104から読み出すまたはストレージ104に書き込むことができる。同様に、アプリケーションプロセッサ102およびセキュリティプロセッサ108の各々は、メモリ106のコントローラと、メモリバス112を介してデータをやり取りすることによって通信し、そうすることで、セキュリティプロセッサ108およびアプリケーションプロセッサ102の各々は、メモリ106から読み出すまたはメモリ106に書き込むことができる。さらに、セキュリティプロセッサ108およびアプリケーションプロセッサ102は、ホストバス114を介してデータをやり取りすることにより、直接通信することができる。アプリケーションプロセッサ102は、ファームウェア、カーネルプログラム、オペレーティングシステムソフトウェア、オペレーティングシステム内で実行するアプリケーション等を含むソフトウェアを実行するように構成される。
セキュリティプロセッサ108は、アプリケーションプロセッサ102およびメモリ106に対する制御を容易にするための制御リンク116Aおよび116Bを含む。セキュリティプロセッサ108は、メモリ106の書込保護機能を、制御リンク116Aを介して制御信号を出力することによって制御することができる。場合によっては、セキュリティプロセッサ108は、たとえば攻撃者が制御リンク116Aを破壊しようとする場合に、書込保護機能を監視することができる。セキュリティプロセッサ108は、制御リンク116Bを介して制御信号を出力することにより、アプリケーションプロセッサ102をリセットする、またはアプリケーションプロセッサ102のリセットを解除することができる。たとえば、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアを検証できるまで、アプリケーションプロセッサをリセット状態に保ってもよく、検証できた時点で、セキュリティプロセッサは、アプリケーションプロセッサ102のリセット状態を解除し、その後、検証されたファームウェアまたはリカバリファームウェアを実行する。
図1に示されるバス110、112、および114ならびに制御リンク116Aおよび116Bは、コンピューティングシステム100が、アプリケーションプロセッサ102、ストレージ104、メモリ106、およびセキュリティプロセッサ108の間に含み得る、相互接続のいくつかの例にすぎない。コンピューティングシステム100のその他の例において、コンピューティングシステム100の構成要素の間で、より多くのまたは少ないインターフェイス、リンク、および接続が使用されてもよい。バス110、112、および114ならびに制御リンク116Aおよび116Bの各々は、多様なバスアーキテクチャのうちのいずれかである、構成要素間の通信を容易にする、メモリバス構造、周辺バス構造、ユニバーサルシリアルバス構造、プロセッサまたはローカルバス構造等の、さまざまなバス構造のうちの任意の1つまたはその組み合わせを含み得る。
ストレージ104は、実行可能命令(たとえばファームウェア、リカバリファームウェア、ソフトウェア、アプリケーション、モジュール、プログラム、機能)および実行可能命令の実行をサポートするデータ(たとえばユーザデータ、オペレーショナルデータ)の永続的ストレージをコンピューティングシステム100に提供するように構成される。たとえば、ストレージ104のコントローラは、アプリケーションプロセッサ102からのコマンドで、ストレージバス110上で通信することにより、ストレージ104からデータを読み出すまたはストレージ104にデータを書き込む。図1の例におけるストレージ104は、オペレーティングシステムカーネルおよびオペレーティングシステムファイルシステムの2つの異なるコピー(AおよびB)、ならびにオペレーティングシステムカーネルおよびオペレーティングシステムファイルシステムのインストールおよび実行をサポートするのに必要なその他のデータを含む。
ストレージ104の例は、揮発性メモリおよび不揮発性メモリ、固定およびリムーバブルメディアデバイス、ならびに実行可能命令およびサポートデータを保持する任意の適切なメモリデバイスまたは電子データストレージを含む。ストレージ104は、ランダムアクセスメモリ(RAM)、読出専用メモリ(ROM)、フラッシュメモリ、およびさまざまなメモリデバイス構成のその他の種類のストレージメモリの、各種実装形態を含み得る。ストレージ104は伝搬信号を除外する。ストレージ104は、ソリッドステートドライブ(SSD)またはハードディスクドライブ(HDD)であってもよい。
メモリ106は、セキュアなブートおよびファームウェア/リカバリファームウェア検証技術を実行するために必要なデータを格納するように構成されたシステムメモリ(たとえば不揮発性)である、ストレージ104とは別のセキュアなメモリデバイスを表す。このメモリは、メモリバス112上でセキュリティプロセッサ108およびアプリケーションプロセッサ102と通信するように構成されたフラッシュメモリチップであってもよく、メモリバス112はシリアル周辺インターフェイス(SPI)バスであってもよく、その場合、メモリ106はSPIフラッシュチップであってもよい。コンピューティングシステム100のその他の例において、他の種類の不揮発性メモリをメモリ106に使用してもよい。
メモリ106は、書込保護領域および保護されていないまたは「書込保護なし」領域を含む。書込保護領域において、メモリ106は、ブート記述子、システムファームウェアの読出専用部分、リカバリファームウェア、およびルート鍵(ならびに、場合によってはリカバリファームウェアに署名するためのリカバリ鍵等の他の情報)を含む。保護されていない領域において、メモリ106は、ファームウェアの読み書き可能部分の2つの異なるコピー、および他のデータを含む。
ファームウェアおよびリカバリファームウェアの保持は、メモリ106の大きな領域を占有する場合がある。メモリ106を「ブロック」に分割してもよい。メモリ106の大きな領域を複数のブロックに分割することが望ましい場合がある。ファームウェアイメージは複数のブロックにまたがる可能性がある。セキュリティプロセッサ108はファームウェアおよびリカバリファームウェアをメモリ106に保持することができ、これは、ファームウェアおよびリカバリファームウェアのボディに、ファームウェアおよびリカバリファームウェアの各ブロックについての予想ハッシュを埋め込むことを含み、セキュリティプロセッサ108は、この予想ハッシュを、そのブロックについて生成されたハッシュと突き合わせて検証することができる。場合によっては、フル検証を実行するか否かに応じて、ファームウェアまたはリカバリファームウェアが複数のブロックを含む場合に、セキュリティプロセッサ108および/またはアプリケーションプロセッサ102は、複数のブロックのうちの各ブロックについてまたはサブセットのみについてハッシュ値を生成してもよい。
メモリ106のコントローラは、メモリ106の保護されていない領域に格納されたデータを変更または削除することができる。しかしながら、コントローラは、メモリ106に対する書込保護が有効にされている間、メモリの保護領域に格納されたデータを変更または削除することができない。メモリ106は、物理ボタン、物理ピン、または物理スイッチ等の、書込保護を無効にするための物理的特徴を含み得る。メモリ106は、特別なプログラミングインターフェイスその他等の、書込保護を無効にするための電子インターフェイスを含み得る。セキュリティプロセッサ108は、セキュリティプロセッサ108とメモリ106との間の制御リンク116Aを使用して、たとえばコンピューティングシステム100がファームウェアの読出専用部分の新たなバージョンをインストールすることを可能にするために、メモリ106の書込保護を無効にする信号を送信することができる。
メモリ106に格納されたシステムファームウェアの読出専用部分は、ボディセクションとヘッダセクションとを含み得る。ヘッダセクションは以下のような情報を含むことができる。
●セキュリティプロセッサ108で実行されるファームウェアがメモリ106の他のブロックの中からヘッダを識別しヘッダおよびファームウェアをいくつかの異なる可能なアドレスのうちの1つに格納できるようにする、識別バイトシーケンス(たとえば「マジックナンバー」)。
●ファームウェアを特定のデバイスモデルに関連付け、システムファームウェアを、他のデバイスモデル上で実行することを意図した他のバージョンと区別するための、バージョン番号。
●(たとえばセキュリティプロセッサのファームウェアに格納された)検証鍵のうちの公開の半分を使用してヘッダセクションに適用するヘッダ署名。秘密の半分は、ハードウェア製造者、オペレーティングシステム開発者、またはコンピューティングシステム100が検証可能なファームウェアのみを実行することを保証するために機能する他のエンティティ等の、遠隔エンティティにおいて制御されてもよい。秘密の半分はセキュリティプロセッサのファームウェアに格納されてもよい。
●セキュリティプロセッサ108がシステムファームウェアのボディセクションを検証するために使用する検証サブ鍵。秘密の半分は、ハードウェア製造者、オペレーティングシステム開発者、またはコンピューティングシステム100が検証可能なファームウェアのみを実行することを保証するために機能する他のエンティティ等の、遠隔エンティティにおいて制御されてもよい。秘密の半分はセキュリティプロセッサのファームウェアに格納されてもよい。
ファームウェアイメージのボディセクションは以下を含み得る。
●システムファームウェアを他のバージョンと区別するためにインクリメントされるボディバージョン番号。
●(たとえばシステムファームウェアのヘッダセクションに格納された)検証サブ鍵を使用してボディセクションに適用されたボディ署名。秘密の半分は、ハードウェア製造者、オペレーティングシステム開発者、またはコンピューティングシステム100が検証可能なファームウェアのみを実行することを保証するために機能する他のエンティティ等の、遠隔エンティティにおいて制御されてもよい。
●メモリ106の書込保護が有効にされたときに書込保護されるメモリ106の部分を制御するメモリ106の制御レジスタの予想値。
●ファームウェアまたはリカバリファームウェアの一部が格納されるメモリ106の異なるブロックに各エントリが対応する、予想ハッシュ値のテーブル。
●テーブル内のエントリの数。
ファームウェアのボディセクションに含まれる予想ハッシュ値のテーブル内の各エントリは、以下を指定することができる。
●ブロックの、メモリ106内のアドレス(またはオフセット)。
●ブロックのサイズ(たとえば単位はバイト)。
●検証に使用される、ブロックに割り当てられる重み付け。重み付けは、固定点の値、対数値、またはその他の種類のパラメータとして表すことができる。最大の重み付けは、常に確率的検証スキームでブロックを検証させることができる。最小の重み付けは、確率的検証スキームでブロックが検証されないようにすることができる。最大の重み付けと最小の重み付けとの間の重み付けは、重み付けが、最大の重み付けにより近い値に割り当てられるか最小の重み付けにより近い値に割り当てるかに応じて、ブロックを検証する頻度をより高くまたは低くする。
●ブロックに格納されているファームウェアまたはリカバリファームウェアの部分の予想ハッシュ(たとえばSHA-256)。
アプリケーションプロセッサ102はコンピューティングシステム100の主要な処理コンプレックスであり、セキュリティプロセッサ108はコンピューティングシステム100の専用処理ユニットである。アプリケーションプロセッサ102は、主として、コンピューティングシステム100に各種動作を実行させるための命令(たとえばファームウェア、リカバリファームウェア、カーネルソフトウェア、オペレーティングシステムソフトウェア)を実行するように構成され、一方、セキュリティプロセッサ108は、セキュリティおよび検証動作を実行するように構成されたサポートプロセッサである。たとえば、コンピューティングシステム100がモバイルコンピュータ(たとえば携帯電話)内のSoCである場合、アプリケーションプロセッサ102は、オペレーティングシステムに関連する命令と、オペレーティングシステムが提供する動作環境で実行するアプリケーションとを実行することができる。セキュリティプロセッサ108は、オペレーティングシステムのセキュアなブートを管理するためにアプリケーションプロセッサ102とやり取りしてもよく、アプリケーションプロセッサ102がファームウェアを実行する前にファームウェアの検証を実行してもよく、または、コンピューティングシステム100がリカバリモードに入った場合、アプリケーションプロセッサ102がリカバリファームウェアを実行する前にリカバリファームウェアを検証してもよい。
アプリケーションプロセッサ102およびセキュリティプロセッサ108の各々は、1つ以上のコントローラ、マイクロコントローラ、プロセッサ、マイクロプロセッサ、ハードウェアプロセッサ、ハードウェア処理ユニット、デジタル信号プロセッサ、グラフィックプロセッサ、グラフィック処理ユニットなどの任意の組み合わせを含み得る。アプリケーションプロセッサ102およびセキュリティプロセッサ108の各々は、コンピューティングシステム100の動作を制御するためにコンピュータ実行可能命令を処理する統合プロセッサおよびメモリサブシステム(たとえばSoCとして実装される)であってもよい。いくつかの例において、コンピューティングシステム100は、一般的にアプリケーションプロセッサ102およびセキュリティプロセッサ108として識別される、処理および制御回路に関連して実現されるハードウェアまたは固定論理回路のいずれか1つまたはそれらの組み合わせを用いて、実現されてもよい。
セキュリティプロセッサ108は、セキュリティプロセッサ108の内部の不揮発性メモリの領域において、ファームウェア管理パラメータ(FWMP:firmware management parameter)、セキュリティプロセッサファームウェア(SPFW:security processor firmware)、生成されたハッシュ値、およびその他のデータを保持する。セキュリティプロセッサ108は、セキュリティプロセッサファームウェアを実行する前に、内部検証プロセスを使用してセキュリティプロセッサファームウェア(たとえば一部のシステムでは「Cr50」と呼ばれる)を検証する。
ファームウェア管理パラメータは、アプリケーションプロセッサ102が設定する構成パラメータを表す。いくつかの例において、コンピューティングシステム100は、アプリケーションプロセッサ102がファームウェア管理パラメータを変更するためのパスワードを要求してもよい。いくつかの例において、パスワードは、コンピューティングシステム100の初期設定後にコンピューティングシステム100によって削除または「忘れられ」てもよく、そうすることでファームウェア管理パラメータをスタティックにする、または一度に書き込む。
ファームウェア管理パラメータは、オペレーティングシステム開発者モードが可能にされるか否か、セキュリティチップファームウェアデバッグモードが可能にされるか否か等を含む、各種のセキュリティ関連設定を含み得る。ファームウェアおよびリカバリファームウェア検証を可能にするために、ファームウェア管理パラメータは、「確率的検証」または「部分検証」または「検証なし」(たとえば検証を完全に無効にするというオプション)ではなく、コンピューティングシステム100の各ブートで「フル検証」を強制するというオプションを含む、1つ以上の他のオプションまたはセキュリティ関連設定を、含み得る。フル検証および確率的検証を含む各種検証モードの詳細については他の図面を参照しながら説明する。
いくつかの例において、セキュリティプロセッサ108は、ファームウェア管理パラメータを通じてより多くのオプションまたは設定の処理をサポートすることができる。たとえば、ファームウェア管理パラメータは、エンタープライズおよび開発者の柔軟性により、検証プロセスにおける複雑さおよびユーザビリティと引き換えにセキュリティをトレードオフすることを可能にするための、追加のオプションを含み得る。たとえば、フル検証、確率的検証、または検証なしを選択するオプションだけを含むのではなく、ファームウェア管理パラメータは、ユーザまたはセキュリティ管理者が確率的検証中に特定のブロックをチェックするための重み付け、したがってオッズを調整するためのオプションを含み得る。
いくつかの例において、ファームウェア管理パラメータは、セキュリティプロセッサ108のさらに他の構成(たとえばエンタープライズおよび開発者をより柔軟にしてセキュリティとユーザビリティをトレードオフすることを可能にする設定)を提供してもよい。たとえば、1つの追加設定は、部分または確率的検証の間にブロックがチェックされる可能性を調整するためにファームウェアまたはリカバリファームウェアの特定のブロックに添付される、割り当てられた重み付けに対する変更子であってもよい。その他のファームウェア管理パラメータは、セキュリティプロセッサ108に、モデル固有の検証データ(たとえばファームウェアのヘッダセクションにある)をチェックさせ、任意で、存在する場合はモデル固有の検証データをチェックさせ、存在しない場合はチェックを無視するかまたはモデル固有の検証チェックを完全に無視すること(たとえば開発者にとって有用となり得る)を要求する、設定であってもよい。
セキュリティプロセッサ108は、セキュリティプロセッサ108および/またはアプリケーションプロセッサ102がファームウェアまたはリカバリファームウェアの検証を実行するためにアクセスすることができる、セキュリティプロセッサ108の内部不揮発性メモリ内に、検証ステータス情報を保持してもよい。たとえば、セキュリティプロセッサ108は、(電力を取り除くことなく)新たな状態への更新のために増大可能であるが減少させることはできない1つ以上のプラットフォーム構成レジスタを有し得る。一例として、セキュリティプロセッサは、以下を含む検証ステータス情報を保持することができる。
●(たとえばアプリケーションプロセッサ102またはセキュリティプロセッサ108により)ファームウェアまたはリカバリファームウェアの1つ以上のブロックに適用されたセキュアなハッシュ関数から出力された値を表す「生成されたハッシュ」。
●生成されたハッシュを使用してファームウェアまたはリカバリファームウェアが検証可能であったか否かについてのステータスインジケータ。
先に述べたように、セキュリティプロセッサ108は、セキュリティプロセッサのファームウェアの中において、システムファームウェアのヘッダセクションに適用されたヘッダ署名を検証するための検証鍵を、保持し得る。たとえば、セキュリティプロセッサ108は、セキュリティプロセッサのファームウェアのヘッダセクションから、コンパイル中にシステムファームウェアに適用されたヘッダ署名を検証するための検証鍵(またはストレージ削減のためにそのハッシュ)を決定することができる(たとえば、システムファームウェア検証鍵の秘密の半分はコンパイラに知られておりコンパイル中にシステムファームウェアに適用される)。セキュリティプロセッサ108は、システムファームウェアボディの検証を続ける前に、先ず、システムファームウェアに適用されたヘッダ署名を、セキュリティプロセッサファームウェアに格納された(たとえばCr50のヘッダセクションに埋め込まれた)検証鍵と照合してもよい。セキュリティプロセッサ108は、その後、システムファームウェアの検証を続ける前に、システムファームウェアに適用されたボディ署名を、システムファームウェアのボディセクションに格納された検証サブ鍵と照合してもよい。
アプリケーションプロセッサ102、セキュリティプロセッサ108、およびメモリ106は、ホストバス114およびメモリバス112上でデータをやり取りすることにより、メモリ106にロードされたファームウェアおよびリカバリファームウェアを検証する。アプリケーションプロセッサ102は、セキュリティプロセッサ108が保持するファームウェア管理パラメータを初期化することができ、セキュリティプロセッサ108は、ファームウェア管理パラメータに従ってファームウェアを検証することができ、この検証は、ファームウェアのハッシュを生成し、生成したハッシュを、セキュリティプロセッサ108がメモリ106に格納されたファームウェアのボディセクションから抽出した予想ハッシュと比較することを含む。セキュリティプロセッサ108はリカバリファームウェアを検証することができ、この検証は、リカバリファームウェアのハッシュを生成し(またはアプリケーションプロセッサ102に依拠してリカバリファームウェアのハッシュを生成し)、生成したハッシュを、セキュリティプロセッサ108がメモリ106に格納されたリカバリファームウェアのボディセクションから抽出した予想ハッシュと比較することを含む。
動作時に、セキュリティプロセッサ108は、先ず、セキュリティプロセッサ108が保持するシステムファームウェア検証鍵(またはそのハッシュ)を使用してファームウェアのヘッダ署名を検証してもよい。セキュリティプロセッサ108は、ヘッダの署名は正しくないと判断した場合、コンピューティングシステム100が互換性のないまたは破損したシステムファームウェアをロードし実行することを防ぐために、コンピューティングシステム100をシャットダウンしてもよい。セキュリティプロセッサ108は、ヘッダシステムファームウェアの署名が検証鍵を使用して検証可能であると仮定して、システムファームウェアのボディセクションに適用されたボディ署名が検証サブ鍵を使用して生成されたものであるか否かを判断してもよい。セキュリティプロセッサ108は、ボディセクションの署名が正しくないと判断した場合、コンピューティングシステム100が互換性のないまたは破損したシステムファームウェアをロードし実行することを防ぐために、コンピューティングシステム100をシャットダウンしてもよい。
セキュリティプロセッサ108は、ボディセクションの署名が検証サブ鍵を用いて検証可能であると仮定して、ファームウェア管理パラメータに従い、メモリ106にロードされたシステムファームウェアまたはリカバリファームウェアのブロックの予想ハッシュ値を決定する。たとえば、セキュリティプロセッサ108は、システムファームウェアのフルチェック中に、システムファームウェアのヘッダまたはボディから、メモリ106に格納されているシステムファームウェアの各ブロックについての予想ハッシュ値を特定してもよい。予想ハッシュ値は、システムファームウェアの固定属性のままであってもよく、事前に、たとえばコンパイル時の前に決定してもよい。セキュリティプロセッサ108は、システムファームウェアおよびリカバリファームウェアを実行する条件として、メモリ106に現在格納されているシステムファームウェアおよびリカバリファームウェアのブロックの生成したハッシュ値と、システムファームウェアおよびリカバリファームウェアに埋め込まれた予め定められた予想ハッシュ値とを比較する。
セキュリティプロセッサ108は、メモリ106にロードされたシステムファームウェアのブロックにハッシュ関数を直接適用してもよく、または、セキュリティプロセッサ108は、アプリケーションプロセッサ102に依拠して、バックグラウンドまたはオペレーティングシステムタスクとしてハッシュ関数を適用してもよい。いずれの場合においても、これらの生成されたハッシュ値は、予想ハッシュ値と比較される。セキュリティプロセッサ108は、ハッシュ間の不一致を識別した場合、アプリケーションプロセッサ102が、破損しているまたは悪意ある可能性があるファームウェアまたはリカバリファームウェアを実行するのを防ぐために、検証の失敗をアプリケーションプロセッサ102に通知してもよい。
次のブートプロセス中、セキュリティプロセッサ108は、システムファームウェアの生成されたハッシュをリフレッシュし、システムファームウェアの第1の生成されたハッシュをシステムファームウェアの第2の生成されたハッシュに置き換えることにより、上述の検証プロセスを繰り返してもよい。たとえば、システムファームウェアが過去に検証に失敗した場合、セキュリティプロセッサは、システムファームウェアに関連付けられたハッシュを再度生成することで、次の検証の試みを可能にしてもよい。セキュリティプロセッサ108は、システムファームウェアの予想ハッシュが第2のハッシュと一致しないという判断に応じて、アプリケーションプロセッサ102にリカバリモードになるように指示するか、さもなければシステムファームウェアの実行を控えてもよい。
いくつかの例において、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアがいつ検証に失敗したかを示すために、コンピューティングシステム100の発光ダイオード(LED)またはスピーカ等の出力コンポーネントを制御してもよい。セキュリティプロセッサ108は、これを、他の機会に、たとえば2要素認証が要求されたことを示すために、使用することもできる。出力コンポーネントは、セキュリティプロセッサ108が使用する専用の出力コンポーネントであってもよい。他の場合において、出力コンポーネントは、二重機能(たとえば、電力もしくは充電識別子、またはキーボードもしくはディスプレイバックライト等)を有していてもよい。セキュリティプロセッサ108は、検証失敗、検証成功、またはその他の状態を示すために出力コンポーネントを制御してもよい。このような出力コンポーネントは、二重目的(たとえば、電力もしくは充電LED、またはキーボードもしくはディスプレイバックライト等)を有していてもよく、または、ファームウェアおよびリカバリファームウェアの検証の状態を提供するためにコンピューティングシステム100に意図的に統合されてもよい。出力コンポーネントに対する典型的な制御方式は、アプリケーションプロセッサ102からセキュリティプロセッサ108にメッセージを送信して出力コンポーネントを制御することを含み得る。他の例において、セキュリティプロセッサ108は、アプリケーションプロセッサ102の出力を測定するために、あるピン上にパルス幅変調(PWM)捕捉ユニットを有していてもよく、セキュリティプロセッサ108は、出力コンポーネントに対する出力を複製するためにそれ自身のPWMユニットを有していてもよい。他の例において、セキュリティプロセッサ108は、出力コンポーネントを制御するために、アプリケーションプロセッサ102によって制御可能な内部スイッチを有していてもよい。
コンピューティングシステム100に対する物理アクセスが可能な攻撃者は、出力コンポーネントを除去する、または出力コンポーネントからの光を遮断することができる。セキュリティプロセッサ108は、検証プロセス中に出力コンポーネントを制御することにより、自動車の始動中にエンジン警告灯を直ちに数秒間表示する方法と同様に、ブート中またはログインプロセス中に出力コンポーネントを非常に早期に有効することで、そのような攻撃をより困難にする。攻撃者は、コンピューティングシステム100内の別のプロセッサに出力コンポーネントを配線してその挙動を複製しようとする可能性があるが、これは、永続的な、場合によっては明らかなハードウェア変更を伴う。
場合によっては、セキュリティプロセッサ108は、書込保護信号に接続される単一のオープンドレインピンを含み得る。これは、製造中にデバッガがその信号をオーバーライドできるようにするために、抵抗器を介して接続されている。この抵抗器を除去することは、攻撃者が、セキュリティプロセッサ108が書込保護信号を駆動できないようにすることおよび書込保護信号の現在の状態を検出できないようにすることの両方を実現するための、適度に実現可能な方法である。セキュリティプロセッサ108は、第1の書込保護ピンと全く同じネットに接続された第2のピンを含んでいてもよい。この追加のピンは、この信号をより妨害し難くするために、マザーボードの内側の層の下に隠してもよい。セキュリティプロセッサ108は、その信号を監視して、第1の書込保護ピンの真の状態を測定してもよい。
攻撃者は、セキュリティプロセッサ108が書込保護ピンの状態変更を検出しないようにするためにはコンピューティングシステム100の電源を切る必要がある。しかしながら、ブート時に、セキュリティプロセッサ108は、システムメモリ106を再スキャンし変更を識別することができる。攻撃者は、システムメモリ106を、SPIバスのより多くの制御を可能にするより高度な回路で置き換え、その回路の上に新たなメモリ106を積み重ねることができる。しかしながら、これは一層困難な攻撃であり、物理的証拠を残すことになる。
アプリケーションプロセッサ上で実行可能なファームウェアの検証について主として説明しているが、リカバリファームウェアをセキュアに検証するための技術は他のプロセッサにも同様に適用される。たとえば、コンピューティングシステム100は、アプリケーションプロセッサ102およびセキュリティプロセッサ108に加えて、埋め込みコントローラ(EC)指紋センサ(FPMCU)、その他のハードウェアユニット、ハードウェアアクセラレータユニットなどのようなファームウェアを有するその他のプロセッサを含み得る。セキュリティプロセッサ108が別のプロセッサのファームウェアにアクセスできる場合、セキュリティプロセッサ108は、セキュリティプロセッサ108がアプリケーションプロセッサ102のファームウェアを検証するやり方で、ファームウェアおよびリカバリファームウェアを検証することもできる。このように、その他のプロセッサは、セキュアな検証が提供する柔軟性およびセキュリティの恩恵を受けることができる。
図2は、ファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。図2Bは、リカバリファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。動作200はステップ202~214を含む。動作200は、図2に示される動作と異なる順序で実行されてもよく、または、示される動作よりも多いもしくは少ない動作を含んでいてもよい。セキュリティプロセッサ108は、動作200を実行することにより、メモリ106に保持されているシステムファームウェアを検証することができる。
図2において、セキュリティプロセッサ108は、コンピューティングシステム100の各電源投入またはリセット中に動作200を実行してもよい。セキュリティプロセッサ108は、スリープモードからの移行に応じて動作200を実行してもよい。セキュリティプロセッサ108は、セキュリティプロセッサ108のリセットに応じて動作200を実行してもよい(たとえば、セキュリティプロセッサ108のリセットをトリガする特定のキー入力の組み合わせをユーザが提供した場合)。
202において、セキュリティプロセッサ108が電源投入、起動、またはリセットされると、このセキュリティプロセッサ(SP)は、自身のセキュリティプロセッサファームウェア(SPFW)を検証、ロード、および実行する。204において、セキュリティプロセッサ108は、ファームウェアを検証するためのオプションを含むファームウェア管理パラメータを保持する。言い換えると、セキュリティプロセッサ108は、ファームウェア管理パラメータから推測される情報に基づいて、たとえば、コンピューティングシステム100のブートごとにリカバリファームウェアの「フル検証」を実行する、リカバリファームウェアの「確率的検証」を実行する、またはリカバリファームウェアを検証しないことにより、システムファームウェアまたはリカバリファームウェアを検証するように構成されてもよい。セキュリティプロセッサ108は、検証のレベル(たとえばフル検証、部分もしくは確率的検証、または検証なし)を決定するため、ならびに、アプリケーションプロセッサ102および/またはセキュリティプロセッサ108によって実行された以前の検証プロセスの結果を判断するために、セキュリティプロセッサ108が使用するファームウェア管理パラメータとして、ステータス情報およびフラグを保存することができる。
ファームウェア管理パラメータは、コンピューティングシステム100の最初のブート時にアプリケーションプロセッサ102によって初期化されてもよい。セキュリティプロセッサ108は、リカバリファームウェアのフル検証を実行するとき、ファームウェアの各ブロックごとに生成されたハッシュをファームウェアのボディセクションに記録された対応する予想ハッシュと照合することを含む、リカバリファームウェア全体の照合を行う。セキュリティプロセッサ108は、リカバリファームウェアの検証を実行しない場合、ファームウェアに対するハッシュ(たとえばデバッグに有用)を生成することを控える。
ファームウェアのいくつかのブロックがコンピューティングシステム100の機能に影響を与えない場合がある。ブート時またはリカバリ中に特定のブロックをスキップすることにより、コンピューティングシステム100のセキュリティを大幅に低下させることなく、コンピューティングシステム100をより広い範囲のシナリオで動作させることができる。したがって、ファームウェア内の重みのテーブルが、各ファームウェアブロックに関連付けられブロックをスキップできるか否かを判断するために使用される重み付け係数を指定してもよい。
いくつかの例において、ブロックの中には、ディープスリープからリカバリするときまたはアプリケーションプロセッサおよび/またはセキュリティプロセッサがシャットダウンし得る低電力サスペンドモードに入るときに、使用される機会が少なくなり得るブロックがある。ファームウェアのルート鍵またはその他の部分のような、ディープスリープからのレジュームまたは低電力サスペンドモードに入ることに影響を与えない、通常のブートによって使用されるいくつかのブロックがある。これらのブロックをレジューム時にスキップすることにより、セキュリティを大幅に低下させることなくレジューム時間を改善することができる。
206において、セキュリティプロセッサは、コンピューティングシステム100がリカバリモードにあるか否か、または通常の非リカバリモードをとるか否かを判断する。たとえば、セキュリティプロセッサ108は、コンピューティングシステム100のキーボードまたは他の入力コンポーネントで特定の入力が検出されたことに応じて、コンピューティングシステム100のユーザがリカバリモードを手動で選択しているか否かを確認することができる。その他の場合において、セキュリティプロセッサ108は、リカバリファームウェアを検証することを求める要求をアプリケーションプロセッサ102から受けたことに応じて、リカバリモードに入りリカバリファームウェアの検証を開始してもよい。アプリケーションプロセッサ102は、実行前にリカバリファームウェアをチェックしてもよい。アプリケーションプロセッサ102は、リカバリファームウェアの生成されたハッシュと予想ハッシュとの不一致を検出したことに応じて、リカバリモードに入ることを求めるコマンドをセキュリティプロセッサ108に(たとえばホストバス114を介して)伝えてもよい。
リカバリモードに入るという決定に応じて、セキュリティプロセッサ108は、図3に示される動作300を実行する。または、非リカバリモードに入るという決定に応じて、セキュリティプロセッサは、セキュリティプロセッサ108が保持するファームウェア管理パラメータに基づいてシステムファームウェアを自動検証するステップ208を実行することによって続行する。
208Aにおいて、セキュリティプロセッサ108は、システムファームウェアに適用された署名を、システムファームウェア検証鍵およびサブ鍵と照合する。たとえば、セキュリティプロセッサ108は、ファームウェアのヘッダ署名を検証するために、セキュリティプロセッサファームウェアのヘッダセクションに保持された(またはセキュリティプロセッサ108内の他の場所に保持された)検証鍵を使用することができる。システム検証鍵の秘密の半分は、オペレーティングシステム開発者またはコンピューティングシステム100の製造者によって保持され、アプリケーションプロセッサ102上で実行することが意図されたシステムファームウェアをコンパイルし署名するために使用される公式コンパイラに提供されてもよい。
ヘッダ署名を検証したことに応じて、セキュリティプロセッサ108は、システムファームウェアのヘッダセクションからの検証サブ鍵を使用して、システムファームウェアに適用されたボディ署名を検証することができる。システム検証サブ鍵の秘密の半分は、オペレーティングシステム開発者またはコンピューティングシステム100の製造者によって保持され、アプリケーションプロセッサ102上で実行することが意図されたシステムファームウェアのボディをコンパイルし署名するために使用される公式コンパイラに提供されてもよい。
セキュリティプロセッサ108は、適切な検証鍵および検証サブ鍵を使用してシステムファームウェアが署名されなかったと判断した場合、システムファームウェア検証チェックに失敗しステップ210に進む。または、セキュリティプロセッサ108は、システムファームウェアに適用された署名の検証に応じて、続けてステップ208B~208Dにおいてファームウェアを検証する。
ファームウェア検証プロセスの一部として署名をチェックすることは、ステップ208C~208Dにおいてハッシュを単にチェックすることよりも、セキュリティプロセッサ108のリソースに対する負担が大きい可能性がある。セキュリティプロセッサ108は、ステップ208で生成された中間値(たとえば署名ハッシュ)を保存して、セキュリティプロセッサ108が次回動作200を実行するときにより迅速な署名チェックを実行できるようにしてもよい。
セキュリティプロセッサ108は「ロールバック保護」を提供してもよい。セキュリティプロセッサ108がチェックした検証済みのリカバリファームウェアの最高バージョン番号を保存することで、セキュリティプロセッサ108は、この最高バージョン番号よりも低いバージョン番号を有する古いバージョンがチェックされているときに、コンピューティングシステム100に警告するための通知を出力することができる。たとえば、セキュリティプロセッサ108がチェックした以前のバージョンはバージョンBであったがファームウェアのヘッダセクションがバージョンAを示す場合、セキュリティプロセッサは、その内部レジスタにフラグを設定してもよく、そうでなければ、ファームウェアが以前のバージョンに「ロールバック」されたという(たとえばユーザインターフェイスを介して出力される)警告を、アプリケーションプロセッサ102に信号で伝達してもよい。
ファームウェア管理パラメータに基づいて、セキュリティプロセッサ108は、ステップ208B~208Dを、フル検証を行う場合はシステムファームウェアの各ブロックごとに実行し、部分検証または確率的検証を行う場合はシステムファームウェアのブロックの一部のみについて実行し、ファームウェア管理パラメータが検証をスキップできることを示す場合はシステムファームウェアのブロックのいずれについても実行しない。
208Bにおいて、セキュリティプロセッサ108は、ファームウェア管理パラメータに基づいてシステムファームウェアをハッシュして、システムファームウェアの生成されたハッシュを決定する。たとえば、セキュリティプロセッサ108は、システムファームウェアの個々のブロックのうちの1つ以上をメモリ106からロードし、ハッシュ関数をブロックに適用してもよい。セキュリティプロセッサは、ハッシュ関数の結果を、後に予想ハッシュ値と比較するために、レジスタまたは内部メモリに保持してもよい。
208Cにおいて、セキュリティプロセッサ108は、システムファームウェアの予想ハッシュを決定する。たとえば、コンピューティングシステム100は、メモリ106に保持されているシステムファームウェアのブロックの予想ハッシュ値を記録するための専用の発見可能な領域(たとえばボディセクションの一部)をシステムファームウェアが含むことを要求する場合がある。ファームウェアおよびリカバリファームウェアは、典型的に、ファームウェアイメージの一部としてファームウェアおよびリカバリファームウェアを一緒にコンパイルすることを含む包括的な構築プロセス中に構築されるので、システムファームウェアに埋め込まれた予想ハッシュ値は、典型的に、リカバリファームウェアを検証するのに十分である。セキュリティプロセッサ108は、ファームウェアのボディセクションの予め定められた領域から特定の値を抽出することにより、予想ハッシュを決定することができる。
208Dにおいて、セキュリティプロセッサ108は、予想ハッシュと生成されたハッシュとが一致するか否かを判断する。これらのハッシュが一致する場合、セキュリティプロセッサ108は、ファームウェアを検証し、ファームウェアが検証されたことを反映するように、セキュリティプロセッサ108が保持するステータスレジスタを更新する。同様に、これらのハッシュが一致しない場合、セキュリティプロセッサは、ファームウェアが検証不能であったことを示すようにステータスレジスタを更新する。
210において、セキュリティプロセッサは、ファームウェアの検証に成功したか否かを判断する。212において、ファームウェアがステップ208における検証チェックに失敗し検証されない場合、セキュリティプロセッサ108は、コンピューティングシステム100に、ブートを終了し電源を落とすよう指示する。214において、ファームウェアがステップ208の検証チェックに合格し検証されると、セキュリティプロセッサ108は、アプリケーションプロセッサ102をリセットから解放しアプリケーションプロセッサ102がファームウェアを実行できるようにすることで、コンピューティングシステム100にブートプロセスを続行するよう指示する。
図3は、リカバリファームウェアを検証するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。動作300はステップ302~308を含む。動作300は、図3に示される動作と異なる順序で実行されてもよく、または、示される動作よりも多いもしくは少ない動作を含んでいてもよい。セキュリティプロセッサ108は、動作300を実行することにより、メモリ106に保持されているリカバリファームウェアを検証することができる。
図3において、セキュリティプロセッサ108は、動作200のステップ206においてコンピューティングシステム100がリカバリモードに入っているとセキュリティプロセッサが判断したことに応じて、動作300を実行してもよい。
コンピューティングシステム100は、さまざまな方法でリカバリモードに入ることができる。たとえば、アプリケーションプロセッサ102が、(たとえば、コンピューティングシステム100のキーボード上の特定のキーの押下を検出することにより/コンピューティングシステム100の入力コンポーネントから異なる信号を検出することにより)リカバリモードに入ることをユーザが手動で要求していると判断したことに応じて、コンピューティングシステム100はリカバリモードに入ることができる。システムファームウェアの読出専用部分の実行中に、アプリケーションプロセッサ102が、システムファームウェアの読み書き可能部分に適用された署名が正しくないと判断した場合、コンピューティングシステム100はリカバリモードに入ることができる。システムファームウェアの読出専用部分は、メモリ106の書込保護された部分に格納されたルート鍵を使用して署名をチェックすることができる。
リカバリモードに入る前に、コンピューティングシステム100のオペレーティングシステムが、たとえばバックグラウンドタスクとしてリカバリファームウェアを検証してメモリ106にリカバリファームウェアの予想ハッシュを格納していてもよい。通常のブート時、コンピューティングシステム100は、リカバリファームウェアが最初のブートパス中に実行されることはないので、リカバリファームウェアを検証する必要はない。アプリケーションプロセッサ102は、リカバリモードに入ることをユーザから指示されない限り、リカバリファームウェアを検証することなく、オペレーティングシステムまで完全にブートすることができる。
オペレーティングシステムは、通常のブートパスが失敗するまでコンピューティングシステム100が気付かない可能性があるリカバリファームウェアの無効化を攻撃者が行うことを防ぐために、通常動作中にバックグラウンドでリカバリファームウェアを検証してもよい。攻撃者がコンピューティングシステム100に未検証コードを実行させることは必ずしも防止されないかもしれないが、少なくとも、バックグラウンドでリカバリファームウェアの完全性をオペレーティングシステムにチェックさせることにより、コンピューティングシステム100がリブートに先立って潜在的な攻撃者を事前に検出できるようにすることができる。場合によっては、開発者が、新規のファームウェアバージョンをテストしておりコンピューティングシステム100が不良または未検証のファームウェアを実行している可能性があることを事前に通知または警告されることを望むことがある。これにより、コンピューティングシステム100が信頼できないリカバリファームウェアを実行する前に、リカバリファームウェアを実行しないまたはファームウェアを修復しないという選択肢をユーザに与えることができる。
アプリケーションプロセッサ102において実行されるオペレーティングシステムまたは他のサービスもしくはスレッドは、さまざまな理由で、リカバリファームウェアを再検証するためにリカバリモードに入るようにセキュリティプロセッサ108に要求することができる。オペレーティングシステムまたは他のサービスもしくはスレッドは、ホストバス112を介してセキュリティプロセッサ108と通信することにより、再検証要求を伝達する。
アプリケーションプロセッサ102は、典型的に、セキュリティプロセッサ108よりも強力かつ高速である。そのため、処理速度がより速く、帯域幅がより大きく、パワーがより大きいほど、コンピューティングシステム100は、アプリケーションプロセッサ102を、セキュリティプロセッサ108よりも高速でリカバリファームウェアを最初に検証するように強化することができる。
実行中、システムファームウェアは、以前のブートで最初に決定された、システムメモリ内のリカバリファームウェアの予想ハッシュを保持してもよい。リカバリファームウェアおよびシステムファームウェア(読出専用部分を含む)は一緒に同時に構築されるので、ハッシュは、リカバリファームウェアの完全性(たとえばリカバリファームウェアが最後に使用されてから変更されたか否か)を判断するのに十分なリファレンスポイントを提供することができる。コンピューティングシステム100がリカバリモードに入っていると判断すると、システムファームウェアは、リカバリファームウェアの予想ハッシュを、メモリ106にロードされた、アプリケーションプロセッサが生成するリカバリファームウェアのハッシュと比較するように、アプリケーションプロセッサ102に指示する。
アプリケーションプロセッサ102は、予想ハッシュと生成されたハッシュとが一致すると判断したことに応じて、リカバリファームウェアを実行する。リカバリファームウェアがチェックに失敗したという判断、および、リカバリファームウェアの署名が不良であるもしくは予想ハッシュと生成されたハッシュとが不一致であるという判断に応じて、アプリケーションプロセッサ102は、セキュリティプロセッサ108が、リカバリファームウェアを検証することにより、コンピューティングシステム100がリカバリファームウェアを実行しリカバリモードで動作することを可能にすることを、要求する。
302において、206でコンピューティングシステム100がリカバリモードに入っていると判断したことに応じて、セキュリティプロセッサ108は、任意で、システムファームウェアの検証中に使用されるファームウェア管理パラメータに従い、リカバリファームウェアを自動検証する。たとえば、セキュリティプロセッサ108は、デフォルトで、メモリ106にロードされたリカバリファームウェアの各ブロックをチェックするリカバリファームウェアのフル検証を実行してもよい。他の場合において、リカバリファームウェアのいくつかのブロックが、破損しても問題を引き起こす可能性が低いのであれば、セキュリティプロセッサ108は、破局的な故障を引き起こす可能性が最も低いブロックをスキップしてリカバリファームウェアの確率的または部分検証を実行してもよい。セキュリティプロセッサ108は、ファームウェア管理パラメータ内の情報に基づいて、リカバリファームウェアのフルチェックを行うか部分チェックを行うかを判断してもよい。
確率的検証の場合、各ブロックに重み付けを割り当ててもよく、この重み付けは、その後、検証プロセス中に(たとえば動作300または200中に)動的に生成されたしきい値と比較される。動的に生成されるしきい値は、乱数発生器からの出力に対応していてもよい。割り当てられた重み付けがブロックの動的しきい値を上回る場合、セキュリティプロセッサ108は、ステップ208A~208Dに関して先に概要を述べたものと同様のプロセスに従い、ステップ302A~302Dを実行してそのブロックを自動検証する。割り当てられた重み付けが動的しきい値を上回らない場合、セキュリティプロセッサ108は、そのブロックをスキップし、そのブロックの予想ハッシュが生成されたハッシュと一致するか否かを考慮しなくてもよい。
302Aにおいて、セキュリティプロセッサ108は、システムファームウェアに適用された署名を、システムファームウェア検証鍵およびサブ鍵と照合する。ヘッダ署名の検証に応じて、セキュリティプロセッサ108は、システムファームウェアのヘッダセクションからの検証サブ鍵を使用して、システムファームウェアに適用されたボディ署名を検証することができる。セキュリティプロセッサ108は、適切な検証鍵および検証サブ鍵を使用してシステムファームウェアが署名されなかったと判断した場合、システムファームウェア検証チェックは失敗し、ステップ304に進む。または、セキュリティプロセッサ108は、システムファームウェアに適用された署名の検証に応じて、続いてステップ302B~ステップ302Dにおいてリカバリファームウェアを検証する。
典型的に、セキュリティプロセッサ108は、リカバリファームウェアの破損ブロックの検出を最大にするためにはフル検証が必要であるので、リカバリファームウェアの各ブロックごとにステップ302B~302Dを実行する。しかしながら、ファームウェア管理パラメータが検証なしまたは部分検証のみを示している場合、セキュリティプロセッサ108は、リカバリファームウェアの部分検証を実行するまたは検証を実行しないように構成されてもよい。そのような場合、セキュリティプロセッサ108は、乱数に適用されると乱数がしきい値を満たすようにする重み付けが予め割り当てられたリカバリファームウェアのブロックに対し、ステップ302B~302Dを選択的に実行する。
302Bにおいて、セキュリティプロセッサ108は、リカバリファームウェアの個々のブロックをハッシュし、予想ハッシュ値と後に比較するために、ハッシュ関数の結果を、レジスタまたは内部メモリに保持してもよい。302Cにおいて、セキュリティプロセッサ108は、リカバリファームウェアの最初のチェック中にアプリケーションプロセッサが最初に決定したように、リカバリファームウェアの個々のブロックについての対応する予想ハッシュを決定する。302Dにおいて、セキュリティプロセッサ108は、予想ハッシュと生成されたハッシュとが一致するか否かを判断する。これらのハッシュが一致する場合、セキュリティプロセッサ108は、リカバリファームウェアを検証し、ファームウェアが検証されたことを反映するように、セキュリティプロセッサ108が保持するステータスレジスタを更新する。同様に、これらのハッシュが一致しない場合、セキュリティプロセッサは、リカバリファームウェアが検証不能であったことを示すようにステータスレジスタを更新する。
304において、セキュリティプロセッサは、リカバリファームウェアの検証に成功したか否かを判断する。306において、リカバリファームウェアがステップ304における検証チェックに失敗し検証されない場合、セキュリティプロセッサ108は、コンピューティングシステム100に、ブートを終了し電源を落とすよう指示する。308において、リカバリファームウェアがステップ304の検証チェックに合格し検証された場合、セキュリティプロセッサ108は、アプリケーションプロセッサ102をリセットから解放しアプリケーションプロセッサ102がリカバリファームウェアを実行することを可能にすることにより、コンピューティングシステム100にリカバリプロセスを継続するよう指示する。
先に述べたように、セキュリティプロセッサ108は、メモリ106に対する書込保護を、制御リンク116Aを介して制御することができる。コンピューティングシステム100の攻撃者は、たとえば、メモリ106上の物理的な書込保護機能に対して電圧を印加すること、ワイヤを切断すること、または書込保護信号とセキュリティプロセッサ108との間のリンクを切断することにより、セキュリティプロセッサ108が制御する書込保護信号をオーバーライドしようと試みる可能性がある。セキュリティプロセッサ108は、メモリ106に対する書込保護が変更されたか否かを監視し、変更された場合には、フラグを設定することができる、または、そうでなければメモリ106の書込保護が変更されメモリ106に格納された情報が変化している可能性があることを示すことができる。たとえば、セキュリティプロセッサ108は、アプリケーションプロセッサ102において実行されるオペレーティングシステムのコンポーネントによって監視されている内部レジスタまたは内部メモリ内の値を変更してもよい。したがって、セキュリティプロセッサ108は、セキュリティプロセッサ108がリカバリ状態を経験するときに動作300を実行することを含む、リカバリプロセスを開始することができる。
セキュリティプロセッサ108は、たとえば、ファームウェア管理パラメータがブロックチェックが無効にされたことを示す場合に、サブステップ302A~302Dを含むステップ302の全体をスキップしてもよい。そのため、動作300を実行する前提条件は、ブロックチェックが無効にされるのか、フルブロックチェックが有効にされるのか、または確率的ブロックチェックが有効にされるかを判断することを含み得る。したがって、セキュリティプロセッサ108は、サブステップ302A~302Dを含むステップ302を実行することで、ファームウェア管理パラメータにおいて定義されたチェック方式に準拠してもよい。
セキュリティプロセッサ108は、ブロックチェックは無効にされないと仮定し、リカバリファームウェアをロードしチェックしてもよい。セキュリティプロセッサは、たとえば、各ブロックを予想ハッシュと比較することによりリカバリファームウェアの各ブロックについて動作204~210を実行する、フルチェックを実行してもよい。セキュリティプロセッサ108は、たとえば、ブロックの一部のみについて動作204~210を実行する、確率的チェックを実行してもよい。セキュリティプロセッサ108は、ブロックをチェックまたはスキップするためのしきい値を満たすリカバリファームウェアのブロックのみをハッシュし比較することによって確率的チェックを実行してもよい。
場合によっては、セキュリティプロセッサ108は、ファームウェアおよびファームウェア検証を、たとえそれを求める要求を受けない場合であっても実行してもよい。たとえば、セキュリティプロセッサ108は、アプリケーションプロセッサ102からの信号を待つことなく、動作200または300を自動的に実行することにより、ファームウェアまたはリカバリファームウェアを(たとえば定期的に、スケジュールに従って、またはその他の条件もしくは規則に従って)検証するようにプログラミングされてもよい。
図4は、ファームウェアまたはリカバリファームウェアの確率的または部分検証を実行するように構成されたセキュリティプロセッサの動作の例を示すフローチャートである。動作400は動作402~416を含む。動作400は、図4に示される動作と異なる順序で実行されてもよく、または、示される動作よりも多いまたは少ない動作を含んでいてもよい。セキュリティプロセッサ108は、動作400を実行することにより、メモリ106に保持されているファームウェアまたはリカバリファームウェアを確率的に検証することができる。
ファームウェアまたはリカバリファームウェアの検証の速度および効率をセキュリティを犠牲にすることなく高めるために、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアを確率的に検証または部分的にのみ検証してもよい。セキュリティプロセッサ108は、フル検証を実行してファームウェアまたはリカバリファームウェアのすべてのブロックをチェックすることができるが、確率的検証の場合、セキュリティプロセッサ108は、典型的にはファームウェアまたはリカバリファームウェアの一部のみをチェックする。
たとえば、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアの各ブロックに(たとえばファームウェアヘッダ内に)予め割り当てられた対応する重み付けに依拠してもよい。セキュリティプロセッサ108は、各ブロックごとにしきい値を動的に生成し、このしきい値を、ブロックを検証するための条件として、そのブロックについて予め割り当てられた重み付けと比較してもよい。たとえば、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアの各ブロックごとに、0と1との間の値を出力する乱数発生器を実行してもよい。乱数発生器から出力された動的しきい値が予め割り当てられた重み付け(たとえばこの例ではこれも0と1との間の値)を上回ると判断したことに応じて、セキュリティプロセッサ108は、このブロックをスキップし、続けて後続のブロックをチェックする。動的しきい値が予め割り当てられた重み付けを上回らないと判断したことに応じて、セキュリティプロセッサ108は、このブロックを(たとえばこのブロックの予想ハッシュをこのブロックの生成されたハッシュと比較することにより)チェックする。
402において、セキュリティプロセッサ108は、ブロックの確率的検証しきい値を決定する。このしきい値は、リカバリファームウェアのブロックに割り当てられる、最大重み付けと最小重み付けとの間の値を表す。このしきい値は、たとえばコンピューティングシステム100のコンテキストまたは他の条件に基づいて、固定でも動的でもよい。セキュリティプロセッサ108は、ファームウェアを分析してファームウェアのボディセクション内のテーブル内のすべてのエントリの中から最大および最小の重み付けを導出することにより、しきい値を決定してもよい。セキュリティプロセッサ108は、乱数発生器を使用して、動的しきい値を、最大重み付け以上かつ最小重み付け以下の任意の値として決定してもよい。
404において、セキュリティプロセッサは、このブロックについての重み付けを決定する。たとえば、上述のように、ファームウェアのボディセクションが、ファームウェアまたはリカバリファームウェアの各ブロックまたは他の論理セクションに割り当てられた重みのテーブルを指定してもよい。各重みは、他のブロックとの比較における、検証のための相対的重要度を示していてもよい。重み付けは、固定点の値、対数値、または最大値および最小値を有するその他の種類のパラメータとすることができる。
確率的検証中に、より高い重み付けは、より低い重み付けを有するブロックよりも頻繁にブロックを検証させる可能性がある。各ブロックは、ファームウェアが生成されるときに重み付けを割り当てられてもよく、または、たとえば、開発者がアプリケーションプロセッサ102への入力を介して重み付けにアクセスできるデバッグモードにおいて、調整されてもよい。いくつかの例において(たとえば特別なプログラミングチャネルを通して)、ファームウェアのボディセクションの重み付けを変更することによって異なる検証方式を実行できるように、重みを調整することができる。
406において、セキュリティプロセッサ108は、ブロックに割り当てられた重み付けが確率的検証しきい値を上回るか否かを判断する。408において、しきい値を上回らない重み付けを有するブロックはスキップされ、410において、セキュリティプロセッサ108は、これがチェックされている最後のブロックであるか否かを確認する。最後のブロックでない場合、セキュリティプロセッサはステップ402に戻り、ブロックが最後のブロックである場合、セキュリティプロセッサはCにおいてで確率的チェックを終了する。
406において、ブロックに割り当てられた重み付けがこのブロックについての確率的検証しきい値を上回るとセキュリティプロセッサが判断した場合、412において、セキュリティプロセッサ108は、ブロックについて生成されたハッシュがこのブロックについての予想ハッシュと一致するか否かを判断する。セキュリティプロセッサは、414において、ブロックについて生成されたハッシュ値と記録されたハッシュ値とが一致しないと判断したことに応じて、動作400を終了し、ファームウェアまたはリカバリファームウェアが検証可能でないことを示すように、ステータスレジスタを設定するか、そうでなければアプリケーションプロセッサ102に信号を送る。416において、ブロックについて生成されたハッシュが予想ハッシュと一致すると判断したことに応じて、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアが検証可能であることを示すようにステータスレジスタを設定する。410において、セキュリティプロセッサ108が、ファームウェアまたはリカバリファームウェアが検証可能であることを示すようにステータスレジスタを設定した後に、このブロックがチェックされるべき最後のブロックであると判断した場合、セキュリティプロセッサ108は、ファームウェアまたはリカバリファームウェアが検証可能であることを示す信号をアプリケーションプロセッサ102に送る。
場合によっては、セキュリティプロセッサ108は、セキュリティプロセッサ108がファームウェアを検証しているか、リカバリファームウェアを検証しているか、ディープスリープからブートしているか、リセットからブートしているかに応じて、確率的検証しきい値を変更、または、ファームウェアもしくはリカバリファームウェアのブロックに割り当てられた異なる重み付けを使用してもよい。たとえば、場合によっては、セキュリティプロセッサ108は、リカバリブート中にはリカバリファームウェアのすべてのブロックをチェックしてもよく、そのブロックをチェックする見込みを指定する、各ブロックに割り当てられた重み付けは、他のすべてのブートまたはレジューム動作について同一であってもよい。
ルート鍵を含むファームウェアまたはリカバリファームウェアのブロック等の、リカバリ動作に影響を与えないであろう通常ブートによって使用されるいくつかのブロックがある。リカバリブート時にこれらのブロックをスキップすることにより、リカバリ動作のセキュリティを低下させることなく、より広範なシナリオからのリカバリが可能になるであろう。ファームウェアに保持されている検証データテーブルは、リカバリブート時にブロックをチェックする見込みを、またはブロックがリカバリによって使用されないことを示すフラグを、追加で指定することができる。
アプリケーションプロセッサ102は、リカバリファームウェアを実行すると、セキュリティプロセッサ108がスキップした任意のブロックをなおもチェックし、任意でユーザに対して警告を表示することができる。これは、リカバリブートをブロックすることなく通常モードブートの問題を診断するのに役立ち得る。
ルート鍵、または、ファームウェアの読み書き可能部分を検証する読出専用ファームウェアの部分等の、ディープスリープからのレジュームに影響を与えない、通常ブートによって使用されるいくつかのブロックがある。レジューム時にこれらのブロックをスキップすることで、セキュリティを低下させることなくレジューム時間を改善することができる。
図5は、ファームウェアおよびリカバリファームウェアのセキュアな検証を実行するように構成されたコンピューティングデバイスを示す概念図である。図5は、任意の種類のコンピューティングデバイス、クライアントデバイス、携帯電話、タブレット、ウェアラブル、車両、通信、エンターテイメント、ゲーム、メディア再生、および/またはその他の種類のデバイスであってもよい、一例としてのコンピューティングデバイス500を示す。
コンピューティングデバイス500は、WLAN内のデバイス間で伝達されるデータ、受信中のデータ、ブロードキャストが予定されているデータ、データのデータパケット、デバイス間で同期されたデータなどのようなデバイスデータ506の有線および/または無線通信を可能にする通信デバイス510を含む。デバイスデータは、任意の種類の通信データ、ならびにデバイス上で実行されるアプリケーションによって生成されたオーディオ、ビデオ、および/または画像データを含み得る。通信デバイス510はまた、セルラー電話通信および/またはネットワークデータ通信のためのトランシーバを含み得る。
コンピューティングデバイス500はまた、デバイス、データネットワーク(たとえばメッシュネットワーク、外部ネットワークその他)、およびその他のデバイスの間の接続および/または通信リンクを提供するデータネットワークインターフェイス等の、入出力(I/O)インターフェイス512を含む。I/Oインターフェイスを使用して、デバイスを、任意の種類のコンポーネント、周辺機器、および/またはアクセサリデバイスに結合することができる。I/Oインターフェイスはまた、デバイスへのユーザ入力、任意の種類の通信データ、ならびに任意のコンテンツおよび/またはデータソースから受信したオーディオ、ビデオ、および/または画像データ等の、任意の種類のデータ、メディアコンテンツ、および/または入力を受信するときに経由することができるデータ入力ポートを含む。
コンピューティングデバイス500はまた、オーディオデバイス520のためのオーディオデータを生成、および/またはディスプレイデバイス522のためのディスプレイデータを生成する、オーディオおよび/またはビデオシステム518を含む。オーディオデバイス520および/またはディスプレイデバイス522は、デジタル写真の画像コンテンツ等の、オーディオ、ビデオ、ディスプレイ、および/または画像データを処理、表示、および/またはそうでなければレンダリングする、任意のデバイスを含む。実装形態において、オーディオデバイスおよび/またはディスプレイデバイスは、一例としてのコンピューティングデバイス500に一体化された構成要素である。これに代わるものとして、オーディオデバイスおよび/またはディスプレイデバイスは、一例としてのデバイスの外部の周辺構成要素である。
コンピューティングデバイス500は、プロセッサ102の一例としてのアプリケーションプロセッサ502と、セキュリティプロセッサ108の一例としてのセキュリティプロセッサ508とを含む処理システム514を含む。処理システム514の構成要素は、少なくとも部分的にハードウェアで実現されてもよく、たとえば、実行可能な命令を処理する任意の種類のマイクロプロセッサ、コントローラなどを用いて実現されてもよい。処理システムは、集積回路、プログラマブルロジックデバイス、1つ以上の半導体を使用して形成されたロジックデバイスの構成要素を含んでいてもよく、シリコンおよび/またはハードウェアにおけるその他の実装形態、たとえばシステムオンチップ(SoC)として実現されるプロセッサおよびメモリシステムを含んでいてもよい。デバイスは、ソフトウェア、ハードウェア、ファームウェア、または処理および制御回路で実装し得る固定論理回路のうちのいずれか1つまたは組み合わせで実現されてもよい。コンピューティングデバイス500はさらに、デバイス内のさまざまな構成要素を結合する任意の種類のシステムバスまたはその他のデータおよびコマンド転送システムを含み得る。システムバスは、さまざまなバス構造およびアーキテクチャ、ならびに制御およびデータラインのうちのいずれか1つまたは組み合わせを含み得る。
コンピューティングデバイス500はまた、コンピューティングデバイスによるアクセスが可能でありかつデータおよび実行可能命令(たとえばソフトウェアアプリケーション、モジュール、プログラム、機能など)の持続的記憶を提供するデータ記憶装置等の、コンピュータ読取可能ストレージメモリ516を含む。本明細書に記載のコンピュータ読取可能ストレージメモリは、伝搬信号を除外する。コンピュータ読取可能ストレージメモリの例は、揮発性メモリおよび不揮発性メモリ、固定およびリムーバブルメディアデバイス、ならびにコンピューティングデバイスアクセスのためにデータを保持する任意の適切なメモリデバイスまたは電子データストレージを含む。コンピュータ読取可能ストレージメモリは、RAM、ROM、フラッシュメモリ、およびさまざまなメモリデバイス構成の他の種類のストレージメモリの、さまざまな実装形態を含み得る。
コンピュータ読取可能ストレージメモリ516は、ストレージ104の一例としてのストレージコンポーネント504と、メモリ106の一例としてのメモリコンポーネント506とを含む。ストレージコンポーネント504は、カーネル、ルートファイルシステム、または他のオペレーティングシステム関連ソフトウェアを格納し得る。メモリ506は、カーネル、ルートファイルシステム、および他のオペレーティングシステム関連ソフトウェアをロードし実行する前提条件としてコンピューティングデバイス500をブートするためのファームウェアおよびリカバリファームウェアを格納し得る。
コンピューティングデバイス500は、メモリ506に格納されたファームウェアおよびリカバリファームウェアのセキュアな検証を実行するように構成される。セキュリティプロセッサ508は、ファームウェアおよびリカバリファームウェアと関連付けられた、生成されたハッシュ値を、(たとえばメモリ506に格納された)予想ハッシュ値と比較する。生成されたハッシュ値と予想ハッシュ値とが一致する場合、アプリケーションプロセッサ502は、検証されたファームウェアまたはリカバリファームウェアを実行するようにアプリケーションプロセッサに指示してもよい。しかしながら、生成されたハッシュ値と予想ハッシュ値とが一致しない場合、アプリケーションプロセッサ502はファームウェアまたはリカバリファームウェアの実行を控えてもよく、コンピューティングデバイス500はシャットダウンしてもよく、または、先に述べたように、アプリケーションプロセッサ502はファームウェアまたはリカバリファームウェアを再検証するようにセキュリティプロセッサ508に命令してもよい。
説明し易くするために以下のシナリオではラップトップであるコンピューティングデバイス500のいくつかのユースケースについて検討する。通常のユーザは、コンピューティングデバイス500を購入し最初にコンピューティングデバイス500にログインする場合がある。ユーザが、第2のデバイス(たとえば携帯電話)を介して遠隔(たとえば2要素)認証サービスに加入する場合、第2のデバイスは、コンピューティングデバイス500がファームウェアまたはリカバリファームウェア検証を実行するよう遠隔から要求したことに応じて、ユーザが完全に検証されたラップトップにログインしようとしているか否かを確認できる。ユーザは、サービスが検証を必要とするか否かを、たとえば、「ファームウェアを完全に検証したデバイスにだけログインさせて欲しい」というオプションに登録することで、制御することができる。このように、開発者モードを可能にする攻撃者がファームウェアの破損バージョンをインストールできるとしても、または、コンピューティングデバイス500上のユーザのセキュリティクレデンシャルをリセットできるとしても、攻撃後にユーザがコンピューティングデバイス500にログインすると、サービスは、コンピューティングデバイス500を新たなデバイスと認識し2要素認証処理を受ける。
エンタープライズ登録プロセスにおいて、コンピューティングデバイス500は、説明した検証技術を使用してデバイスの完全性を保証するために以下のステップを実行することができる。エンタープライズ登録プロセスを担当する登録サーバは、セキュリティプロセッサ508にクエリして、マザーボード識別子(たとえばBoardID)およびセキュリティプロセッサ508によって取得された検証結果(たとえば生成されたハッシュ値、検証結果)を得ることができる。
生成されたハッシュ値または検証結果が、ファームウェアまたはリカバリファームウェアのすべてのブロックよりも少ないブロックが検証されたことを示す場合、登録サーバは、フルファームウェア検証を実行することにより、リセットおよびリブートするようにアプリケーションプロセッサ502に指示してもよい。こうして、フル検証されたファームウェアのみが登録プロセスへの参加が許可されることを保証する。
マザーボード識別子が認証された製造番号ではない場合、または生成されたハッシュ値が登録サーバに格納された予想ハッシュ値ではない場合、登録サーバは、エンタープライズネットワーク上へのコンピューティングデバイス500の登録を拒否してもよい(たとえば、これは、製造前デバイスがどうにかして消費者に出荷された場合に起こり得る)。
ファームウェアの検証に応じて、登録サーバは、ユーザのログインクレデンシャルを取得し、2要素認証または何らかの他の認証プロセスを実行してログインを終了する。このようにして、ユーザおよび登録サーバは、コンピューティングデバイス500が危険に晒された場合に、スヌープされ攻撃者と共有される可能性があるログインクレデンシャルの提供前に、コンピューティングデバイス500が完全に検証されたデバイスであることを確認することができる。
いくつかの例において、登録サーバは、将来のシステムブートがエンタープライズポリシーに従って検証される(またはされない)ことを保証するためにコンピューティングデバイス500のファームウェア管理パラメータを自動的に構成してもよい。場合によっては、セキュリティプロセッサ508がファームウェア管理パラメータを正確に証明できない限り、登録サーバは登録を終了してもよい。加えて、登録サーバは、単にファームウェア管理パラメータを消去することで、コンピューティングデバイス500を登録解除することができる。本開示のさまざまな好ましい実施形態が上記説明に記載され図面に示されているが、本開示はこれに限定されず以下の請求項の範囲内で実行されるように多様に実施され得ることを明確に理解されたい。上記説明から、以下の請求項の範囲が定める本開示の精神および範囲から逸脱することなくさまざまな変更を行い得ることが明らかであろう。
開発者に対しては、コンピューティングデバイス500を、オペレーティングシステムおよび/またはファームウェアを開発者が自在に変更できるように、構成することができる。コンピューティングデバイス500は、オペレーティングシステムタスクを介してオペレーティングシステム開発者モードに自動的に入ることができる。オペレーティングシステム開発者モードは、オペレーティングシステムの変更は許可するがファームウェアまたはリカバリファームウェアの変更は許可しないようにしてもよい。ファームウェア開発者モードにおいて、コンピューティングデバイス500は、書込保護された部分を含めてメモリ506の内容を消去および変更することができる。オペレーティングシステム開発者モードのいずれかにおいて、セキュリティプロセッサ508は、ストレージ504に格納されたデータの復号鍵を含む、セキュリティプロセッサ508の不揮発性メモリに格納された秘密を消去してもよい。場合によっては、セキュリティプロセッサ508のファームウェア管理パラメータが、セキュリティプロセッサ508が制御するファームウェアまたは秘密の変更を防止してもよい。しかしながら、他の場合において、コンピューティングデバイス500は、オペレーティングシステムまたはファームウェア開発者モードが有効にされると、カスタムファームウェア管理パラメータを受けカスタムファームウェア管理パラメータをセキュリティプロセッサ508に書き込むように構成されてもよい。ファームウェア管理パラメータの変更に伴って、コンピューティングデバイス500を、ファームウェアまたはリカバリファームウェアの検証の実行を(たとえばフルまたは確率的検証チェックを回避することによって)控えるように構成することができるが、セキュリティプロセッサ508は、ファームウェアまたはリカバリファームウェアがチェックされなかったことを報告してもよく、そうして、コンピューティングデバイス500にログインする新たなユーザがなおも(たとえば2要素認証によって)未検証のデバイスに警告されてもよい。
コンピューティングデバイス500のどの所有者ユーザも、少なくとも最初のログイン中に、コンピューティングデバイス500のためのファームウェア管理パラメータを構成する能力を有し得る。このようにして、通常のユーザは、オペレーティングシステムまたはファームウェア開発者モードを無効化し、任意で異なるブート検証レベルから選択することができる(たとえばより高いまたはより低いレベルのブート検証を指定する)。
いくつかの例において、コンピューティングデバイス500は、ユーザがファームウェア管理パラメータを変更するために必要なパスワードを指定することができるインターフェイスを提供する。他の場合において、コンピューティングデバイス500は、ユーザがファームウェア管理パラメータを変更することを望むのであれば望んだときにパスワードを検索できるように、(たとえばクラウドコンピューティング環境において)ユーザのためのパスワードを生成しユーザのアカウントにパスワードをアップロードしてもよい。
コンピューティングデバイス500が製造されるとき、製造者は、モデル固有のBoardIDをセキュリティプロセッサ108の不揮発性メモリに格納するように、コンピューティングデバイス500を構成してもよい。BoardIDは、セキュリティプロセッサファームウェアの特定のデバイスモデルへのリリースのロック、遠隔アクセスサーバのロック解除などのために使用されてもよい。予想されるBoardIDは、ファームウェアの読出専用部分のヘッダに含まれていてもよい。コンピューティングデバイス500は、予想されるBoardIDが、セキュリティプロセッサ508内に予めプログラムされたBoardIDと一致することを検証するように構成されてもよい。
メモリ506に格納された他のデータは、デバイスごとに異なっている可能性があり、ファームウェアまたはリカバリファームウェアが検証される方法と同様の方法で検証されてもよい。セキュリティプロセッサ508は、たとえば、セキュリティプロセッサ508のボード間での交換を防ぐために、またはあるデバイスが間違った構成に見えるようにこのデータを修正するのを防ぐために、このデータも保護するように構成されてもよい。
上記他のデータは、異なる識別バイトシーケンスを有しサブ鍵を有しないヘッダセクションと、モデル固有のデータを含むボディセクションとを含み得る。セキュリティプロセッサ508は、ハードウェア識別子、サービスタグ、ワイヤレスアクセスノード較正またはシリアルデータなどを検証してもよい。セキュリティプロセッサ508は、上記他のデータの生成されたハッシュを予想ハッシュと比較し、2つの値が一致する場合に上記他のデータを検証してもよい。
製造中、このデバイス固有の検証データを、工場ファイナライズステップにおいて書込保護が有効にされる直前に、メモリ506の書込保護可能領域に格納することができる。上記他のデータは、デバイスごとに異なり、コンピューティングデバイス500の製造以来データは変更されていないことを確認するためにのみチェックされる必要があるので、ヘッダまたはボディに対する署名は存在しない可能性がある。このデータのハッシュは、データがメモリ506に書き込まれた後の、工場ファイナライズステップの間に、セキュリティプロセッサ508に格納することができる。
本開示のさまざまな好ましい実施形態が上記説明に記載され図面に示されているが、本開示はこれに限定されず以下の請求項の範囲内で実行されるように多様に実施され得ることを明確に理解されたい。上記説明から、以下の請求項の範囲が定める本開示の精神および範囲から逸脱することなくさまざまな変更を行い得ることが明らかであろう。

Claims (15)

  1. リカバリモードと非リカバリモードとを有するコンピューティングシステムであって、
    アプリケーションプロセッサと、
    前記非リカバリモードにおいて実行されるファームウェアおよび前記リカバリモードにおいて実行されるリカバリファームウェアを含むメモリと、
    セキュリティプロセッサとを備え、前記セキュリティプロセッサは、前記アプリケーションプロセッサが前記ファームウェアまたは前記リカバリファームウェアを実行する条件として、前記非リカバリモードにおける前記ファームウェアの検証または前記リカバリモードにおける前記リカバリファームウェアの検証を、
    前記非リカバリモードにおいて、前記ファームウェアが保持する前記ファームウェアの予想ハッシュを決定し、前記予想ハッシュはコンパイル時に前記ファームウェアに埋め込まれ、
    前記非リカバリモードにおいて、前記ファームウェアを保持する前記メモリの1つ以上のブロックに適用されたセキュアなハッシュ関数を表す、前記ファームウェアの生成されたハッシュを決定し、
    前記非リカバリモードにおいて、前記ファームウェアの前記予想ハッシュが前記ファームウェアの前記生成されたハッシュと一致するか否かに基づいて前記ファームウェアを検証する
    ことによるか、または、
    前記リカバリモードにおいて、前記リカバリファームウェアが保持する前記リカバリファームウェアの予想ハッシュを決定し、
    前記リカバリモードにおいて、前記リカバリファームウェアを保持する前記メモリの1つ以上のブロックに適用された前記セキュアなハッシュ関数を表す、前記リカバリファームウェアの生成されたハッシュを決定し、
    前記リカバリモードにおいて、前記リカバリファームウェアの前記予想ハッシュが前記リカバリファームウェアの前記生成されたハッシュと一致するか否かに基づいて前記リカバリファームウェアを検証する
    ことにより、行うように構成される、コンピューティングシステム。
  2. 前記セキュリティプロセッサはさらに、前記ファームウェアまたは前記リカバリファームウェアの前記生成されたハッシュを生成するように構成されている、請求項1に記載のコンピューティングシステム。
  3. 記アプリケーションプロセッサは、前記ファームウェアまたは前記リカバリファームウェアの前記生成されたハッシュを生成するように構成されている、請求項1または2に記載のコンピューティングシステム。
  4. 前記アプリケーションプロセッサは、前記コンピューティングシステムの最初のブートに続いて前記リカバリファームウェアを検証するように構成されている、請求項1~3のいずれか1項に記載のコンピューティングシステム。
  5. 前記アプリケーションプロセッサで実行されるオペレーティングシステムがバックグラウンドタスクとして前記リカバリファームウェアを検証する、請求項4に記載のコンピューティングシステム。
  6. 前記セキュリティプロセッサは、前記アプリケーションプロセッサが、前記リカバリファームウェアの予想ハッシュが前記リカバリファームウェアの前記生成されたハッシュと一致しないと判断したことに応じて、前記リカバリファームウェアを再検証するように構成されている、請求項4または5に記載のコンピューティングシステム。
  7. 前記ファームウェアは複数のブロックを含み、前記セキュリティプロセッサは、前記複数のブロックのうちの各ブロックについて、ブロックの対応する予想ハッシュが前記ブロックの対応する生成されたハッシュと一致するか否かを判断することにより、前記ファームウェアを検証するように構成されている、請求項1~6のいずれか1項に記載のコンピューティングシステム。
  8. 前記ファームウェアは複数のブロックを含み、前記セキュリティプロセッサは、前記複数のブロックのうちのいくつかのブロックについて、ブロックの対応する予想ハッシュが前記ブロックの対応する生成されたハッシュと一致するか否かを判断することにより、前記ファームウェアを検証するように構成されている、請求項1~7のいずれか1項に記載のコンピューティングシステム。
  9. 前記セキュリティプロセッサは、前記ブロックに割り当てられた重み付けが確率的検証しきい値を満たすという判断に応じて、前記ブロックの前記対応する予想ハッシュが前記ブロックの前記対応する生成されたハッシュと一致するか否かを判断することにより、前記ファームウェアを検証するように構成されている、請求項8に記載のコンピューティングシステム。
  10. 前記セキュリティプロセッサは、前記確率的検証しきい値を乱数発生器を用いて決定するように構成されている、請求項9に記載のコンピューティングシステム。
  11. 前記セキュリティプロセッサは、前記ファームウェアまたは前記リカバリファームウェアを検証する際に前記セキュリティプロセッサに指示するためのオプションを含むファームウェア管理パラメータを保持するように構成されている、請求項1~10のいずれか1項に記載のコンピューティングシステム。
  12. 前記セキュリティプロセッサは、前記ファームウェア管理パラメータを、前記セキュリティプロセッサの内部メモリの書込保護された部分において保持する、請求項11に記載のコンピューティングシステム。
  13. 前記ファームウェア管理パラメータは、前記ファームウェアまたは前記リカバリファームウェアを検証するときに、確率的検証、フル検証、または検証なしのうちのいずれを行うかを、前記セキュリティプロセッサに指示する情報を含む、請求項11または12に記載のコンピューティングシステム。
  14. カバリモードおよび非リカバリモードを有するコンピューティングシステムのセキュリティプロセッサによって実行される方法であって、前記コンピューティングシステムのメモリにファームウェアおよびリカバリファームウェアが格納され、前記ファームウェアは前記非リカバリモードにおいて前記コンピューティングシステムのアプリケーションプロセッサによって実行され、前記リカバリファームウェアは前記リカバリモードにおいて前記アプリケーションプロセッサによって実行され、前記方法は、
    前記セキュリティプロセッサが、前記アプリケーションプロセッサが前記ファームウェアまたは前記リカバリファームウェアを実行する条件として、前記非リカバリモードにおける前記ファームウェアの検証または前記リカバリモードにおける前記リカバリファームウェア検証
    前記非リカバリモードにおいて、前記ファームウェアが保持する前記ファームウェアの予想ハッシュを決定し、前記予想ハッシュはコンパイル時に前記ファームウェアに埋め込まれ、
    前記非リカバリモードにおいて、前記ファームウェアを保持する前記メモリの1つ以上のブロックに適用されたセキュアなハッシュ関数を表す、前記ファームウェアの生成されたハッシュを決定し、
    前記非リカバリモードにおいて、前記ファームウェアの前記予想ハッシュが前記ファームウェアの前記生成されたハッシュと一致するか否かに基づいて前記ファームウェアを検証するか、または、
    前記リカバリモードにおいて、前記リカバリファームウェアが保持する前記リカバリファームウェアの予想ハッシュを決定し、
    前記リカバリモードにおいて、前記リカバリファームウェアを保持する前記メモリの1つ以上のブロックに適用された前記セキュアなハッシュ関数を表す、前記リカバリファームウェアの生成されたハッシュを決定し、
    前記リカバリモードにおいて、前記リカバリファームウェアの前記予想ハッシュが前記リカバリファームウェアの前記生成されたハッシュと一致するか否かに基づいて前記リカバリファームウェアを検証することにより行うステップ
    を含む、方法。
  15. カバリモードおよび非リカバリモードを有するコンピューティングシステムのセキュリティプロセッサによって実行される命令を含むプログラムであって、前記コンピューティングシステムのメモリにファームウェアおよびリカバリファームウェアが格納され、前記ファームウェアは前記非リカバリモードにおいて前記コンピューティングシステムのアプリケーションプロセッサによって実行され、前記リカバリファームウェアは前記リカバリモードにおいて前記アプリケーションプロセッサによって実行され、前記命令は、実行されると、
    前記アプリケーションプロセッサが前記ファームウェアまたは前記リカバリファームウェアを実行する条件として、前記非リカバリモードにおける前記ファームウェアの検証、または前記リカバリモードにおける前記リカバリファームウェア証を
    前記非リカバリモードにおいて、前記ファームウェアが保持する前記ファームウェアの予想ハッシュを決定し、前記予想ハッシュはコンパイル時に前記ファームウェアに埋め込まれ、
    前記非リカバリモードにおいて、前記ファームウェアを保持する前記メモリの1つ以上のブロックに適用されたセキュアなハッシュ関数を表す、前記ファームウェアの生成されたハッシュを決定し、
    前記非リカバリモードにおいて、前記ファームウェアの前記予想ハッシュが前記ファームウェアの前記生成されたハッシュと一致するか否かに基づいて前記ファームウェアを検証するか、または、
    前記リカバリモードにおいて、前記リカバリファームウェアが保持する前記リカバリファームウェアの予想ハッシュを決定し、
    前記リカバリモードにおいて、前記リカバリファームウェアを保持する前記メモリの1つ以上のブロックに適用された前記セキュアなハッシュ関数を表す、前記リカバリファームウェアの生成されたハッシュを決定し、
    前記リカバリモードにおいて、前記リカバリファームウェアの前記予想ハッシュが前記リカバリファームウェアの前記生成されたハッシュと一致するか否かに基づいて前記リカバリファームウェアを検証することとにより行うように前記セキュリティプロセッサを構成する、プログラム。
JP2021532127A 2019-06-10 2019-06-10 ファームウェアのセキュアな検証 Active JP7425797B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2024006881A JP2024050647A (ja) 2019-06-10 2024-01-19 ファームウェアのセキュアな検証

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2019/036405 WO2020251542A1 (en) 2019-06-10 2019-06-10 Secure verification of firmware

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2024006881A Division JP2024050647A (ja) 2019-06-10 2024-01-19 ファームウェアのセキュアな検証

Publications (2)

Publication Number Publication Date
JP2022536817A JP2022536817A (ja) 2022-08-19
JP7425797B2 true JP7425797B2 (ja) 2024-01-31

Family

ID=67138049

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2021532127A Active JP7425797B2 (ja) 2019-06-10 2019-06-10 ファームウェアのセキュアな検証
JP2024006881A Pending JP2024050647A (ja) 2019-06-10 2024-01-19 ファームウェアのセキュアな検証

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2024006881A Pending JP2024050647A (ja) 2019-06-10 2024-01-19 ファームウェアのセキュアな検証

Country Status (6)

Country Link
US (1) US20220179960A1 (ja)
EP (2) EP4318285A3 (ja)
JP (2) JP7425797B2 (ja)
KR (2) KR102513435B1 (ja)
CN (1) CN113168474A (ja)
WO (1) WO2020251542A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220108017A1 (en) * 2019-06-24 2022-04-07 Hewlett-Packard Development Company, L.P. Firmware to restore configurable option
US20230087221A1 (en) * 2020-01-27 2023-03-23 Hewlett-Packard Development Company, L.P. Detection fields of view
US20200226260A1 (en) * 2020-03-27 2020-07-16 Intel Corporation Firmware resiliency mechanism
CN111950014A (zh) * 2020-08-27 2020-11-17 英业达科技有限公司 服务器***启动的安全度量方法、安全度量装置及服务器
US11651077B2 (en) * 2021-01-22 2023-05-16 Dell Products L.P. Systems and methods for providing secured boot and scan for devices with limited access
US11853428B2 (en) * 2021-06-02 2023-12-26 Microsoft Technology Licensing, Llc Firmware policy enforcement via a security processor
US20230006833A1 (en) * 2021-07-01 2023-01-05 Lenovo (Singapore) Pte. Ltd. Ranked hash validation for new software update file
US11669619B2 (en) * 2021-07-27 2023-06-06 Dell Products L.P. System and method of utilizing multiple information handling system firmware on an information handling system
US20240037240A1 (en) * 2022-07-27 2024-02-01 Western Digital Technologies, Inc. Decoupled External Storage Device Booting
TWI807947B (zh) * 2022-08-01 2023-07-01 精英電腦股份有限公司 多顆嵌入式控制器的更新和檢驗方法與其電子設備
DE102023101503A1 (de) 2023-01-23 2024-07-25 Audi Aktiengesellschaft Verfahren zum Starten einer Datenverarbeitungseinrichtung, Datenverarbeitungseinrichtung und Kraftfahrzeug

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014518428A (ja) 2011-07-07 2014-07-28 インテル・コーポレーション Biosフラッシュ攻撃に対する保護および通知
JP2015022521A (ja) 2013-07-19 2015-02-02 スパンション エルエルシー セキュアブート方法、組み込み機器、セキュアブート装置およびセキュアブートプログラム
JP2016197399A (ja) 2015-03-31 2016-11-24 エーオー カスペルスキー ラボAO Kaspersky Lab オペレーティング・システム・リソースに対する機械語のネイティブイメージのアクセス制御のシステム及び方法
US20170085383A1 (en) 2015-09-23 2017-03-23 Dell Products, L.P. Trusted support processor authentication of host bios/uefi
JP2019075000A (ja) 2017-10-18 2019-05-16 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8209542B2 (en) * 2006-12-29 2012-06-26 Intel Corporation Methods and apparatus for authenticating components of processing systems
US7984286B2 (en) * 2008-06-25 2011-07-19 Intel Corporation Apparatus and method for secure boot environment
US8812854B2 (en) * 2009-10-13 2014-08-19 Google Inc. Firmware verified boot
US20120137137A1 (en) * 2010-11-30 2012-05-31 Brickell Ernest F Method and apparatus for key provisioning of hardware devices
CN105324779B (zh) * 2013-04-15 2018-08-28 亚马逊技术有限公司 使用安全存储装置的主机恢复
EP2854066B1 (en) * 2013-08-21 2018-02-28 Nxp B.V. System and method for firmware integrity verification using multiple keys and OTP memory
US9524158B2 (en) * 2015-02-23 2016-12-20 Apple Inc. Managing firmware updates for integrated components within mobile devices
EP3353699A4 (en) * 2015-09-24 2019-04-10 INTEL Corporation TECHNIQUES FOR COORDINATING DEVICE SAFETY
US10318736B2 (en) * 2016-10-31 2019-06-11 Hewlett Packard Enterprise Development Lp Validating operating firmware of a periperhal device
US10353779B2 (en) * 2017-05-05 2019-07-16 Dell Products L.P. Systems and methods for detection of firmware image corruption and initiation of recovery
US11106796B2 (en) * 2018-11-07 2021-08-31 Dell Products L.P. Staging memory for accessory firmware update
US11468170B2 (en) * 2018-12-07 2022-10-11 Intel Corporation Techniques for processor boot-up
WO2020169997A1 (en) * 2019-02-22 2020-08-27 Micron Technology, Inc. Method for improving safety of a component or system running a firmware or a finite state machine
US11809567B2 (en) * 2020-10-21 2023-11-07 Dell Products L.P. System and method of authenticating firmware for an information handling system

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014518428A (ja) 2011-07-07 2014-07-28 インテル・コーポレーション Biosフラッシュ攻撃に対する保護および通知
JP2015022521A (ja) 2013-07-19 2015-02-02 スパンション エルエルシー セキュアブート方法、組み込み機器、セキュアブート装置およびセキュアブートプログラム
JP2016197399A (ja) 2015-03-31 2016-11-24 エーオー カスペルスキー ラボAO Kaspersky Lab オペレーティング・システム・リソースに対する機械語のネイティブイメージのアクセス制御のシステム及び方法
US20170085383A1 (en) 2015-09-23 2017-03-23 Dell Products, L.P. Trusted support processor authentication of host bios/uefi
JP2019075000A (ja) 2017-10-18 2019-05-16 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム

Also Published As

Publication number Publication date
KR20210080463A (ko) 2021-06-30
CN113168474A (zh) 2021-07-23
WO2020251542A1 (en) 2020-12-17
EP4318285A2 (en) 2024-02-07
JP2024050647A (ja) 2024-04-10
JP2022536817A (ja) 2022-08-19
KR20230043235A (ko) 2023-03-30
KR102513435B1 (ko) 2023-03-23
EP4318285A3 (en) 2024-03-13
EP3877883A1 (en) 2021-09-15
US20220179960A1 (en) 2022-06-09

Similar Documents

Publication Publication Date Title
JP7425797B2 (ja) ファームウェアのセキュアな検証
CN109446815B (zh) 基本输入输出***固件的管理方法、装置和服务器
CN111008379B (zh) 电子设备的固件安全检测方法及相关设备
CN106855814B (zh) 管理基本输入输出***设定的***和方法
US20170308705A1 (en) System, device and method for anti-rollback protection of over-the-air updated device images
US8291480B2 (en) Trusting an unverified code image in a computing device
EP3522059B1 (en) Perform security action based on inventory comparison
US20160012234A1 (en) Protecting operating system configuration values
US11030347B2 (en) Protect computing device using hash based on power event
US20190156039A1 (en) Determine Malware Using Firmware
KR20100087336A (ko) 판독전용 영역과 판독/기록 영역, 분리형 매체 구성부품, 시스템 관리 인터페이스, 네트워크 인터페이스를 가진 컴퓨터 기억장치
US20210056207A1 (en) Securing Devices From Unauthorized Software Upgrade
US20240104213A1 (en) Securing node groups
US11347858B2 (en) System and method to inhibit firmware downgrade
US8838952B2 (en) Information processing apparatus with secure boot capability capable of verification of configuration change
US12001827B2 (en) System and method for system-wide firmware downgrade control
JP2018509692A (ja) 選択的なブロックベースの完全性保護技法
WO2024149044A1 (zh) 服务器启动管理***及方法
US20220398320A1 (en) Data sharing system and method for a multi-boot baseboard management controller (bmc)
US20230359741A1 (en) Trusted boot method and apparatus, electronic device, and readable storage medium
US11989305B2 (en) Automated update of a customized secure boot policy
TWI791244B (zh) 監控系統開機之安全裝置及其方法
US20200244461A1 (en) Data Processing Method and Apparatus
US20240169050A1 (en) Verification and/or validation of unreversible information handling system commands
US20240171392A1 (en) Systems and methods for digital retirement of information handling systems

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211215

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20211215

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230110

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230117

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20230417

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230508

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230704

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231003

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20231121

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20231215

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20240119

R150 Certificate of patent or registration of utility model

Ref document number: 7425797

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150