пятница, 17 ноября 2017 г.

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


Сложность пароля пользователя домена 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). FwinПолученный архив нужно распаковать в один из каталогов с модулями 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 = "dc01"
$Domain = "DC=test,DC=local"
Затем нужно получить 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
petrikov            Pa$$w0rd
ladmin              P@ssw0rd
testuser             P@ssw0rd

Historical passwords of these accounts have been found in the dictionary:
Administrator    P@ssw0rd
User1                 July2016
User2                 August2016

These groups of accounts have the same passwords:
Group 1:
Best1
Best2
Best3
Group 2:
Best4
locadmin

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
krbtgt
Passwords of these accounts will never expire:
jsmith
kabrams
These accounts are not required to have a password:
usertst1
usertst2














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

1 комментарий:

  1. Error on command Import-Module C:\distr\PS\DSInternals\DSInternals.psd1

    Temporary fix With this command : Set-ExecutionPolicy Unrestricted

    ОтветитьУдалить