
これは、macOS環境からEndpointSecurity Framework(ESF)イベントをモジュール単位で消費するために考案されたツールです。これは、既存のツールで遭遇した、サイレントなデータ欠落、厳格なイベントタイプ消費、代替データイベントタイプのサポート不足、ファイルアクセスハンドラの過負荷などの問題を克服するための私の試みです。
このツールは、Chris Ross氏、Omark-Ikram氏、そしてObjective-Seeのチームが開発したProcessMonitor、Appmon、EndpointSecurityDemoというツール群の優れた成果に大きく依存しています。ESFデータ取り込みに関する私の核となる理解と適用可能性は、彼らの作品を調査することで大幅に強化され、開発が可能になりました。このツールは、これらのツールの最良の要素を抽出し、調査担当者のニーズに基づいたケースバイケースのESF消費アクションを可能にするために拡張しようと試みています。
既存のツール(FireEyeのCrescendoのようなより洗練されたツールを含む)は、ESF自体に関連する多くの問題に直面しており、テストではESFクライアントがサブシステムからデータを取り込む方法に関連していると思われます。主に遭遇した問題は、データのサイレントな欠落でした。テストでは、多数のイベントタイプを取り込んだ場合、単一のイベントタイプの取り込みと比較した結果、蓄積されたデータに差異があることが示されました。テストでは、悪意のある活動に関連する重要なイベントが、単一のイベントタイプの取り込みに存在した取得データセットに含まれていませんでした。
このツールの主な目的は3つありました:
この目的のため、このツールはユーザーが運用中に収集したいイベントタイプを、利用可能な51のNOTIFYイベントタイプ(このツールではAUTHイベントタイプは省略)から指定できるようにします。これにより、研究者は監視したい特定の操作に関連する特定のイベントタイプを対象にできるだけでなく、クライアントが収集するイベントタイプ全体を減らすことで、関連するサイレントなデータ欠落を軽減できます。
データ出力は個々のイベントタイプのログファイルに分散され、さらにプロセス、ファイル、ソケットなどのイベントジャンルファイルの下にグループ化されます。すべてのログは簡単に取り込めるようにJSONで書き込まれ、Appleが提供するevent_typeドキュメントに記載されている追加フィールドを収集するようにソースコードを変更することで、ユーザーが拡張できます。
将来のメモ -
サイレントなデータ欠落を防ぐための潜在的な解決策として、ツールをマルチスレッド化し、複数のESFクライアントを同時に実行させ、それぞれがイベントタイプのサブセットを収集することが考えられます。これにより、観測されたデータ欠落を引き起こす内部しきい値に達する問題を克服できる可能性があります。これに対する追加の制御を実装する時間が単にありませんでした。
使用方法
SIPを無効にする必要があります!
残念ながら、これは開発用のPOCコードであるため、ESFサブシステムへのアクセスが署名付きバイナリに制限されているため、SIPを有効にした状態では使用できません。これは未署名であるため、使用にはSIPを無効にする必要があります。そのため、本番環境以外のマシンでのみ使用してください。
実行方法は3種類あります。設定ファイルからevent_idのIDを指定するか、設定ファイルからgroup_idを指定するか、イベントタイプIDまたはグループの行をコメント解除した設定ファイルを参照するかです。
例1 = ES_EVENT_TYPE_NOTIFY_EXECイベントのみを収集:./ESFang -id 2
例2 = ファイルジャンルのイベントを収集:./ESFang -group 2
例3 = 設定ファイルで指定されたイベントタイプまたはグループを収集:./ESFang -config ./ESF_config.txt
ハードコードされたフィルタに関する注意
ソースコード内には、460行目から469行目にあるハードコードされたプロセスフィルタがあります。このフィルタは、特定のPID、PPID、またはプロセス名でキャプチャするように操作できます。これは特定のフィルタリング目的のための「ハッキーな」回避策として追加されました。これをコマンドラインで動的にしてInspectorに渡す試みはすべてエラーになりました。そのため、ハードコードのままにしています。
ハードコードされたプロセスミュートに関する注意
ソースコード内には、471行目から491行目にあるハードコードされたプロセスミュート機能があります。このフィルタは、プロセスまたは親プロセスのパスに基づいて特定のイベントのキャプチャをミュートするために使用できます。指定された名前と一致するすべてのプロセスは、そのプロセスまたは親が何らかのアクティビティを持つ場合にミュートされるため、注意して使用する必要があります。これはリリース時点でベータテスト中でした。