Складність пароля користувача домену Active Directory це один з найважливіших елементів безпеки як даних користувача, так і домену цілком. Як правило, користувачі, щоб полегшити собі життя, вважають за краще використовувати прості, легко запам'ятовуються паролі. Але тим самим, вони серйозно зменшують рівень захисту своїх акаунтів від зловмисників. У цій статті ми покажемо, як провести аудит використовуваних паролів користувачів в Active Directory за допомогою PowerShell.
Для тестування стійкості паролів користувачів до атак ми скористаємося стороннім PowerShell модулем - DSInternals. Даний модуль містить ряд командлетів, які дозволяє виконувати різні операції з базою даних AD в онлайн або офлайн режимі (безпосередньо з файлом ntds.dit). Зокрема нас цікавить командлет Test-PasswordQuality, дозволяє виявити користувачів зі слабкими, однаковими, стандартними або порожніми паролями.
Примітка. Паролі користувачів з бази AD, природно, не вийде отримати у відкритому вигляді, але шляхом порівняння хешів паролів користувачів AD з хешамі слів зі словника можна визначити (або порівняти) паролі користувачів.зміст:
- Установка модуля DSInternals
- словник паролів
- Аудит паролів в AD за допомогою 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 можуть (і навіть повинні) виконувати регулярно.