Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
SilkETW — C#で書かれたETWラッパー。脅威ハンティング、マルウェア解析、インシデント対応のために、カーネルおよびユーザーモードのイベントデータをJSONにシリアライズし、Yara統合とElasticsearchへの送信を備えています。 | Kitploit
ツール/GitHubGitHub/mandiant/silketw
防御ツールメモリフォレンジックフォレンジックマルウェア分析デジタルフォレンジック脅威インテリジェンス侵入検知学習と教育インシデントレスポンス異常検知ログ分析Archived
8521393年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHub
mandiant/silketw

SilkETW

C#で書かれたETWラッパー。脅威ハンティング、マルウェア解析、インシデント対応のために、カーネルおよびユーザーモードのイベントデータをJSONにシリアライズし、Yara統合とElasticsearchへの送信を備えています。

リポジトリを見る

SilkETW & SilkService

SilkETW と SilkService は、ETW のための柔軟な C# ラッパーです。ETW の複雑さを抽象化し、研究や内部調査を行うためのシンプルなインターフェースを提供することを目的としています。どちらのプロジェクトにも明らかな防御(および攻撃)用途がありますが、主に研究ツールとして考えるべきです。

出力データは、簡単に利用できるように JSON にシリアル化されます。JSON データはファイルに書き込んで PowerShell を使ってローカルで分析したり、Windows イベントログに保存したり、Elasticsearch などのサードパーティ製インフラストラクチャに送信したりできます。

SilkETW と SilkService の将来に関する詳細は、ロードマップのセクションを参照してください。

メディア

SilkETW と SilkService の背景については、以下のリソースを参照してください。

  • SilkETW: Because Free Telemetry is … Free! - こちら
  • SilkETW & SilkService BlackHat Arsenal 2019 - こちら
  • Threat Hunting with ETW events and HELK — Part 1: Installing SilkETW (@Cyb3rWard0g著) - こちら
  • Threat Hunting with ETW events and HELK — Part 2: Shipping ETW events to HELK (@Cyb3rWard0g著) - こちら
  • Events from all manifest-based and mof-based ETW providers across Windows 10 versions (@jdu2600著) - こちら
  • Hunting for Suspicious LDAP Activity with SilkETW and Yara - こちら

実装の詳細

ライブラリ

SilkETW は .Net v4.5 上に構築されており、以下に示すようにいくつかのサードパーティ製ライブラリを使用しています。詳細については、LICENSE-3RD-PARTY を参照してください。

root@kitploit:~
ModuleId                                 Version LicenseUrl                                                   
--------                                 ------- ----------                                                   
McMaster.Extensions.CommandLineUtils     2.3.2   https://licenses.nuget.org/Apache-2.0                        
Microsoft.Diagnostics.Tracing.TraceEvent 2.0.36  https://github.com/Microsoft/perfview/blob/master/LICENSE.TXT
Newtonsoft.Json                          12.0.1  https://licenses.nuget.org/MIT                               
System.ValueTuple                        4.4.0   https://github.com/dotnet/corefx/blob/master/LICENSE.TXT     
YaraSharp                                1.3.1   https://github.com/stellarbear/YaraSharp/blob/master/LICENSE

SilkETW

コマンドラインオプション

コマンドラインの使用方法は非常にわかりやすく、ユーザー入力は実行プロローグで検証されます。詳細については、以下の画像を参照してください。

Help

SilkService

注意

SilkService は、多くのユーザーが SilkETW をヘッドレスで実行し、複数のソースから同時に ETW 収集を行いたいと考えたために作成されました。これには明らかな魅力がありますが、以下の点に留意する必要があります。

  • SilkETW と SilkService は一人のエンジニア(@FuzzySec)によって作成されており、開発者チームのバックアップはありません。そのため、バグが含まれている可能性があります。バグに遭遇した場合や、これらのプロジェクトを改善する方法を見つけた場合は、チケットを提出したりプルリクエストを送信したりすることを強くお勧めします。
  • ETW 収集はリソースを大量に消費する可能性があります。徹底的なパフォーマンステストを行わずに、SilkService を広範囲のホストに展開しないでください。構成が最も性能の低いマシンでも安定して実行できることを確認してください。

セットアップ

リリースパッケージをコンパイルまたはダウンロードした後、管理者プロンプトから次のコマンドを発行してサービスをインストールできます。

root@kitploit:~
sc create SillkService binPath= "C:\Path\To\SilkService.exe" start= demand

構成

SilkService は XML 構成ファイル "SilkServiceConfig.xml" を読み込みます。このファイルはサービスバイナリと同じディレクトリに配置する必要があります。以下に構成ファイルの例を示します。

root@kitploit:~
<SilkServiceConfig>
	<!--
		これはユーザーコレクターです
		-> Microsoft-Windows-DotNETRuntime
		-> GUID または文字列ベースの名前
	-->
	<ETWCollector>
		<Guid>45c82358-c52d-4892-8237-ba001d396fb4</Guid>
		<CollectorType>user</CollectorType>
		<ProviderName>e13c0d23-ccbc-4e12-931b-d9cc2eee27e4</ProviderName>
		<UserKeywords>0x2038</UserKeywords>
		<OutputType>url</OutputType>
		<Path>https://some.elk:9200/NetETW/_doc/</Path>
	</ETWCollector>
	<!--
		これはユーザーコレクターです
	-->
	<ETWCollector>
		<Guid>6720babc-dedc-4906-86b9-d0bc0089ec50</Guid>
		<CollectorType>user</CollectorType>
		<ProviderName>Microsoft-Windows-DNS-Client</ProviderName>
		<OutputType>eventlog</OutputType>
		<YaraScan>C:\Some\Path\RuleFolder</YaraScan>
		<YaraOptions>Matches</YaraOptions>
	</ETWCollector>
	<!--
		これはカーネルコレクターです
	-->
	<ETWCollector>
		<Guid>21ac2393-3bbb-4702-a01c-b593e21913dc</Guid>
		<CollectorType>kernel</CollectorType>
		<KernelKeywords>Process</KernelKeywords>
		<OutputType>file</OutputType>
		<Path>C:\Users\b33f\Desktop\kproc.json</Path>
	</ETWCollector>
</SilkServiceConfig>

各 ETWCollector 要素にはランダムな GUID が必要です。これは内部追跡とログ記録に使用されます。GUID は PowerShell で次のコマンドを使用して生成できます。

root@kitploit:~
PS C:\> [guid]::NewGuid()

Guid
----
eee52b87-3f32-4651-b0c3-e7bb9af334aa

監査

実行時、SilkService は "Logs" サブフォルダを作成し、サービスランタイム情報を記録します。これは、サービスの状態を確認し、サービスパラメータの検証を確認し、エラー情報を確認するための貴重なリソースです。SilkService は、エラーが厳密に終了を必要としない場合でも、何らかのエラーが発生した場合にグレースフルシャットダウンすることを優先します。この設計上の決定は、コレクターが宙ぶらりんのままになったり、部分的な運用が可能になったりするのは健全な戦略ではないため、意図的に行われました。

サービスがシャットダウンした場合は、必ずサービスログを確認してください!

何か問題が発生しましたか?

何か問題が発生する可能性は常にあります。詳細についてはサービスログを確認してください。SilkService は ETW コレクターを終了およびクリーンアップするように構成されていますが、プロセス終了後に古いコレクターが登録されたままになる可能性があります。実行中のコレクターを一覧表示するには、次のコマンドを使用します。

root@kitploit:~
logman -ets

古いコレクターが特定された場合は、管理者プロンプトから次のコマンドを発行して削除できます。

root@kitploit:~
Get-EtwTraceProvider |Where-Object {$_.SessionName -like "SilkService*"} |ForEach-Object {Stop-EtwTraceSession -Name $_.SessionName}
Get-EtwTraceProvider |Where-Object {$_.SessionName -like "SilkService*"} |Remove-EtwTraceProvider

出力形式

JSON 出力構造

シリアル化前の JSON 出力は、次の C# 構造体に従ってフォーマットされます。

root@kitploit:~
public struct EventRecordStruct
{
    public Guid ProviderGuid;
    public List<String> YaraMatch;
    public string ProviderName;
    public string EventName;
    public TraceEventOpcode Opcode;
    public string OpcodeName;
    public DateTime TimeStamp;
    public int ThreadID;
    public int ProcessID;
    public string ProcessName;
    public int PointerSize;
    public int EventDataLength;
    public Hashtable XmlEventData;
}

プロバイダーとイベントの種類によって、XmlEventData ハッシュテーブル内のデータは異なります。以下に、"Microsoft-Windows-Kernel-Process" -> "ThreadStop/Stop" のサンプル JSON 出力を示します。

root@kitploit:~
{
   "ProviderGuid":"22fb2cd6-0e7b-422b-a0c7-2fad1fd0e716",
   "YaraMatch":[

   ],
   "ProviderName":"Microsoft-Windows-Kernel-Process",
   "EventName":"ThreadStop/Stop",
   "Opcode":2,
   "OpcodeName":"Stop",
   "TimeStamp":"2019-03-03T17:58:14.2862348+00:00",
   "ThreadID":11996,
   "ProcessID":8416,
   "ProcessName":"N/A",
   "PointerSize":8,
   "EventDataLength":76,
   "XmlEventData":{
      "FormattedMessage":"Thread 11,996 (in Process 8,416) stopped. ",
      "StartAddr":"0x7fffe299a110",
      "ThreadID":"11,996",
      "UserStackLimit":"0x3d632000",
      "StackLimit":"0xfffff38632d39000",
      "MSec":"560.5709",
      "TebBase":"0x91c000",
      "CycleTime":"4,266,270",
      "ProcessID":"8,416",
      "PID":"8416",
      "StackBase":"0xfffff38632d40000",
      "SubProcessTag":"0",
      "TID":"11996",
      "ProviderName":"Microsoft-Windows-Kernel-Process",
      "PName":"",
      "UserStackBase":"0x3d640000",
      "EventName":"ThreadStop/Stop",
      "Win32StartAddr":"0x7fffe299a110"
   }
}

収集後

PowerShell でデータをフィルタリング

SilkETW の JSON 出力は、以下の簡単な関数を使用して PowerShell にインポートできます。

root@kitploit:~
function Get-SilkData {
	param($Path)
	$JSONObject = @()
	Get-Content $Path | ForEach-Object {
		$JSONObject += $_ | ConvertFrom-Json
	}
	$JSONObject
}

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

root@kitploit:~
SilkETW.exe -t kernel -kk ImageLoad -ot file -p C:\Users\b33f\Desktop\mimikatz.json

データがあれば、関心のあるプロパティを簡単に並べ替え、grep、フィルタリングできます。

Mimikatz

Yara

SilkETW には、イベントデータをフィルタリングまたはタグ付けするための Yara 機能が含まれています。これには明らかな防御機能がありますが、ETW 研究を強化するためにも同様に使用できます。

この例では、次の Yara ルールを使用して、Cobalt Strike の execute-assembly を介したメモリ内の Seatbelt 実行を検出します。

root@kitploit:~
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 データの収集を開始できます。ここで "-yo" オプションは、Yara 一致のみをディスクに書き込むことを示します。

root@kitploit:~
SilkETW.exe -t user -pn Microsoft-Windows-DotNETRuntime -uk 0x2038 -l verbose -y C:\Users\b33f\Desktop\yara -yo matches -ot file -p C:\Users\b33f\Desktop\yara.json

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

Seatbelt

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

SilkETW と SilkService を入手するには?

ソースをダウンロードして Visual Studio でコンパイルするか、リリース からプリビルド版の最新版を入手できます。Visual Studio の Community Edition は無料で入手できます。

今後の作業

変更履歴

バージョン固有の変更の詳細については、変更履歴を参照してください。

ロードマップ

  • トレースデータを *.etl ファイルとしてディスクに書き込むオプションをユーザーに提供する。
  • トレースデータを Windows イベントログに書き込むオプションをユーザーに提供する。 (v0.5+)
  • プリコンパイル済みリリースをユーザーに提供する。 (v0.6+)
  • 構成ファイルを使用してサービスとして展開できる別のインスタンス(SilkService)を作成する。 (v0.7+)
  • 提案は歓迎します!
ツールをダウンロード