Аудит паролів користувачів в Active Directory

Складність пароля користувача домену 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 можуть (і навіть повинні) виконувати регулярно.