ActiveDirectory ドメインユーザーのパスワード変更後、一定時間古いパスワードでログインできる

ActiveDirectory ドメインユーザーのパスワード変更後、一定時間古いパスワードでログインできるという情報がありました。基本的には問題にはならないとは思いますが、知っていても損はない情報と思います。

 

情報はマイクロソフトのフォーラムにありました。

 

ActiveDirectoryのパスワード変更後、一定時間古いパスワードでログインできる状態になる

https://social.technet.microsoft.com/Forums/ja-JP/53b51d2c-cb4a-43f1-8296-7f5baf3d098a/activedirectory12398124971247312527125401248922793263562446012289199?forum=activedirectoryja

 

以下は質問内容の抜粋です。

 

ActiveDirectory(以下、AD)のパスワード変更を行った際、一定時間(10分間ほど)新しいパスワードでも古いパスワードでもログインできるようになってしまいます。

恐らく、AD側にログイン情報のキャッシュか何かが残ってしまっていることが原因ではないかと推測しているのですが、キャッシュの有無やキャッシュの保持期間をどのように設定すればいいのか分かりません。

また、環境としては、パスワードの変更はJavaのjavax.naming.directoryのmodifyAttributesを用いて行っています。

 

 

続いて回答内容です。

 

この件ですが、Active DirectoryではNTLMの仕様上、古いパスワードを一定期間有効化しておく設定があります。コレを制御するにはOldPasswordAllowedPeriodレジストリ値を使いますが、いかにも不便です。この設定については、以下の資料を確認してもらうといいでしょう。

https://web.archive.org/web/20110315013743/http://support.microsoft.com/kb/906305

ではベストな方法は何か、ということですが、プログラムに明示的にKerberos認証のみで認証するよう、修正を行うことです。この設定はNTLMのためにあるので、NTLMを使わなければ、問題は起こりません。プログラムの設定のみで修正できる問題かと思います。

 

Active DirectoryではNTLMの仕様上、古いパスワードを一定期間有効化しておく設定があるというのは初めて知りました。

 

サイトでも紹介されている情報です。

 

新しい設定により、NTLM ネットワーク認証の動作を変更する

https://docs.microsoft.com/ja-jp/troubleshoot/windows-server/windows-security/new-setting-modifies-ntlm-network-authentication

 

概要にこの動作の説明がありますね。

 

Microsoft Windows Server 2003 Service Pack 1 (SP1) 以降では、NTLM ネットワーク認証の動作が変更されています。 ドメインユーザーは、パスワードが変更された後1時間に、古いパスワードを使用してネットワークにアクセスできます。 認証に Kerberos を使用するように設計された既存のコンポーネントは、この変更の影響を受けません。

この変更の目的は、管理者が新しいパスワードの資格情報を更新できるようになるまで、サービスを実行し続けるなどのバックグラウンド処理をしばらく継続できるようにすることです。

 

古いパスワードでログインできないようにするには、レジストリをいじるか、ケルベロス認証だけ使用されるように変更する必要がありますね。長らく使っていましたが、知りませんでした。