Appleシリコン搭載MacのLocalPolicyファイルの内容
LocalPolicyはSecure Enclaveで署名されたImage4ファイルです。Image4は、ASN.1(Abstract Syntax Notation One)DERでエンコードされたデータ構造形式であり、Appleプラットフォーム上のセキュアブートチェーンオブジェクトに関する情報を記述するために使用されます。Image4ベースのセキュアブートモデルでは、セキュリティポリシーは、中央のApple署名サーバへの署名リクエストによって開始されたソフトウェアインストール時に要求されます。ポリシーが受け入れ可能だった場合、署名サーバは、さまざまな4文字コード(4CC)のシーケンスを含む署名済みのImage4ファイルを返します。これらの署名済みのImage4ファイルと4CCは、起動時にBoot ROMやLLBなどのソフトウェアによって評価されます。
オペレーティングシステム間の所有権の引き渡し
所有者ID鍵(OIK)へのアクセスは、「所有権」と呼ばれます。ポリシーまたはソフトウェアの変更を行ったあと、ユーザがLocalPolicyに再署名できるようにするには、所有権が必要です。OIKは、シールドキー保護(SKP)で説明されているのと同じ鍵階層で保護され、ボリューム暗号鍵(VEK)と同じキー暗号鍵(KEK)で保護されます。これは、通常、ユーザパスワードと、オペレーティングシステムおよびポリシーの測定値の両方によって保護されていることを意味します。Macのすべてのオペレーティングシステムに対応するOIKは1つだけです。そのため、2つ目のオペレーティングシステムをインストールする場合、2つ目のオペレーティングシステムのユーザに所有権を引き渡すには、最初のオペレーティングシステムのユーザからの明示的な同意が必要です。ただし、インストーラが1つ目のオペレーティングシステムから実行されている時点では、2つ目のオペレーティングシステムのユーザはまだ存在していません。オペレーティングシステムのユーザは通常、オペレーティングシステムがブートして設定アシスタントが実行されるまで生成されません。そのため、Appleシリコン搭載Macに2つ目のオペレーティングシステムをインストールする際は、次の2つの新しいアクションが必要です:
2つ目のオペレーティングシステム用のLocalPolicyを作成する
所有権を引き渡すために「インストールユーザ」を準備する
インストールアシスタントを実行していて、空のセカンダリーボリューム用のインストールを目的としている場合は、2つ目のボリュームの最初のユーザにするユーザを現在のボリュームからコピーするかどうかを確認するプロンプトが表示されます。ユーザが「はい」と答えた場合、作成される「インストールユーザ」は、実際には選択されたユーザのパスワードとハードウェア鍵から導出されたKEKであり、そのあと2つ目のオペレーティングシステムに渡されるときにOIKを暗号化するために使用されます。そのあと、新しいオペレーティングシステムのSecure EnclaveのOIKにアクセスできるようにするため、2つ目のオペレーティングシステムのインストールアシスタント内から、そのユーザのパスワードの入力が求められます。ユーザがユーザをコピーしないことを選択した場合でも、インストールユーザは同じ方法で作成されますが、ユーザのパスワードではなく空のパスワードが使用されます。この2番目のフローは、特定のシステム管理シナリオ用に存在します。ただし、マルチボリュームインストール構成にして、最も安全な方法で所有権の引き渡しを実行したい場合は、必ず、1つ目のオペレーティングシステムから2つ目のオペレーティングシステムにユーザをコピーする手順を選択する必要があります。
Appleシリコン搭載MacのLocalPolicy
Appleシリコン搭載Macの場合、ローカルのセキュリティポリシー管理は、Secure Enclaveで実行されているアプリケーションに委任されています。このソフトウェアは、ユーザの資格情報とプライマリCPUのブートモードを利用して、だれがどのブート環境からセキュリティポリシーを変更できるかを決定できます。これにより、悪質なソフトウェアがダウングレードしてより多くの特権を取得することによって、ユーザに対するセキュリティポリシー管理を使用するのを防ぐことができます。
LocalPolicyのマニフェストのプロパティ
LocalPolicyファイルには、ボードまたはモデルID(BORD)、特定のAppleチップ(CHIP)の指定、Exclusive Chip Identification(ECID)など、ほとんどすべてのImage4ファイルで見つかるアーキテクチャ4CCが含まれています。ただし、以下の4CCではユーザが構成できるセキュリティに絞って説明します。
注記: AppleはペアリングされたOne True recoveryOS(1TR)という用語を使用して、物理的な電源ボタンを1回押したままにしてペアリングされたrecoveryOSがブートすることを示しています。これは、通常のrecoveryOSブート(NVRAMを使用してまたは2回押したままにして発生する、または起動時にエラーが発生したときに発生する可能性がある)とは異なります。特定の方法で物理的にボタンを押すことで、macOSに侵入したソフトウェアのみの攻撃者がそのブート環境に到達できないという信頼性が高まります。
LocalPolicyのノンスハッシュ(lpnh)
型: OctetString (48)
変更可能な環境: 1TR、recoveryOS、macOS
説明:
lpnh
はLocalPolicyのリプレイ防止に使用されます。これは、セキュアストレージコンポーネントに格納されているLocalPolicyノンス(LPN)のSHA384ハッシュで、Secure Enclave Boot ROMまたはSecure Enclaveを使用してアクセスできます。生のアンチリプレイ値はアプリケーションプロセッサからは見えず、sepOSのみから見ることができます。以前にキャプチャしたことのあるLocalPolicyが有効であることをLLBに確信させたい攻撃者は、リプレイしたいLocalPolicyで見つかったものと同じlpnh
値にハッシュする値をセキュアストレージコンポーネントに配置する必要があります。通常、システム上で有効なLPNは1つですが、ソフトウェアのアップデート中は2つが同時に有効であるため、アップデートエラーが発生した場合に古いソフトウェアのブートにフォールバックする可能性があります。オペレーティングシステムのLocalPolicyが変更されると、すべてのポリシーは、セキュアストレージコンポーネントにある新しいLPNに対応する新しいlpnh値で再署名されます。この変更は、ユーザがセキュリティ設定を変更するか、それぞれ新しいLocalPolicyを使用する新しいオペレーティングシステムを作成したときに行われます。
リモートポリシーのノンスハッシュ(rpnh)
型: OctetString (48)
変更可能な環境: 1TR、recoveryOS、macOS
説明:
rpnh
はlpnh
と同じように動作しますが、「探す」の登録の状態の変更時など、リモートポリシーがアップデートされたときにのみアップデートされます。この変更は、ユーザがMacの「探す」の状態を変更したときに行われます。
recoveryOSのノンスハッシュ(ronh)
型: OctetString (48)
変更可能な環境: 1TR、recoveryOS、macOS
説明:
ronh
はlpnhと同じように動作しますが、システムrecoveryOSのLocalPolicyでのみ見つかります。ソフトウェアのアップデート時など、システムrecoveryOSがアップデートされたときにアップデートされます。lpnh
およびrpnh
とは別のアンチリプレイ値が使用されるため、「探す」によってデバイスが無効な状態になったときに、システムrecoveryOSをブート可能にしたまま、LPNおよびRPNをセキュアストレージコンポーネントから削除することにより、既存のオペレーティングシステムを無効にすることができます。このようにして、システム所有者が「探す」アカウントに使用されるiCloudパスワードを入力することによってシステムに対する制御を証明したときに、オペレーティングシステムを再度有効にすることができます。この変更は、ユーザがシステムrecoveryOSをアップデートしたか、新しいオペレーティングシステムを作成したときに行われます。
次ステージImage4マニフェストハッシュ(nsih)
型: OctetString (48)
変更可能な環境: 1TR、recoveryOS、macOS
説明: nsihフィールドは、ブートされたmacOSを記述するImage4マニフェストデータ構造のSHA384ハッシュを表します。macOSのImage4マニフェストには、iBoot、静的信頼キャッシュ、デバイスツリー、ブートカーネルコレクション、署名済みシステムボリューム(SSV)のボリュームルートハッシュなどのすべてのブートオブジェクトの測定値が含まれています。LLBは、特定のmacOSをブートするように指示されている場合、iBootに添付されたmacOS Image4マニフェストのハッシュが、LocalPolicyの
nsih
フィールドでキャプチャされたものと一致することを保証するように設計されています。このようにして、nsih
は、ユーザがLocalPolicyを作成したオペレーティングシステムのユーザの意図をキャプチャします。ユーザは、ソフトウェアのアップデートを実行するときに、暗黙的にnsih
値を変更します。
Cryptex1 Image4マニフェストハッシュ(spih)
型: OctetString (48)
変更可能な環境: 1TR、recoveryOS、macOS
説明:
spih
フィールドは、Cryptex1 Image4マニフェストデータ構造のSHA384ハッシュを表します。Cryptex1 Image4マニフェストには、そのcryptexの測定値、ファイルシステムシール、関連する信頼キャッシュが含まれています。macOSの起動中にXNUカーネルとページ保護レイヤーによって、Cryptex1 Image4マニフェストハッシュが、iBootがLocalPolicyのspih
フィールドから公開した内容と一致することが確認されます。ユーザは、緊急セキュリティ対応をインストールするかソフトウェアアップデートを実行する際にspih
値を暗黙的に変更することになります。Cryptex1 Image4マニフェストハッシュは、次ステージImage4マニフェストハッシュとは無関係にアップデートできます。
Cryptex1生成(stng)
型: 64ビットの符号なし整数
変更可能な環境: 1TR、recoveryOS、macOS
説明:
stng
フィールドは、LocalPolicyでCryptex1 Image4マニフェストハッシュが最後にいつアップデートされたかを表すカウンタ値で、受信Cryptexを適用するためにページ保護レイヤーがローカルポリシーを評価しているときに、lpnh
の代わりにアンチリプレイ値を提供します。ユーザは、緊急セキュリティ対応またはソフトウェアアップデートをインストールする際にstng
値を暗黙的に増やすことになります。
AuxKC(Auxiliary Kernel Collection)ポリシーのハッシュ(auxp)
型: OctetString (48)
変更可能な環境: macOS
説明:
auxp
は、ユーザが承認したkextリスト(UAKL)ポリシーのSHA384ハッシュです。これは、ユーザが承認したkextのみがAuxKCに含まれることを保証するために、AuxKCの生成時に使用されます。smb2
はこのフィールドを設定するための前提条件です。ユーザは、「システム設定」の「プライバシーとセキュリティ」(macOS 13以降)または「システム環境設定」の「セキュリティとプライバシー」パネル(macOS 12以前)からkextを承認してUAKLを変更する際に、auxp
値を暗黙的に変更することになります。
AuxKC(Auxiliary Kernel Collection)のImage4マニフェストのハッシュ(auxi)
型: OctetString (48)
変更可能な環境: macOS
説明: システムは、UAKLハッシュがLocalPolicyの
auxp
フィールドで見つかるものと一致することを検証したあと、AuxKCがLocalPolicy署名を担当するSecure Enclaveプロセッサアプリケーションによって署名されることを要求します。次に、以前に署名されたAuxKCが複数混在していて、ブート時にそれらがオペレーティングシステムと照合される可能性を回避するため、AuxKC Image4マニフェスト署名のSHA384ハッシュがLocalPolicyに配置されます。iBootは、LocalPolicyでauxi
フィールドを見つけると、ストレージからAuxKCを読み込んで、その署名を検証しようとします。また、AuxKCに添付されたImage4マニフェストのハッシュが、auxi
フィールドで見つかった値と一致することも検証します。何らかの理由でAuxKCの読み込みに失敗した場合、システムはこのブートオブジェクトなしで、したがって他社製のkextを読み込まずに、ブートを続行します。auxp
フィールドは、LocalPolicyのauxiフィールドを設定する場合の前提条件です。ユーザは、「システム設定」の「プライバシーとセキュリティ」(macOS 13以降)または「システム環境設定」の「セキュリティとプライバシー」パネル(macOS 12以前)からkextを承認してUAKLを変更する際に、auxi
値を暗黙的に変更することになります。
AuxKC(Auxiliary Kernel Collection)受信確認ハッシュ(auxr)
型: OctetString (48)
変更可能な環境: macOS
説明:
auxr
はAuxKC受信確認のSHA384ハッシュであり、AuxKCに含まれていたkextの正確なセットを示します。kextは、攻撃に使用されることが分かっている場合は、ユーザが承認したものであってもAuxKCから除外できるため、AuxKC受信確認はUAKLのサブセットでもかまいません。さらに、ユーザとカーネルの境界を破るために使用できる一部のkextは、Apple Payを使用できなかったり4KおよびHDRコンテンツを再生できなかったりといった機能の低下につながる可能性があります。これらの機能を希望するユーザは、より制限の厳しいAuxKCを含めることを選択します。auxp
フィールドは、LocalPolicyのauxr
フィールドを設定する場合の前提条件です。ユーザは、「システム設定」の「プライバシーとセキュリティ」(macOS 13以降)または「システム環境設定」の「セキュリティとプライバシー」パネル(macOS 12以前)から新しいAuxKCを構築する際に、auxr
値を暗黙的に変更することになります。
CustomOS Image4マニフェストハッシュ(coih)
型: OctetString (48)
変更可能な環境: 1TR
説明:
coih
はCustomOS Image4マニフェストのSHA384ハッシュです。iBootは、制御を移すためにXNUカーネルではなくそのマニフェストのペイロードを使用します。ユーザは、1TRでkmutil configure-boot
コマンドラインツールを使用するときに、暗黙的にcoih
の値を変更します。
APFSボリュームグループUUID(vuid)
型: OctetString (16)
変更可能な環境: 1TR、recoveryOS、macOS
説明:
vuid
は、カーネルがルートとして使用すべきボリュームグループを示します。このフィールドは主に情報提供用でありセキュリティの制約には使用されません。このvuid
は、新しいオペレーティングシステムインストールの作成時にユーザによって暗黙的に設定されます。
キー暗号鍵(KEK)グループUUID(kuid)
型: OctetString (16)
変更可能な環境: 1TR、recoveryOS、macOS
説明:
kuid
は、ブートされたボリュームを示します。キー暗号鍵は、通常はデータ保護のために使用されています。LocalPolicyごとに、LocalPolicy署名鍵を保護するために使用されます。このkuid
は、新しいオペレーティングシステムインストールの作成時にユーザによって暗黙的に設定されます。
ペアリングされたrecoveryOS Trusted Boot Policy Measurement(prot)
型: OctetString (48)
変更可能な環境: 1TR、recoveryOS、macOS
説明: ペアリングされたrecoveryOSのTrusted Boot Policy Measurement(TBPM)は、アンチリプレイ値を除く、LocalPolicyのImage4マニフェストに対する特殊な反復SHA384ハッシュ計算で、経時的に一貫した測定値を出力する目的で実行されます(
lpnh
のようなアンチリプレイ値は頻繁にアップデートされるため)。prot
フィールドは各macOS LocalPolicyにのみ見つかり、macOS LocalPolicyに対応するrecoveryOS LocalPolicyを示すペアリングを提供します。
Secure Enclaveで署名済みかどうかを示すrecoveryOSローカルポリシー(hrlp)
型: ブール値
変更可能な環境: 1TR、recoveryOS、macOS
説明:
hrlp
は、prot
値(上記)が、Secure Enclaveで署名されたrecoveryOS LocalPolicyの測定値かどうかを示します。そうでない場合、recoveryOSのLocalPolicyは、macOSのImage4ファイルなどに署名するAppleオンライン署名サーバによって署名されます。
ローカルオペレーティングシステムのバージョン(love)
型: ブール値
変更可能な環境: 1TR、recoveryOS、macOS
説明:
love
はLocalPolicyが作成されるOSバージョンを示します。バージョンは、LocalPolicy作成中に次の状態のマニフェストから取得され、recoveryOSのペアリング制限を適用するために使用されます。
安全なマルチブート(smb0)
型: ブール値
変更可能な環境: 1TR、recoveryOS
説明:
smb0
が存在していてtrueの場合は、LLBは、パーソナライズされた署名を要求する代わりに、次ステージImage4マニフェストがグローバルに署名されることを許可します。ユーザはこのフィールドを、起動セキュリティユーティリティまたはbputil
を使用して「低セキュリティ」にダウングレードすることで変更できます。
安全なマルチブート(smb1)
型: ブール値
変更可能な環境: 1TR
説明:
smb1
が存在していてtrueの場合は、iBootは、カスタムのカーネルコレクションなどのオブジェクトがLocalPolicyと同じ鍵でSecure Enclaveで署名されることを許可します。smb0
の指定は、smb1
の指定の前提条件です。ユーザはこのフィールドを、csrutil
やbputil
などのコマンドラインツールを使用して「セキュリティ制限なし」にダウングレードすることで変更できます。
安全なマルチブート(smb2)
型: ブール値
変更可能な環境: 1TR
説明:
smb2
が存在していてtrueの場合は、iBootは、Auxiliary Kernel CollectionがLocalPolicyと同じ鍵でSecure Enclaveで署名されることを許可します。smb0
の指定は、smb2
の指定の前提条件です。ユーザはこのフィールドを、起動セキュリティユーティリティまたはbputil
を使用して、「低セキュリティ」にダウングレードして他社製のkextを有効にすることで変更できます。
安全なマルチブート(smb3)
型: ブール値
変更可能な環境: 1TR
説明:
smb3
が存在していてtrueの場合、デバイスのユーザはシステムのモバイルデバイス管理(MDM)制御に登録されています。このフィールドが存在すると、LocalPolicyで制御するSecure Enclaveプロセッサアプリケーションは、ローカルユーザ認証を要求する代わりにMDM認証を受け入れます。ユーザはこのフィールドを、起動セキュリティユーティリティまたはbputil
を使用して、他社製のkextおよびソフトウェアアップデートの管理対象制御を有効にすることで変更できます。(macOS 11.2以降では、現在のセキュリティモードが「完全なセキュリティ」の場合、MDMで最新バージョンのmacOSへのアップデートを開始することもできます。)
安全なマルチブート(smb4)
型: ブール値
変更可能な環境: macOS
説明:
smb4
が存在していてtrueの場合、デバイスは、Apple School Manager、Apple Business Manager、またはApple Business Essentialsを使用してオペレーティングシステムのMDM制御に登録されています。このフィールドが存在すると、Secure Enclaveアプリケーションを制御するLocalPolicyは、ローカルユーザ認証を要求する代わりにMDM認証を受け入れます。このフィールドは、デバイスのシリアル番号がそれら3つのサービスのいずれかに表示されていることを検出すると、MDMソリューションによって変更されます。
システム整合性保護(sip0)
型: 64ビットの符号なし整数
変更可能な環境: 1TR
説明:
sip0
は、以前にNVRAMに保存された既存のシステム整合性保護(SIP)ポリシービットを保持します。新しいSIPポリシービットは、LLBではなくmacOSでのみ使用される場合、以下のようなLocalPolicyのフィールドを使用する代わりに、ここに追加されます。ユーザはこのフィールドを、1TRのcsrutil
を使用してSIPを無効にし、「セキュリティ制限なし」にダウングレードすることで変更できます。
システム整合性保護(sip1)
型: ブール値
変更可能な環境: 1TR
説明:
sip1
が存在していてtrueの場合、iBootは、SSVボリュームのルートハッシュの検証に失敗することを許可します。ユーザはこのフィールドを、1TRからcsrutil
またはbputil
を使用することで変更できます。
システム整合性保護(sip2)
型: ブール値
変更可能な環境: 1TR
説明: sip2が存在していてtrueの場合、iBootは、カーネルメモリに書き込み不可のマークを付ける構成可能なテキスト読み取り専用領域(CTRR)ハードウェアレジスタをロックしません。ユーザはこのフィールドを、1TRから
csrutil
またはbputil
を使用することで変更できます。
システム整合性保護(sip3)
型: ブール値
変更可能な環境: 1TR
説明:
sip3
が存在していてtrueの場合、iBootはboot-args NVRAM変数の組み込み許可リストを適用しません。そうしない場合は、カーネルに渡されるオプションをフィルタします。ユーザはこのフィールドを、1TRからcsrutil
またはbputil
を使用することで変更できます。
証明書とRemotePolicy
LocalPolicyの署名キーの作成と管理で説明されているように、LocalPolicyのImage4には、所有者ID証明書(OIC)と組み込みのRemotePolicyも含まれています。