現場の最前線で語る:SMB経由の横展開(Lateral Movement)を「見逃さない」ための鉄則
インシデントレスポンスの現場で、侵入された後の調査を行うと、攻撃者がいかに「静かに」ネットワーク内を移動しているかに驚かされる。特に、多くのエンジニアが「信頼できる管理ツール」と盲信している PsExec や WMI を悪用したSMB経由の横展開は、まさに盲点だ。
今回は、彼らがどのような足跡を残し、我々がそれをどう封じ込めるべきか、現場の泥臭い知見を共有しよう。
—
1. 攻撃者が好む「正規ツール」の影
攻撃者は新たなマルウェアを持ち込むよりも、OSに標準装備されている機能を悪用する(Living off the Land)。
- PsExec: サービスをリモートで作成・実行する。SMB経由で
ADMIN$共有にバイナリを投下し、サービス制御マネージャー経由で実行する。 - WMI (Windows Management Instrumentation): ネットワーク越しにコマンドを実行する。
wmiexec.vbs等のツールを使えば、ログを残さずメモリ上でプロセスを起動できるため、痕跡が残りづらい。
これらが実行されるとき、ネットワークトラフィック上では必ず SMB(TCP/445) の不自然な通信パターンが発生する。具体的には、特定のホストから短時間に大量の Tree Connect リクエストや、svcctl(サービス制御)パイプへのアクセスが観測されるはずだ。
—
2. ネットワーク検知の勘所
インシデント発生時、まずはネットワークパケット(PCAP)やログから以下のパターンを抽出する。
1. 特定ホストからの急激なトラフィック増: 普段通信しないクライアント同士が445番ポートで頻繁にやり取りしている。
2. パイプ名の異常: SMBのパイプ名に \pipe\svcctl や \pipe\atsvc が頻出していないか。これらはリモート実行のサインだ。
3. 認証の爆発: 同じアカウントで、短期間に多数のホストへ認証試行が行われている。
—
3. 防御の要:横展開を許さない実装と設定
「検知」も大事だが、そもそも「横展開を物理的に封じる」のが一番の防御だ。ここでは、Webアプリケーションやインフラ設定レベルでできる最強の策を紹介する。
3.1 Nginx/WAFでのSMB踏み台防止策
Webアプリケーションが万が一侵害された際、サーバー自体がSMBの踏み台にされないよう、Egress(外向き)通信を制限するのが鉄則だ。
# Nginx設定例:許可されていないIP以外へのSMB通信をフィルタリングする概念
# 注意: Nginx単体でSMBを制御するのではなく、iptablesやクラウドのセキュリティグループで制御するのが正攻法。
# 以下は、Webアプリケーションから不要なポートへの通信を制限するiptablesの設定イメージ
# サーバーから内部ネットワークへの445番ポート(SMB)への通信を全遮断
# Webサーバーがファイルサーバーの役割を持たない限り、この通信は不要であるはずだ
sudo iptables -A OUTPUT -p tcp --dport 445 -j DROP
sudo iptables -A OUTPUT -p tcp --dport 139 -j DROP
3.2 セキュアな認証実装(Python例)
もしあなたが内部管理用のツールを開発しているなら、PsExec のような危険な認証は避け、常に証明書ベースの認証や制限されたAPIを利用すべきだ。
import subprocess
import logging
# 危険なコマンド実行のラッパー(PsExecの代わりにセキュアな設計を考える)
def secure_remote_command(target_ip, command):
"""
PsExec等のSMB直叩きは避け、認証されたAPIまたはSSH経由の限定的コマンド実行のみを許可する設計
"""
allowed_commands = ["/usr/bin/status_check", "/usr/bin/disk_usage"]
if command not in allowed_commands:
logging.error(f"不正なコマンドが要求されました: {command}")
return False
# 実際にはSSHの鍵認証などを利用したセキュアな通信経路を構築すること
print(f"安全な経路で {target_ip} に対して {command} を実行します...")
return True
# 使用例
secure_remote_command("192.168.1.50", "/usr/bin/status_check")
—
4. セキュリティチーフからのアドバイス:盲点を突く
多くのエンジニアが陥る罠は、「自分の管理下にある端末は安全だ」と思い込むことだ。
- 特権アカウントの使い回しを禁止せよ: 横展開の最大の燃料は、管理者権限を持ったアカウントのパスワードがメモリ上に残っていることだ。
LAPS (Local Administrator Password Solution)の導入は必須と言ってもいい。 - 「見えない通信」を可視化せよ: EDRの導入はもちろんだが、ネットワークのセグメンテーション(マイクロセグメンテーション)を行い、「クライアント同士の通信」をデフォルトで禁止する設計が、攻撃者の動きを物理的に阻害する。
「PsExecを検知する」のは対処療法に過ぎない。「そもそもSMBによるリモート実行が不可能な環境を作る」ことこそが、攻撃者を最も落胆させる防御術だ。
次のインシデントが起きる前に、まずは自身のネットワーク内の445番ポートが「誰と誰の間で会話しているか」を調べてみてほしい。そこに、あなたの組織の最大の脆弱性が隠れているはずだ。
コメント