SilkETW: 無料のテレメトリは…無料だからです!

SilkETW command line options news

Event Tracing for Windows (ETW) に対する人々の関心は、時が経つにつれて何度も何度も繰り返されてきました。 Windows 2000 で最初に導入された ETW は、もともとデバッグ、診断、およびパフォーマンスを目的とした軽量のカーネル レベルのトレース機能です。しかし、防御側は次第に、ETW がカスタム開発作業なしでは利用できなかったメトリクスとデータ コンテンツを提供することに気付きました。それでも、業界の多くの大企業を除けば、人々は ETW を検出と調査のためのデータ ソースとして採用するのに時間がかかりました。 ETW の主な 2 つの問題は、イベント コレクションに伴う複雑さと、生成されるデータの量です。ことわざの針を見つけるために干し草の山を調べる作業は、エンジニアリングの観点からは必ずしも魅力的ではありません (データをどのように保存しますか? データをどのように処理しますか? データは本当に価値がありますか? 私たちは再び何を探していましたか?)。

最新のツールであるSilkETWは、業界の防御側と攻撃側の両方で、実用的な ETW データを研究者の手に渡すことを目的としています。データ収集のための簡単なインターフェイス、さまざまなフィルタリングの仕組み、および簡単に処理できる出力形式を提供することにより、前述の問題を軽減しようとします。このプロジェクトは当初、FireEye Advanced Practices (AP) チームによって実装され、新しい攻撃者の手口の迅速な分析を支援し、その分析を検出エンジニアリング プロセスにフィードバックすることを目的としていました。

前述のとおり、SilkETW は単なる防御ツールではありません。 ETW データは診断に使用でき、リバース エンジニアリング、脆弱性調査、検出、回避に役立ちます。次のセクションでは、多くの ETW のユース ケースについて概説します。

背景の読み物

ETW の背景を読むために強調表示できる公開投稿やプロジェクトが多数あります。データとその使用方法についてさまざまな視点を提供するものをいくつか選択しました。

出発点として、Bing の Production Profiler システム ( BPerf ) は良いケーススタディです。非常に機密性の高い本番サービスで、パフォーマンスと診断のためのインストルメンテーションを実装できるかどうか疑問に思う人もいます。 Bing のフロント エンドでの Microsoft の ETW の使用は、この質問に対する答えを提供します。詳細については、BPerf に関する Microsoft の USENIX プレゼンテーションを参照してください。

すでに述べたように、ETW を使用して、防御機能を強化するテレメトリを収集できます。これを強調するには、.NET の悪意のある使用の検出 – パート 2に関する Countercept の投稿を参照してください。

すべての ETW 研究が性能光学や防衛研究に関連しているわけではありません。 ETW には攻撃的な機能もあり、そのような例の 1 つは、CyberPoint の「 Logging Keystrokes with ETW 」の投稿にあります。

ETW は、新しい研究を行うための豊富な環境を提供し、ユーザーが Windows オペレーティング システムの内部を掘り下げることを可能にします。これについては、SpecterOps の Matt Graeber による投稿 ( WPP と TraceLogging を使用したデータ ソース分析と動的 Windows RE ) で説明されています。

最後に、防御の観点から、.NET の脅威の状況は絶えず進化していることを理解する必要があります。 ETW のメカニズムを理解し、攻撃者のトレードクラフトに追いつくために活用できるかどうかを評価することは賢明です。これを説明するために、Azure DevOps を使用したビルド、変更、およびパッキングに関する Adam Chester による最も優れた投稿を強調したいと思います。この種のトレードクラフトは、防御側に真の一時停止を与えるはずです。

シルクETW

SilkETW は、トレース データを記録するためのシンプルなインターフェイスを提供します。コマンド ライン オプションを図 1 に示します。

SilkETW command line options
図 1: SilkETW コマンド ライン オプション

SilkETW の出力形式は JSON であることに注意してください。 JSON はユビキタスであり、PowerShell を使用してローカルで簡単に分析できますが、Elasticsearch などのサードパーティ インフラストラクチャともうまく統合されます。すべてのイベントは、JSON にシリアル化される前に同じ C# 構造に準拠します。

シルクコード 1

記録されるイベント タイプによって、「XmlEventData」ハッシュ テーブルの内容が決まります。スレッド関連イベントのそのような例の 1 つを次に示します。

シルクコード 2

PowerShell イベント フィルタリング

SilkETW JSON データは、次の単純な関数を使用して PowerShell にインポートできます。

シルクコード 3

次の例では、カーネル プロバイダーからプロセス イベント データを収集し、イメージの読み込みを使用して Mimikatz の実行を識別します。次のコマンドで必要なデータを収集できます。

 

次の例では、カーネル プロバイダーからプロセス イベント データを収集し、イメージの読み込みを使用して Mimikatz の実行を識別します。次のコマンドで必要なデータを収集できます。

SilkETW.exe -t kernel -kk ImageLoad -ot file -p
C:Usersb33fDesktopmimikatz.json

データが手元にあれば、関心のあるプロパティの並べ替え、grep、およびフィルター処理を簡単に行うことができます (図 2)。

PowerShell イベント フィルタリング
図 2: PowerShell イベント フィルタリング

屋良統合

SilkETW には、ユーザーがキャプチャするイベントを制限できるコマンド ライン フラグがいくつかあります。これらには、イベント名、プロセス ID、プロセス名、およびオペコードが含まれます。この機能をさらに強化するために、トレース イベントをフィルタリングまたはタグ付けするための Yara サポートが含まれています。 Yara にはすぐに防御的な意味合いがありますが、読者は Yara ルールが研究機能を強化するのにも同様に役立つことを思い出してください。

次の不自然な例では、Yara ルールを使用して、Cobalt Strike のexecute-assemblyを通じてメモリ内のシートベルトの実行を検出します。

rule Seatbelt_GetTokenInformation
{
strings:
$s1 = "ManagedInteropMethodName=GetTokenInformation" ascii wide nocase
$s2 = "TOKEN_INFORMATION_CLASS" ascii wide nocase
$s3 = /bool(native int,valuetype w+.w+/w+,native int,int32,int32&/
$s4 = "locals (int32,int64,int64,int64,int64,int32& pinned,bool,int32)" ascii wide nocase

condition:
all of ($s*)
}

次のコマンドで .NET ETW データの収集を開始できます (ここで、Yara の一致のみをファイルに書き込むことを示す「-yo」オプションに注意してください!)。

SilkETW.exe -t user -pn Microsoft-Windows-DotNETRuntime -uk 0x2038 -l verbose -y
C:Usersb33fDesktopyara -yo matches -ot file -p C:Usersb33fDesktopyara.json

実行時に、Yara ルールがヒットしたことがわかります (図 3)。

やらルールヒット
図 3: ヤラ ルール ヒット

また、「Microsoft-Windows-DotNETRuntime」イベント (0x2038) のサブセットのみをキャプチャしていることにも注意してください。具体的には、JitKeyword、InteropKeyword、LoaderKeyword、および NGenKeyword です。

ロードマップ

冒頭で概説したように、SilkETW は現在、堅牢で初歩的な機能を備えた研究に重点を置いたデータ収集ツールです。 SilkETW の今後の変更には以下が含まれますが、これらに限定されません。

  • トレース データを *.etl ファイルとしてディスクに書き込むオプションをユーザーに提供します。
  • サービスとしてヘッドレス モードで動作し、構成ファイルを読み取る SilkETW の別のインスタンスを作成します。
  • ETW の研究に役立つ機能について、コミュニティから意見を取り入れてください。

GitHub

SilkETW は現在、GitHub でダウンロードできます

了承

Advanced Practices チーム全体、特に Nick Carr に感謝します。また、FireEye Labs およびデータ サイエンス チームの Stephen Davis、Anthony Berglund、Kevin Boyd にも、このプロジェクトとpywintraceに関する以前の作業のレビューを手伝ってくれたことに感謝します。プログラムで使用できる Python ETW バインディングを探している場合は、そのプロジェクトを確認してください。

参照: https://www.mandiant.com/resources/blog/silketw-because-free-telemetry-free

Comments

Copied title and URL