インターネット全体に応答する RDP ポートには、サーバー起動から数分でパスワードの推測が届き始めます。長いパスワードなら破られませんが、推測のたびにログオン試行が起き、イベントログが埋まり、次の RDP の脆弱性に攻撃の入り口を与えます。これを 5 つの手順で解決します。どれも PowerShell のコマンドで、すべて公開前に当社の Windows Server 2022 イメージで実行しました。
RDP で接続して 管理者として PowerShell を開き(接続方法)、順番に進めてください。手順 4 は最後に行います。自分を締め出す可能性があるのはこの手順だけです。
1. 長く、使い回さないパスワード
初回ログインのパスワードのままなら、ダッシュボードで長いもの(20 文字以上、パスワードマネージャーで生成)に変更してください。以下の手順はすべて、パスワード自体が推測できないことを前提にしています。
2. ネットワークレベル認証(NLA)を有効にする
NLA があると、Windows はセッションを作ってログイン画面を描く前に資格情報を確認します。認証されていない接続はデスクトップのコードに届かず、有名な RDP の脆弱性の多くはまさにそこにありました。現在の状態を確認します。
(Get-CimInstance -Namespace root/cimv2/TerminalServices -ClassName Win32_TSGeneralSetting -Filter "TerminalName='RDP-tcp'").UserAuthenticationRequired
1 なら NLA は有効です。0 なら有効にします。
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 1
Windows、macOS、Linux(xfreerdp)の現在のリモートデスクトップクライアントはすべて NLA に対応しています。次回の接続では、リモート画面が出る前にパスワードを求められます。
3. 失敗が続いたらアカウントをロックする
Windows Server 2022 の既定のインストールでは、何回パスワードを間違えてもアカウントはロックされません。2026 年 10 月 24 日以降に当社のイメージからインストールしたサーバーには下記の上限が設定済みです。それより前のサーバーでは設定します。
net accounts /lockoutthreshold:5 /lockoutwindow:15 /lockoutduration:15
net accounts
15 分以内に 5 回間違えると、アカウントは 15 分間ロックされます。実際に試したところ、5 回失敗した時点で通常ユーザーも組み込みの Administrator もロックされました。ロックは自動で解除されるので、打ち間違いの多い朝でも失うのは 15 分で、サーバーではありません。
4. RDP を自分の IP アドレスからだけ許可する
この手順でノイズのほとんどが消えます。Windows ファイアウォールのルールはリモートアドレスの一覧を受け付けるので、自分のアドレスを入れます。「IP アドレス確認」系のページで現在のグローバル IP を調べてから:
$myIp = '203.0.113.10' # your public IP; several: '203.0.113.10','198.51.100.0/24'
Get-NetFirewallPortFilter | Where-Object LocalPort -eq 3389 | Get-NetFirewallRule | Set-NetFirewallRule -RemoteAddress $myIp
このコマンドは、組み込みの「リモート デスクトップ」グループだけでなく、ポート 3389 の受信ルールをすべて見つけます。ここが重要です。2026 年 10 月 24 日より前に当社のイメージからインストールしたサーバーには、ポートを全員に開ける「EQVPS RDP 3389」という追加ルールがあり、ほかのソフトウェアが独自のルールを追加することもあります。組み込みグループだけを制限すると、そうしたルールがポートを開けたままにします。私たち自身、テスト中にまさにこの失敗をしました。結果を確認します。
Get-NetFirewallPortFilter | Where-Object LocalPort -eq 3389 | Get-NetFirewallRule |
Select-Object DisplayName, @{n='Remote';e={($_ | Get-NetFirewallAddressFilter).RemoteAddress}}
すべての行にあなたのアドレスが表示されるはずです。私たちのテストでは、他のアドレスからの接続は応答がなく、許可したアドレスからは接続できました。
NAT プランでも同じように動きます。専用ポートからの転送はあなたの本当のアドレスを保つので、自分のグローバル IP を許可してください。
IP が変わると、RDP はあなたにも応答しなくなります。ダッシュボードからブラウザーコンソールを開き(RDP もファイアウォールも経由しません)、ログインして新しいアドレスでコマンドを実行してください。許可リストを完全に外すには -RemoteAddress Any を使います。
5. 誰がログインを試みているか見る
ログオンの失敗はセキュリティログのイベント 4625 です。次のコマンドで、各試行のアカウント名と送信元アドレスが分かります。
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 20 |
Select-Object TimeCreated, @{n='User';e={$_.Properties[5].Value}}, @{n='SourceIP';e={$_.Properties[19].Value}}
許可リストを設定する前は、知らないアドレスから Administrator、admin、user が絶え間なく届くはずです。設定後は、一覧が静かになります。
やらなくてよいこと
- RDP のポート変更。 専用 IPv4 のプランではログのノイズが減るだけで、スキャナーはすぐ新しいポートを見つけます。NAT プランでは転送先が 3389 なので、アクセスできなくなります。
- 「動かすために」ファイアウォールを切ること。 ルール変更後に RDP が応答しなくなったら、ブラウザーコンソールからルールを直してください。
更新を続ける
RDP の最も深刻なインシデントは、パスワードではなくプロトコルの脆弱性から起きました。Windows Server 2022 は 2031 年 10 月 14 日までセキュリティ更新を受け取ります。Windows Update は有効のままにし、求められたら再起動してください。
イメージはあなた自身のライセンスで使う Windows Server 2022 です(BYOL の仕組み)。プランは Windows-Small から:4 vCPU、RAM 4 GB、50 GB、NAT で月 $11。専用 IPv4 付きの Windows Small-IP は月 $28 です。4 つのプランはすべて Windows VPS のページにあります。RDP と並べて SSH を使うなら、Windows Server の OpenSSH をご覧ください。
コメント
まだコメントはありません。最初になりましょう。