Слабый пароль является серьезной проблемой безопасности служб каталогов Active Directory. К сожалению, штатных методов определения стойкости используемых паролей не существует. Но все же, одно комьюнити решение достойно внимания, это – PowerShell модуль DSInternals.
Проблематика
Аккаунт Active Directory обладает двумя идентификаторами – открытый и закрытый. Открытым принято считать логин, закрытым – пароль. Оба этих идентификатора участвуют в процессе аутентификации. Во время него пользователь вводит парольную фразу, с которой берется хеш-функция. Далее, происходит процесс сравнивания этого значения с значением, хранимым в базе NTDS.DIT. При совпадении этих значений и соответствию логину – процесс аутентификации считается успешным.
Проблематика состоит в том, что даже при использовании политик паролей, технически возможно задать слабый пароль, например, значения Pa$$w0rd или Pa$$w0rd01. Это частное явление ввиду того, что пользователи очень редко думают о безопасности своих учетных записей. Для администраторов и инженеров информационной безопасности использование слабых паролей является проблемой и в качестве решения возможно использование PowerShell модуля DSInternals.
Данный модуль позволяет проверить используется ли значение слабой парольной фразы в качестве пароля для доменных служб Active Directory. Технически будет происходить взятие хеш-функции с заранее подготовленного словаря и сравнение со значениями в базе NTDS.DIT. В случае совпадения, информация о проблемном аккаунте будет выведена в виде отчета.
Тестировать на продакшн системе можно, но с условием выполнения операций на тестовом контроллере домена. Его можно подготовить, восстановив контроллер домена из бекапа в изолированной среде.
Использование модуля DSInternals
На момент написания статьи, версия модуля 3.3. Его можно скачать с Git репозитория автора по следующей ссылке или установив через коммандлет Install-Module с PowerShell репозитория:
1 | Install-Module DSInternals |
Далее, потребуется тестовый файл с проверяемой парольной базой . Она может иметь вид обычного txt файла, например:

Предварительно, для последующей демонтрации, я создал учетную запись atkachenko с паролем Pa$$w0rd. Этот же пароль я поместил в парольную базу.
А теперь немного магии. Для получения хешей аккаунтов будет использоваться коммандлет Get-ADReplAccount. Он позволяет извлекать хеши паролей и ключи Kerberos всех учетных записей пользователей с контроллеров домена. Это достигается путем моделирования создания реплики базы данных Active Directory через протокол MS-DRSR.
Следующий коммандлет Test-PasswordQuality возьмет хеш-функции с парольной базы и сравнит их с полученными заначениями от коммандлета Get-ADReplAccount. Запуск коммандлетов предполагает права доменного админа.
Приступим к практике. Задаем в качестве переменных путь к файлу парольной базы, имя контроллера домена и контекст именования домена Active Directory:
1 2 3 | $passfile = "C:\tmp\pass.txt" $DCName = "dc" $NamingContext = "DC=corp,DC=ait,DC=in,DC=ua" |
Далее, производим тестирование:
1 | Get-ADReplAccount -All -Server $DCName -NamingContext $NamingContext | Test-PasswordQuality -WeakPasswordsFile $passfile -IncludeDisabledAccounts |
Пример отчета:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Active Directory Password Quality Report ---------------------------------------- Passwords of these accounts are stored using reversible encryption: LM hashes of passwords of these accounts are present: These accounts have no password set: Guest Passwords of these accounts have been found in the dictionary: atkachenko These groups of accounts have the same passwords: These computer accounts have default passwords: Kerberos AES keys are missing from these accounts: Kerberos pre-authentication is not required for these accounts: Only DES encryption is allowed to be used with these accounts: These administrative accounts are allowed to be delegated to a service: Administrator atkachenko krbtgt Passwords of these accounts will never expire: Administrator Guest These accounts are not required to have a password: Guest |
Выводы
В рамках данной статьи был продемонстрирован способ обнаружения слабых паролей в Active Directory. Достигается это использованием PowerShell модуля DSInternals. С его помощью можно быстро осуществлять анализ слабых паролей сравнением со словарем. Так же, этот модуль обладает гораздо большими возможностями чем те, что описаны описаны в данной статье. Рекомендую с ними ознакомится или следить за новостями блога.
Если у вас возникли какие-либо вопросы, пожалуйста, пишите в комментарии.