Аудит паролей пользователей в Active Directory
20.09.2016Сложность пароля пользователя домена Active Directory это один из важнейших элементов безопасности как данных пользователя, так и домена целиком. Как правило, пользователи, чтобы облегчить себе жизнь, предпочитают использовать простые, легко запоминаемые пароли. Но тем самым, они серьезно уменьшают уровень защиты своих аккаунтов от злоумышленников. В этой статье мы покажем, как провести аудит используемых паролей пользователей в Active Directory с помощью PowerShell.
Для тестирования устойчивости паролей пользователей к атакам мы воспользуемся сторонним PowerShell модулем — DSInternals. Данный модуль содержит ряд командлетов, которые позволяет выполнять различные операции с базой данных AD в онлайн или офлайн режиме (непосредственно с файлом ntds.dit). В частности нас интересует командлет Test-PasswordQuality, позволяющий выявить пользователей со слабыми, одинаковыми, стандартными или пустыми паролями.
Установка модуля DSInternals
В PowerShell 5 установить модуль DSInternals можно онлайн из официальной галереи скриптов PowerShell так:
Install-Module DSInternals
В предыдущих версиях PowerShell или на изолированных системах придется скачать zip архив с последней версией модуля с GitHub (https://github.com/MichaelGrafnetter/DSInternals/releases). На момент написания статьи последний релиз — DSInternals v2.16.1 Полученный архив нужно распаковать в один из каталогов с модулями PowerShell:
- C:\Windows\system32\WindowsPowerShell\v1.0\Modules\DSInternals
- C:\Users\%username%\Documents\WindowsPowerShell\Modules\DSInternals
Либо импортировать модуль командой:
Import-Module C:\distr\PS\DSInternals\DSInternals.psd1
Список доступных командлетов модуля можно получить так:
Get-Command -Module DSInternals
Словарь паролей
Далее нам понадобится файл со словарем часто используемых и «плохих» паролей. Его можно скачать из Интернета или создать самому. Учетные записи пользователей в Active Directory будут проверены на предмет соответствию паролям из этого словаря. Сохраним пароли в текстовый файл PasswordDict.txt.
Аудит паролей в AD с помощью Test-PasswordQuality
В следующих переменных укажем путь к файлу с паролями, имя домена и контроллера домена.
$DictFile = "C:\distr\PS\DSInternals\PasswordDict.txt"
$DC = "msk-dc01"
$Domain = "DC=winitpro,DC=loc"
Затем нужно получить NT хеши для всех паролей из файла-словаря, чтобы впоследствии сравнить их с хешами паролей пользователей AD:
$Dict = Get-Content $DictFile | ConvertTo-NTHashDictionary

Далее с помощью командлета Get-ADReplAccount получим список объектов в AD данные их NT, LM хешей, а также историю хешей. Затем для каждого пользователя будет проведенная проверка на предмет соответствия хеша его пароля с хешами из файла-словаря.
Get-ADReplAccount -All -Server $DC -NamingContext $Domain |
Test-PasswordQuality -WeakPasswordHashes $Dict -ShowPlainTextPasswords -IncludeDisabledAccounts
Результат выполнения скрипта может выглядеть так:
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:
aromanov q1w2e3
armtest P@ssw0rd
dbidus q1w2e3
sivannikov Pa$$w0rd
locadmin P@ssw0rd
tstusr P@ssw0rd
Historical passwords of these accounts have been found in the dictionary:
administrator P@ssw0rd
aromanov July2016
dbidus August2016
These groups of accounts have the same passwords:
Group 1:
KMedvedev
AIvanov
NPetrov
Group 2:
ARMTest
locadmin
tst
Group 3:
DRomanov
DBacess
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
srv-zenoss
krbtgt
nnovikov
Passwords of these accounts will never expire:
jsmith
kabrams
These accounts are not required to have a password:
usertst1
usertst2
Как вы видите, были успешно найдены пользователи AD, пароли которых совпадают со словарем (поиск в том числе велся по истории паролей пользователей). Также найдены пользователи с одинаковыми паролями.
Итак, с помощью данного сценария можно довольно просто провести анализ качества паролей пользователей AD, их устойчивости перед брутфорсом, оценить используемую политику сложности паролей в домене, ну и сделать организационные выводы :). Такой аудит администраторы Active Directory могут (и даже должны) выполнять регулярно.


