2016/11/17 更新:「MS16-101: Windows 認証のセキュリティ更新プログラム (2016 年 8 月)」を適用するとユーザーのパスワード変更に失敗する場合がある

こんにちは、プラットフォーム サポート チームの高田です。

 

2016 年 8 月 9 日にリリースされた、「MS16-101: Windows 認証のセキュリティ更新プログラム」について情報をおまとめしました。

MS16-101: Security update for Windows authentication methods: August 9, 2016
https://support.microsoft.com/en-us/kb/3178465 (英語)
https://support.microsoft.com/ja-jp/kb/3178465 (日本語)

現在、MS16-101 の動作は、MS16-137 により変更されています。
詳細については、MS16-137 のページもしくは以下の記事を参照いただければと思います。

 

https://blogs.technet.microsoft.com/jpntsblog/2016/11/17/ms16-137/

 

MS16-101 の動作と影響

上記更新プログラムを適用すると、下記のメッセージが表示されユーザー パスワードの変更が失敗する現象が生じる場合があります。いずれも、0x800704F1 (ERROR_DOWNGRADE_DETECTED) エラーに対応するメッセージです。

セキュリティに危害を与える試みが検出されました。認証したサーバーに連絡してください。
The system detected a possible attempt to compromise security. Please ensure that you can contact the server
that authenticated you.

また、以下のようなメッセージが表示されることもあります。

認証要求を処理するドメイン コントローラーにアクセスできません。しばらくしてから再実行してください。
The system cannot contact a domain controller to service the authentication request. Please try again later.

 

これは、ページにも記載のとおり、パスワード変更時に Kerberos 認証から NTLM 認証にダウングレードしないよう動作が変更されたためです。パスワード変更処理において NTLM 認証へのフォールバックを悪用することでアカウントが攻撃対象となる問題が確認されたため、このフォールバック動作が行われないよう変更されました。

ユーザー パスワードを変更する際、Kerberos 認証が用いられた場合は kpasswd プロトコルを利用して (TCP 464 番ポート) 処理が試行されます。これに失敗すると、これまでは NTLM 認証に切り替わり処理が行われました。MS16-101 が適用されると、kpasswd での処理に失敗した場合 NTLM に切り替わりません。結果としてパスワード変更の通信が行われず上記メッセージやエラーが生成されます。

このため、例えばお客様において以下のような処理や運用をしていた場合、MS16-101 をクライアント (パスワード変更の要求元) に適用すると、パスワード変更に失敗することが想定されます。いずれも NTLM 認証が利用されることでパスワード変更が失敗します。

  1. クライアントからドメイン コントローラーへの TCP 464 番ポートでの通信をファイアーウォールなどでブロックしている
  2. SAMR や SMB プロトコルでパスワード変更処理をしている
  3. IP アドレスを利用して接続先ドメイン コントローラーを指定しパスワード変更処理をしている
    (サーバー名に 192.168.10.1 を指定したり、ユーザー名に 192.168.10.1\username を指定したりしている)
  4. 別マシンにあるローカル ユーザーのパスワードをリモートで変更しようとする

 

MS16-101 における既知の問題と追加の更新

大変恐れ入りますが、MS16-101 には既知の問題が報告されており、パスワード変更時に誤ったエラーが返されるなどの問題がありました。これらについては問題の修正されたモジュールが 2016 年 10 月にリリースされ、問題が解消しました。発生していた具体的な問題については、MS16-101 (KB3178465) のページをご覧いただければと思います。

マイクロソフト セキュリティ情報 MS16-101 - 重要
https://technet.microsoft.com/ja-jp/library/security/MS16-101.aspx

また、10 月の更新を適用することで、MS16-101 の更新内容の有効/無効を切り替えることが可能となります。無効化するには、後述するレジストリ値を作成ください。当該レジストリは、MS16-101 の KB ページでも解説されています。当該レジストリを 1 に設定することで、セキュリティ更新プログラム適用後も、MS16-101 の変更内容を無効化可能です。

パス: HKLM\System\CurrentControlSet\Control\Lsa
名前: NegoAllowNtlmPwdChangeFallback
種類: 32-bit REG_DWORD

値によってそれぞれ以下のような動作となります。

値 0: 既定の動作です。NTLM 認証へフォールバックしません。
値 1: Kerberos 認証によるパスワード変更失敗時、NTLM 認証へフォールバックします。

該当レジストリ値は更新を適用しただけでは作成されないため、手動で追加していただく必要がございます。

重要: NegoAllowNtlmPwdChangeFallback のレジストリを用いた MS16-101 による動作変更の無効化は、セキュリティよりも運用を重視されたいお客様のために用意されたものです。本設定を行うことにより、MS16-101 により対処された脆弱性が再び顕在化します。当該レジストリを有効にし MS16-101 による対処を無効化する際は、セキュリティ上のリスクをご了承の上、実施くださいますようお願い申し上げます。

 

MS16-101 の更新内容への対処方法

MS16-101 の適用後、パスワード変更に失敗し始めたお客様におかれましては、それぞれ以下のような対応を検討ください。

  1. クライアントからドメイン コントローラーへの TCP 464 番ポートの通信を許可する
    (TCP 464 kpasswd での通信を行うにはドメイン コントローラーが必要です)
  2. kpasswd プロトコルを利用してパスワード変更が行われるようアプリケーションを実装する
  3. example.local などドメイン名を指定してパスワード変更処理を行う
    (サーバー名に example.local を指定したり、ユーザー名に example.local\username を指定したりする)

上記 2. については、例えば、NetUserChangePassword API を利用している場合、第一引数の domainname にサーバー名ではなく、ドメイン名 (example.local など) を指定ください。ドメイン名を指定することで、kpasswd プロトコルによるパスワード変更が試行されます。ただし、ドメイン コントローラーとの疎通に問題がある場合、Kerberos から NTLM へフォールバックする動作が生じるため、MS16-101 の動作変更により、ERROR_DOWNGRADE_DETECTED のエラーが生成されます。

恐れ入りますが、別マシンにあるローカル ユーザーのパスワードをリモートで変更しようとすることはできません。これは Kerberos 認証が利用できず、NTLM 認証がもちいられるためです。恐れ入りますが、このように別マシンにあるローカル ユーザーのパスワードをリモートで変更するような運用を実施されているお客様は、上述の NegoAllowNtlmPwdChangeFallback レジストリ値を利用し、MS16-101 の変更を無効化ください。セキュリティ上のリスクについてもご了承のほどお願い申し上げます。

 

補足

無効化もしくはロックアウトされたユーザー アカウントでは、MS16-101 の有無に限らず Kerberos 認証を使用してパスワードを変更することは許容されていません。そのため、KB でも MS16-101 の適用後にパスワードを変更できなくなることを報告しております。

また MS16-101 をクライアントやドメイン コントローラーに適用した場合でも、管理者が [Active Directory ユーザーとコンピューター] などの Active Directory のツールを使用して、無効化もしくはロックアウトされたユーザー アカウントに対してパスワードを設定することは可能です。MS16-101 は、パスワード変更処理 (Change Password) に影響を与え、パスワードのリセット処理 (Set Password) には影響を与えません。

 

変更履歴

  • 2016 年 8 月 17 日: 本ブログ情報の公開。
  • 2016 年 8 月 29 日: パスワード変更に失敗するパターンや対処策について追記。
  • 2016 年 9 月 02 日:  対処策に API 観点の情報を追記し、事象 1 および事象 2 を追加情報として記載。
  • 2016 年 9 月 27 日: MS16-111 および、事象 1、事象 2 について追記。
  • 2016 年 10 月 17 日: MS16-118 について記載し全体を再構成。
  • 2016 年 10 月 18 日: 混乱を招きやすい記述を変更。
  • 2016 年 11 月 17 日: MS16-137 への参照を追加。