hunting-for-persistence-via-wmi-subscriptions について
Windows のインシデント対応担当者向けに、WMI 永続化を調査するスキルです。Sysmon、Windows イベント、PowerShell ログを使い、サブスクリプションの作成、トリガー、実行を確認します。
主な機能
- 01永続的な WMI イベントサブスクリプションの列挙
- 02Sysmon イベント 19、20、21 の監視
- 03コンシューマーの種類とトリガー条件の確認
- 04WmiPrvSe.exe の子プロセスの調査
- 05mofcomp.exe とサブスクリプション作成の相関
活用シーン
- 01再起動後も残る悪意ある永続化の調査
- 02WmiPrvSe.exe が起動した不審なプロセスの調査
- 03標準的な永続化場所の外にある不審な活動の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill hunting-for-persistence-via-wmi-subscriptionsインストール後、Claude Code で/hunting-for-persistence-via-wmi-subscriptionsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
WMI サブスクリプションによる永続化の調査
使用するタイミング
- Windows 環境でファイルレス永続化の仕組みを能動的に探索するとき
- 脅威インテリジェンスレポートで APT グループ(APT29、APT32、FIN8)による WMI ベースの永続化が示されたとき
- クリーンアップを試みても、マルウェアが再起動後も存続しているシステムを調査するとき
- 標準的な永続化の場所(Run キー、スケジュールタスク)に異常がない状態でインシデント対応を行うとき
- WmiPrvSe.exe が想定外の子プロセスを生成しているのが確認されたとき
前提条件
- Sysmon イベント ID 19、20、21(WMI イベントフィルター/コンシューマー/バインディング)が有効であること
- Microsoft-Windows-WMI-Activity の Windows イベント ID 5861(WMI アクティビティログ)が利用可能であること
- PowerShell ロギング(スクリプトブロックロギング、モジュールロギング)が有効であること
- 列挙のための WMI リポジトリへのアクセスがあること
- イベントの相関分析のための SIEM プラットフォームがあること
ワークフロー
- 既存の WMI サブスクリプションの列挙: 対象システム上のすべての永続的な WMI イベントサブスクリプションを照会します。クリーンなシステムには永続的なサブスクリプションがほとんどないか、まったくない場合が多いため、異常を容易に発見できます。
- WMI イベント作成の監視(Sysmon 19/20/21): Sysmon イベント 19 は WmiEventFilter のアクティビティ、イベント 20 は WmiEventConsumer のアクティビティ、イベント 21 は WmiEventConsumerToFilter のバインディングを記録します。
- コンシューマーの種類の分析: 永続化に悪用される危険な種類である ActiveScriptEventConsumer(VBScript/JScript を実行)と CommandLineEventConsumer(コマンドを実行)に注目します。
- イベントフィルターのトリガーの確認: サブスクリプションが何をトリガーとしているかを調べます。よくある悪意のあるトリガーには、システム起動(Win32_ProcessStartTrace)、ユーザーログオン、タイマーベースの実行間隔があります。
- WmiPrvSe.exe の子プロセスの調査: WMI サブスクリプションが発火すると、そのアクションは WmiPrvSe.exe によって実行されます。WmiPrvSe.exe の不審な子プロセスを探索します。
- MOF コンパイルとの相関分析:
mofcomp.exeの使用を検知します。これは MOF ファイルをコンパイルし、プログラム的に WMI サブスクリプションを作成するために使われます。 - 検証と対応: 悪意のあるサブスクリプションであることを確認し、削除したうえで、初期感染経路までさかのぼって調査します。
主要な概念
| 概念 | 説明 |
|---|---|
| T1546.003 | イベントトリガー実行: WMI イベントサブスクリプション |
| __EventFilter | トリガー条件を定義する WMI クラス |
| __EventConsumer | 実行するアクションを定義する WMI クラス |
| __FilterToConsumerBinding | フィルターとコンシューマーを関連付ける |
| ActiveScriptEventConsumer | VBScript または JScript を実行するコンシューマー |
| CommandLineEventConsumer | コマンドラインを実行するコンシューマー |
| WmiPrvSe.exe | サブスクリプションのアクションを実行する WMI プロバイダーホスト |
| MOF ファイル | WMI オブジェクトを定義するために使用される Managed Object Format |
検知クエリ
Splunk -- Sysmon による WMI サブスクリプションの作成
index=sysmon (EventCode=19 OR EventCode=20 OR EventCode=21)
| eval event_type=case(EventCode=19, "EventFilter", EventCode=20, "EventConsumer", EventCode=21, "FilterToConsumerBinding")
| table _time Computer User event_type EventNamespace Name Query Destination Operation
Splunk -- Windows イベント 5861 による WMI サブスクリプション
index=wineventlog source="Microsoft-Windows-WMI-Activity/Operational" EventCode=5861
| table _time Computer NamespaceName Operation PossibleCause
PowerShell -- WMI サブスクリプションの列挙
Get-WmiObject -Namespace root\subscription -Class __EventFilter
Get-WmiObject -Namespace root\subscription -Class __EventConsumer
Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding
KQL -- 不審な子プロセスを生成する WmiPrvSe.exe
DeviceProcessEvents
| where Timestamp > ago(7d)
| where InitiatingProcessFileName =~ "wmiprvse.exe"
| where FileName in~ ("cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe", "mshta.exe", "rundll32.exe")
| project Timestamp, DeviceName, FileName, ProcessCommandLine
Sigma ルール
title: WMI Event Subscription Persistence
status: stable
logsource:
product: windows
category: wmi_event
detection:
selection_consumer:
EventID: 20
Destination|contains:
- 'ActiveScriptEventConsumer'
- 'CommandLineEventConsumer'
condition: selection_consumer
level: high
tags:
- attack.persistence
- attack.t1546.003
よくあるシナリオ
- APT29 の WMI 永続化: システム起動時に VBScript バックドアを実行する ActiveScriptEventConsumer を作成し、再起動や資格情報のリセット後も存続します。
- Turla の WMI バックドア: Win32_ProcessStartTrace フィルターと CommandLineEventConsumer を組み合わせ、隠密にコマンドを実行します。
- FIN8 の WMI タイマー: 間隔ベースの __IntervalTimerEvent を使用し、30 分ごとにエンコードされた PowerShell のダウンロードをトリガーします。
- MOF ベースのインストール: 攻撃者が .mof ファイルを配置し、
mofcomp.exeでコンパイルして、永続的なサブスクリプションを密かに作成します。
出力形式
Hunt ID: TH-WMI-[DATE]-[SEQ]
Host: [Hostname]
Subscription Name: [Filter/Consumer name]
Filter Query: [WQL trigger condition]
Consumer Type: [ActiveScript/CommandLine]
Consumer Action: [Script content or command]
Binding: [Filter-to-Consumer link]
Created: [Timestamp]
User Context: [SYSTEM/User]
Risk Level: [Critical/High/Medium/Low]
コメント
Markdown 対応