macOSのカーネルの安全な拡張
macOS 11以降、他社製のカーネル拡張機能(kext)は、有効になっていてもカーネル内にオンデマンドで読み込むことができません。代わりに、ブートプロセスで読み込まれるAuxiliary Kernel Collection(AuxKC)に結合されます。Appleシリコン搭載MacではAuxKCの測定値がLocalPolicyに埋め込まれます(それより前のハードウェアでは、AuxKCはデータボリュームに常駐します)。AuxKCを再構築するには、変更内容をカーネルに読み込むためにユーザの承認とmacOSの再起動が必要であり、セキュアブートが「低セキュリティ」に構成されている必要があります。
重要: macOSでは、kextは推奨されなくなりました。kextはオペレーティングシステムの整合性と信頼性を損なうリスクがあるため、Appleではユーザがカーネルの機能拡張を必要としないソリューションを選択することを推奨しています。
Appleシリコン搭載Macのカーネル拡張機能
Appleシリコン搭載Macでは、kextを明示的に有効にする必要があります。それには、起動時に電源ボタンを押したままにしてOne True Recovery(1TR)モードに入ってから、「低セキュリティ」にダウングレードし、カーネル拡張機能を有効にするチェックボックスをオンにします。このアクションでは、管理者パスワードを入力してダウングレードを承認する必要もあります。1TRとパスワードの要件を組み合わせることで、macOS内部を出発点とするソフトウェアのみの攻撃者が、カーネル権限を取得するために悪用できるkextをmacOSに導入することが困難になります。
ユーザがkextの読み込みを承認すると、上記の「ユーザが承認したカーネル拡張機能の読み込み」のフローを使用してkextのインストールが承認されます。上記のフローで使用される承認は、LocalPolicy内のユーザが承認したkextリスト(UAKL)のSHA384ハッシュをキャプチャするためにも使用されます。そのあとカーネル管理デーモン(kmd
)が、AuxKCに含める対象としてUAKLで見つかるkextのみの検証を行います。
システム整合性保護(SIP)が有効になっている場合、各kextの署名はAuxKCに含められる前に検証されます。
SIPが無効な場合、kextの署名は適用されません。
この方法により、Apple Developer Programに参加していないデベロッパやユーザが、署名される前にkextをテストする「セキュリティ制限なし」のフローを実行できます。
AuxKCが作成されたあと、その測定値がSecure Enclaveに送信されて署名され、起動時にiBootで評価できるImage4データ構造に含められます。AuxKC構造の一部として、kext受信確認も生成されます。この受信確認には実際にAuxKCに含められたkextのリストが含まれます。禁止されているkextが検出された場合に、このセットがUAKLのサブセットになり得るからです。LocalPolicyにはAuxKC Image4データ構造のSHA384ハッシュとkext受信確認が含められます。AuxKC Image4ハッシュは、Secure Enclaveで署名された古いAuxKC Image4ファイルが新しいLocalPolicyで起動できないようにするために、iBootによる起動時の追加検証に使用されます。kext受信確認は、Apple Payなどのサブシステムで、現在読み込まれているkextのいずれかがmacOSの信頼性に干渉する可能性があるかどうかを判断するために使用されます。可能性がある場合は、Apple Pay機能が無効にされることがあります。
システム機能拡張
macOS 10.15では、デベロッパがカーネルレベルではなくユーザ領域内で動作するシステム機能拡張をインストールおよび管理することで、macOSの機能を拡張できるようになっています。システム機能拡張は、ユーザ領域で動作することによってmacOSの信頼性とセキュリティが強化されます。kextは元来オペレーティングシステム全体への完全なアクセス権を持ちますが、ユーザ領域で動作する機能拡張には、指定された機能を実行するために必要な特権のみが付与されます。
デベロッパはDriverKit、EndpointSecurity、NetworkExtensionなどのフレームワークを使用して、USBドライバおよびヒューマンインターフェイスドライバ、エンドポイントセキュリティツール(データ損失防止などのエンドポイントエージェント)、VPNツールおよびネットワークツールを開発できます。いずれの場合も、kextを開発する必要はありません。他社製セキュリティエージェントは、これらのAPIが利用されている場合、またはカーネル拡張機能からそれらのAPIに移行するためのしっかりしたロードマップが定められている場合にのみ使用してください。
ユーザが承認したカーネル拡張機能の読み込み
セキュリティを強化するため、macOS 10.13のインストール時またはインストール後にインストールされたカーネル拡張機能を読み込むには、ユーザの同意が必須になっています。このプロセスを「ユーザが承認したカーネル拡張機能の読み込み」と言います。カーネル拡張機能を承認するには、管理者の承認が必要です。以下に該当するカーネル拡張機能の場合は、承認が不要です。
macOS 10.12以前が実行されているときにMacにインストールされた
以前に承認された機能拡張を置き換えるものである
MacがrecoveryOSからブートした場合に利用可能なspctlコマンドラインツールを使用して、ユーザの同意なしで読み込むことが許可されている
モバイルデバイス管理(MDM)構成を使用して読み込むことが許可されている
macOS 10.13.2以降では、ユーザがMDMを使用して、ユーザの同意なしで読み込まれるカーネル拡張機能のリストを指定できます。このオプションを使用するには、macOS 10.13.2を搭載し、Apple School Manager、Apple Business Manager、またはユーザによるMDM登録を介してMDMに登録されているMacが必要です。