Запретить стандартные (простые) пароли в 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 символы на данный момент не поддерживаются

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

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

tasklist /m PassFiltEx.dll

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

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

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

  • BlocklistFileName (REG_SZ) – путь к файлу с черным списком паролей (по умолчанию используется %SystemRoot%System32PassFiltExBlacklist.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).

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

Import-Module LithnetPasswordProtection

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

Add-BannedWord -Value "admin"

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

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

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

Test-IsBannedWord -value admin

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

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

Compromised

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

Approved

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

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

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

Sync-HashesFromHibp

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

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

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

Test-IsCompromisedPassword -value Adminl0vesY0u
Test-IsADUserPasswordCompromised -upn test@winitpro.ru

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

  • lithnet.activedirectory.passwordfilter.admx
  • lithnet.admx
  • en-uslithnet.activedirectory.passwordfilter.adml
  • en-uslithnet.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 )

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

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

Теперь при попытке изменить (сбросить) пароль пользователя AD, будет выполняться дополнительная проверка на наличие пароля в словаре запрещенных. В 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.


Комментарии

Добавить комментарий

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