Пошук облікових записів адміністратора в Active Directory

У попередній статті ми описали процедуру скидання пароля стандартної облікового запису адміністратора домену Active Directory (учетка administrator). Даний сценарій відмінно працює в "стандартної" середовищі Active Directory, проте в деяких доменах подібний трюк може не спрацювати, тому що при їх розгортанні були використані best practice Microsoft щодо забезпечення безпеки інфраструктури AD. У реальних доменах AD для захисту облікового запису адміністратора домену можуть застосовуватися такі стратегії:

  • Перейменування стандартної облікового запису адміністратора Active Directory
  • Створення облікового запису-приманки. Обліковий запис хоч і має ім'я Administrator, але ніякими правами підвищеними не володіє. Крім того, за допомогою політик аудиту можна налаштувати оповіщення служб безпеки про спробу авторизації за допомогою цього облікового запису
  • Відключення облікового запису Administrator і надання повноважень адміністратора домену інший учетке.

У цій статті ми спробуємо розібрати методики обходу цих стратегій, що дозволяють виявити в AD всі облікові записи з правами адміністратора домену.

Отже, в попередній статті ми показували, яким чином за допомогою створення системного сервісу на контролері домену можна скинути пароль домен-адміністратора. Дана команда при завантаженні DC скине пароль доменної облікового запису administrator (адміністратора домену) на P @ ssw0rd.

sc create ResetADPass binPath = "% ComSpec% / k net user administrator P @ ssw0rd" start = auto

Що ж робити, якщо під цим обліковим записом авторизуватися не виходить? Швидше за все, при розгортанні домену вона була захищена за однією з перелічених вище методик.

Монтуємо вимкнуту базу Active Directory

Спробуємо витягти з бази AD інформацію про реальних адміністраторів домену. Для цього потрібно завантажитися в DSRM режимі, в якому база Active Directory (ntds.dit) знаходиться в відключеному стані. Нам необхідно локально змонтувати цю базу, щоб в подальшому отримати можливість доступу до інформації, що зберігається в ній інформації.

Запустіть дві командні рядки: в першій ми запустимо процес dsamain.exe, у другій будемо вводити інтерактивні команди.

Порада. При роботі на Server Core другу командний рядок можна відкрити, виконавши у вихідній cmd команду:

start cmd

Перед запуском утиліти dsamain.exe, переконався, що інші сервіси і процеси зараз не використовують порт 389. Зробити це можна командою:

netstat -ano | findstr: 389

У тому випадку, якщо команда нічого не повернула - все ОК, йдемо далі (якщо повернула потрібно знайти і відключити знайдений процес).

Утиліта dsamain.exe дозволяє змонтувати базу AD і виконувати до неї різні запити LDAP (по суті дозволяє організувати автономний LDAP сервер). Утиліта запускається з наступними параметрами:

  • dbpath - задає шлях до файлу ntds.dit.
  • allowNonAdminAccess - дозволяє здійснювати LDAP запити до бази AD під локальної обліковим записом (за замовчуванням доступ дозволений тільки членам груп Domain Admins і Enterprise Admins).
  • ldapPort - дозволяє вказати порт LDAP. Ми будемо використовувати стандартний LDAP порт - 389.

Змонтуємо базу AD командою:

dsamain -dbpath C: \ Windows \ NTDS \ ntds.dit -allowNonAdminAccess -ldapPort 389

Переконався, що процес dsamain.exe запущений і слухає 389 порт. Для цього в другій командному рядку виконайте команду:

netstat -ano | findstr: 389
TCP 0.0.0.0:389 0.0.0.0:0 LISTENING 614

TCP [::]: 389 [::]: 0 LISTENING 614

TCP 0.0.0.0:389 *: * 614

TCP [::]: 389 *: * 614

Отримуємо, що процес з Process ID 614 слухає на порту TCP 389.
Перевіримо, що процес з PID 604 і є наш процес dsamain.exe:

tasklist / fi "pid eq 614" / fo list
Image Name: dsamain.exe

PID: 614

Session Name: Console

Session #: 2

Mem Usage: 11,316 K

Тепер, коли база AD змонтована, ми можемо звертатися до неї за допомогою утиліт ds * (dsget, dsquery і т.д.). Розберемо всі три варіанти приховування облікового запису адміністратора домену.

Перейменована обліковий запис адміністратора домену

Як можна визначити, що стандартний обліковий запис адміністратора Active Directory перейменована?
Стандартний administrator AD має відомий ідентифікатор SID, формат якого S-1-5-21- [ід домену] -500, відповідно, нам просто потрібно знайти в домені об'єкт з таким SID. У другій командному рядку виконайте команду:

dsquery user -s localhost | dsget user -s localhost -samid -sid | findstr / c: "- 500"
itpro S-1-5-21-2292496274-2043586872-6449473370-500

В даному випадку, видно, що обліковий запис administrator була перейменована в itpro.
Скинути пароль цього облікового запису можна також за допомогою спеціальної служби:

sc create ResetPW binPath = "% ComSpec% / k net user itpro P @ ssw0rd" start = auto

Тепер можна демонтувати базу AD (зупинити процес dsamain.exe комбінацією Ctrl + C). Переконайтеся, що команда повернула рядок

Active Directory Domain Services was shut down successfully

Підроблена обліковий запис адміністратора AD

Як визначити, що стандартний Administrator Active Directory не володіє необхідними правами? Це дуже просто. Знаючи DN (distinguished name) облікового запису administrator, ми можемо отримати список груп, в яких він складається:

dsget user "CN = Administrator, CN = Users, DC = winitpro, DC = ru" -s localhost -memberof -expand
«CN = Domain Users, CN = Users, DC = winitpro, DC = ru»

«CN = Users, CN = Builtin, DC = winitpro, DC = ru»

Як ви бачите, дана обліковий запис не перебуває в групі адміністраторів домену (Domain Admins) і не підійде для наших цілей. Наступна методика допоможе знайти "реальних" адміністраторів.

Альтернативний адміністратор домену

Спробуємо розібратися якомога отримати список облікових записів, які володіють правами адміністратора домену? Для початку спробуємо рекурсивно вивести всіх членів групи Administrators (в тому числі членів груп Domain Admins і Enterprise Admins).

dsquery group -s localhost -samid "administrators" | dsget group -s localhost -members -expand
«CN = Domain Admins, CN = Users, DC = winitpro, DC = ru»

«CN = Enterprise Admins, CN = Users, DC = winitpro, DC = ru»

«CN = Administrator, CN = Users, DC = winitpro, DC = ru»

«CN = itpro, CN = Users, DC = winitpro, DC = ru»

Як ви бачите, адміністраторськими правами володіють облікові записи Administrator і itpro. Перевіримо статус облікового запису Administrator:

dsget user "CN = Administrator, CN = Users, DC = winitpro, DC = ru" -s localhost -samid -sid -disabled
samid sid disabled

Administrator S-1-5-21-2092397264-2003686862-3249677370-500 yes

Як ви бачите, вона відключена.

Перевіримо тепер статус учеткі itpro:

dsget user "CN = itpro, CN = Users, DC = winitpro, DC = ru" -s localhost -samid -sid -disabled
samid sid disabled

itpro S-1-5-21-2092397264-2003686862-3249677370-1107 no

dsget succeeded

Цей обліковий запис активний. Перевіримо в жодних гуртах вона складається:

dsget user "CN = itpro, CN = Users, DC = winitpro, DC = ru" -s localhost -memberof -expand
«CN = Group Policy Creator Owners, CN = Users, DC = winitpro, DC = ru»

«CN = Domain Admins, CN = Users, DC = winitpro, DC = ru»

«CN = Enterprise Admins, CN = Users, DC = winitpro, DC = ru»

«CN = Schema Admins, CN = Users, DC = winitpro, DC = ru»

«CN = Domain Users, CN = Users, DC = winitpro, DC = ru»

«CN = Denied RODC Password Replication Group, CN = Users, DC = winitpro, DC = ru»

«CN = Administrators, CN = Builtin, DC = winitpro, DC = ru»

«CN = Users, CN = Builtin, DC = winitpro, DC = ru»

Відмінно, у неї є права адміністратора домена! Залишилося cбросіть пароль облікового запису з samid - itpro. Знову таки, зробити це можна за допомогою служби:

sc create ResetPW binPath = "% ComSpec% / k net user itpro PA $ w0rd94" start = auto

Не забудьте отмонтировать базу AD і перезавантажте сервер.