hacktricks/macos-hardening/macos-security-and-privileg.../mac-os-architecture/macos-kernel-extensions.md

6.4 KiB
Raw Blame History

macOSカーネル拡張機能

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

カーネル拡張機能Kextsは、.kext拡張子を持つパッケージであり、メインのオペレーティングシステムに追加の機能を提供するために、macOSカーネルスペースに直接ロードされます。

要件

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

  • リカバリモードに入るときに、カーネル拡張機能のロードが許可される必要があります:
  • カーネル拡張機能は、カーネルコード署名証明書署名されている必要があります。この証明書はAppleによってのみ付与されます。Appleは、会社とその必要性を詳細に審査します。
  • カーネル拡張機能はまた、ノータリゼーションを受ける必要があります。Appleはマルウェアをチェックすることができます。
  • その後、rootユーザーがカーネル拡張機能をロードでき、パッケージ内のファイルはrootに所属する必要があります。
  • アップロードプロセス中、パッケージは保護された非rootの場所に準備する必要があります:/Library/StagedExtensionscom.apple.rootless.storage.KernelExtensionManagementの許可が必要です)。
  • 最後に、ロードしようとすると、ユーザーは確認リクエストを受け取ります。承認された場合、コンピュータを再起動してロードする必要があります。

ロードプロセス

Catalinaでは、次のようになります興味深いことに、検証プロセスはユーザーランドで行われます。ただし、**com.apple.private.security.kext-management**の許可を持つアプリケーションのみがカーネルに拡張機能のロードを要求できます:kextcachekextloadkextutilkextdsyspolicyd

  1. kextutil CLIは、拡張機能のロードのための検証プロセスを開始します。
  • Machサービスを使用して**kextd**と通信します。
  1. **kextd**は、署名などのさまざまなチェックを行います。
  • syspolicydと通信して、拡張機能をロードできるかどうかを確認します。
  1. **syspolicyd**は、拡張機能が以前にロードされていない場合、ユーザーにプロンプトを表示します。
  • **syspolicydは結果をkextd**に報告します。
  1. kextdは最終的にカーネルに拡張機能をロードするように指示できます。

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

参考文献

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥