為何XP Client可以使用新舊密碼和DC驗證

1. 自2003 SP1起 , 我們提供了一個與NTLM認證相關的新機制 :

如果使用者通過NTLM認證方式與DC之間建立session, 並且在這個session中修改了密碼;

那麼當使用者再次通過網路驗證的方式提供舊密碼並且訪問資源時, 舊密碼仍然可用;

具體可以參考: https://support.microsoft.com/kb/906305/en-us

關於NTLM與網路認證的相關資料:

1) NTLM認證的相關資料 :

https://msdn.microsoft.com/en-us/library/aa378749(v=vs.85).aspx

https://technet.microsoft.com/en-us/library/cc783005(WS.10).aspx

NTLM與Keberos屬於兩種不同的協定, 與Logon方式無關;

2) 關於網路驗證方式 :

KB 906305中涉及到的”網路驗證 - network authentications”, 這裡指的是”不通過Console視窗方式 , 為Network Logon”;

比如, 我們最常見的, 在Console視窗通過鍵盤輸入密碼之後Logon到機器上, 屬於”互動式(Interactive) 的Logon;

而通過網路的方式, 遠端的訪問某些資源, 比如訪問共用資料夾, 就屬於網路訪問; OWA屬於網路訪問.

2. 預設情況下 , 舊密碼的有效期為60分鐘 ;

我們可以通過以下鍵值來控制該時間的長度. 在所有DC上修改以下註冊表鍵值:

HKLM\SYSTEM\CurrentControlSet\Control\Lsa

Name: OldPasswordAllowedPeriod

Type:   DWord

Value: (in minutes)

clip_image001

3. 設計這一機制的原因:

考慮到有些環境中的網路條件不夠理想 , 修改之後的密碼不一定能夠立刻複製到所有DC上;

因此我們設計了這一機制, 以降低複製延遲對驗證的影響;

4. 關於緩存 (Cache):

如果我們在密碼群組策略中啟用了”Enforce Password History”, 那麼在DC上, 會生成一個用於保存歷史密碼的緩存;

如果我們在Default Domain Controller上啟用該策略, 那麼所有DC上都會有該緩存, 這個緩存會用來保存舊的密碼;

這一機制的目的是比較使用者的新密碼與舊密碼的相似程度,  防止用戶長期使用一些相似的密碼;

5. 您可以在測試環境進行以下測試:

停止DC上的Kerberos Key Distribution Center, 這將導致Keberos驗證不再可用; 如果環境中只有一台DC, 那麼用戶端訪問這台DC時將使用NTLM驗證;

順利登陸後, 修改密碼;

然後從用戶端進行網路訪問, 比如通過IP位址訪問DC的共用資料夾: \\192.168.1.1\sysvol

如果網路正常, 那麼會出現彈窗, 輸入舊密碼, 確認是否能夠訪問;

我們的環境中進行了上述測試, 可以訪問, 說明舊密碼在這種網路訪問的情況下仍然可用. 測試結果符合KB 906305的描述.

6. 除了KB 906305中的描述以外, 密碼修改的複製延遲也會導致舊密碼登錄成功;

如果用戶端登錄時聯繫了某些DC, 而這些DC沒有接收到新的密碼, 那麼舊密碼也可以成功登陸;

我們可以在DC上運行以下命令, 檢查密碼的修改情況:

repadmin /showobjmeta <DC Name> <User Distinguished Name> > meta.txt & meta.txt

clip_image002

可以通過pwdlastSet鍵值的上次修改時間來確定這台DC上的密碼修改時間;

然後, 我們可以檢查DC之間的複製, 以確認新密碼是否已經同步到所有DC上;