
Azure Outlook कमांड और नियंत्रण (C2) - अपने Outlook मेलबॉक्स से समझौता किए गए Windows डिवाइस को दूरस्थ रूप से नियंत्रित करें। उत्तर कोरियाई APT InkySquid / ScarCruft / APT37 के लिए खतरा अनुकरण उपकरण। TTP: C2 संचालन के लिए Microsoft Graph API का उपयोग करें।
Azure Outlook कमांड और कंट्रोल जो Microsoft Graph API का उपयोग C2 संचार और डेटा निकासी के लिए करता है।
अपने Outlook मेलबॉक्स से एक समझौता किए गए Windows डिवाइस को दूरस्थ रूप से नियंत्रित करें।
Elastic Security Labs ने जंगल में SIESTAGRAPH का उपयोग करते हुए सक्रिय घुसपैठ की खोज की है। SIESTAGRAPH आउटलुक और OneDrive का उपयोग करके कमांड और कंट्रोल के लिए Microsoft के GraphAPI के साथ इंटरैक्ट करता है। Azure Outlook C2 संचार पर उनके शानदार मैलवेयर विश्लेषण ब्लॉग नीचे देखें।


यदि आपके पास समान परियोजनाओं के बारे में कोई जानकारी है, APT/रैनसमवेयर-समूहों द्वारा जंगल में उपयोग किए जा रहे इस TTP के बारे में CTI जानकारी, रक्षा सलाह, Azure C2 खतरे के अनुकरण में रुचि रखने वाले Red Teamers के लिए सिफारिशें, या कोई अन्य जानकारी जो इस ब्लॉग/रीडमी में अच्छी वृद्धि होगी, कृपया मुझसे संपर्क करें या पुल रिक्वेस्ट सबमिट करें। धन्यवाद!
इस प्रोजेक्ट में एक इम्प्लांट शामिल है जो एक हमलावर-नियंत्रित Azure Outlook मेलबॉक्स को बीकन करता है, जो कमांड और कंट्रोल (C2) के रूप में कार्य करता है; समझौता किए गए डिवाइस को दूरस्थ रूप से नियंत्रित करना। हमलावरों के C2 मेलबॉक्स के लिए एक Azure रिफ्रेश टोकन संकलन के दौरान इम्प्लांट में हार्ड-कोड किया जाता है। जब Windows डिवाइस पर निष्पादित किया जाता है, तो इम्प्लांट Microsoft Graph API के माध्यम से हमलावरों के ड्राफ्ट मेलबॉक्स तक पहुँचता है। इम्प्लांट हमलावरों के ड्राफ्ट मेलबॉक्स से कमांड निर्देश पढ़ता है, स्थानीय रूप से समझौता किए गए Windows डिवाइस पर निर्देशों को निष्पादित करता है, और नए ड्राफ्ट संदेशों के निर्माण के माध्यम से कमांड आउटपुट हमलावर को लौटाता है। इम्प्लांट इस व्यवहार को हमलावर के मेलबॉक्स से दूरस्थ रूप से नियंत्रित किए जाने के रूप में तब तक दोहराता है जब तक कि इम्प्लांट होस्ट प्रक्रिया बाहर नहीं निकल जाती।
मैंने लगभग छह महीने पहले Trustwave में SpiderLabs Red Team पर Red Teaming शुरू की। एक अभियान के दौरान मुझे प्रसिद्ध Stephan Borosh (rvrsh3ll|@424f424f) के साथ काम करने का सम्मान मिला। स्टीव और Matt Kingstone ने मुझे Azure डोमेन फ्रंटिंग के बारे में सब कुछ सिखाया, और मैं यह देखकर हैरान रह गया कि कमांड और कंट्रोल ट्रैफ़िक को ajax.microsoft.com जैसे वैध डोमेन का उपयोग करके HTTPS के माध्यम से बाहर निकाला जा सकता है। यह Microsoft के TLS प्रमाणपत्रों का भी उपयोग करता है! दुर्भाग्य से मेरे लिए, मैंने Red Teaming उसी समय शुरू की जब Azure पर डोमेन फ्रंटिंग समाप्त हो गई। भले ही Azure पर डोमेन फ्रंटिंग मर चुकी थी, फिर भी Azure के साथ बहुत सारी शानदार Red Team तकनीकें की जा सकती थीं।
स्टीव ने मुझे Azure डिवाइस कोड फ़िशिंग से परिचित कराया। इस समय के दौरान मैंने Red Teaming के लिए Azure और Microsoft Graph API में गहराई से गोता लगाया। हमने Dr. Nestori Syynimaa (@DrAzureAD) के महान कार्य से व्युत्पन्न TokenTactics टूल बनाया, और हमने द आर्ट ऑफ़ द डिवाइस कोड फिश ब्लॉग बनाया यदि आप हमारी पद्धति में रुचि रखते हैं।
TokenTactics बनाने और MS Graph API के साथ प्रयोग करते समय, मैंने पाया कि Microsoft Graph API को C2 चैनल के रूप में उपयोग करना संभव है। MS Graph API को C2 चैनल के रूप में उपयोग करने के कई अलग-अलग तरीके हैं, और मैं इसकी खोज करने वाला एकमात्र व्यक्ति (या पहला) नहीं हूँ। VX-Underground, जिसे @smelly__vx ने बनाया - HellsGate तकनीक के निर्माता/प्रकाशक, ने पिछले महीने जानकारी जारी की कि उत्तर कोरियाई उन्नत लगातार खतरा (APT) समूह "InkySquid" (उर्फ ScarCruft और APT37) C2 संचालन के लिए Microsoft Graph API का उपयोग करता है। Twitter और LinkedIn पर इस प्रोजेक्ट का एक टीज़र जारी करने के बाद, कई DFIR पेशेवरों ने टिप्पणी की कि C2 संचालन के लिए Microsoft Graph API का उपयोग करने की यह तकनीक महीनों पहले से रैनसमवेयर समूहों द्वारा जंगल में सक्रिय रूप से उपयोग की जा रही है।
Red Team अभियान के दौरान, मैंने C2 चैनल के रूप में MS Graph API के साथ Cobalt Strike को काम करने का प्रयास किया। दुर्भाग्य से, मैं असफल रहा, लेकिन यह अभी भी एक भविष्य का लक्ष्य है। Cobalt Strike के साथ इसे काम करने में मुझे जिस समस्या का सामना करना पड़ता है, वह यह है कि MS Graph API संचार के लिए 2 टोकन का उपयोग करता है। पहला टोकन रिफ्रेश टोकन है जो 90 दिनों तक रह सकता है। दूसरा टोकन, एक्सेस टोकन, एक अस्थायी टोकन है जो लगभग एक घंटे तक रहता है। MS Graph API के लिए प्रत्यक्ष संचार एक्सेस टोकन के साथ प्रमाणीकरण के माध्यम से किया जाता है। एक बार एक्सेस टोकन समाप्त हो जाने पर, नए एक्सेस टोकन प्राप्त करने के लिए रिफ्रेश टोकन का उपयोग किया जा सकता है। चूंकि मैं अभी भी Red Teaming और Cobalt Strike विकास में नया हूँ, इसलिए मैं यह पता नहीं लगा सका कि लगातार नए एक्सेस टोकन प्राप्त करने और HTTPS बीकन के अनुरोधों के Authorization हेडर में इन बदलते एक्सेस टोकन को भेजने के लिए Cobalt Strike Malleable C2 प्रोफ़ाइल का उपयोग कैसे किया जाए। Twitter पर टीज़र जारी करने के बाद, Joe Vest, Alfie Champion, और समुदाय के अन्य रॉकस्टार ने मुझे Cobalt Strike के साथ इसे काम करने के बारे में कुछ महान दिशा दी है! उम्मीद है कि भविष्य में इस प्रोजेक्ट का Cobalt Strike फॉलो-अप होगा ;)

graph.microsoft.com के लिए HTTPS TCP संचार के माध्यम से किया जाता है।WinInet डायनामिक-लिंक लाइब्रेरी का उपयोग करता है।cmd, sleep, exitcmd: मेटा कमांड के बाद निम्न स्ट्रिंग लेता है और इसे एक चाइल्ड प्रक्रिया को जन्म देकर निष्पादित करता है।sleep: मेटा कमांड के बाद निम्न शब्द लेता है और इम्प्लांट की नींद को आपूर्ति किए गए मान (मिलीसेकंड में) में बदल देगा।exit: होस्ट प्रक्रिया से बाहर निकलता/समाप्त करता है।cmd है तो इम्प्लांट कमांड को निष्पादित करने के लिए एक चाइल्ड प्रक्रिया बनाएगा, चाइल्ड प्रक्रिया अपने मानक आउटपुट को एक पाइप पर लिखेगी, कमांड निष्पादन के बाद चाइल्ड प्रक्रिया बाहर निकल जाती है, और होस्ट इम्प्लांट प्रक्रिया पाइप के माध्यम से चाइल्ड प्रक्रिया के आउटपुट को पढ़ लेगी।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
azureOutlookC2.c फ़ाइल के अंदर अपना TenantID char tenantId[] वेरिएबल में जोड़ें।# PowerShell सत्र में TokenTactics मॉड्यूल आयात करें
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 दर्ज करें, और C2 मेलबॉक्स उपयोगकर्ता के साथ लॉग इन करें।azureOutlookC2.c फ़ाइल के अंदर char refreshToken[] वेरिएबल में जोड़ें।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 PE फ़ाइल निष्पादित करें।outlook.office.com में लॉग इन करें, और अपने मेलबॉक्स से इम्प्लांट चला रहे Windows डिवाइस को नियंत्रित करें।