Слабый пароль является серьезной проблемой безопасности служб каталогов 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 репозитория:
Далее, потребуется тестовый файл с проверяемой парольной базой . Она может иметь вид обычного txt файла, например:
Предварительно, для последующей демонтрации, я создал учетную запись atkachenko с паролем Pa$$w0rd. Этот же пароль я поместил в парольную базу.
А теперь немного магии. Для получения хешей аккаунтов будет использоваться коммандлет Get-ADReplAccount. Он позволяет извлекать хеши паролей и ключи Kerberos всех учетных записей пользователей с контроллеров домена. Это достигается путем моделирования создания реплики базы данных Active Directory через протокол MS-DRSR.
Следующий коммандлет Test-PasswordQuality возьмет хеш-функции с парольной базы и сравнит их с полученными заначениями от коммандлета Get-ADReplAccount. Запуск коммандлетов предполагает права доменного админа.
Приступим к практике. Задаем в качестве переменных путь к файлу парольной базы, имя контроллера домена и контекст именования домена Active Directory:
Далее, производим тестирование:
Пример отчета:
Выводы
В рамках данной статьи был продемонстрирован способ обнаружения слабых паролей в Active Directory. Достигается это использованием PowerShell модуля DSInternals. С его помощью можно быстро осуществлять анализ слабых паролей сравнением со словарем. Так же, этот модуль обладает гораздо большими возможностями чем те, что описаны описаны в данной статье. Рекомендую с ними ознакомится или следить за новостями блога.
Если у вас возникли какие-либо вопросы, пожалуйста, пишите в комментарии.