署名済みシステムボリュームのセキュリティ
macOS 10.15では、Appleは、システムコンテンツ専用の分離されたボリュームである、読み取り専用システムボリュームを導入しました。macOS 11以降は、署名済みシステムボリューム(SSV)を含むシステムコンテンツに強力な暗号保護を追加します。SSVは、実行時にシステムコンテンツの整合性を検証し、Appleからの有効な暗号署名のないデータ(コードとコード以外)を拒否するカーネルメカニズムを備えています。iOS 15およびiPadOS 15以降では、iPhoneまたはiPadのシステムボリュームに署名済みシステムボリュームの暗号保護も追加されています。
SSVは、オペレーティングシステムの一部であるAppleソフトウェアの改ざんを防ぐだけでなく、macOSソフトウェアのアップデートの信頼性と安全性を高めます。また、SSVはAPFS(Apple File System)スナップショットを使用するため、アップデートを実行できない場合は、再インストールせずに古いシステムバージョンを復元できます。
導入以来、APFSは、内部ストレージデバイスで非暗号化チェックサムを使用してファイルシステムメタデータの整合性を確保してきました。SSVは、暗号学的ハッシュを追加し、ファイルデータのすべてのバイトを包含するように拡張することによって、整合性メカニズムを強化します。内部ストレージデバイスからのデータ(ファイルシステムのメタデータを含む)は、読み取りパスで暗号学的にハッシュ化されます。そのあと、ハッシュがファイルシステムメタデータの期待値と比較されます。一致しない場合、システムはデータが改ざんされていると見なし、要求元のソフトウェアに返しません。
各SSV SHA256ハッシュは、それ自体がハッシュ化されるメインのファイルシステムメタデータツリーに格納されます。また、ツリーの各ノードはその子のハッシュの整合性を再帰的に検証するため(バイナリハッシュ(Merkle)ツリーと同様)、ルートノードのハッシュ値(シールと呼ばれます)には、SSV内のデータのすべてのバイトが包含されます。つまり、暗号署名がシステムボリューム全体を保護します。
このシールは、macOSのインストールおよびアップデート中にデバイス上のファイルシステムから再計算され、その測定値はAppleが署名した測定値と照合されます。Appleシリコン搭載Macでは、ブートローダーは制御をカーネルに移す前にシールを検証します。Apple T2セキュリティチップおよびIntelプロセッサ搭載Macでは、ブートローダーが測定値と署名をカーネルに転送し、そのあとカーネルがルートファイルシステムをマウントする直前にシールを検証します。いずれの場合も、検証が失敗すると起動プロセスが停止し、ユーザはmacOSを再インストールするように求められます。この手順は、ユーザが低セキュリティモードに入ることを選択し、かつ、署名済みシステムボリュームを無効にすることを個別に選択した場合を除き、ブートするたびに繰り返されます。
iOSおよびiPadOSのソフトウェアアップデート中に、そのシステムボリュームは同様の方法で準備されて再計算されます。iOSとiPadOSのブートローダーは、シールが同じままであり、Appleが署名した値と一致することを検証してから、デバイスがカーネルを起動することを許可します。ブート時に不一致が確認されると、ユーザはデバイスのシステムソフトウェアをアップデートすることを求められます。ユーザが、iOSおよびiPadOSの署名済みシステムボリュームの保護を無効にすることは許可されません。
SSVとコード署名
コード署名は引き続き存在し、カーネルによって適用されます。署名済みシステムボリュームは、内蔵ストレージデバイスからいずれかのバイトが読み取られるときの保護機能を備えています。これに対し、コード署名では、Machオブジェクトが実行可能としてメモリにマップされたときの保護機能を備えています。SSVとコード署名は、両方とも、すべての読み取りパスと実行パスの実行可能コードを保護します。
SSVとFileVault
macOS 11以降では、保管中のシステムコンテンツに対し、同等の保護がSSVによって提供されるため、システムボリュームを暗号化する必要がなくなりました。保管中にファイルシステムに加えられた変更は、読み取られたときにファイルシステムによって検出されます。ユーザがFileVaultをオンにしている場合でも、データボリューム上のユーザのコンテンツは、ユーザが指定したシークレットで暗号化されます。
ユーザがSSVを無効にすることを選択した場合、保存時のシステムは改ざんに対して脆弱になります。この改ざんにより、攻撃者はシステムの次回の起動時に暗号化されたユーザデータを抽出できる可能性があります。したがって、FileVaultがオンになっている場合、システムはユーザがSSVを無効にすることを許可しません。保管中の保護は、一貫した方法で両方のボリュームに対して有効または無効にする必要があります。
macOS 10.15以前では、FileVaultは、ユーザが提供するシークレットで保護された鍵を使用してユーザおよびシステムコンテンツを暗号化することにより、保管中にオペレーティングシステムソフトウェアを保護します。これにより、デバイスに物理的にアクセスできる攻撃者が、システムソフトウェアが含まれているファイルシステムにアクセスしたり実質的に変更したりするのを防ぎます。
SSVとApple T2セキュリティチップを搭載したMac
Apple T2セキュリティチップを搭載したMacでは、macOS自体のみがSSVによって保護されます。T2チップで実行され、macOSを検証するソフトウェアは、セキュアブートによって保護されます。