Windows Server 2012 R2 以前と Windows Server 2016 の NLA 無効化の手順の違いについて

皆さん、こんにちは。Windows サポートの神田です。

こちらの記事では、リモート デスクトップ接続で使用される認証プロトコルである NLA (ネットワーク レベル認証) について、Windows Server 2012 R2 以前と Windows Server 2016 の間で無効化の手順が異なる点について取り上げます。

- その前に : NLA (ネットワーク レベル認証)  とは
NLA とは、Windows Vista、Windows Server 2008 以降で実装された認証処理で、サーバーがユーザーとのセッションを確立する前に、認証に使用するユーザーの資格情報を提示するよう、接続元に強制させる動作です。
リモートデスクトップで接続先を指定して [接続]をクリックした際に、ログオン画面が表示される前に、ユーザーの資格情報を先に求められる動作が、NLA が有効になっている動作となります。

※ 余談ですが、NLA が有効な場合の既定の認証動作が、2018 年 5 月の更新プログラムで変更され、お問い合わせがサポートにも多数寄せられました。未確認のお客様がいらっしゃいましたら、ご一読をいただければと思います。

2018 年 5 月の更新プログラム適用によるリモート デスクトップ接続への影響
https://blogs.technet.microsoft.com/askcorejp/2018/05/02/2018-05-rollup-credssp-rdp/
CVE-2018-0886 の CredSSP の更新プログラム
https://support.microsoft.com/ja-jp/help/4093492/credssp-updates-for-cve-2018-0886-march-13-2018

-  Windows Server 2012 R2 以前の NLA の無効化について
弊社としては、セキュリティ上の理由から NLA は有効のままでご利用いただく事を推奨しています。しかしながら、ご利用環境や、運用の計画により NLA を無効化しなければならない状況が発生することがあります。
例えば、RemoteApp を使用している以下のような利用環境の場合では、NLA を無効化することが対策の一つとなります。

Windows Server 2012 R2 および Windows 8.1 以降のネットワーク レベル認証の動作について
https://blogs.technet.microsoft.com/askcorejp/2015/11/10/windows-server-2012-r2-windows-8-1-1/

上記の例では、NLA 認証が接続先で強制される設定でも、NLA での認証が完全に無効化されないため、パスワードの期限が終了した場合に RemoteApp からはパスワードが変更できない状態になります。対策はブログに複数の方法が記載されていますが、方法の一つとして NLA そのものをポリシーから無効化する方法を案内しています。
以下の ポリシー項目のうち、”a. と c.” もしくは ”b. と c.” を設定します。

[コンピューターの構成] - [管理用テンプレート] - [Windows コンポーネント] -  [リモート デスクトップ サービス]
- [リモート デスクトップ セッション ホスト] - [セキュリティ]
a. クライアント接続の暗号化レベルを設定する
状態:“有効”
暗号化レベル:“低レベル”
b. リモート (RDP) 接続に特定のセキュリティ レイヤーの使用を必要とする
状態:“有効”
セキュリティ レイヤー:“RDP”
c. リモート接続にネットワーク レベル認証を使用したユーザー認証を必要とする
状態:“無効”

組み合わせが 2 通りある理由は、リモートデスクトップ プロトコルのセキュリティ レイヤーの既定値によるものです。Windows Server 2012 R2 以前では、セキュリティ レイヤーの既定値が "ネゴシエート" であるため、”a. と c.” でも NLA は無効にできますし、”b. と c.” でも無効化できます。

-  Windows Server 2016 の NLA の無効化について
Windows Server 2016 でも、NLA を無効化しなければならない状況があります。その場合は、Windows Server 2012 R2 の場合と同様にポリシーから無効しますが、上記の ”a. と c.” では、NLA は無効化されません。Windows Server 2016 では ”b. と c.” の組み合わせを設定することで、 NLA を無効化できます。

[コンピューターの構成] - [管理用テンプレート] - [Windows コンポーネント] -  [リモート デスクトップ サービス]
- [リモート デスクトップ セッション ホスト] - [セキュリティ]
b. リモート (RDP) 接続に特定のセキュリティ レイヤーの使用を必要とする
状態:“有効”
セキュリティ レイヤー:“RDP”
c. リモート接続にネットワーク レベル認証を使用したユーザー認証を必要とする
状態:“無効”

Windows Server 2016 では、b. の [セキュリティ レイヤー:“RDP”] を明示的に指定する必要があります。

-  Windows Server 2016 のセキュリティ レイヤーの既定値について
上記の設定値の違いは、Windows Server 2016 ではセキュリティ レイヤーの既定値が  “ネゴシエート“ から “SSL” に変更されたことに起因しています。
Windows Server 2012 R2 以前では、セキュリティ レイヤーの既定値が  “ネゴシエート“ であるため、上記ポリシー  a. [暗号化レベル:“低レベル”] を指定すれば、NLA が無効化できました。しかしながら Windows Server 2016 では、セキュリティ レイヤーの既定値が  “SSL“ であるため、 [暗号化レベル:“低レベル”] に設定しても SSL での通信を試みるため、NLA の認証が行われます。そのため Windows Server 2012 R2 では無効化できたポリシー ”a. と c.” の組み合わせでは、ポリシーは無効化されません。

なお、Windows Server 2016 と今まで記載しておりましたが、クライアント OS である Windows 10 にも Professional Edition 以上にはリモート デスクトップ機能があり、セキュリティ レイヤーの既定値は “SSL” になっており、Windows Server 2016 と同じ動作となります。
セキュリティ レイヤーの設定を保存するレジストリは以下となっておりますので、ご利用いただいている環境のリモート デスクトップ プロトコルのセキュリティ レイヤーの設定を確認する場合は、こちらを参照してください。

レジストリ サブキー
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp
値の名前 : SecurityLayer
値の種類 : REG_DWORD
値のデータ : 2  (1: ネゴシエート、2: SSL となります)

– 参考文献 –
※1 リモート デスクトップ サービス接続のネットワーク レベル認証を構成する
https://technet.microsoft.com/ja-jp/library/cc732713.aspx

※2  Windows Server 2008 R2: ネットワーク レベル認証を使用すべき理由
https://technet.microsoft.com/ja-jp/magazine/hh750380.aspx

※3 リモート デスクトップ セッションでは、期限切れになったユーザーアカウントのパスワードを変更できません。
https://support.microsoft.com/ja-jp/kb/2858371