macOS Kernel Extensions
基本情報
カーネル拡張(Kext)は、.kext
拡張子を持つ パッケージ であり、macOS カーネル空間に直接ロードされることで、主要なオペレーティングシステムに追加機能を提供します。
要件
明らかに、これは非常に強力であるため、カーネル拡張をロードするのは複雑です。カーネル拡張がロードされるために満たすべき 要件 は次のとおりです:
リカバリモードに入るとき、カーネル 拡張がロードされることを許可する必要があります:
カーネル拡張は、Appleによってのみ付与されるカーネルコード署名証明書で署名されている必要があります。誰が会社とその必要性を詳細にレビューします。
カーネル拡張はまた、公証されている必要があります。Appleはそれをマルウェアのチェックができます。
次に、root ユーザーが カーネル拡張をロードできる唯一のユーザーであり、パッケージ内のファイルは rootに属する必要があります。
アップロードプロセス中、パッケージは 保護された非rootの場所 に準備される必要があります:
/Library/StagedExtensions
(com.apple.rootless.storage.KernelExtensionManagement
の付与が必要です)。最後に、ロードを試みると、ユーザーは 確認リクエストを受け取ります 。受け入れられた場合、コンピュータは 再起動 されてロードされる必要があります。
ロードプロセス
カタリナでは次のようでした:検証 プロセスは ユーザーランド で発生することに注意することが興味深いです。しかし、com.apple.private.security.kext-management
の付与を持つアプリケーションのみが カーネルに拡張をロードするよう要求できます:kextcache
、kextload
、kextutil
、kextd
、syspolicyd
kextutil
CLI が 拡張のロードのための 検証 プロセスを 開始します
kextd
に Machサービス を使用して送信します。
kextd
は、署名 などのいくつかのことをチェックします
syspolicyd
に話しかけて、拡張が ロードできるかどうかを確認します。
syspolicyd
は、拡張が以前にロードされていない場合、ユーザーにプロンプトを表示します。
syspolicyd
は結果をkextd
に報告します
kextd
は最終的に カーネルに拡張をロードするよう指示できます
もし kextd
が利用できない場合、kextutil
は同じチェックを実行できます。
参考文献
Last updated