リモートデスクトップの仕組み
リモートデスクトップは、遠隔地にある Windows の画面を、IP ネットワーク越に見ることができるプロトコルです。
主に Windows サーバへの接続に使われますが、Windows PC (Pro) への接続にも使えます。
接続にはデフォルトで TCP 3389 番ポートと UDP 3389 番ポートが使われます。
やり取りする情報はいわゆる KVM 情報、つまりキーボード/マウス情報を送り、画面情報を取得するのです。
TCP は SSL/TLS による暗号化が行われており、通信傍受に対しては耐性を持ちます。TLS なので (証明書による) 公開鍵認証は行われますが、そもそも証明書自体が自己署名証明書なので、認証機能としては期待できません。
接続時に『リモートコンピューターは、セキュリティ証明書に問題があったため認証されませんでした。続行すると安全でない可能性があります。』と表示されます (下図) が、このことです。
UDP は画面情報の体感を向上させるために使われているようですが詳細は不明です。UDP だけをファイアウォールで閉じても利用には問題無いようです。
リモートデスクトップをインターネット公開するためのセキュリティ強化
まず、原則を言うとリモートデスクトップはインターネットから直接接続出来るようにすべきではありません。
暗号化されているため通信傍受は容易ではありませんが、今のところパスワードによる認証しかできず、しかもデフォルト設定だと何度間違えてもロックされないため、攻撃は試され放題です。
でもどうしてもインターネットから実施したいのだと言うのであればそれなりのセキュリティ対策をすべきです。ここでは考え得る対策を紹介します。
1. IPsec-VPNやSSL-VPNを導入し、VPN経由にする
IPsec-VPN 装置や SSL-VPN 装置を使えば、多要素認証やワンタイムパスワード等の様々なセキュリティ強化が可能です。
まずは VPN 装置に接続し、VPN 経由時の送信元 IP からのみ受け付けるようにすればセキュアになります。
Fortigate 等を使えば安価に構築が可能です。
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
レジストリ名: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 間で互いにやり取りしています。(詳細は不明)
コメント