
क्रिस्टल पैलेस के साथ बनाया गया कोबाल्ट स्ट्राइक के लिए एक PoC UDRL जो राफेल मुज के पेज स्ट्रीमिंग तकनीक को एक मॉड्यूलर कॉल गेट (ड्रैगुर) के साथ जोड़ता है
Eden लोडर Cobalt Strike के लिए एक PoC UDRL है, जो Crystal Palace के साथ बनाया गया है, जो Raphael Mudge की पेज स्ट्रीमिंग तकनीक को एक मॉड्यूलर कॉल गेट (वर्तमान में Sleepmask-VS Draugr callgate BOF का PIC संस्करण) के साथ जोड़ता है।
Eden लोडर का उद्देश्य है:
Eden लोडर पर अधिक जानकारी के लिए साथ में दिए गए ब्लॉग को देखें।
नोट: Eden का उद्देश्य Crystal Palace का उपयोग करके विभिन्न 'निष्पादन इकाइयों' (अर्थात क्षमताओं) को संयोजित करके कस्टम लोडर बनाने के विचार को प्रदर्शित करना है। यह एक पूर्ण विकसित 'बचाव' लोडर होने का इरादा नहीं है और इसलिए इसमें डिज़ाइन द्वारा कई बुनियादी OPSEC सुविधाओं का अभाव है। उदाहरण के लिए, यह RWX मेमोरी का उपयोग करता है और Beacon की हीप मेमोरी को ट्रैक/मास्क नहीं करता है (और इसलिए यह इस जैसे YARA सिग्स के लिए संवेदनशील है)।
नोट: यह त्वरित आरंभ मार्गदर्शिका मानती है कि आपने Crystal Palace को डाउनलोड/बिल्ड किया है और अपने डेवलपमेंट एनवायरनमेंट को कॉन्फ़िगर करने के लिए निम्नलिखित चरणों को पूरा किया है।
stage {
set sleep_mask "false";
}
WSL टर्मिनल खोलें और Eden लोडर बनाएं: make clean; make।crystalpalace.jar को अपने Cobalt Strike क्लाइंट निर्देशिका में कॉपी करें।eden.cna को Cobalt Strike क्लाइंट में लोड करें।[14:55:55] [*] Generating Payload: HTTP -- Type: HTTP -- Arch: x64 -- Exit Function: Thread -- System Call: None -- HTTP Library: wininet
[14:55:56] [EDEN] Parsing C:\Users\wb\Desktop\eden\eden.spec...
[14:55:56] [EDEN] Applying eden ldr spec...
[14:55:56] [EDEN] Payload Size: 387060 bytes
[14:55:56] [*] Using user modified reflective DLL! DLLName=resources/beacon.x64.rl0k.dll Arch=x64
नोट: Eden HTTP(S), DNS, और Pivot Beacons का समर्थन करता है।
रिलीज़ के समय Crystal Palace की एक सीमा यह है कि यह वर्तमान में केवल mingw के साथ बनाई गई ऑब्जेक्ट फ़ाइलों का समर्थन करता है। यदि आप MSVC या Clang के साथ बनाए गए COFF का उपयोग करने का प्रयास करते हैं तो आपको आमतौर पर रीलोकेशन त्रुटियाँ मिलेंगी। यह निराशाजनक हो सकता है क्योंकि mingw सीधे pdb फ़ाइलों का समर्थन नहीं करता है और इसलिए जटिल Windows ट्रेडक्राफ्ट लिखते समय डीबग करना मुश्किल हो सकता है। हालाँकि, आप एक्जीक्यूटेबल बिल्ड में डीबग जानकारी एम्बेड करने के लिए अपने Makefile में -g विकल्प जोड़ सकते हैं। यह WinDbg में अपने कोड के माध्यम से कदम दर कदम आगे बढ़ना संभव बनाता है। इस प्रक्रिया के बारे में अधिक जानकारी के लिए Rastamouse द्वारा लिखित निम्नलिखित ब्लॉग पढ़ने की अनुशंसा की जाती है।
यह रिपॉजिटरी डिफ़ॉल्ट रूप से Draugr (draugr.x64.exe) और पेज स्ट्रीमिंग कोड (guardexec.x64.exe) का डीबग बिल्ड बनाने के लिए उपरोक्त दृष्टिकोण का उपयोग करती है। Draugr डीबग बिल्ड की कोई निर्भरता नहीं है और इसलिए यह बॉक्स से बाहर बनेगा, हालाँकि यदि आप पेज स्ट्रीमिंग/IAT हुक कोड के माध्यम से कदम दर कदम आगे बढ़ना/डीबग करना चाहते हैं तो आपको नीचे दिए गए चरणों का पालन करना होगा:
1. Export Beacon without a loader:
debug/export_beacon_with_no_ldr.cna को अपने CS क्लाइंट में लोड करें और /eden/debug/ निर्देशिका में एक स्टेजलेस रॉ x64 (HTTP) Beacon एक्सपोर्ट करें। यह एक Beacon DLL को बिना रिफ्लेक्टिव लोडर के एक्सपोर्ट करेगा जिसका उपयोग हम guardexec एंट्री पॉइंट को मॉक करने के लिए कर सकते हैं।$ xxd -i ./beacon_x64.bin > debug_beacon.h2. Export Draugr PIC stub from Crystal Palace:
$ ./piclink /<path>/eden/debug/draugr.spec x64 /<path>/eden/debug/draugr.bin के माध्यम से Crystal Palace चलाना होगा। यह Crystal Palace का उपयोग करके केवल Draugr PIC स्टब को बाहर निकाल देगा जिसका उपयोग हम guardexec एंट्री पॉइंट को मॉक करने के लिए कर सकते हैं।$ xxd -i ./draugr.bin > debug_druagr.h3. WinDbg में डीबगिंग शुरू करें
make clean;makeWinDbg खोलें और लॉन्च एक्जीक्यूटेबल (/eden/bin/draugr.exe या /eden/bin/guardexec.exe) चुनेंOpen source file चुनें और प्रासंगिक .c फ़ाइल चुनें (अर्थात यदि पेज स्ट्रीमिंग कोड को डीबग कर रहे हैं तो guardexec.c)।नोट: लोडर के लिए कोई डीबग एक्जीक्यूटेबल नहीं है क्योंकि Crystal Palace को एन्क्रिप्टेड DLL और उनकी कुंजियों जैसी चीजों के लिए डीबग पेलोड निर्यात करने का कोई स्पष्ट तरीका नहीं है। इसलिए, मॉक किए गए 'एन्क्रिप्टेड' PIC बफ़र्स को पास करना गैर-तुच्छ हो जाता है।
Eden लोडर मुख्य रूप से विभिन्न 'क्षमताओं' को संयोजित करके एक नवीन लोडर बनाने के लिए Crystal Palace की शक्ति प्रदर्शित करने का इरादा रखता है। इस विचार को इस रेपो में जितना है उससे कहीं अधिक आगे ले जाया जा सकता है (अर्थात एक 'स्थिर' PIC लोडर जो COFF मॉड्यूल (गार्डरेल, कॉलगेट, स्लीप ऑबफस्केशन आदि) के माध्यम से पूरी तरह से अनुकूलन योग्य है)।
Eden लोडर स्पष्ट रूप से Draugr के PIC संस्करण का उपयोग करता है ताकि यह Beacon के जीवनचक्र के हर कॉल को स्पूफ कर सके (अर्थात रिफ्लेक्टिव लोडिंग प्रक्रिया के दौरान उपयोग किए जाने वाले VirtualAlloc / LoadLibrary कॉल)। कुछ मामलों में, यह अतिशयोक्ति हो सकती है (अर्थात एक EDR LoadLibrary आदि के लिए अनबैक कॉल की परवाह नहीं करता है) ऐसी स्थिति में इसे Draugr के PICO (=='BOF') समकक्ष का उपयोग करने के लिए संशोधित किया जा सकता है जो बहुत सरल है।
Eden लोडर जानबूझकर 'कॉलगेट' को लोडर से अलग रखने का प्रयास करता है। यह मॉड्यूलरिटी के लिए डिज़ाइन द्वारा है, क्योंकि विचार यह है कि आप BeaconGate/कॉलगेट BOFs को अंदर और बाहर स्वैप कर सकते हैं। इसलिए, Draugr कॉलगेट कोड पूरी तरह से अपनी ऑब्जेक्ट फ़ाइल में निहित है। इसे किसी अन्य 'क्षमता' से बदलने पर आप Eden के TTPs को नाटकीय रूप से बदल सकते हैं।
Eden लोडर पसंद से Crystal Palace की अधिक हाल की सुविधाओं का उपयोग नहीं करता है। एक उदाहरण के रूप में, mergelib का उपयोग Crystal Palace की साझा लाइब्रेरी, LibTCG के साथ किया जा सकता है। हालाँकि, ध्यान दें कि इसका मतलब है कि आप अपने कोड को डीबग करने की क्षमता खो देते हैं।
पेज स्ट्रीम तकनीक कुछ कमांड के लिए Beacon के प्रदर्शन को प्रभावित कर सकती है (अर्थात डिफ़ॉल्ट रूप से, 4 दृश्य पृष्ठों के साथ कॉन्फ़िगर किए जाने पर प्रक्रिया इंजेक्शन में ~1 मिनट (!) लगेगा)। आप अधिकांश समस्याओं को हल करने के लिए guardexec.h में #define MAXVISIBLE बढ़ा सकते हैं (Eden के लिए डिफ़ॉल्ट मान 6 है)। एक सामान्य जानकारी के रूप में, पेज स्ट्रीमिंग प्रक्रिया इंजेक्शन तकनीकों (विशेष रूप से यदि वे टाइमिंग पर निर्भर करती हैं) के साथ समस्याएँ पैदा कर सकती है।
Eden लोडर Crystal Palace (https://tradecraftgarden.org/crystalpalace.html) के साथ बनाया गया है और निम्नलिखित परियोजनाओं का उपयोग करता है:
अंत में, @rastamouse को धन्यवाद, जिनका Crystal Palace पर ब्लॉगिंग ने विकास के दौरान मदद की।