0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

第14回:WinRM vs SSH:Windowsリモート管理のセキュリティ徹底比較

0
Posted at

はじめに

Windowsのリモート管理における「WinRM」と「SSH」。以前は「WindowsならWinRM、LinuxならSSH」と住み分けられていましたが、現在はWindows ServerもOpenSSHを正式サポートしており、どちらを選ぶべきか迷う場面が増えています。

この記事では、セキュリティの観点から両者を徹底比較し、環境に応じた選択基準を整理します。

対象環境

  • Windows Server 2019 / 2022、Windows 10 / 11
  • 各コマンドは管理者権限のPowerShellで実行してください。

1. WinRM(Windows Remote Management)のセキュリティ

WinRMは、HTTP/HTTPSをベースとしたWS-Managementプロトコルを使用します。PowerShell Remotingの通信基盤でもあり、Enter-PSSessionInvoke-Command はWinRMの上で動作しています。

強み:Active Directoryとの親和性

WinRMの最大のメリットはKerberos認証との親和性です。ドメイン環境では追加設定なしに強力な認証が利用でき、GPO(グループポリシー)による一括構成・PowerShell Remotingとのシームレスな統合が可能です。

懸念点①:HTTPポートの誤解

WinRMには「HTTP(5985)」と「HTTPS(5986)」の2つの待受ポートがあります。

  • HTTP(5985): 通信の「暗号化」について注意が必要です。Kerberos認証を使う場合、メッセージ本体はSPNEGOラッパーによって暗号化されますが、これはHTTPSとは本質的に異なります。HTTPSはTLSによるトランスポート層全体の保護であるのに対し、Kerberosのメッセージ暗号化はあくまでペイロードレベルの保護です。ワークグループ環境でKerberosが使えない場合、通信内容が実質的に平文に近い状態になるリスクがあります。
  • HTTPS(5986): 証明書の発行・更新・配布が必要になり、運用コストが高まります。ただし、AD CS(Active Directory証明書サービス)がある環境では自動配布も可能です。

懸念点②:NTLMの利用に注意

認証方式としてNTLMも選択できますが、NTLMはリレー攻撃(Pass-the-Hash / NTLM Relay)に対して脆弱であり、積極的な利用は推奨できません。ドメイン環境ではKerberos認証を強制し、NTLMをフォールバックさせない設定を徹底してください。

# ネットワークセキュリティ:LANマネージャーの認証レベルを確認
# レベル5(NTLMv2のみ許可・Kerberosを優先)が推奨
Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name LmCompatibilityLevel

2. SSH(Secure Shell)のセキュリティ

かつてはサードパーティ製ソフトが必要でしたが、現在はOpenSSH for WindowsとしてOS標準搭載されています(Windows Server 2019以降・Windows 10 1809以降)。

# インストール確認
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'

# インストールと自動起動設定
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

強み:デフォルトでセキュア

SSHは設計段階から「すべての通信を暗号化する」ことが前提となっており、証明書インフラなしでも強力なトランスポート層暗号化が提供されます。

  • 公開鍵認証: パスワード認証を禁止し公開鍵認証のみに制限することで、ブルートフォース攻撃をほぼ完全に無効化できます。
  • シンプルさ: AD CSのような複雑なPKIインフラがなくても、堅牢な暗号化通信が可能です。

懸念点①:デフォルトポートはスキャンの標的になりやすい

SSHのデフォルトポート22は、インターネット上で常時スキャンされています。インターネット公開サーバーでは、ポートを変更するか、ファイアウォールで接続元IPを制限することを強く推奨します。

# C:\ProgramData\ssh\sshd_config を編集してポートを変更
# Port 22  →  Port 2222(例)
# 変更後はssdサービスを再起動
Restart-Service sshd

懸念点②:Windows固有の権限管理

SSH経由でWindowsにログインした場合、JEA(Just Enough Administration) のようなWindows固有の詳細な権限制限をWinRMと同様に適用するのは難易度が高い側面があります。対処としては以下の方向性があります。

  • SSH subsystemとしてPowerShellを指定し、その中でJEAエンドポイントに接続する
  • Windowsの権限管理が必須の場面ではWinRMを温存し、SSHはファイル転送(SFTP)や汎用コマンド実行に限定する

3. 直接比較表

比較項目 WinRM SSH
トランスポート暗号化 HTTPS時のみ完全暗号化(HTTP+Kerberosは部分的) 常に完全暗号化
認証方式 Kerberos(推奨)、NTLM(非推奨)、証明書 公開鍵認証(推奨)、パスワード
デフォルトポート 5985 / 5986 22(スキャン対象になりやすい。変更推奨)
設定の容易さ ドメイン+GPOなら非常に楽 sshd_configの編集が必要。鍵配布はやや手間
クロスプラットフォーム Windowsのみ Windows / Linux / macOS
AD/GPO連携 ネイティブ対応 要カスタマイズ
JEA連携 ネイティブ対応 設定がやや複雑
PowerShell Remoting ネイティブ 設定でSSH経由も可能

4. 結局、どちらがセキュアなのか?

「管理環境と要件」によって最適解が異なります。

WinRMを優先すべきケース

  • Active Directoryドメイン環境: GPOによる一括管理とKerberosによるSSO(シングルサインオン)が利用でき、Windows管理のエコシステムの中では非常に強固かつ効率的です。
  • PowerShell Remotingを多用する場合: Invoke-Command によるリモートスクリプト実行や、JEAを使った権限委任はWinRMが前提です。

SSHを優先すべきケース

  • ハイブリッド環境(Windows/Linux混在): 「公開鍵認証」という一貫したセキュリティポリシーをOSを問わず適用できます。
  • ワークグループやクラウド環境: Kerberosが使えない環境ではWinRMのHTTPは危険です。SSHなら証明書管理のオーバーヘッドなしに安全な通信を確保できます。
  • インターネット越しの管理: WinRMのポートをインターネットに公開するのはリスクが高く、SSHの方が実績・ツールともに成熟しています。

5. 要塞化のためのベストプラクティス

WinRMの要塞化

# 1. HTTPリスナーを削除(HTTPSのみに制限)
Remove-WSManInstance -ResourceURI winrm/config/listener `
  -SelectorSet @{Address="*"; Transport="http"}

# 2. 現在のリスナーを確認(HTTPSのみ残っていればOK)
Get-WSManInstance -ResourceURI winrm/config/listener -Enumerate

# 3. 接続元IPをファイアウォールで制限(管理端末のIPのみ許可)
New-NetFirewallRule -DisplayName "WinRM-HTTPS-Restrict" `
  -Direction Inbound -Protocol TCP -LocalPort 5986 `
  -RemoteAddress "192.168.10.0/24" -Action Allow

SSHの要塞化

C:\ProgramData\ssh\sshd_config を編集します。

# パスワード認証を無効化(公開鍵認証のみ許可)
PasswordAuthentication no

# rootに相当するAdministratorの直接ログインを禁止
PermitRootLogin no

# 空パスワードを禁止
PermitEmptyPasswords no

# 使用する認証方式を明示
AuthenticationMethods publickey
# 設定ファイル編集後にサービスを再起動
Restart-Service sshd

# 設定が有効になったか確認
ssh -v user@hostname 2>&1 | Select-String "Authentication"

共通のベストプラクティス

  • 管理者権限での直接ログインを禁止: 通常ユーザーでログインし、必要な時だけ sudo 相当(Run as Administrator / JEA)で昇格させる運用を徹底する。
  • 接続元IPを必ずホワイトリスト化: どちらのプロトコルも、管理用ポートはインターネット全開放しない。
  • ログの集約監視: 不正アクセスの試みをSIEMやAzure Monitorで検知できるようにしておく。

まとめ

現代のWindows管理においては、「ドメイン内はWinRM(Kerberos + HTTPS)、クロスプラットフォームやクラウドはSSH(公開鍵認証)」という使い分けが最もバランスの取れた選択です。

どちらか一方に統一する必要はありません。重要なのは、選んだプロトコルの弱点を理解した上で、適切な要塞化設定を怠らないことです。


参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?