皆さん、こんにちは!ネットワークの裏側やセキュリティの泥臭い攻防戦を日々追いかけている技術ライターの私です。
インフラの世界へ足を踏み入れたばかりの頃って、次から次へと出てくる専門用語に圧倒されてしまいますよね。「ポート番号って何?」「リモート管理って便利な機能なのに、どうしてそれがサイバー攻撃に使われるの?」そんな疑問を抱えている方も多いはずです。一歩ずつ、目の前で起きていることを一緒に紐解いていきましょう!
今回は、現代のサイバーセキュリティにおいて最も警戒されている脅威の一つ、「WinRM(Windows Remote Management)」を悪用したランサムウェアの一斉感染の手口と、そのネットワークレベルでの防御策についてお話しします。
—
1. そもそも「WinRM」ってどんな仕組み?(現実世界で例えてみよう)
システムエンジニアやネットワーク管理者の皆さんにとって、遠隔にあるサーバーやパソコンを自分の机から操作できる「リモート管理」は、なくてはならない便利な機能ですよね。
Windowsの世界には、このリモート管理を行うための専用通路として WinRM(Windows Remote Management) という仕組みが用意されています。標準では、暗号化されていない通信のためのポートとして 5985番、暗号化された安全な通信のためのポートとして 5986番 が使われます。
このWinRMの動きを、身近な「郵便配達」に例えてみましょう。
- 管理者(司令塔): 「全支店のパソコンに、今すぐこの新しいお触書(スクリプト)を配って実行してくれ!」と指示を出す人。
- WinRM(ポート5985/5986): 管理者が各パソコンの部屋へ直接入っていくための「専用の通用口」。
- ドメイン参加PC(受け手): 会社のネットワークに繋がっているたくさんのパソコンたち。
通常、この通用口は「会社の合鍵(管理者アカウントのパスワード)」を持っている正当な管理者が、メンテナンスを行うために使うものです。非常に便利で、業務効率化には欠かせない仕組みなんですよね。
—
2. 恐怖のシナリオ:もしも「合鍵」が盗まれたら…?
ここで、サイバー攻撃の恐ろしい現実を覗いてみましょう。
もし、巧妙なフィッシングメールやマルウェアへの感染によって、攻撃者に「会社の合鍵(強力な管理者アカウントの認証情報)」が盗まれてしまったらどうなるでしょうか?
攻撃者は、わざわざ1台ずつ会社のパソコンの席を回ってウイルス入りのUSBメモリを挿すような、面倒で足がつきやすい真似はしません。彼らはこう考えます。
> 「よし、社内のネットワークに入り込んだぞ! このままWinRMの通用口(5985/5986)を使って、すべてのパソコンに同時に『ランサムウェアをダウンロードして暗号化を始めろ!』っていう命令を流し込んでやれ!」
これが、今回テーマにしている「WinRMの悪用によるリモートコード実行と、ランサムウェアの一斉感染」の全貌です。
郵便配達の例えで言えば、泥棒が本物の合鍵を手に入れて、夜中に全オフィスの郵便受けへ一斉に毒薬を投げ込むようなものです。あっという間にネットワーク内の全端末が人質(ランサムウェアによる暗号化)にとられ、業務が完全にストップしてしまいます。恐ろしいですよね。
—
3. 現場でどう防ぐ?ネットワークレベルでのアプローチ
「うわ、じゃあWinRMなんて怖い機能は今すぐ全部止めなきゃいけないの?」と思ったそこのあなた、ちょっと待ってください! 便利で必要な管理機能だからこそ、丸ごと禁止するのではなく、「通るべき場所を絞り、厳しい門番を置く」というゼロトラストの考え方が必要になります。
ここからは、実務の現場ですぐに役立つネットワークレベルの防御策を、具体的な設定例とともに見ていきましょう。
防御策①:ファイアウォールで「誰からの通信か」を厳しく制限する
標準の状態では、社内のどのパソコンからでも、ドメイン内の他のパソコンのWinRM(5985/5986)にアクセスできてしまうケースがあります。これを、「信頼できる特定の管理端末(踏み台サーバーなど)からしかアクセスできないようにする」制限をかけます。
Windowsの標準ファイアウォールや、社内ネットワークを区切るL3スイッチ・次世代ファイアウォールで、次のようなルールを適用します。
- 許可する送信元: 社内の管理用踏み台端末のIPアドレス(例:
192.168.10.50)のみ - 許可する宛先ポート:
5985(HTTP)および5986(HTTPS) - それ以外: すべて遮断(Deny)
もしPowerShellを使って、ローカルのWindowsファイアウォールで特定のIPアドレスからのみWinRMを許可する場合は、次のようなコマンドレットを管理用スクリプトに組み込むことができます。
# 【実務設定サンプル】特定の管理用IPアドレスからのみWinRM(HTTPS:5986)の接続を許可する
New-NetFirewallRule -DisplayName "WinRM-Admin-Only" `
-Direction Inbound `
-LocalPort 5986 `
-Protocol TCP `
-Action Allow `
-RemoteAddress 192.168.10.50 `
-Description "セキュリティ強化のため、指定した管理端末からのアクセスのみを許可します"
このように、誰でも彼でも通用口に近づけないよう、ネットワークの物理的・論理的なバリケードを築くことが最初のステップになります。
—
防御策②:暗号化通信(HTTPS: 5986)への強制とHTTP(5985)の封印
初期設定のままでは、平文(暗号化されていない状態)で通信を行う 5985番ポートが有効になっていることがあります。ネットワークの途中でパケットを盗聴されると、パスワードやコマンドの中身が丸見えになってしまいます。
実務では、必ず証明書を導入し、暗号化された 5986番ポートのみを使用するように強制しましょう。
# 【実務設定サンプル】HTTP(5985)のリスナーを削除し、HTTPS(5986)のみを許可する設定例
# ※注意: 実行する環境の証明書 thumbprint に書き換えてご利用ください
# 既存のHTTPリスナーを削除
Remove-Item -Path WSMan:\localhost\listener\listener* -Recurse
# 自己署名証明書などを用いてHTTPSリスナーを作成・バインドするコマンド例
$Cert = New-SelfSignedCertificate -DnsName "ansible-target.corp.local" -CertStoreLocation Cert:\LocalMachine\My
New-Item -Path WSMan:\localhost\Listener -Address * -Transport HTTPS -CertificateThumbPrint $Cert.Thumbprint -Force
# ファイアウォールでHTTP(5985)を無効化し、HTTPS(5986)のみを開ける
Disable-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)"
Enable-NetFirewallRule -DisplayName "Windows Remote Management (HTTPS-In)"
通信の中身を暗号化(HTTPS化)しておくことで、仮にネットワークのどこかでパケットをキャプチャされたとしても、攻撃者にコマンドや認証情報を簡単に読み取られるリスクを大幅に下げることができます。
—
まとめ:便利さと安全性はバランスが命
今回は、WinRMの悪用という少しドキッとするテーマを通じて、リモート管理の仕組みとネットワークレベルの防御策についてお話ししました。
- WinRM(ポート5985/5986) は便利な管理用チャネルだが、管理者アカウントの窃取と組み合わせると一斉ランサムウェア感染の凶器に変わり得る。
- 通信元の制限(IPアドレス制限) や 暗号化通信の強制(HTTPS化) を行うことで、攻撃者の横方向への移動(ラテラルムーブメント)を強力に阻止できる。
インフラやセキュリティの世界は、時に難しく感じられるかもしれませんが、「誰が・どこから・どの通路を通って・何をするのか」という現実世界のロジックに置き換えてみると、やるべき対策がすっきりと見えてきます。
一歩ずつ、確実な知識と設定を積み重ねて、強固なネットワークを守り抜くエンジニアを目指していきましょう! それではまた次回の技術解説でお会いしましょう。
コメント