「MS16-137: Windows 認証方法用のセキュリティ更新プログラム」(2016 年 11 月 9 日) を適用すると一部シナリオを除き NTLM でのパスワード変更が再度可能となる
こんにちは、プラットフォーム サポート チームの高田です。
今回は「MS16-137: Windows 認証方法用のセキュリティ更新プログラム」について情報をお知らせいたします。
MS16-137: Description of the security update for Windows authentication methods: November 8, 2016
https://support.microsoft.com/en-us/kb/3198510 (英語)
https://support.microsoft.com/ja-jp/kb/3198510 (日本語)
上記の更新プログラムには先月更新されました MS16-101 の動作をさらに変更する更新が含まれております。MS16-101 により影響を受けたお客様は、本記事をご一読いただけますと幸いです。MS16-101 については、以下の記事も参照ください。
https://blogs.technet.microsoft.com/jpntsblog/2016/08/17/ms16-101/
MS16-137 の概要
上記更新プログラム MS16-137 は、特権の昇格に関する脆弱性を修正します。攻撃者がこの脆弱性を悪用した場合、特権のないユーザー アカウントの権限を管理者に昇格させる可能性があります。また攻撃者は、NTLM のパスワード変更要求を操作するように特別に細工されたアプリケーションをローカルで実行することにより、特権を昇格させようとする可能性があります。MS16-137 を適用することで、これらの問題が解消します。
MS16-137 で行われた動作変更
MS16-137 では、当初 MS16-101 で実装された「パスワード変更時に Kerberos 認証から NTLM 認証にダウングレードしないようにする動作」が改められています。NTLM のフォールバックは MS16-101 で無効になりましたが、MS16-137 の更新プログラムで再び有効 (可能) になりました。
MS16-137 の更新プログラムでパスワード変更時に NTLM へのフォールバックが有効 (可能) になったのは、これまでに確認されている脆弱性を解決しつつ、パスワード変更時に NTLM にフォールバックしても問題のない対処方法が実装できたためです。MS16-137 は MS16-101 とは異なるアプローチで脆弱性を解消しています。この結果、脆弱性の解消と NTLM へのフォールバック有効化の両方を実現しました。
これに伴い、MS16-101 で導入された NegoAllowNtlmPwdChangeFallback レジストリはもはや必要ありません。MS16-101 では、本レジストリを使用することで MS16-101 の変更内容を無効化できました。当該レジストリは MS16-101 で影響を受けたお客様用の一時的な回避方法であり、MS16-137 を適用した後は不要です。
また、MS16-137 の適用後は、ADSI でパスワード変更した際に発生する例外の HRESULT が元に戻されております。パスワード変更時に現在のパスワードを間違えた場合や、新しいパスワードがポリシーに沿っていなかった場合、返される HRESULT の値が MS16-101 の適用前後で異なっておりました。アプリケーションでユーザーのパスワードを変更しているお客様におかれましては、セキュリティ更新の適用状況に関わらずエラーハンドリングできるよう、0xc000006A, 0xC000006C, 0x80070056, 0x800708C5 のエラー 4 つに対応いただくことをご検討ください。
- MS16-101 適用前
- 現在のパスワードを間違えた場合: winerror.h: 0x80070056 (0x56): ERROR_INVALID_PASSWORD
- 新しいパスワードがポリシー違反の場合: lmerr.h: 0x800708C5 (0x8c5): NERR_PasswordTooShort
- MS16-101 適用後
- 現在のパスワードを間違えた場合: ntstatus.h: 0xc000006A: STATUS_WRONG_PASSWORD
- 新しいパスワードがポリシー違反の場合: ntstatus.h: 0xC000006C: STATUS_PASSWORD_RESTRICTION
- MS16-137 適用後 (MS16-101 適用前と同じです)
- 現在のパスワードを間違えた場合: winerror.h: 0x80070056 (0x56): ERROR_INVALID_PASSWORD
- 新しいパスワードがポリシー違反の場合: lmerr.h: 0x800708C5 (0x8c5): NERR_PasswordTooShort
恐縮ながら、MS16-101 のリリースにより一部のお客様にはアプリケーションのコード変更 (kpasswd を利用するような変更やエラー ハンドリングの変更) などのお手間を頂戴しました。今回の MS16-137 のリリースによりさらに混乱を招きし申し訳なく思いますが、MS16-137 は MS16-101 により生じた影響を可能な限り解消するための追加更新であるとお考えください。
MS16-137 の適用後に生じるパスワード変更失敗のシナリオ
MS16-137 では、上述の動作変更により、パスワード変更時の NTLM へのフォールバックが有効化されています。しかし、脆弱性の解消に伴い一部シナリオで NTLM を使用したパスワード変更がブロックされます。具体的には、KB ページに記載されているように、NTLM を利用して同一ユーザーのパスワードを複数のマシンから変更するようなシナリオです。このシナリオに該当した場合、KB ページの記載のとおりのエラーコードおよび対応するメッセージが生成され、パスワード変更が失敗します。
お客様においては、パスワード変更時の認証処理において、必ず Kerberos (kpasswd) が利用されるようにしていただければと思います。Kerberos (kpasswd) を利用いただければ、パスワード変更に影響は生じません。
なお、MS16-101 の動作変更に伴い、アプリケーションのパスワード変更処理を変更するよう (Kpasswd を使用するように) 検討していらっしゃるお客様におかれましては、ぜひこのまま検討を継続ください。MS16-101 での案内のとおり、NTLM でのパスワード変更は推奨されておりません。
本記事については、追加の情報が得られましたら随時更新してまいります。