В предыдущей статье мы описали процедуру сброса пароля стандартной учётной записи администратора домена 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:WindowsNTDSntds.dit -allowNonAdminAccess -ldapPort 389
Удостоверимся, что процесс dsamain.exe запущен и слушает 389 порт. Для этого во второй командной строке выполните команду:
netstat -ano | findstr :389
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
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"
В данном случае, видно, что учетная запись administrator была переименована в itpro.
Сбросить пароль этой учетной записи можно также с помощью специальной службы:
sc create ResetPW binPath= "%ComSpec% /k net user itpro P@ssw0rd" start= auto
Теперь можно размонтировать базу AD (остановить процесс dsamain.exe комбинацией Ctrl+C). Убедитесь, что команда вернула строку
Поддельная учетная запись администратора AD
Как определить, что стандартный Administrator Active Directory не обладает необходимыми правами? Это очень просто. Зная DN (distinguished name) учетной записи administrator, мы можем получить список групп, в которых он состоит:
dsget user "CN=Administrator,CN=Users,DC=remontka,DC=ru" -s localhost -memberof -expand
«CN=Users,CN=Builtin,DC=remontka,DC=ru»
Как вы видите, данная учетная запись не состоит в группе администраторов домена (Domain Admins) и не подойдет для наших целей. Следующая методика поможет найти «реальных» администраторов.
Альтернативный администратор домена
Попробуем разобраться как можно получить список учетных записей, обладающих правами администратора домена? Для начала попробуем рекурсивно вывести всех членов группы Administrators (в том числе членов групп Domain Admins и Enterprise Admins).
dsquery group -s localhost -samid "administrators" | dsget group -s localhost -members -expand
«CN=Enterprise Admins,CN=Users,DC=remontka,DC=ru»
«CN=Administrator,CN=Users,DC=remontka,DC=ru»
«CN=itpro,CN=Users,DC=remontka,DC=ru»
Как вы видите, администраторскими правами обладают учетные записи Administrator и itpro. Проверим статус учётной записи Administrator:
dsget user "CN=Administrator,CN=Users,DC=remontka,DC=ru" -s localhost -samid -sid -disabled
Administrator S-1-5-21-2092397264-2003686862-3249677370-500 yes
Как вы видите, она отключена.
Проверим теперь статус учетки itpro:
dsget user "CN=itpro,CN=Users,DC=remontka,DC=ru" -s localhost -samid -sid -disabled
itpro S-1-5-21-2092397264-2003686862-3249677370-1107 no
dsget succeeded
Эта учетная запись активна. Проверим в каких группах она состоит:
dsget user "CN=itpro,CN=Users,DC=remontka,DC=ru" -s localhost -memberof -expand
«CN=Domain Admins,CN=Users,DC=remontka,DC=ru»
«CN=Enterprise Admins,CN=Users,DC=remontka,DC=ru»
«CN=Schema Admins,CN=Users,DC=remontka,DC=ru»
«CN=Domain Users,CN=Users,DC=remontka,DC=ru»
«CN=Denied RODC Password Replication Group,CN=Users,DC=remontka,DC=ru»
«CN=Administrators,CN=Builtin,DC=remontka,DC=ru»
«CN=Users,CN=Builtin,DC=remontka,DC=ru»
Отлично, у нее есть права администратора домена! Осталось cбросить пароль учетной записи с samid — itpro. Опять таки, сделать это можно с помощью службы:
sc create ResetPW binPath= "%ComSpec% /k net user itpro PA$w0rd94" start= auto
Не забудьте отмонтировать базу AD и перезагрузите сервер.