macOS System Extensions
システム拡張機能 / エンドポイントセキュリティフレームワーク
カーネル拡張機能とは異なり、システム拡張機能はカーネルスペースではなくユーザースペースで実行されるため、拡張機能の誤作動によるシステムクラッシュのリスクが低減されます。
システム拡張機能には、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リクエストと応答を監視または変更するために使用できます。
エンドポイントセキュリティフレームワーク
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のバイパス
ESFは、レッドチームを検出しようとするセキュリティツールによって使用されるため、これを回避する方法に関する情報は興味深いものです。
CVE-2021-30965
重要なのは、セキュリティアプリケーションが完全ディスクアクセス権限を持っている必要があることです。したがって、攻撃者がそれを削除できれば、ソフトウェアの実行を防ぐことができます。
さらなる情報については、この回避策および関連する回避策については、以下のトークをチェックしてください:#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba
最終的には、新しい権限 kTCCServiceEndpointSecurityClient
を tccd
によって管理されるセキュリティアプリに付与することで、tccutil
がアプリの権限をクリアしないようにし、実行を妨げることが防がれました。
参考文献
Last updated