【リモートデスクトップ】の仕組みとセキュリティ強化~インターネット接続と暗号化~

リモートデスクトップの仕組み

リモートデスクトップは、遠隔地にあるWindowsの画面を、IPネットワーク越に見ることができるプロトコルです。主に Windows サーバへの接続に使われますが、Windows PC (Pro) への接続にも使えます。

接続にはデフォルトで TCP 3389番ポートと UDP 3389番ポートが使われます。やり取りする情報はいわゆるKVM情報、つまりキーボード/マウス情報を送り、画面情報を取得するのです。

TCP は SSL/TLS による暗号化が行われており、通信傍受に対しては耐性を持ちます。TLS なので(証明書による)公開鍵認証は行われますが、そもそも証明書自体が自己署名証明書なので、認証機能としては期待できません。接続時に『リモートコンピューターは、セキュリティ証明書に問題があったため認証されませんでした。続行すると安全でない可能性があります。』と表示されます(下図)が、このことです。

UDP は画面情報の体感を向上させるために使われているようですが詳細は不明です。UDP だけをファイアウォールで閉じても利用には問題無いようです。

 

リモートデスクトップをインターネット公開するためのセキュリティ強化

まず、原則を言うとリモートデスクトップはインターネットから出来るようにすべきではありません。暗号化されているため通信傍受は容易ではありませんが、今のところパスワードによる認証しかできず、しかもデフォルト設定だと何度間違えてもロックされないため、攻撃は試され放題です。

でもどうしてもインターネットから実施したいのだと言うのであればそれなりのセキュリティ対策をすべきです。ここでは考え得る対策を紹介します。

1. SSL-VPNを導入し、VPN経由にする

SSL-VPN 装置を使えば、多要素認証やワンタイムパスワード等の様々なセキュリティ強化が可能です。まずは SSL-VPN に接続し、SSL-VPN 経由時の送信元 IP からのみ受け付けるようにすればセキュアになります。

2. 接続元IPアドレスを絞る

NW機器のファイアウォールや Windows Firewall 等を使って、送信元 IP によるアクセス制御を行いましょう。利用者がどのグローバル IP アドレスを使うかを確認した上で、そのグローバルIPからのみ TCP/UDP:3389 の通信を許可するわけです。

3. セキュリティポリシーの強化

サーバ側の『ローカルセキュリティポリシー』により、RDP 接続時に関するセキュリティポリシーの強化ができます。

Windowsキー + R ⇒ 『ファイル名を指定して実行』にて "secpol.msc" と入力し Enterすると『ローカルセキュリティポリシー』が表示されます。

まずは『パスワードのポリシー』にてパスワードの長さや有効期間などを設定。

次に『アカウントロックアウトのポリシー』にてパスワード間違え時のアカウントロックを設定。

そして『ネットワーク経由でのアクセス』にてRDPでログインできるユーザを限定。

ここではAdministrators等は禁止し、個人を識別できるアカウントを作成して登録すべきです。

4. ポート番号を変更する

TCP/UDP: 3389を変更し、攻撃者から推測しにくくします。変更するためにはレジストリの変更が必要です。

Windowsキー + R ⇒ 『ファイル名を指定して実行』にて "regedit" を入力し、Enter

場所:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp

レジストリ名:PortNumber

ここを例えば 65432 に変更して再起動します。これで TCP もUDPもポート番号が 65432 に変わります。ファイアウォールの穴あけを忘れずにしましょう。

RDPのパケットキャプチャを覗いてみる

RDPで使われるTLSのバージョンは現在1.2になっていますが、少しカスタマイズが入っているようで、完全なRFC準拠にはなっていません。パケットキャプチャをWireshark で見てみると "Ignore Unknown Record" と表示され、RFC規格には存在しない [ Record Type=0x03 ] が埋め込まれています。他は RFC のものに非常に似通っていますが、ネゴの最後の "Finished" が無く、Encrypted Handshake Message でネゴを締めています。

UDPは以下のようにClient<->Server間で互いにやり取りしています。(詳細は不明)