
यह AppDomain Manager इंजेक्शन को शेलकोड एम्बेडिंग के साथ हस्ताक्षरित बाइनरी में संयोजित करता है ताकि रेड टीम पेलोड के लिए EDR/AV डिटेक्शन से बचा जा सके।
पिछले कुछ दिनों में मैं AppDomain मैनेजर इंजेक्शन तकनीक के साथ प्रयोग कर रहा था और कुछ EDRs के खिलाफ अपने पिछले Red Team अभियानों में इसमें अच्छी सफलता मिली। हालाँकि, यह प्रारंभिक पहुँच वेक्टर के लिए वास्तव में अच्छा है, मैं एक POC जारी करना चाहता था जो आपके शेलकोड को कहीं और छिपाने में मदद करेगा। अब शेलकोड एम्बेडेड DLL फ़ाइलें नहीं!
हालाँकि जब इस तकनीक का स्वतंत्र रूप से उपयोग किया जाता है तो यह उत्कृष्ट है, लेकिन जब इसे ISO/ZIP/VHD/VHDX फ़ाइल के अंदर C# ClickOnce भेजने जैसी डिलीवरी तकनीक के साथ जोड़ा जाता है, तो असली समस्या यह है कि 10 में से 1 बार appdomain के लिए DLL का पता AV/EDR की AI/ML ह्यूरिस्टिक्स द्वारा लगाया जाता था। ऐसा इसलिए है क्योंकि appdomain को इनिशियलाइज़ करने से पहले DLL फ़ाइल को डिस्क पर ड्रॉप करना आवश्यक है। फिलहाल रिमोट DLL लोड (UNC पथ in .config) को अनदेखा करते हुए, appdomain के लिए DLL में शेलकोड होता था और मुझे दृढ़ता से लगा कि यह संभावित स्थैतिक पहचान का कारण है, क्योंकि बाकी कोड जो WINAPI कॉल्स हैं, उन्हें गतिशील रूप से हल किया जा सकता है और अच्छी तरह से अस्पष्ट किया जा सकता है।
मैं इस तकनीक को इस संदर्भ में बढ़ाना चाहता था कि DLL में शुरू में क्या होगा, इसे कम करना। मैंने डिस्क पर एक अलग फ़ाइल में एन्क्रिप्टेड शेलकोड को इंजेक्टर DLL के साथ ड्रॉप करना शुरू किया, लेकिन फिर मुझे Checkpoint का Zloader के अभियान पर यह अद्भुत ब्लॉग मिला - Zloader's Campaign
TLDR संस्करण: हम PE के भीतर कुछ फ़ील्ड्स में मनमाना डेटा इस तरह एम्बेड कर सकते हैं कि फ़ाइल के सिग्नेचर को न तोड़ें। तो हमारा डेटा एम्बेड हो जाएगा और EXE डिजिटली हस्ताक्षरित रहेगा।
इस पर अधिक जानकारी - https://www.blackhat.com/docs/us-16/materials/us-16-Nipravsky-Certificate-Bypass-Hiding-And-Executing-Malware-From-A-Digitally-Signed-Executable-wp.pdf
तो विचार यह है कि एक ज्ञात हस्ताक्षरित निष्पादन योग्य में एन्क्रिप्टेड शेलकोड स्टब को एम्बेड करें और फिर भी इसे हस्ताक्षरित रखें जैसे Zloader मैलवेयर ने किया। ऐसा करने से AppDomain Manager DLL में अब स्वयं शेलकोड नहीं होगा, बल्कि केवल उस PE बाइनरी से शेलकोड को पार्स करने का तर्क होगा जो इसे डिक्रिप्ट करने और एक अलग थ्रेड के रूप में निष्पादित करने के लिए लोड करता है। ऐसा करने से DLL के लिए स्थैतिक पहचान दर कम हो सकती है जबकि आपका शेलकोड एक हस्ताक्षरित बाइनरी के अंदर अच्छी तरह से रखा गया है।
मैं इसे मैन्युअल रूप से VirusTotal से प्राप्त ZLoader नमूनों से छेड़छाड़ करके प्राप्त करने की कोशिश कर रहा था, लेकिन बाद में मुझे एक प्रोजेक्ट के बारे में पता चला जिसने पहले से ही इन सभी तकनीकों को काफी अच्छी तरह से लागू किया था - Sigflip। इस POC में मैंने AppDomain DLL बनाने के लिए Sigflip के लोडर कोड का लाभ उठाया और एन्क्रिप्टेड शेलकोड को हमारे C# exe में एम्बेड करने के लिए SigFlip इंजेक्टर का उपयोग किया।
Cobalt Strike के Stageless शेलकोड जैसे शेलकोड के बड़े ब्लॉब्स अब उपयोग किए गए ऑब्सफ्यूकेशन/एन्कोडिंग तकनीकों के बावजूद, डिस्क पर एक अहस्ताक्षरित DLL पर नहीं रहेंगे। DLL कोड के साथ साफ, छोटा और चुपके से होता है, जिससे पहचान की संभावना कम हो जाती है।
SigFlip.exe -i "Z:\ZLoader\CasPol.exe" "Z:\ZLoader\x64-stageless.bin" "Z:\ZLoader\update.exe" "S3cretK3y"update.exe नामक एक (विंडोज हस्ताक्षरित?) बाइनरी है जो एन्क्रिप्टेड शेलकोड के साथ एम्बेडेड एक डिजिटली हस्ताक्षरित PE होगी।csc /target:library /out:test.dll test.csयह POC केवल एक विचार है जो मेरे मन में था कि दो पूरी तरह से अलग डिफेंस से बचने की तकनीकों को एक साथ जोड़ा जाए जो मुझे और अन्य Red Teamers को उनके संचालन के लिए बेहतर प्रारंभिक निष्पादन पेलोड बनाने में मदद करेगी। यह प्रोजेक्ट AppDomain Manager Injection को एक उदाहरण के रूप में उपयोग करता है, लेकिन यह विचार अन्य इंजेक्शन तकनीकों जैसे - DLL SideLoading, DLL Hijacking आदि पर भी लागू होता है।
पूरा श्रेय med0x2e को जाता है, यह POC उनके SigFlip प्रोजेक्ट पर आधारित है।