macOS Kernel Extensions

Support HackTricks

基本情報

カーネル拡張(Kext)は、.kext 拡張子を持つ パッケージ であり、macOS カーネル空間に直接ロードされることで、主要なオペレーティングシステムに追加機能を提供します。

要件

明らかに、これは非常に強力であるため、カーネル拡張をロードするのは複雑です。カーネル拡張がロードされるために満たすべき 要件 は次のとおりです:

  • リカバリモードに入るとき、カーネル 拡張がロードされることを許可する必要があります

  • カーネル拡張は、Appleによってのみ付与されるカーネルコード署名証明書で署名されている必要があります。誰が会社とその必要性を詳細にレビューします。

  • カーネル拡張はまた、公証されている必要があります。Appleはそれをマルウェアのチェックができます。

  • 次に、root ユーザーが カーネル拡張をロードできる唯一のユーザーであり、パッケージ内のファイルは rootに属する必要があります

  • アップロードプロセス中、パッケージは 保護された非rootの場所 に準備される必要があります:/Library/StagedExtensionscom.apple.rootless.storage.KernelExtensionManagement の付与が必要です)。

  • 最後に、ロードを試みると、ユーザーは 確認リクエストを受け取ります 。受け入れられた場合、コンピュータは 再起動 されてロードされる必要があります。

ロードプロセス

カタリナでは次のようでした:検証 プロセスは ユーザーランド で発生することに注意することが興味深いです。しかし、com.apple.private.security.kext-management の付与を持つアプリケーションのみが カーネルに拡張をロードするよう要求できますkextcachekextloadkextutilkextdsyspolicyd

  1. kextutil CLI 拡張のロードのための 検証 プロセスを 開始します

  • kextdMachサービス を使用して送信します。

  1. kextd は、署名 などのいくつかのことをチェックします

  • syspolicyd に話しかけて、拡張が ロードできるかどうかを確認します

  1. syspolicyd は、拡張が以前にロードされていない場合、ユーザーにプロンプトを表示します

  • syspolicyd は結果を kextd に報告します

  1. kextd は最終的に カーネルに拡張をロードするよう指示できます

もし kextd が利用できない場合、kextutil は同じチェックを実行できます。

参考文献

Support HackTricks

Last updated