
Azure Outlook Command & Control (C2) - التحكم عن بُعد في جهاز ويندوز مخترق من صندوق بريد Outlook الخاص بك. أداة محاكاة تهديد لمجموعة كوريا الشمالية APT InkySquid / ScarCruft / APT37. TTP: استخدام Microsoft Graph API لعمليات القيادة والتحكم (C2).
Azure Outlook Command & Control الذي يستخدم Microsoft Graph API للاتصالات C2 وتسريب البيانات.
التحكم عن بُعد في جهاز ويندوز مخترق من صندوق بريد Outlook الخاص بك.
اكتشفت Elastic Security Labs اختراقات نشطة في البرية تستخدم SIESTAGRAPH. يتفاعل SIESTAGRAPH مع Microsoft GraphAPI للتحكم والأوامر باستخدام Outlook وOneDrive. اطّلع على مدونات تحليل البرمجيات الخبيثة الرائعة الخاصة بهم حول اتصالات Azure Outlook C2 أدناه.


إذا كانت لديك أي معلومات حول مشاريع مماثلة، أو معلومات استخباراتية عن التهديدات (CTI) حول استخدام هذا الأسلوب (TTP) في البرية من قبل مجموعات APT / ransomware، أو نصائح دفاعية، أو توصيات لمختبرين أحمر مهتمين بمحاكاة التهديدات على Azure C2، أو أي معلومات أخرى ستكون إضافة جيدة لهذه المدونة/README، يُرجى الاتصال بي أو تقديم طلب سحب (Pull Request). شكراً لك!
يتكون هذا المشروع من إمبلانت (implant) يرسل إشارات (beacons) إلى صندوق بريد Azure Outlook يتحكم به المهاجم، والذي يعمل كقائد وأوامر (C2)؛ للتحكم عن بُعد في الجهاز المخترق. يتم تضمين رمز تحديث Azure (Refresh Token) لصندوق البريد C2 الخاص بالمهاجم بشكل ثابت (hard-coded) في الإمبلانت أثناء التجميع. عند التنفيذ على جهاز ويندوز، يصل الإمبلانت إلى صندوق المسودات (Drafts mailbox) الخاص بالمهاجم عبر Microsoft Graph API. يقرأ الإمبلانت تعليمات الأوامر من صندوق المسودات الخاص بالمهاجم، وينفذ الأوامر محلياً على جهاز ويندوز المخترق، ويعيد مخرجات الأمر إلى المهاجم عن طريق إنشاء رسائل مسودة جديدة. يكرر الإمبلانت هذا السلوك للتحكم عن بُعد من صندوق بريد المهاجم حتى يتم إنهاء عملية المضيف (host process) التي تعمل عليها الإمبلانت.
بدأت مؤخراً في العمل كفريق أحمر (Red Teaming) منذ حوالي نصف عام ضمن فريق SpiderLabs Red Team في Trustwave. خلال أحد المهام، تشرفت بالعمل مع الأسطورة Stephan Borosh (rvrsh3ll|@424f424f). علمني ستيف و Matt Kingstone كل شيء عن Azure Domain Fronting، واندهشت من أن حركة مرور القيادة والتحكم يمكن تسريبها عبر HTTPS باستخدام نطاقات شرعية مثل ajax.microsoft.com. بل ويستخدم شهادات TLS الخاصة بمايكروسوفت! لسوء حظي، بدأت العمل كفريق أحمر في نفس الوقت الذي مات فيه Domain Fronting على Azure. على الرغم من موت Domain Fronting على Azure، لا يزال هناك العديد من تقنيات الفريق الأحمر الرائعة التي يمكن القيام بها باستخدام Azure.
عرّفني ستيف على التصيد برمز الجهاز (Azure Device Code Phishing). خلال هذا الوقت، تعمقت في Azure و Microsoft Graph API لأعمال الفريق الأحمر. أنشأنا أداة TokenTactics، المستمدة من العمل الرائع للدكتور Nestori Syynimaa (@DrAzureAD)، وقمنا بنشر مدونة The Art of the Device Code Phish إذا كنت مهتماً بمنهجيتنا.
أثناء إنشاء TokenTactics وتجربة MS Graph API، اكتشفت أنه من الممكن استخدام Microsoft Graph API كقناة C2. هناك العديد من الطرق المختلفة لاستخدام MS Graph API كقناة C2، ولست الشخص الوحيد (أو الأول) الذي اكتشف هذا. VX-Underground، الذي أنشأه @smelly__vx - مبتكر وناشر تقنية HellsGate، نشر معلومات الشهر الماضي تفيد بأن مجموعة التهديدات المتقدمة الكورية الشمالية (APT) "InkySquid" (المعروفة أيضاً بـ ScarCruft و APT37) تستخدم Microsoft Graph API في عمليات C2. بعد إطلاق معاينة لهذا المشروع على Twitter و LinkedIn، علق العديد من محترفي DFIR بأن هذه التقنية لاستخدام Microsoft Graph API في عمليات C2 تُستخدم بنشاط من قبل مجموعات ransomware في البرية، ويعود تاريخها إلى شهور مضت.
خلال مهمة الفريق الأحمر، حاولت جعل Cobalt Strike يعمل مع MS Graph API كقناة C2. لسوء الحظ، فشلت، ولكن هذا لا يزال هدفاً مستقبلياً. المشكلة التي واجهتها لجعل هذا يعمل مع Cobalt Strike هي أن MS Graph API يستخدم رمزين للاتصالات. الرمز الأول هو رمز التحديث (Refresh Token) والذي يمكن أن يستمر لمدة تصل إلى 90 يوماً. الرمز الثاني، رمز الوصول (Access Token)، هو رمز مؤقت يستمر لمدة ساعة تقريباً. تتم الاتصالات المباشرة مع MS Graph API عبر المصادقة باستخدام رمز الوصول. بمجرد انتهاء صلاحية رمز الوصول، يمكن استخدام رمز التحديث للحصول على رموز وصول جديدة. نظراً لأني لا زلت جديداً في الفريق الأحمر وتطوير Cobalt Strike، لم أستطع معرفة كيفية استخدام ملف تعريف C2 القابل للتشكيل (Malleable C2 profile) الخاص بـ Cobalt Strike لدعم الحصول المستمر على رموز وصول جديدة وإرسال رموز الوصول المتغيرة هذه في رأس Authorization لطلبات beacon الخاصة بـ HTTPS. منذ إصدار المعاينة على Twitter، أعطاني Joe Vest، و Alfie Champion، وغيرهم من نجوم المجتمع بعض التوجيهات الملحمية حول كيفية جعل هذا يعمل مع Cobalt Strike! آمل أن يكون هناك متابعة لـ Cobalt Strike لهذا المشروع في المستقبل ;)

graph.microsoft.com.WinInet Dynamic-link لاتصالات HTTPS.cmd، sleep، exitcmd: يأخذ السلسلة التالية بعد الأمر الوصفي وينفذها عن طريق إنشاء عملية فرعية (child process).sleep: يأخذ الكلمة التالية بعد الأمر الوصفي ويغير فترة نوم الإمبلانت إلى القيمة المقدمة (بالمللي ثانية).exit: يخرج/يقتل عملية المضيف.cmd، سيقوم الإمبلانت بإنشاء عملية فرعية لتنفيذ الأمر، وستكتب العملية الفرعية إخراجها القياسي إلى أنبوب (pipe)، وتخرج العملية الفرعية بعد تنفيذ الأمر، وستقرأ عملية المضيف للإمبلانت مخرجات العملية الفرعية عبر الأنبوب.PS C:\Users\boku\Desktop\TokenTactics-main> Import-Module .\TokenTactics.psd1
PS C:\Users\boku\Desktop\TokenTactics-main> Get-TenantID -domain theharvester.world
1d5551a0-f4f2-4101-9c3b-394247ec7e08
char tenantId[] داخل ملف azureOutlookC2.c.# استيراد وحدة TokenTactics في جلسة PowerShell
PS C:\Users\boku> cd .\TokenTactics
PS C:\Users\boku\TokenTactics> Import-Module .\TokenTactics.psd1
# بدء طلب تصيد برمز جهاز للحصول على 'user_code'
PS C:\Users\boku> Get-AzureToken -Client Graph
user_code : ERDVDCNHH
user_code من TokenTactics، وسجل الدخول باستخدام مستخدم صندوق البريد C2.char refreshToken[] داخل ملف azureOutlookC2.c.void main() {
// Variables
char refreshToken[] = "0.AXwAoFFVHfL0AUGcOzlCR-x-CNYOWdOzUgJBrv-q0ikqsBx8ACA.AgABAAAAAA...
// ^ضع رمز التحديث الخاص بك هنا ثم قم بتجميعه
azureOutlookC2.c.# التجميع باستخدام x64 MinGW:
bobby.cooke$ cat compile.sh
x86_64-w64-mingw32-gcc -m64 -mwindows -Os azureOutlookC2.c -o azureOutlookC2.exe -lwininet
bobby.cooke$ bash compile.sh
azureOutlookC2.exe على جهاز ويندوز.outlook.office.com، وتحكم في جهاز ويندوز الذي يعمل عليه الإمبلانت من صندوق بريدك.