Автоматизация получения прав администратора домена в Active Directory

Автоматизация получения прав администратора домена в Active Directory

С момента появления фреймворка Empire и приложения BloodHound пентесты систем на базе Active Directory становятся все проще и прямолинейнее для 95% сред.

Автор: byt3bl33d3r

С момента появления фреймворка Empire и приложения BloodHound пентесты систем на базе Active Directory становятся все проще и прямолинейнее для 95% сред. Поскольку каждый раз выполняются одни и те же операции, я решил, что настало время автоматизировать процесс. Мне кажется, что скрипт, работающий по принципу «запустил и забыл», который автоматически получает права администратора домена, является мечтой для каждого специалиста по безопасности.

К тому моменту когда я решил реализовать свою задумку, некоторые товарищи, упомянутые в конце статьи, уже проделали большую часть работ. Кроме того, некоторое время назад во фреймворке Empire появился RESTful API, который упрощает создание сторонних скриптов.

Перед тем как продолжить, я бы хотел упомянуть о том, что во время пентестов получение прав администратора домена не должно быть единственной целью (в противном случае следует еще раз подумать над своими целями). Нужно сосредоточиться на пост-эксплуатации в целом и получении персональной конфиденциальной информации, документов и так далее. То есть все, что можно продемонстрировать «менеджменту» как влияющее на деятельность организации в случае, если произойдет реальное компрометирование. С другой стороны, доступ с правами администратора домена серьезно упрощает жизнь, позволяет показать дополнительную ценность клиенту и придает уверенность исследовательской группе.

Цели проекта и практическая реализация

Изначально я хотел создать нечто, что будет брать выходные данные утилиты BloodHounds, выполнять парсинг и отдавать результаты во фреймворк Empire с последующим выполнением определенной «цепочки» операций. Хотя в BloodHound , насколько мне известно, не предусмотрено использование возможностей, которые можно получить при помощи эскалации привилегий домена, например, GPP-пароли в хранилище SYSVOL (лично я считаю, что эта тема встречается практически повсюду).

Таким образом, я хотел реализовать более «деятельную» версию BloodHound, которая функционировала бы наподобие червя. Следует отметить, что в Empire есть большая часть базовых функций из BloodHound, раскиданных по разным модулям, и любой метод, выполняемый BloodHound, на который еще нет модуля в Empire, можно легко реализовать (например, схему ACL attack path update, на которую, между прочим, стоит обратить вниманием).

В итоге я остановился на фреймворке Empire и решил делать автоматизацию при помощи RESTful API, что давало бы мне свободу при парсинге результатов работы модулей и больший контроль над общей логикой и пользовательской обратной связью.

Алгоритм работы

На рисунке ниже, на мой взгляд, показана детальная схема работы моего творчества, которая отражает суть процесса намного лучше любых словесных объяснений.

Рисунок 1: Общая схема автоматизированного получения прав администратора домена

Если вы занимаетесь пентестами систем на базе Active Directory, большая часть схемы, продемонстрированной выше, должна быть вам знакома. В противном случае задавайте вопросы, на которые я постараюсь ответить.

Настройка системы

Чтобы система работала корректно, необходимо установить мой форк, пока не будет интегрирован этот pull-запрос (и соответствующие изменения) в текущее хранилище. Мой форк содержит API и исправления функциях, связанных с работой с базами данных, для скриптов, взаимодействующих с RESTful API.  

Для начала нужно клонировать и установить репозиторий Empire, а затем выполнить следующую команду:

 python empire --rest --username username --password  password

Запустится консоль Empire и сервер RESTful API.

Для загрузки и запуска системы автоматизации DeathStar (кодовое название моего творчества) необходимо выполнить следующую последовательность команд.

git clone https://github.com/byt3bl33d3r/DeathStar
# Death Star is written in Python 3
pip3 install -r requirements.txt
# Supply the username and password you started  Empire's RESTful API with
./DeathStar.py -u username -p password

Если все прошло успешно, будет создан http-слушатель, и вы увидите статус 'Polling for Agents', который означает, чтобы вы авторизированы в RESTful API и DeathStar находится в ожидании первого агента.

Теперь вам нужен агент на машине, подключенной к домену. Тема, связанная с получением агента, выходит за рамки этой статьи. Лично я рекомендую воспользоваться утилитой CrackMapExec.

Схема в действии

После получения агента далее всю работу будет выполнять утилита DeathStar.

Ниже показаны два видео, где демонстрируются различные способы получения прав администратора домена.

На первом видео привилегии повышаются при помощи уязвимости, связанной с GPP-паролями в хранилище SYSVOL. Вначале распространение начинается с машин, где в групповых политиках прописано использование незашифрованых учетных записей. Затем дело доходит до системы, где авторизирован администратор домена. Далее происходит поиск запущенных процессов и инъекция (по умолчанию в explorer.exe) в процесс, запущенный от имени учетной записи администратора домена. Таким образом, мы получаем агента, запущенного в этом контексте безопасности:

Во втором видео демонстрируется получение учетной записи администратора домена при помощи Mimikatz и злоупотребления взаимосвязями в контексте локального администратора:

Следует упомянуть, что на видео выше используются учетные записи тем или иным образом. Хотя  утилита DeathStar пригодна для получения прав администратора домена при помощи взаимосвязей локального администратора и PSInject без использования самих учетных записей.

Добавочный функционал

Данная схема является лишь первым шагом на пути получения действительно полезного инструмента. Я бы хотел добавить больше техник, связанных с расширением привилегий, методов распространения, и сделать тюнинг текущей логики. Кроме того, можно внедрить дополнительные уловки в пост-эксплуатацию, первичное имя сервиса (SPN) и т. д.

Более того, как только на базе фреймворка Empire будет реализована схема, связанная с именованными каналами в SMB (SMB Named Pipe pivoting), то тогда мир увидит нового червя.

Заключение

На примере утилиты DeathStar мы видим, что автоматизация получения прав администратора домена возможна даже с использование общедоступных инструментов. Надеюсь, что вскоре появится много новых схожих утилит (лично я знаю двух людей, которые работают над решением этой задачи).

Напоследок хотел бы сказать, что на все про все у меня ушло 3-4 дня. А теперь представьте, чего может добиться коллектив людей, которые намного умнее меня и обладают большим временем и другими ресурсами.

Благодарности

Ничего из того, с чем вы ознакомились, не вышло бы в свет, без людей, упомянутых ниже, которые проделали огромную работу. Рекомендую вам ознакомиться с творчеством этих исследователей. Хотел бы поблагодарить нижеуказанных ребят за постоянную поддержку и советы:

Где кванты и ИИ становятся искусством?

На перекрестке науки и фантазии — наш канал

Подписаться