如何在Active Directory中阻止通用(弱)密碼

在默認的Active Directory密碼策略中,只能為域用戶啟用最基本的密碼長度,頻率和復雜性要求。啟用強制性密碼複雜性選項,該選項需要密碼包含大寫,小寫字母,數字和特殊字符的混合Qwerty123456,,,,P@ssw0rd,,,,March2025等等。這些密碼符合複雜性標準,但由於其可預測性而容易受到攻擊。

本指南說明瞭如何在本地Active Directory域中創建和執行禁止的密碼列表,從而阻止用戶設置弱或折衷的密碼,並保護帳戶免受字典和蠻力攻擊。

內容:

使用廣告密碼過濾器(Passfiltex)禁止密碼列表

首先,讓我們看一下Passfiltex,一個輕巧的開源庫,提供了一個簡單的解決方案,用於阻止Active Directory中的常見弱密碼

當廣告用戶更改密碼時,域控制器上的LSA進程檢查密碼是否匹配註冊密碼過濾器。在檢查新密碼時,Passfiltex庫可以透明地用作附加過濾器。

要實現PassFiltex,請從項目的GitHub頁面下載兩個文件(https://github.com/ryanries/passfiltex)並將它們複製到%SystemRoot%System32域控制器上的目錄。

  • Passfiltex.dll - Passfiltex庫文件
  • Passfiltexblacklist.txt - 一個純文本文件,其中包含您想要在AD中拒絕的密碼

一些要點:

  • Passfiltex每60秒重新加載一個排列文件
  • Passfiltexblacklist.txt文件中拒絕的密碼模式不是對病例敏感的。 ((MyPasswordDmypassword值將定義為相等)
  • 當前不支持Unicode字符

然後,打開註冊表編輯,轉到HKLMSYSTEMCurrentControlSetControlLsa鍵,添加Passfiltex價值末尾通知軟件包多弦參數。

重新啟動域控制器以應用新密碼過濾器。驗證LSASS過程是否加載Passfiltex庫。

tasklist /m PassFiltEx.dll

現在,如果用戶試圖將密碼更改為匹配密碼黑名單中一種模式之一的任何密碼,則會出現錯誤,表明密碼不符合密碼策略要求。

如果部署了多個域控制器,請在每個域上配置相同的密碼過濾器。

使用註冊表選項HKLMSOFTWAREPassFiltExreg鍵(自動創建),您可以配置其他Passfiltex密碼過濾器設置:

  • BlackListFilename(reg_sz) - 包含禁止密碼的文件的路徑。 (默認為%SystemRoot%System32PassFiltExBlacklist.txt)。可以在此處使用UNC路徑,該路徑允許將文件存儲在SYSVOL中(使用DC之間自動複製的單個密碼黑名單文件)
  • tokenpercentageOfPassword(reg_dword) - 是匹配黑名單模板的新密碼的最小百分比,該模板將導緻密碼被拒絕(默認情況下為60%)。例如,如果您在黑名單中添加了帶有模式mypasswd的行,則用戶將無法使用密碼mypasswd2025。
  • 偵錯- 如果設置為1,它啟用調試模式(所有操作都記錄到文本文件)。
  • 阻止序列- 阻止密碼中字符序列的使用,例如ABCD或1234。
  • 塊狀- 像AAAA一樣的相同字符序列,2222。

有關其他註冊表選項的信息可以在項目的GitHub頁面上找到。

使用寫岩石網密碼保護塊弱和妥協的密碼保護

Active Directory(LPP)的LITHNET密碼保護是一種企業解決方案,用於阻止Active Directory中的弱密碼和受損密碼。它的基本功能允許擴展AD密碼策略要求,使用模板或密碼哈希封鎖密碼(允許從外部字典中導入折衷密碼的數據庫)。 LITHNET密碼保護通過小組策略和PowerShell支持管理。

Active Directory代理的LITHNET密碼保護應安裝在每個域控制器上(https://github.com/lithnet/ad-password-protection)。

然後,使用PowerShell將禁止的密碼和關鍵字添加到Lithnet密碼庫中。將模塊導入您的PowerShell會話:

Import-Module LithnetPasswordProtection

添加一個單詞,要阻止在廣告用戶密碼中使用。

Add-BannedWord -Value "admin"

您可以從文本文件中導入被禁止的關鍵字列表:

Import-BannedWords -Filename "c:tempblacklistpwd.txt"

檢查LPP數據庫中是否被禁止使用:

Test-IsBannedWord -value admin

使用get-passwordfilterresult cmdlet測試您輸入的密碼是否符合密碼策略:

Get-PasswordFilterResult -Password "Admin321" -Username jsmith -Fullname "John Smith"

Compromised

Get-PasswordFilterResult -Password "Adm123n!" -Username jsmith -Fullname "John Smith"

Approved

在第一種情況下,密碼包含關鍵字管理員的確切匹配,並且密碼策略禁止其使用。

LPP的密碼庫是一個基於文件的密碼哈希數據庫(由於二進制格式,搜索此類數據庫很快)。默認情況下,數據庫文件存儲在C:Program FilesLithnetActive Directory Password ProtectionStorev3p目錄。DFS-R用於復制域控制器之間禁止密碼的Lithnet密碼保護數據庫。

LITHNET密碼保護(LPP)允許管理員從“我有過我的PWNED”中導入折衷的密碼(hibp pwnded)將服務到本地數據庫中,通過防止用戶選擇數據洩露中暴露的密碼來提高安全性。這將需要8 GBDC上的磁盤空間存儲Hash詞典。

Sync-HashesFromHibp

要自動將本地數據庫與HIBP同步,請使用任務調度程序定期運行powershell命令的同步hashes-hashes-hashes-hashes-hashes-hashes-hasheshesshell。

或從文本文件中導入哈希:
Import-CompromisedPasswordHashes -Filename "c:pspwned-ntlm-hashs.txt"

檢查特定的密碼或用戶的UPN是否在受損密碼的數據庫中。

Test-IsCompromisedPassword -value MyAdminl0veSme
Test-IsADUserPasswordCompromised -upn [email protected]

更多閱讀:如何在Active Directory中重置遺忘的目錄服務還原模式密碼

管理模板文件(ADMX)可通過GPO管理LPP設置。默認情況下,可以在%WINDIR%PolicyDefinitions帶有LPP代理的DC上的目錄(您可以將其複製到中央GPO商店):

  • lithnet.activedirectory.passwordfilter.admx
  • lithnet.admx
  • en-uslithnet.activedirectory.passwordfilter.adml
  • 一式列表。 adml

要讓LPP代理在用戶更改密碼時檢查用戶密碼,以使用黑名單密碼詞典,請使用計算機配置下的以下最小設置為域控制器創建GPO - >管理模板 - > lithnet-> lithnet-> active Directory for Active Directory->默認策略部分。

  • 拒絕在受感染的密碼商店中找到的密碼- Enable,取消選中選項啟用密碼集啟用密碼更改操作。
  • 拒絕在受感染的密碼商店中發現的歸一密碼(例如,拒絕歸一化密碼,例如WOSHUB和WOSHUB)

其他GPO選項可以根據您的安全需求啟用/禁用。

重新啟動域控制器以更新GPO設置。這也將添加lithnetpwdf密碼過濾到上面指定的註冊表密鑰。

現在,嘗試更改(重置)廣告用戶的密碼時,將執行其他檢查,以查看密碼是否在禁止密碼的字典中。例如,Windows 11顯示以下錯誤:

The password on this account cannot be changed at this time

顯然,這是不便的,因為用戶尚不清楚他們的密碼未能通過密碼策略檢查。

如果你有Entra ID P1或P2訂閱並與您的本地Active Directory同步,您可以在Microsoft Cloud中創建被禁止密碼的列表。 Microsoft Entra密碼保護代理服務和Microsoft Entra密碼保護DC代理可以將這些安全設置應用於本地廣告帳戶。請參閱ENTRA ID中的密碼策略(前啟動AD)。

我們已經通過實施開源解決方案來探討如何改善Active Directory Security,從而防止使用弱,洩漏或常見密碼,而這些密碼通常不會被默認的廣告密碼策略所阻止。