Аудит надежности паролей пользователей в Active Directory

Сложность пароля пользователя в домене Active Directory — это важный элемент безопасности как данных пользователя, так и домена целиком. Несмотря на рекомендации не использовать в качестве паролей личные данные, словарные слова и простые комбинации, многие пользователи продолжают использовать простые и легко запоминаемые пароли. В этой статье мы покажем, как выполнить аудит используемых паролей пользователей Active Directory, найти слабые и простые пароли с помощью PowerShell.

Даже при использовании доменной политики паролей пользователь технически может задать слабый или стандартный пароль, например: P@ssw0rd или Pa$$w0rd

Установка PowerShell модуля DSInternals (Directory Services Internals)

Чтобы сравнить хэши паролей пользователей, хранящихся в базе Active Directory (файл ntds.dit) со словарем простых и распространённых паролей можно использовать сторонний PowerShell модуль — DSInternals . Этот модуль содержит ряд командлетов, которые позволяет выполнять различные операции с базой данных AD в онлайн или офлайн режиме (непосредственно с файлом ntds.dit). В частности, нас интересует командлет Test-PasswordQuality , позволяющий найти пользователей со слабыми, одинаковыми, стандартными, пустыми паролями (Password Not Required), пароли которых никогда не истекают (Password Never Expires).

Примечание . Пароли пользователей из базы AD, естественно, не получится получить в открытом виде. Однако можно сравнить хеши паролей пользователей AD с хешами слов из словаря и найти слабые пароли.

В PowerShell версии 5 (и выше) вы можете установить модуль DSInternals онлайн из официальной галереи скриптов PowerShell так:

Install-Module DSInternals

Для предыдущих версий PowerShell и на изолированных системах придется скачать zip архив с последней версией модуля с GitHub ( https://github.com/MichaelGrafnetter/DSInternals/releases ). На момент написания статьи последний релиз — DSInternals v4.4.1 . Распакуйте содержимое архива в один из каталогов с модулями PowerShell:

  • C:Windowssystem32WindowsPowerShellv1.0ModulesDSInternals
  • C:Users%username%DocumentsWindowsPowerShellModulesDSInternals

Или можно импортировать модуль DSInternals командой:

Import-Module C:distrPSDSInternalsDSInternals.psd1

Если при импорте модуля появится ошибка “cannot be loaded because running scripts is disabled on this system”, нужно разрешить запуск PowerShell скриптов хотя бы в текущей сессии:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Список доступных командлетов модуля можно получить так:

Get-Command -Module DSInternals

Поиск слабых паролей в AD с помощью командлета Test-PasswordQuality

Далее необходимо создать словарь паролей. Это будет простой тестовый файл со списком распространениях используемых, слабых и других плохих паролей. Вы можете скачать словарь паролей из Интернета или создать его самостоятельно. Модуль 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_

В текущей версии командлета Test-PasswordQuality отсутствует параметр ShowPlainText , который позволял вывести на экран пароль в открытом виде, если его хэш был найден в словаре. Если нужно использовать старую версию модуля DSInternals. установите ее командой:

Install-Module -Name DSInternals -RequiredVersion 2.23

Поиск по хэшам выполняется в том числе по истории паролей пользователей, хранящейся в AD. Как вы видите, были успешно найдены пользователи AD с простыми паролями (пароли совпадают со словарем). Также найдены несколько пользователей с одинаковыми паролями. Этот сценарий поможет вам найти аккаунты с простыми паролями, для которых действуют кастомные парольные политики Fine-Grained Password Policies .

Для найденных пользователей с простыми паролями вы можете сгенерировать случайные пароли и сменить их принудительно через PowerShell.

Также вы можете выполнить офлайн сканирование файла базы данных 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

В ADDS нет встроенных инструментов для ведения списка запрещенных паролей. Однако с помощью Azure AD Password Protection вы можете блокировать определенные пароли (черный список) даже в on-premises Active Directory.

Итак, мы рассмотрели, как выполнить анализ качества паролей пользователей AD, их устойчивости перед брутфорсом по словарю, оценить используемую политику сложности паролей в домене, ну и сделать организационные выводы :). Такой аудит администраторы Active Directory могут (и даже должны) выполнять регулярно.

admin

Share
Published by
admin

Recent Posts

Консоль удаленного рабочего стола(rdp console)

Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…

2 месяца ago

Настройка сети в VMware Workstation

В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…

2 месяца ago

Логи брандмауэра Windows

Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…

2 месяца ago

Правильный способ отключения IPv6

Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…

2 месяца ago

Ключи реестра Windows, отвечающие за параметры экранной заставки

Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…

2 месяца ago

Как управлять журналами событий из командной строки

В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…

2 месяца ago