hacktricks/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md

11 KiB
Raw Blame History

macOSシステム拡張

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

システム拡張/エンドポイントセキュリティフレームワーク

カーネル拡張とは異なり、システム拡張はカーネルスペースではなくユーザースペースで実行されるため、拡張機能の不具合によるシステムクラッシュのリスクが低減されます。

システム拡張には、DriverKit拡張、Network拡張、およびEndpoint Security拡張の3つのタイプがあります。

DriverKit拡張

DriverKitは、ハードウェアサポートを提供するカーネル拡張の代替です。これにより、デバイスドライバUSB、シリアル、NIC、HIDドライバなどがカーネルスペースではなくユーザースペースで実行されるようになります。DriverKitフレームワークには、特定のI/O Kitクラスのユーザースペースバージョンが含まれており、カーネルは通常のI/O Kitイベントをユーザースペースに転送することで、これらのドライバが実行される安全な環境を提供します。

Network拡張

Network拡張は、ネットワークの動作をカスタマイズする機能を提供します。いくつかのタイプのNetwork拡張があります。

  • App Proxy: これは、接続またはフロー単位ではなく個々のパケットに基づいてネットワークトラフィックを処理する、フロー指向のカスタムVPNプロトコルを実装するVPNクライアントの作成に使用されます。
  • Packet Tunnel: これは、個々のパケットに基づいてネットワークトラフィックを処理するパケット指向のカスタムVPNプロトコルを実装するVPNクライアントの作成に使用されます。
  • Filter Data: これは、ネットワークデータをフローレベルで監視または変更するために使用されます。
  • Filter Packet: これは、個々のネットワークパケットをフィルタリングするために使用されます。ネットワークデータをパケットレベルで監視または変更することができます。
  • DNS Proxy: これは、カスタムDNSプロバイダを作成するために使用されます。DNSリクエストとレスポンスを監視または変更するために使用できます。

エンドポイントセキュリティフレームワーク

エンドポイントセキュリティは、AppleがmacOSで提供するフレームワークで、システムセキュリティのための一連のAPIを提供します。これは、悪意のある活動を特定し、防御するために、セキュリティベンダーや開発者がシステムの活動を監視および制御するための製品を構築するために使用されます

このフレームワークは、プロセスの実行、ファイルシステムイベント、ネットワークおよびカーネルイベントなど、システムの活動を監視および制御するためのAPIのコレクションを提供します。

このフレームワークのコアは、カーネル内に実装されたカーネル拡張KEXTである**/System/Library/Extensions/EndpointSecurity.kext**によって実現されています。このKEXTは、いくつかの主要なコンポーネントで構成されています。

  • EndpointSecurityDriver: これはカーネル拡張の「エントリーポイント」として機能します。これはOSとEndpoint Securityフレームワークの間の主な相互作用ポイントです。
  • EndpointSecurityEventManager: このコンポーネントはカーネルフックの実装を担当します。カーネルフックにより、フレームワークはシステムコールを傍受することでシステムイベントを監視できます。
  • EndpointSecurityClientManager: これはユーザースペースクライアントとの通信を管理し、接続してイベント通知を受け取る必要があるクライアントを追跡します。
  • EndpointSecurityMessageManager: これはユーザースペースクライアントにメッセージとイベント通知を送信します。

Endpoint Securityフレームワークが監視できるイベントは、次のカテゴリに分類されます。

  • ファイルイベント
  • プロセスイベント
  • ソケットイベント
  • カーネルイベント(カーネル拡張の読み込み/アンロードやI/O Kitデバイスのオープンなど

エンドポイントセキュリティフレームワークのアーキテクチャ

エンドポイントセキュリティフレームワークとのユーザースペース間の通信は、IOUserClientクラスを介して行われます。呼び出し元のタイプに応じて、2つの異なるサブクラスが使用されます。

  • EndpointSecurityDriverClient: これにはcom.apple.private.endpoint-security.managerの権限が必要で、これはシステムプロセスendpointsecuritydのみが保持しています。
  • EndpointSecurityExternalClient: これにはcom.apple.developer.endpoint-security.clientの権限が必要です。これは通常、Endpoint Securityフレームワークと対話する必要があるサードパーティのセキュリティソフトウェアによって使用されます。

エンドポイントセキュリティ拡張機能で使用される**libEndpointSecurity.dylib**は、システム拡張機能がカーネルと通信するために使用する

ESFのバイパス

ESFは、レッドチームメンバーを検出しようとするセキュリティツールによって使用されるため、これを回避する方法に関する情報は興味深いです。

CVE-2021-30965

問題は、セキュリティアプリケーションがフルディスクアクセス権限を持っている必要があることです。したがって、攻撃者がそれを削除できれば、ソフトウェアの実行を防ぐことができます。

tccutil reset All

詳細情報については、トーク#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csabaを参照してください。

最終的には、新しい権限**kTCCServiceEndpointSecurityClienttccd**が管理するセキュリティアプリに与えることで、tccutilがアプリの権限をクリアすることを防ぎ、実行を妨げるように修正されました。

参考文献

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