Appleシリコン搭載Macのブートプロセス
Appleシリコン搭載Macの電源を入れると、iPhoneやiPadのものと非常によく似たブートプロセスが実行されます。
このチップは信頼チェーンの最初のステップでBoot ROMからコードを実行します。Appleシリコン搭載MacでのmacOSのセキュアブートは、オペレーティングシステムコード自体だけでなく、セキュリティポリシー、および承認されたユーザによって構成されたkext(サポートされていますが推奨されません)も検証します。
LLB(Low Level Bootloader)が起動すると、署名が検証され、ストレージ、ディスプレイ、システム管理、ThunderboltコントローラなどのSoC内コア用のシステムにペアリングされたファームウェアが読み込まれます。LLBは、Secure Enclaveプロセッサによって署名されたファイルであるLocalPolicyの読み込みも行います。LocalPolicyファイルは、ユーザがシステムのブートとランタイムのセキュリティポリシー用に選択した構成を記述したものです。LocalPolicyは他のすべてのブートオブジェクトと同じデータ構造形式ですが、ソフトウェアアップデートのように中央のAppleサーバによって署名されるのではなく、特定のコンピュータのSecure Enclave内でのみ使用できる秘密鍵によってローカルで署名されます。
以前のLocalPolicyのリプレイを防止するため、LLBではSecure Enclaveが接続されたセキュアストレージコンポーネントからアンチリプレイ値をルックアップする必要があります。そのためにSecure Enclave Boot ROMを使用し、LocalPolicyのアンチリプレイ値とセキュアストレージコンポーネントのアンチリプレイ値が一致することを確認します。これにより、低レベルのセキュリティ用に構成されていた可能性のある古いLocalPolicyが、セキュリティのアップグレード後にシステムに再適用されるのを防ぐことができます。その結果、Appleシリコン搭載Macでのセキュアブートでは、オペレーティングシステムのバージョンのロールバックだけでなく、セキュリティポリシーのダウングレードからも保護することができます。
LocalPolicyファイルは、オペレーティングシステムが「完全なセキュリティ」、「低セキュリティ」、「セキュリティ制限なし」のどれに合わせて構成されているかを取得します。
完全なセキュリティ: システムはiOSやiPadOSのように動作し、インストール時に使用可能だった最新のものであることが分かっているソフトウェアのブートのみを許可します。
低セキュリティ: LLBは、オペレーティングシステムにバンドルされている「グローバル」署名を信頼するよう指示されます。これにより、システムが古いバージョンのmacOSを実行することが許可されます。古いバージョンのmacOSには必ず、パッチが適用されていない脆弱性が含まれているため、このセキュリティモードは「低セキュリティ」と呼ばれます。これは、カーネル拡張機能(kext)のブートをサポートするために必要なポリシーレベルでもあります。
セキュリティ制限なし: システムはiBoot以降のグローバル署名検証を使用するという点で「低セキュリティ」のように動作しますが、LocalPolicyの署名に使用されるのと同じ鍵でSecure Enclaveによって署名されている一部のブートオブジェクトを受け入れるべきであることもiBootに通知します。このポリシーレベルは、独自のカスタムXNUカーネルの構築、署名、およびブートを行うユーザをサポートします。
選択されたオペレーティングシステムが「完全なセキュリティ」で実行されていることをLocalPolicyがLLBに示している場合、LLBはiBoot用のパーソナライズされた署名を評価します。「低セキュリティ」または「セキュリティ制限なし」で実行されている場合は、グローバル署名を評価します。署名の検証エラーが発生すると、システムがrecoveryOSでブートして修復オプションが表示されます。
LLBがiBootに引き継ぐと、Secure Neural Engineや常時稼働プロセッサなどのファームウェアなど、macOSにペアリングされたファームウェアが読み込まれます。iBootは、LLBから渡されたLocalPolicyに関する情報も調べます。Auxiliary Kernel Collection(AuxKC)が存在すべきであることをLocalPolicyが示している場合、iBootはそれをファイルシステム上で探して、LocalPolicyと同じ鍵を使ってSecure Enclaveで署名されたことを検証し、そのハッシュがLocalPolicyに保存されているハッシュと一致することを検証します。AuxKCが検証されると、iBootは、ブートカーネルコレクションとAuxKCをカバーするメモリ領域全体をシステムコプロセッサ整合性保護(SCIP)でロックする前に、ブートカーネルコレクションを使用してメモリ内にAuxKCを配置します。ポリシーにAuxKCが存在する必要があることが示されていても、見つからない場合、システムはAuxKCなしでmacOSのブートを続けます。iBootが、署名済みシステムボリューム(SSV)のルートハッシュを検証して、カーネルがマウントするファイルシステムの整合性が完全に検証されることを確認します。