macOS System Extensions
Last updated
Last updated
AWSハッキングの学習と実践:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングの学習と実践:HackTricks Training GCP Red Team Expert (GRTE)
カーネル拡張機能とは異なり、システム拡張機能はカーネルスペースではなくユーザースペースで実行されるため、拡張機能の誤作動によるシステムクラッシュのリスクが低減されます。
システム拡張機能には、DriverKit拡張機能、Network拡張機能、およびEndpoint Security拡張機能の3種類があります。
DriverKitは、ハードウェアサポートを提供するカーネル拡張機能の代替となるものです。これにより、デバイスドライバ(USB、シリアル、NIC、HIDドライバなど)がカーネルスペースではなくユーザースペースで実行されるようになります。DriverKitフレームワークには、特定のI/O Kitクラスのユーザースペースバージョンが含まれており、カーネルは通常のI/O Kitイベントをユーザースペースに転送して、これらのドライバが実行される安全な環境を提供します。
Network拡張機能は、ネットワーク動作をカスタマイズする機能を提供します。いくつかのタイプのNetwork拡張機能があります:
App Proxy: これは、接続(またはフロー)に基づいてネットワークトラフィックを処理するカスタムVPNプロトコルを実装するVPNクライアントを作成するために使用されます。
Packet Tunnel: これは、個々のパケットに基づいてネットワークトラフィックを処理するカスタムVPNプロトコルを実装するVPNクライアントを作成するために使用されます。
Filter Data: これは、ネットワークの「フロー」をフィルタリングするために使用されます。ネットワークデータをフローレベルで監視または変更できます。
Filter Packet: これは、個々のネットワークパケットをフィルタリングするために使用されます。ネットワークデータをパケットレベルで監視または変更できます。
DNS Proxy: これは、カスタムDNSプロバイダを作成するために使用されます。DNSリクエストと応答を監視または変更するために使用できます。
macOSで提供されているAppleのフレームワークであるエンドポイントセキュリティは、システムセキュリティのための一連のAPIを提供します。これは、悪意のある活動を特定し、防御するための製品を構築するためにセキュリティベンダーや開発者が使用することを意図しています。
このフレームワークは、プロセスの実行、ファイルシステムイベント、ネットワークおよびカーネルイベントなど、システム活動を監視および制御するためのAPIのコレクションを提供します。
このフレームワークの中核は、**カーネルに実装されたカーネル拡張機能(KEXT)であり、/System/Library/Extensions/EndpointSecurity.kext
**に配置されています。このKEXTは、いくつかの主要なコンポーネントで構成されています:
EndpointSecurityDriver: これはカーネル拡張機能との主要なやり取りポイントであり、OSとエンドポイントセキュリティフレームワークとの主要な相互作用ポイントです。
EndpointSecurityEventManager: このコンポーネントは、カーネルフックを実装する責任があります。カーネルフックにより、フレームワークはシステムコールを傍受してシステムイベントを監視できます。
EndpointSecurityClientManager: これは、ユーザースペースクライアントとの通信を管理し、接続されているクライアントとイベント通知を受け取る必要があるクライアントを追跡します。
EndpointSecurityMessageManager: これは、メッセージとイベント通知をユーザースペースクライアントに送信します。
エンドポイントセキュリティフレームワークが監視できるイベントは、次のカテゴリに分類されます:
ファイルイベント
プロセスイベント
ソケットイベント
カーネルイベント(カーネル拡張機能の読み込み/アンロードやI/O Kitデバイスのオープンなど)
エンドポイントセキュリティフレームワークとのユーザースペース通信は、IOUserClientクラスを介して行われます。呼び出し元のタイプに応じて、異なるサブクラスが使用されます:
EndpointSecurityDriverClient: これにはcom.apple.private.endpoint-security.manager
権限が必要であり、これはシステムプロセスendpointsecurityd
のみが保持しています。
EndpointSecurityExternalClient: これにはcom.apple.developer.endpoint-security.client
権限が必要です。これは通常、エンドポイントセキュリティフレームワークとやり取りする必要があるサードパーティのセキュリティソフトウェアに使用されます。
エンドポイントセキュリティ拡張機能:**libEndpointSecurity.dylib
**は、システム拡張機能がカーネルと通信するために使用するCライブラリです。このライブラリはI/O Kit (IOKit
)を使用してエンドポイントセキュリティKEXTと通信します。
endpointsecurityd
は、エンドポイントセキュリティシステム拡張機能を管理および起動するために関与する主要なシステムデーモンです。NSEndpointSecurityEarlyBoot
がInfo.plist
ファイルでマークされたシステム拡張機能のみがこの早期起動処理を受け取ります。
別のシステムデーモンである**sysextd
は、システム拡張機能を検証し、適切なシステムの場所に移動させます。その後、関連するデーモンに拡張機能の読み込みを要求します。SystemExtensions.framework
**は、システム拡張機能の有効化および無効化を担当しています。
ESFは、レッドチームを検出しようとするセキュリティツールによって使用されるため、これを回避する方法に関する情報は興味深いものです。
重要なのは、セキュリティアプリケーションが完全ディスクアクセス権限を持っている必要があることです。したがって、攻撃者がそれを削除できれば、ソフトウェアの実行を防ぐことができます。
さらなる情報については、この回避策および関連する回避策については、以下のトークをチェックしてください:#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba
最終的には、新しい権限 kTCCServiceEndpointSecurityClient
を tccd
によって管理されるセキュリティアプリに付与することで、tccutil
がアプリの権限をクリアしないようにし、実行を妨げることが防がれました。
AWSハッキングの学習と実践:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングの学習と実践: HackTricks Training GCP Red Team Expert (GRTE)