Запретить стандартные (простые) пароли в Active Directory

Стандартная политика паролей Active Directory позволяет включить только самые простые требования к длине, повторяемости и сложности паролей пользователей в домене. Однако, даже если вы включите опцию обязательной сложности пароля (минимум 3 типа символов из четырех: символы в верхнем регистре, нижнем регистре, цифры, спец. символы), это не запретит использовать такие простых пароли, как 123Qwert , Pa$$w0rd , Password2025 . В этой статье мы рассмотрим, как с помощью open-source инструментов создать и применить списки запрещенных (ненадежных или скомпрометированных) паролей для пользователей on-premises домена Active Directory для защиты учетных записей от брутфорс атак перебором по словарю.

PassFiltEx: фильтр паролей Active Directory

Сначала рассмотрим небольшую библиотеку PassFiltEx, которую можно использовать в качестве простейшего решения для запрещения использования простых (стандартных) паролей в AD.

При смене пароля пользователя, процесс LSA на контроллере домена выполняет проверку соответствия паролю в зарегистрированных фильтрах паролей. Библиотеку PassFiltEx можно прозрачно встроить в качестве еще одного фильтра при проверке нового пароля.

Для внедрения PassFiltEx, скачайте два файла со страницы проекта на GitHub (https://github.com/ryanries/PassFiltEx) и скопируйте в каталог %SystemRoot%\System32 на контроллере домена

  • PassFiltEx.dll – файл библиотеки PassFiltEx
  • PassFiltExBlacklist.txt – плоский текстовый файл, в который добавьте пароли, которые нужно запретить
Несколько важных моментов касательно файла с шаблонами запрещенных паролей:

  • Файл паролей перечитывается каждые 60 секунд
  • Шаблоны запрещенных паролей в файле PassFiltExBlacklist.txt регистронезависимые (значения PassworD и password будут определяться как одинаковое значение)
  • Unicode символы на данный момент не поддерживаются

PassFiltEx.dll фильт проверки паролей в AD

Затем откройте редактор реестра, перейдите в ветку HKLM\SYSTEM\CurrentControlSet\Control\Lsa и добавьте значение PassFiltEx в конец мультистрокового параметра Notification Packages.

интеграция библиотеки PassFiltEx.dll в процесс LSA на контроллере домена

Перезагрузите контроллер домена, чтобы при смене пароля использовался новый фильтр. Проверьте, что библиотека PassFiltEx загружена процессом lsass:

tasklist /m PassFiltEx.dll

проверить что PassFiltEx.dll загружена

Теперь, если пользователь попытается сменить пароль на любой, совпадающий с одним их шаблонов в чёрном списке паролей, появится ошибка о том, что пароль не соответствует требования безопасности.

не могу сменить пароль - не соответствует политике AD

Если у вас развернуто несколько контроллеров домена, нужно добавить фильтр паролей на каждом из них.

С помощью параметров реестра в разделе HKLM\SOFTWARE\PassFiltEx (создается автоматически) можно настроить некоторые параметры фильтра паролей PassFiltEx:

  • BlacklistFileName (REG_SZ) – путь к файлу с черным списком паролей (по умолчанию используется %SystemRoot%\System32\PassFiltExBlacklist.txt ). Можно указать UNC путь и хранить файл, например на SYSVOL (для использования единого файла с черным списком паролей, который реплицируется между DC)
  • TokenPercentageOfPassword (REG_DWORD) – какой минимальный процент вхождения нового пароля в шаблоны черного списка будет запрещать использовать пароль (по умолчанию 60%). Например, если в черном списке добавлена строка с шаблоном Password, это запретить пользователям использовать пароль Password25
  • Debug – если задать 1, это включит режим отладки (все действия будут записываться в текстовый лог файл)
  • BlockSequentialChars – заблокировать использовать последовательности символов в пароле , такие как abcd или 1234
  • BlockRepeatingChars — заблокировать последовательности одинаковых символов, например aaaa , 2222

Информацию об остальных параметрах реестра можно найти на странице проекта.

Запрещаем скомпрометированные пароли с Lithnet Password Protection for Active Directory

Lithnet Password Protection for Active Directory (LPP)– это полноценное enterprise решение для блокировки простых и скомпрометированных паролей в Active Directory. В базовом функционале оно также позволяет расширить требования к паролям AD, блокировать пароли по определенным шаблонами, блокировать пароли по хэшу (позволяет импортировать базу скомпрометированных паролей из словарей). Lithnet Password Protection поддерживает управление через групповые политики и с помощью PowerShell.

На каждый контроллер домена устанавливается агент Lithnet Password Protection for Active Directory (https://github.com/lithnet/ad-password-protection).

Установка агента Lithnet Password Protection for Active Directory на контроллер домена

Теперь с помощью PowerShell можно добавить в хранилище паролей запрещенные пароли и ключевые слова. Импортируйте модуль в PowerShell сессию:

Import-Module LithnetPasswordProtection

Добавить слово, которое запрещено использовать в паролях:

Add-BannedWord -Value "admin"

Можно импортировать запрещенные к использованию ключевые слова из текстового файла:

Import-BannedWords -Filename "c:\temp\blacklistpwd.txt"

Проверить наличие запрещенного слова в базе LPP:

Test-IsBannedWord -value admin

Add-BannedWord - добавить запрещенное слово в список заблокированных паролей AD

С помощью командлета Get-PasswordFilterResult можно протестировать, соответствует ли введенный пароль политике паролей:

Get-PasswordFilterResult -Password "Admin123!" -Username spetrov -Fullname "Sergey Petrov"

Compromised

Get-PasswordFilterResult - проверить результирующую политику паролей Compromised

Get-PasswordFilterResult -Password "Adm13in!" -Username spetrov -Fullname "Sergey Petrov"

Approved

Хороший пароль для пользователя AD (Approved)

В первом случае в пароле есть точное вхождение ключевого слова Admin, и его использование будет запрещено политикой паролей.

Хранилище запрещенных паролей LPP представляет собой файловую базу данных, в которой хранятся хэши паролей и настройки (благодаря бинарному формату поиск по такой базе выполняется быстро). По умолчанию DB файлы базы хранятся в каталоге C:\Program Files\Lithnet\Active Directory Password Protection\Store\v3\p . Для репликации базы запрещенных паролей Lithnet Password Protection между контроллерами домена используется DFS-R.

Для параноиков, LPP позволяет импортировать в локальную базу данные скомпрометированных паролей из бесплатного онлайн сервиса HIBP pwnded ( Have I Been Pwned?) . Это потребует около 8 Гб места на DC для хранения словаря хэшей:

Sync-HashesFromHibp

Sync-HashesFromHibp - загрузка базы скомпрометированных паролей из HIBP pwnded

Для автоматической синхронизации базы с HIBP нужно запускать по расписанию PowerShell команду Sync-HashesFromHibp.

Либо можно импортировать хэши из текстового файла:
Import-CompromisedPasswordHashes -Filename "c:\temp\pwned-ntlm-hashs.txt"

Проверить, есть ли пароль или UPN пользоваться в базе скомпрометированных паролей:

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

Для управления настройками LPP через GPO доступны ADMX файлы административных шаблонов. По умолчанию они доступны в каталоге %WINDIR%\PolicyDefinitions\ на DC с агентом LPP (можно скопировать их в центральное хранилище GPO):

  • lithnet.activedirectory.passwordfilter.admx
  • lithnet.admx
  • \en-us\lithnet.activedirectory.passwordfilter.adml
  • \en-us\lithnet.adml

Чтобы агент LPP при смене пароля на DC проверял пароли по базе словарю запрещенных паролей, нужно создать для контроллеров домена отдельную GPO, со следующими минимальными настройками в разделе Computer Configuration -> Administrative Templates -> Lithnet ->Password Protection for Active Directory ->Default Policy.

  • Reject passwords found in the compromised password storeВключить , отметить флажки Enable for password set и Enable for password change operations.
  • Reject normalized password found in the compromised password store (запрет нормализованных паролей, например WinItPro и winitpro )

Групповая политика Reject passwords found in the compromised password store

Остальные параметры GPO можно включить/отключить в зависимости от ваших требований безопасности.

Чтобы применить настройки GPO, придется перезагружать контроллер домена. Это также добавит фильтр паролей lithnetpwdf в указанную выше ветку реестра.

Интеграция фильтра lithnetpwdf при проверке сложности нового пароля в AD

Теперь при попытке изменить (сбросить) пароль пользователя AD, будет выполняться дополнительная проверка на наличие пароля в словаре запрещенных. В Windows 11, например появится такая ошибка:

The password on this account cannot be changed at this time

Это конечно неудобно, т.к. не понятно, что его пароль не прошел проверку парольной политики. Придется провести дополнительную разъяснительную работу с пользователями…

Ошибка в Windows 11: The password on this account cannot be changed at this time”

При наличии подписки Entra ID P1 или P2, и синхронизации с наземной Active Directory, вы можете создать список запрещённых паролей в облаке Microsoft. Через службы Microsoft Entra Password Protection proxy service и агент Microsoft Entra Password Protection DC, можно применить эти настройки к on-prem учетным записям AD. См. статью Политика паролей в Entra ID (ex-Azure AD).

Итак, мы рассмотрели, как с помощью open-source решений внедрить в Active Directory дополнительный функционал, позволяющий запретить использование простых, утекших или стандартных паролей (по вашему собственному словарю), которые не блокируются обычными политиками паролей AD.


Предыдущая статья Следующая статья


Комментариев: 2 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)