ネットワークの「鬼門」を封じる:TCP/445番ポートとSMBの脅威から身を守るための実践的防御術
ネットワークエンジニアの皆さん、お疲れ様です。深夜のパケットキャプチャで眉間に皺を寄せた経験はありますか?
今日は、セキュリティの歴史を塗り替えたとも言える「TCP/445」の話をしよう。WannaCryが世界を席巻した時、多くのエンジニアがログの中に見たあの不気味な通信。SMB(Server Message Block)という、便利だが一歩間違えれば「社内ネットワークの高速道路」になりかねないこのプロトコルの闇について、深掘りしていく。
SMBが抱える「信頼」という名の脆弱性
SMBは、Windowsネットワークにおけるファイル共有やプリンタ共有の要だ。しかし、このプロトコルは本来「信頼された社内LAN」で使うことを前提に設計されている。
ここが落とし穴だ。攻撃者は、一度境界防御を突破すると、このSMBという「社内共通言語」を悪用してラテラルムーブメント(横展開)を仕掛けてくる。特に、かつての MS17-010 (EternalBlue) は、SMBv1の脆弱性を突いて、認証なしでカーネル権限を奪うという悪夢を見せてくれた。
現在、我々が取るべき対策は明確だ。
1. エッジでのTCP/445ブロック: インターネットから直接445ポートが見えるなど、言語道断だ。
2. SMB署名(Signing)の強制: パケットの改ざんを防ぐための最低限の防波堤。
3. SMBv1の完全無効化: これはもはや議論の余地がない。
SMB通信の挙動とラテラルムーブメントのメカニズム
SMBの通信は、Negotiate Protocol Request から始まる。クライアントが「俺はSMBv3まで喋れるぜ」と提示し、サーバーが「じゃあv3で行こう」と応じる。このハンドシェイクのプロセスこそが、攻撃者がOSのバージョンやパッチ適用状況をプロファイリングする隙になる。
実践:SMB署名の強制設定(Windows環境)
SMB署名が有効でないと、中間者攻撃(MITM)によって通信内容が改ざんされるリスクがある。PowerShellでサクッと設定を確認・変更するスクリプトがこれだ。
# 現在のSMB設定を確認
Get-SmbServerConfiguration | Select-Object RequireMessageSigning
# もし False なら、直ちに True に設定する(※クライアント側との互換性に注意)
Set-SmbServerConfiguration -RequireMessageSigning $true -Force
# 実行後に設定が反映されたか確認
Get-SmbServerConfiguration | Select-Object RequireMessageSigning
この設定を行うだけで、SMB通信のヘッダーに署名が含まれ、パケットが途中で書き換えられても受信側で破棄されるようになる。地味だが、最強の防御だ。
開発者が知っておくべき「API利用」とネットワークの罠
Webエンジニアの皆さんも油断は禁物だ。「社内システムだから」と言って、Pythonの smbprotocol ライブラリなどで不用意にファイル共有をマウントしたり、古いライブラリを使ったりしていないだろうか?
もしPythonでSMB経由のファイル操作を行うなら、必ず最新のライブラリを使用し、暗号化を有効にすること。
# PythonでSMBリソースに安全にアクセスするための概念コード
from smbclient import register_session, open_file
# セキュリティを担保するため、必ずSMBv3以上を強制する設計にする
# 認証情報は環境変数から読み込むなどの工夫を
register_session("server_ip", username="user", password="password", encrypt=True)
with open_file(r"\\server_ip\share\data.txt", mode="r") as f:
content = f.read()
print(content)
境界防御の要:ファイアウォールでのブロック確認
最後に、インフラの要であるファイアウォール。ルーターやNGFWの設定で、445/tcp がWAN側に漏れていないか、以下のコマンドで定期的にセルフチェックしてほしい。
# 外部からのスキャンを想定して、自分のパブリックIPに対して疎通確認を行う
# (※許可された環境でのみ実行すること)
nmap -p 445 <ターゲットのグローバルIP>
# 結果に "open" と表示されたら、即座にブロック設定を見直せ。
# 理想は "filtered" または "closed" であること。
結び:ゼロトラストの思想をプロトコルレベルに落とし込む
「社内だから安全」という時代は終わった。現代のネットワーク設計において、SMBは「厳重に管理されたセグメント内でのみ使用を許可する」ものとして扱うべきだ。
1. VLAN分割: サーバーセグメントとクライアントセグメント間のSMB通信は、必要なホスト間にのみ制限する。
2. ログ監視: 445ポートへの大量の接続試行があれば、即座にIDS/IPSでアラートを飛ばす。
ネットワークは生き物だ。一度設定して終わりではなく、パケットがどう流れているのかを常に想像し、プロトコルの挙動を理解し続けること。それが、凄腕のエンジニアへの唯一の近道だ。
現場からは以上だ。次は、VPN越しのSMB通信におけるMTUサイズとパフォーマンス劣化のトラブルシュートについて話そうか。また現場で会おう。
コメント