
ScareCrow - EDR बाईपास के लिए डिज़ाइन किया गया पेलोड निर्माण फ्रेमवर्क।
ScareCrow के नवीनतम संस्करण को देखने या कोई समस्या सबमिट करने के लिए, https://github.com/Tylous/ScareCrow देखें।
यदि आप इस फ्रेमवर्क में उपयोग की जाने वाली तकनीकों के बारे में अधिक जानना चाहते हैं, तो कृपया भाग 1 और भाग 2 देखें।
ScareCrow एक पेलोड निर्माण फ्रेमवर्क है जो एक वैध विंडोज प्रक्रिया में साइड लोडिंग (इंजेक्ट नहीं करना) के लिए है (एप्लिकेशन व्हाइटलिस्टिंग नियंत्रणों को बायपास करना)। एक बार जब DLL लोडर मेमोरी में लोड हो जाता है, तो यह एक तकनीक का उपयोग करके प्रक्रिया की मेमोरी में चल रहे सिस्टम DLLs से EDR के हुक को हटा देता है। यह इसलिए काम करता है क्योंकि हम जानते हैं कि EDR के हुक तब लगाए जाते हैं जब कोई प्रक्रिया स्पॉन की जाती है।
ScareCrow इन DLLs को लक्षित कर सकता है और API फंक्शन VirtualProtect का उपयोग करके उन्हें मेमोरी में हेरफेर कर सकता है, जो किसी प्रक्रिया की मेमोरी अनुमतियों के एक अनुभाग को एक अलग मान में बदलता है, विशेष रूप से Execute–Read से Read-Write-Execute में।
ScareCrow हटाने के लिए 2 विधियों में से 1 का उपयोग करता है
जब निष्पादित किया जाता है, तो ScareCrow C:\Windows\System32\ में डिस्क पर संग्रहीत सिस्टम DLLs के बाइट्स को कॉपी कर लेगा। ये DLLs EDR हुक से "स्वच्छ" डिस्क पर संग्रहीत होते हैं क्योंकि इनका उपयोग सिस्टम द्वारा एक नई प्रक्रिया में एक अपरिवर्तित प्रतिलिपि लोड करने के लिए किया जाता है जब इसे स्पॉन किया जाता है। चूंकि EDR केवल इन प्रक्रियाओं को मेमोरी में हुक करते हैं, वे अपरिवर्तित रहती हैं। ScareCrow पूरी DLL फ़ाइल की प्रतिलिपि नहीं बनाता, इसके बजाय यह केवल DLLs के .text अनुभाग पर ध्यान केंद्रित करता है। DLL का यह अनुभाग निष्पादन योग्य असेंबली रखता है, और ऐसा करके, ScareCrow पहचान की संभावना को कम करने में मदद करता है क्योंकि पूरी फ़ाइलों को फिर से पढ़ने से EDR को पता चल सकता है कि सिस्टम संसाधन में संशोधन हो रहा है। फिर डेटा को प्रत्येक फंक्शन के ऑफ़सेट का उपयोग करके मेमोरी के सही क्षेत्र में कॉपी किया जाता है। प्रत्येक फंक्शन का एक ऑफ़सेट होता है जो बेस एड्रेस से बाइट्स की सटीक संख्या को दर्शाता है जहाँ वे स्थित हैं, स्टैक पर फंक्शन का स्थान प्रदान करता है।
ऐसा करने के लिए, ScareCrow मेमोरी के .text क्षेत्र की अनुमतियों को VirtualProtect का उपयोग करके बदलता है। भले ही यह एक सिस्टम DLL है, चूंकि यह हमारी प्रक्रिया (जिसे हम नियंत्रित करते हैं) में लोड हो गया है, हम बिना उन्नत विशेषाधिकारों की आवश्यकता के मेमोरी अनुमतियों को बदल सकते हैं।
ScareCrow शेलकोड को पहले डिक्रिप्ट करके मेमोरी में लोड करता है, जो तीन एन्क्रिप्शन विधियों (नीचे उल्लिखित) में से एक द्वारा एन्क्रिप्ट किया जाता है। एक बार डिक्रिप्ट और लोड होने के बाद, शेलकोड निष्पादित किया जाता है। निर्दिष्ट लोडर विकल्पों के आधार पर, ScareCrow DLL के लिए अलग-अलग एक्सपोर्ट फंक्शन सेट करेगा। लोड किए गए DLL में मानक DLLMain फंक्शन भी नहीं होता है जो सभी DLLs को आमतौर पर संचालित करने की आवश्यकता होती है। DLL बिना किसी समस्या के निष्पादित होगा क्योंकि हम जिस प्रक्रिया में लोड करते हैं वह उन एक्सपोर्ट फंक्शन को खोजेगी और DLLMain के होने की चिंता नहीं करेगी।
बाद में
KnownDLLs उन DLLs की सूची है जो विंडोज द्वारा सिस्टम स्टार्टअप प्रक्रिया के दौरान लोड किए जाते हैं। चूंकि इन DLLs को ऑपरेटिंग सिस्टम के काम करने के लिए आवश्यक माना जाता है, इसलिए एप्लिकेशन शुरू होने पर लोड समय को कम करने और प्रदर्शन में सुधार करने के लिए इन्हें कैश किया जाता है। KnownDLLs में kernel32.dll, kernelbase.dll और ntdll.dll जैसे DLLs शामिल हैं।
इन KnownDLLs का उपयोग करते हुए, ScareCrow NtOpenSection और NtMapViewOfSection के संयोजन का उपयोग करके \KnownDlls\<dllname> से DLL की एक प्रतिलिपि मैप करता है ताकि इसे प्रक्रिया की मेमोरी में लोड किया जा सके। ScareCrow पूरे DLL को लोड नहीं करता, बल्कि यह केवल DLL के .text अनुभाग को लोड करता है (क्योंकि इसमें सभी सिस्कॉल्स शामिल हैं)। वहां से ScareCrow NtProtectVirtualMemory को कॉल करने के लिए अप्रत्यक्ष सिस्कॉल्स का उपयोग करता है और EDR के हुक को अधिलेखित करने की अनुमति देने से पहले DLL के .text मेमोरी अनुभाग की अनुमतियों को बदलता है, और फिर अनुमतियों को पुनर्स्थापित करता है।
अधिक जानकारी के लिए आप modexp का विस्तृत लेख पढ़ सकते हैं।
एक बार ये हुक हटा दिए जाने के बाद, ScareCrow तब मेमोरी में शेलकोड को लोड और चलाने के लिए कस्टम सिस्टम कॉल का उपयोग करता है। ScareCrow EDR हुक हटाए जाने के बाद भी ऐसा करता है ताकि नॉन-यूज़रलैंड, हुक-आधारित टेलीमेट्री संग्रह उपकरणों जैसे कि इवेंट ट्रेसिंग फॉर विंडोज (ETW) या अन्य इवेंट लॉगिंग तंत्रों द्वारा पहचान से बचा जा सके। इन कस्टम सिस्टम कॉल का उपयोग EDRs द्वारा लगाए गए हुक को हटाने के लिए ऊपर वर्णित VirtualProtect कॉल करने के लिए भी किया जाता है, ताकि किसी भी EDR के एंटी-टैम्पर नियंत्रणों से बचा जा सके। यह VirtualProtect सिस्कॉल के एक कस्टम संस्करण, NtProtectVirtualMemory को कॉल करके किया जाता है। ScareCrow इन लोडर को उत्पन्न करने के लिए Golang का उपयोग करता है और फिर इन कस्टम सिस्कॉल फंक्शनों के लिए असेंबली का उपयोग करता है।
लोडर के निर्माण की प्रक्रिया के दौरान, ScareCrow एक बीकन के होम कॉल करने के बाद पृष्ठभूमि में मिश्रण (blending) के लिए एक लाइब्रेरी का उपयोग करता है। यह लाइब्रेरी दो काम करती है:
कोड साइनिंग प्रमाणपत्रों के साथ हस्ताक्षरित फ़ाइलों की अक्सर कम जांच की जाती है, जिससे उन्हें चुनौती दिए बिना निष्पादित करना आसान हो जाता है, क्योंकि एक विश्वसनीय नाम द्वारा हस्ताक्षरित फ़ाइलें दूसरों की तुलना में कम संदिग्ध होती हैं। अधिकांश एंटीमैलवेयर उत्पादों के पास इन प्रमाणपत्रों को मान्य और सत्यापित करने का समय नहीं होता है (अब कुछ करते हैं, लेकिन आमतौर पर सामान्य विक्रेता नामों को व्हाइटलिस्ट में शामिल किया जाता है)। ScareCrow इन प्रमाणपत्रों को एक pfx12 फ़ाइल बनाने के लिए उपकरण limelighter के go पैकेज संस्करण का उपयोग करके बनाता है। यह पैकेज उपयोगकर्ता द्वारा निर्दिष्ट एक इनपुट डोमेन नाम लेता है, ताकि उस डोमेन के लिए एक कोड साइनिंग प्रमाणपत्र बनाया जा सके। यदि आवश्यक हो, तो आप अपने स्वयं के कोड साइनिंग प्रमाणपत्र का भी उपयोग कर सकते हैं, यदि आपके पास है, तो valid कमांड-लाइन विकल्प का उपयोग करें।
clone कमांड-लाइन विकल्प के साथ, और जिस फ़ाइल से प्रमाणपत्र कॉपी करना चाहते हैं उसके पथ के साथ कॉपी कर सकता है। लोडर को microsoft.com के साथ साइन करते समय, उनका WINDOWS DEFENDER ATP उत्पादों के विरुद्ध उपयोग करना उतना प्रभावी नहीं हो सकता है, क्योंकि वे प्रमाणपत्र को मान्य कर सकते हैं क्योंकि यह उनका है। यदि आप एक विंडोज उत्पाद के विरुद्ध लोडर का उपयोग कर रहे हैं, तो संभवतः एक अलग डोमेन का उपयोग करें।
इन फ़ाइलों और go कोड के साथ, ScareCrow उन्हें c-shared लाइब्रेरी विकल्प का उपयोग करके DLLs में क्रॉस कंपाइल करेगा। एक बार DLL संकलित होने के बाद, इसे एक टूटी हुई base64 स्ट्रिंग में अस्पष्ट (obfuscated) किया जाता है जिसे एक फ़ाइल में एम्बेड किया जाएगा। यह फ़ाइल को दूरस्थ रूप से खींचे जाने, एक्सेस किए जाने और प्रोग्रामेटिक रूप से निष्पादित किए जाने की अनुमति देता है।
जबकि ScareCrow के पास फ़ाइल विशेषताओं की एक विस्तृत सूची है, कुछ ऐसी परिस्थितियाँ हैं जहाँ एक कस्टम (शायद वातावरण-विशिष्ट) विशेषताओं के सेट की आवश्यकता होती है। इसे समायोजित करने के लिए, ScareCrow विशेषताओं वाली एक JSON फ़ाइल इनपुट करने की अनुमति देता है। -configfile कमांड-लाइन विकल्प का उपयोग करके, ScareCrow इन विशेषताओं और फ़ाइल नाम का उपयोग करेगा, न कि ScareCrow में पहले से मौजूद विशेषताओं का। फ़ाइल main.json में एक नमूना टेम्पलेट है कि ठीक से काम करने के लिए JSON संरचना कैसी होनी चाहिए। ध्यान दें कि आप "InternalName" के रूप में जो कुछ भी उपयोग करते हैं वह फ़ाइल नाम होगा।
ScareCrow को अब लोडर संकलित करने के लिए golang 1.19.1 या उसके बाद के संस्करण की आवश्यकता है। यदि आप एक पुराने संस्करण का उपयोग कर रहे हैं, तो कृपया संस्करण 1.19.1 या बाद के संस्करण का उपयोग करें।
नए संस्करणों के लिए देखें: https://golang.org/dl/.
पहला कदम हमेशा की तरह रिपॉजिटरी को क्लोन करना है। ScareCrow को संकलित करने से पहले, आपको निर्भरताओं को स्थापित करना होगा।
उन्हें स्थापित करने के लिए, निम्नलिखित कमांड चलाएँ:``` go get github.com/fatih/color go get github.com/yeka/zip go get github.com/josephspurrier/goversioninfo go get github.com/Binject/debug/pe go get github.com/awgh/rawreader
सुनिश्चित करें कि आपके OS पर निम्नलिखित इंस्टॉल हैं:```
openssl
osslsigncode
mingw-w64
फिर इसे बनाइए।``` go build ScareCrow.go
इसके अलावा, ScareCrow सभी लोडरों को अस्पष्ट करने के लिए [Garble](https://github.com/burrowers/garble) का उपयोग करता है।
नोट: कई निर्भरताएँ Windows पर संकलन करते समय अच्छी तरह से काम नहीं करतीं, इसलिए आपके लोडरों को OSX या Linux पर संकलित करने की अनुशंसा की जाती है।
## सहायता```
./ScareCrow -h
_________ _________
/ _____/ ____ _____ _______ ____ \_ ___ \_______ ______ _ __
\_____ \_/ ___\\__ \\_ __ \_/ __ \/ \ \/\_ __ \/ _ \ \/ \/ /
/ \ \___ / __ \| | \/\ ___/\ \____| | \( <_> ) /
/_______ /\___ >____ /__| \___ >\______ /|__| \____/ \/\_/
\/ \/ \/ \/ \/
(@Tyl0us)
“Fear, you must understand is more than a mere obstacle.
Fear is a TEACHER. the first one you ever had.”
Usage of ./ScareCrow:
-Evasion string
Sets the type of EDR unhooking technique:
[*] Disk - Retrives a clean version of the DLLs ".text" field from files stored on disk.
[*] KnownDLL - Retrives a clean version of the DLLs ".text" field from the KnownDLLs directory in the object namespace.
[*] None - The Loader that WILL NOT removing the EDR hooks in system DLLs and only use custom syscalls. (default "Disk")
-Exec string
Set the template to execute the shellcode:
[*] RtlCopy - Using RtlCopy to move the shellcode into the allocated address in the current running process by making a Syscall.
[*] ProcessInjection - Process Injection Mode.
[*] NtQueueApcThreadEx - Executes the shellcode by creating an asynchronous procedure call (APC) to a target thread.
[*] VirtualAlloc - Allocates shellcode into the process using custom syscalls in the current running process (default "RtlCopy")
-I string
Path to the raw 64-bit shellcode.
-Loader string
Sets the type of process that will sideload the malicious payload:
[*] binary - Generates a binary based payload. (This type does not benefit from any sideloading)
[*] control - Loads a hidden control applet - the process name would be rundll32 if -O is specified a JScript loader will be generated.
[*] dll - Generates just a DLL file. Can be executed with commands such as rundll32 or regsvr32 with DllRegisterServer, DllGetClassObject as export functions.
[*] excel - Loads into a hidden Excel process using a JScript loader.
[*] msiexec - Loads into MSIexec process using a JScript loader.
[*] wscript - Loads into WScript process using a JScript loader. (default "binary")
-O string
Name of output file (e.g. loader.js or loader.hta). If Loader is set to dll or binary this option is not required.
-clone string
Path to the file containing the certificate you want to clone
-configfile string
The path to a json based configuration file to generate custom file attributes. This will not use the default ones.
-console
Only for Binary Payloads - Generates verbose console information when the payload is executed. This will disable the hidden window feature.
-delivery string
Generates a one-liner command to download and execute the payload remotely:
[*] bits - Generates a Bitsadmin one liner command to download, execute and remove the loader (Compatible with Binary, Control, Excel, and Wscript Loaders).
[*] hta - Generates a blank hta file containing the loader along with an MSHTA command to execute the loader remotely in the background (Compatible with Control and Excel Loaders).
[*] macro - Generates an office macro that will download and execute the loader remotely (Compatible with Control, Excel, and Wscript Loaders).
-domain string
The domain name to use for creating a fake code signing cert. (e.g. www.acme.com)
-encryptionmode string
Sets the type of encryption to encrypt the shellcode:
[*] AES - Enables AES 256 encryption.
[*] ELZMA - Enables ELZMA encryption.
[*] RC4 - Enables RC4 encryption. (default "ELZMA")
-export string
For DLL Loaders Only - Specify an Export function for a loader to have.
-injection string
Enables Process Injection Mode and specify the path to the process to create/inject into (use \ for the path).
-noamsi
Disables the AMSI patching that prevents AMSI BufferScanner.
-noetw
Disables the ETW patching that prevents ETW events from being generated.
-nosign
Disables file signing, making -domain/-valid/-password parameters not required.
-nosleep
Disables the sleep delay before the loader unhooks and executes the shellcode.
-obfu
Enables Garbles Literal flag replaces golang libray strings with more complex variants, resolving to the same value at run-time. This creates a larger loader and times longer to compile
-outpath string
The path to put the final Payload/Loader once it's compiled.
-password string
The password for code signing cert. Required when -valid is used.
-sandbox
Enables sandbox evasion using IsDomainJoined calls.
-url string
URL associated with the Delivery option to retrieve the payload. (e.g. https://acme.com/)
-valid string
The path to a valid code signing cert. Used instead -domain if a valid code signing cert is desired.
लोडर शेलकोड को लक्ष्य प्रणाली में लोड करने के लिए उपयोग की जाने वाली तकनीक के प्रकार को निर्धारित करता है। यदि कोई लोडर विकल्प नहीं चुना जाता है, तो ScareCrow एक मानक DLL फ़ाइल संकलित करेगा, जिसका उपयोग rundll32, regsvr32, या अन्य तकनीकों द्वारा किया जा सकता है जो DLL का उपयोग करती हैं। ScareCrow शेलकोड को मेमोरी में लोड करने के लिए तीन अलग-अलग प्रकार के लोडर का उपयोग करता है:
यदि आवश्यक हो, तो ScareCrow -Loader कमांड लाइन विकल्प का उपयोग करके बाइनरी-आधारित पेलोड भी उत्पन्न कर सकता है। ये बाइनरी किसी भी साइड-बाय-साइड लोडिंग तकनीक से लाभ नहीं उठाते हैं, लेकिन स्थिति के अनुसार शेलकोड को निष्पादित करने के लिए एक अतिरिक्त तकनीक के रूप में काम करते हैं।
ScareCrow एक तकनीक का उपयोग करके पहले प्रक्रिया बनाता है और फिर उसे पृष्ठभूमि में ले जाता है। यह दो काम करता है: पहला, यह प्रक्रिया को छिपाए रखने में मदद करता है, और दूसरा, किसी भी EDR उत्पाद द्वारा पहचाने जाने से बचाता है। प्रक्रिया को तुरंत पृष्ठभूमि में स्पॉन करना बहुत संदिग्ध हो सकता है और दुर्भावना का संकेत हो सकता है। ScareCrow ऐसा करने के लिए प्रक्रिया बनने और EDR के हुक लोड होने के बाद ‘GetConsoleWindow’ और ‘ShowWindow’ विंडोज फ़ंक्शन को कॉल करता है, और फिर विंडो विशेषताओं को छिपा हुआ में बदल देता है। ScareCrow इन API का उपयोग पारंपरिक -ldflags -H=windowsgui के बजाय करता है, क्योंकि यह अत्यधिक सिग्नेचर्ड है और अधिकांश सुरक्षा उत्पादों में समझौता के संकेतक के रूप में वर्गीकृत किया जाता है।
यदि -console कमांड लाइन विकल्प चुना जाता है, तो ScareCrow प्रक्रिया को पृष्ठभूमि में नहीं छिपाएगा। इसके बजाय, ScareCrow कई डीबग संदेश जोड़ेगा जो दर्शाते हैं कि लोडर क्या कर रहा है।
ScareCrow शेलकोड को निष्पादित करने के लिए विभिन्न टेम्पलेट का उपयोग करता है। कौन सा टेम्पलेट चुनना है, इसके लिए -Exec कमांड लाइन विकल्प का उपयोग करें। इन टेम्पलेट में शामिल हैं:
ScareCrow में प्रक्रिया इंजेक्शन हमले करने की क्षमता है। लोडर प्रक्रिया या इंजेक्ट की गई प्रक्रिया में किसी भी हुकिंग या पहचान से बचने के लिए, ScareCrow पहले लोडर प्रक्रिया को अनहुक करता है जैसा कि वह सामान्य रूप से करता है, ताकि प्रक्रिया में कोई हुक न हो। एक बार पूरा होने पर, लोडर निर्माण कमांड में निर्दिष्ट प्रक्रिया को स्पॉन करेगा। स्पॉन होने के बाद, लोडर प्रक्रिया के लिए एक हैंडल बनाएगा ताकि लोड किए गए DLL की सूची प्राप्त कर सके। एक बार DLL मिल जाने पर, यह रिमोट प्रक्रिया में प्रत्येक DLL के बेस एड्रेस की गणना करेगा। फ़ंक्शन WriteProcessMemory का उपयोग करके, लोडर डिस्क पर संग्रहीत सिस्टम DLL के बाइट्स लिखेगा (क्योंकि वे EDR हुक से "साफ" हैं) बिना पहले मेमोरी अनुमतियों को बदलने की आवश्यकता के। ScareCrow WriteProcessMemory का उपयोग करता है क्योंकि इस फ़ंक्शन में मुख्य रूप से डिबगिंग में उपयोग की जाने वाली एक विशेषता है, जहां भले ही मेमोरी का एक खंड केवल-पढ़ने योग्य हो, यदि Write¬Process¬Memory की कॉल में सब कुछ सही है, तो यह अस्थायी रूप से अनुमति को पढ़ने-लिखने में बदल देगा, मेमोरी खंड को अपडेट करेगा और फिर मूल अनुमतियों को पुनर्स्थापित करेगा। एक बार ऐसा होने पर, लोडर बिना किसी समस्या के स्पॉन की गई प्रक्रिया में शेलकोड इंजेक्ट कर सकता है, क्योंकि किसी भी प्रक्रिया में EDR हुक नहीं हैं।
इस विकल्प का उपयोग किसी भी लोडर विकल्प के साथ किया जा सकता है। प्रक्रिया इंजेक्शन सक्षम करने के लिए, -injection ccommand-line विकल्प का उपयोग करें और साथ में उस प्रक्रिया का पूरा पथ दें जिसमें आप इंजेक्ट करना चाहते हैं। तर्क के रूप में पथ डालते समय, यह महत्वपूर्ण है कि पूर्ण पथ को "" से घेरें या पथ में प्रत्येक निर्देशिका के लिए डबल \ का उपयोग करें।
ScareCrow में AMSI (एंटीमैलवेयर स्कैन इंटरफ़ेस) और ETW फ़ंक्शन को पैच करने की क्षमता है, जो प्रक्रिया द्वारा किसी भी घटना को उत्पन्न होने से रोकता है।
AMSI एक विंडोज नेटिव API है जो विंडोज डिफ़ेंडर (या अन्य एंटीमैलवेयर उत्पादों) को विंडोज ऑपरेटिंग सिस्टम में गहराई से इंटरफ़ेस करने और बेहतर सुरक्षा प्रदान करने की अनुमति देता है, विशेष रूप से इन-मेमोरी-आधारित हमलों के आसपास। AMSI सुरक्षा उत्पादों को दुर्भावनापूर्ण संकेतकों को बेहतर ढंग से पहचानने और खतरों को रोकने में मदद करता है। चूंकि AMSI विंडोज के लिए नेटिव है, उत्पादों को AMSI को "हुक" करने की आवश्यकता नहीं है, बल्कि वे प्रक्रिया में बेहतर अंतर्दृष्टि प्राप्त करने के लिए आवश्यक DLL लोड करते हैं। इस वजह से, ScareCrow AMSI.dll DLL लोड करता है और फिर पैच करता है, ताकि यह सुनिश्चित हो सके कि स्कैनिंग इंटरफ़ेस से कोई भी परिणाम साफ आए। सभी लोडर में AMSI को पैच करना डिफ़ॉल्ट है, यदि आप AMSI को पैच नहीं करना चाहते हैं, तो अपने लोडर में इसे अक्षम करने के लिए -noamsi कमांड लाइन विकल्प का उपयोग करें।
ETW इस टेलीमेट्री को उत्पन्न करने के लिए बिल्ट-इन Syscalls का उपयोग करता है। चूंकि ETW भी विंडोज में निर्मित एक नेटिव सुविधा है, सुरक्षा उत्पादों को जानकारी प्राप्त करने के लिए ETW syscalls को "हुक" करने की आवश्यकता नहीं है। परिणामस्वरूप, ETW को रोकने के लिए, ScareCrow कई ETW syscalls को पैच करता है, रजिस्टरों को फ्लश करता है और निष्पादन प्रवाह को अगले निर्देश पर लौटाता है। सभी लोडर में ETW को पैच करना अब डिफ़ॉल्ट है, यदि आप ETW को पैच नहीं करना चाहते हैं, तो अपने लोडर में इसे अक्षम करने के लिए -noetw कमांड लाइन विकल्प का उपयोग करें।
वर्तमान में, ये विकल्प केवल पैरेंट प्रक्रिया के लिए काम करते हैं, यदि -injection कमांड लाइन विकल्प का उपयोग किया जाता है, तो प्राथमिक प्रक्रिया AMSI और ETW पैच करेगी लेकिन इंजेक्ट की गई प्रक्रिया
शेलकोड को एन्क्रिप्ट करना एक महत्वपूर्ण तकनीक है जिसका उपयोग इसे EDR और अन्य सुरक्षा उत्पादों द्वारा पहचाने और विश्लेषण किए जाने से बचाने के लिए किया जाता है। ScareCrow शेलकोड को एन्क्रिप्ट करने के लिए कई विधियों के साथ आता है, इनमें AES, ELZMA, और RC4 शामिल हैं।
AES (उन्नत एन्क्रिप्शन मानक) एक सममित एन्क्रिप्शन एल्गोरिथ्म है जो डेटा को एन्क्रिप्ट करने के लिए व्यापक रूप से उपयोग किया जाता है। ScareCrow शेलकोड को एन्क्रिप्ट करने के लिए AES 256 बिट आकार का उपयोग करता है। शेलकोड को एन्क्रिप्ट करने के लिए AES का उपयोग करने का लाभ यह है कि यह मजबूत एन्क्रिप्शन प्रदान करता है और क्रिप्टोग्राफिक लाइब्रेरी द्वारा व्यापक रूप से समर्थित है। हालांकि, एक निश्चित ब्लॉक आकार का उपयोग इसे कुछ हमलों, जैसे padding oracle attack के प्रति संवेदनशील बना सकता है।
ELZMA एक संपीड़न और एन्क्रिप्शन एल्गोरिथ्म है जिसका उपयोग अक्सर मैलवेयर में कोड को अस्पष्ट करने के लिए किया जाता है। ELZMA का उपयोग करके शेलकोड को एन्क्रिप्ट करने के लिए, शेलकोड को पहले ELZMA एल्गोरिथ्म का उपयोग करके संपीड़ित किया जाता है। फिर संपीड़ित डेटा को एक यादृच्छिक कुंजी का उपयोग करके एन्क्रिप्ट किया जाता है। एन्क्रिप्टेड डेटा और कुंजी को फिर एक्सप्लॉइट कोड में एम्बेड किया जाता है। शेलकोड को एन्क्रिप्ट करने के लिए ELZMA का उपयोग करने का लाभ यह है कि यह एक ही एल्गोरिथ्म में संपीड़न और एन्क्रिप्शन दोनों प्रदान करता है। यह एक्सप्लॉइट कोड के आकार को कम करने और इसे पहचानना अधिक कठिन बनाने में मदद कर सकता है।
RC4 एक सममित एन्क्रिप्शन एल्गोरिथ्म है जिसका उपयोग अक्सर मैलवेयर में शेलकोड को एन्क्रिप्ट करने के लिए किया जाता है। यह एक स्ट्रीम सिफर है जो परिवर्तनीय-लंबाई कुंजियों का उपयोग कर सकता है और अपनी सरलता और गति के लिए जाना जाता है।
-obfu ccommand-line विकल्प का उपयोग करने से संकलन प्रक्रिया के दौरान Garbles Literal फ़्लैग सक्षम हो जाता है। यह किसी भी golang लाइब्रेरी संदर्भों और स्ट्रिंग्स को अधिक जटिल संस्करण से बदल देता है, जो रन-टाइम के दौरान उसी मान में हल होता है। इस प्रक्रिया को पूरा होने में अधिक समय लगता है, जिसके परिणामस्वरूप एक बड़ी GO फ़ाइल बनती है। फ़ाइल संकलित होने के बाद, ScareCrow नवनिर्मित फ़ाइल को पार्स करता है, किसी भी GO स्ट्रिंग-आधारित IOC को हटा देता है।
डिलीवरी कमांड लाइन तर्क आपको एक कमांड या कोड का स्ट्रिंग (मैक्रो के मामले में) उत्पन्न करने की अनुमति देता है ताकि फ़ाइल को दूरस्थ स्रोत से पीड़ित के होस्ट पर दूरस्थ रूप से खींचा जा सके। इन डिलीवरी विधियों में शामिल हैं: