Сложность пароля пользователя в домене Active Directory — это важный элемент безопасности как данных пользователя, так и домена целиком. Несмотря на рекомендации не использовать в качестве паролей личные данные, словарные слова и простые комбинации, многие пользователи продолжают использовать простые и легко запоминаемые пароли. В этой статье мы покажем, как выполнить аудит используемых паролей пользователей Active Directory, найти слабые и простые пароли с помощью PowerShell.
P@ssw0rd
или Pa$$w0rd
Чтобы сравнить хэши паролей пользователей, хранящихся в базе Active Directory (файл ntds.dit) со словарем простых и распространённых паролей можно использовать сторонний PowerShell модуль — DSInternals . Этот модуль содержит ряд командлетов, которые позволяет выполнять различные операции с базой данных AD в онлайн или офлайн режиме (непосредственно с файлом ntds.dit). В частности, нас интересует командлет Test-PasswordQuality , позволяющий найти пользователей со слабыми, одинаковыми, стандартными, пустыми паролями (Password Not Required), пароли которых никогда не истекают (Password Never Expires).
В PowerShell версии 5 (и выше) вы можете установить модуль DSInternals онлайн из официальной галереи скриптов PowerShell так:
Install-Module DSInternals
Для предыдущих версий PowerShell и на изолированных системах придется скачать zip архив с последней версией модуля с GitHub ( https://github.com/MichaelGrafnetter/DSInternals/releases ). На момент написания статьи последний релиз — DSInternals v4.4.1 . Распакуйте содержимое архива в один из каталогов с модулями PowerShell:
Или можно импортировать модуль DSInternals командой:
Import-Module C:distrPSDSInternalsDSInternals.psd1
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force
Список доступных командлетов модуля можно получить так:
Get-Command -Module DSInternals
Далее необходимо создать словарь паролей. Это будет простой тестовый файл со списком распространениях используемых, слабых и других плохих паролей. Вы можете скачать словарь паролей из Интернета или создать его самостоятельно. Модуль DSInternal позволит сравнить хэши паролей ваших пользователей в Active Directory с хэшами слов из этого файла. Сохраните пароли в текстовый файл PasswordDict.txt .
Теперь создайте небольшой PowerShell скрипт. В следующих переменных укажите путь к файлу с паролями, имя домена и контроллера домена.
$DictFile = "C:PSPasswordDict.txt"
$DC = "msk-dc01"
$Domain = "DC=remontka,DC=ru"
Далее с помощью командлета Get-ADReplAccount можно получить список пользователей в AD (по аналогии с Get-ADUser ). Дополнительно данный командлет возвращает значения их NT, LM хешей, а также историю хешей.
Затем для каждого пользователя будет проведено сравнение соответствия хеша его пароля с хешами из файла-словаря (проверка выполняется также и для отключенных аккаунтов):
Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Test-PasswordQuality -WeakPasswordsFile $DictFile -IncludeDisabledAccounts
Результат выполнения скрипта может выглядеть так:
Active Directory Password Quality Report_x000D_---------------------------------------_x000D_ Passwords of these accounts are stored using reversible encryption:_x000D_LM hashes of passwords of these accounts are present:_x000D_These accounts have no password set:_x000D_WINITPRODefaultAccount_x000D_WINITPROGuest_x000D_Passwords of these accounts have been found in the dictionary:_x000D_WINITPROaivanov_x000D_WINITPRObpetrov_x000D_WINITPROvsidorov_x000D_These groups of accounts have the same passwords:_x000D_Group 1:_x000D_WINITPROanovak_x000D_WINITPROAdministrator_x000D_WINITPROgpetrov_x000D_WINITPROdkarpov_x000D_Group 2:_x000D_WINITPRObpetrov_x000D_WINITPROvsidorov_x000D_WINITPROaivanov_x000D_These computer accounts have default passwords:_x000D_Kerberos AES keys are missing from these accounts:_x000D_Kerberos pre-authentication is not required for these accounts:_x000D_ Only DES encryption is allowed to be used with these accounts:_x000D_These administrative accounts are allowed to be delegated to a service:_x000D_WINITPROAdministrator_x000D_WINITPROkrbtgt_x000D_Passwords of these accounts will never expire:_x000D_WINITPROAdministrator_x000D_WINITPRODefaultAccount_x000D_WINITPROGuest_x000D_WINITPROkrbtgt_x000D_WINITPROweb_x000D_These accounts are not required to have a password:_x000D_These accounts that require smart card authentication have a password:_x000D_
Install-Module -Name DSInternals -RequiredVersion 2.23
Поиск по хэшам выполняется в том числе по истории паролей пользователей, хранящейся в AD. Как вы видите, были успешно найдены пользователи AD с простыми паролями (пароли совпадают со словарем). Также найдены несколько пользователей с одинаковыми паролями. Этот сценарий поможет вам найти аккаунты с простыми паролями, для которых действуют кастомные парольные политики Fine-Grained Password Policies .
Также вы можете выполнить офлайн сканирование файла базы данных Active Directory (ntds.dit). Вы можете получить копию файла ntds.dit из теневой копии или резервной копии контроллера домена .
Для офлайн проверки хэшей в файле ntds.dit воспользуйтесь такими командами:
$keyb= Get-BootKey -SystemHiveFilePath 'C:ADBackupregistrySYSTEM'
Get-ADDBAccount -All -DatabasePath 'C:ADBackupntds.dit -BootKey $keyb| Test-PasswordQuality -WeakPasswordsFile $DictFile
Также можно выгрузить список всех хэшей в текстовый файл:
Get-ADDBAccount -All -DBPath 'C:ADBackupntds.dit' -Bootkey $keyb | Format-Custom -View HashcatNT | Out-File c:psadhashes.txt -Encoding ASCII
Итак, мы рассмотрели, как выполнить анализ качества паролей пользователей AD, их устойчивости перед брутфорсом по словарю, оценить используемую политику сложности паролей в домене, ну и сделать организационные выводы :). Такой аудит администраторы Active Directory могут (и даже должны) выполнять регулярно.
Как менялся логотип Apple на протяжении многих лет. Логотип Apple — это не просто символ,…
Security Boot Fail при загрузке Acer — решение проблемы При загрузке ноутбука Acer с флешки,…
Ноутбук не включается — варианты решения Если при попытке включить ноутбук вы обнаруживаете, что он…
The AC power adapter wattage and type cannot be determined — причины и решение При…
Свистит или звенит блок питания компьютера — причины и решения Некоторые владельцы ПК могут обратить…
Мигает Caps Lock на ноутбуке HP — почему и что делать? При включении ноутбука HP…