
ScareCrow - إطار عمل لإنشاء الحمولات مصمم لتجاوز أنظمة EDR.
لعرض أحدث إصدار من ScareCrow أو لتقديم مشكلة، راجع https://github.com/Tylous/ScareCrow.
إذا كنت ترغب في معرفة المزيد عن التقنيات المستخدمة في هذا الإطار، يرجى إلقاء نظرة على الجزء 1 و الجزء 2
ScareCrow هو إطار عمل لإنشاء الحمولات من أجل التحميل الجانبي (وليس الحقن) في عملية ويندوز شرعية (لتجاوز ضوابط القائمة البيضاء للتطبيقات). بمجرد تحميل محمل DLL في الذاكرة، يستخدم تقنية لإزالة خطافات EDR من ملفات DLL النظامية التي تعمل في ذاكرة العملية. يعمل هذا لأننا نعلم أن خطافات EDR توضع عند إنشاء عملية.
يمكن لـ ScareCrow استهداف ملفات DLL هذه والتلاعب بها في الذاكرة باستخدام دالة API VirtualProtect، التي تغير صلاحيات جزء من ذاكرة العملية إلى قيمة مختلفة، وتحديداً من Execute–Read إلى Read-Write-Execute.
يستخدم ScareCrow إحدى طريقتين لإزالة الخطافات:
عند التنفيذ، سيقوم ScareCrow بنسخ بايتات ملفات DLL النظامية المخزنة على القرص في C:\Windows\System32\. يتم تخزين ملفات DLL هذه على القرص "نظيفة" من خطافات EDR لأن النظام يستخدمها لتحميل نسخة غير معدلة في عملية جديدة عند إنشائها. نظراً لأن EDRs تخترق هذه العمليات في الذاكرة فقط، فإنها تبقى غير معدلة. لا يقوم ScareCrow بنسخ ملف DLL بأكمله، بل يركز فقط على قسم .text من ملفات DLL. يحتوي هذا القسم من DLL على التجميع القابل للتنفيذ، وبفعل ذلك، يساعد ScareCrow في تقليل احتمالية الكشف لأن إعادة قراءة الملفات بأكملها قد تتسبب في اكتشاف EDR لتعديل على مورد نظام. ثم يتم نسخ البيانات إلى منطقة الذاكرة الصحيحة باستخدام إزاحة كل دالة. لكل دالة إزاحة تشير إلى العدد الدقيق للبايتات من العنوان الأساسي حيث توجد، مما يوفر موقع الدالة على المكدس.
للقيام بذلك، يغير ScareCrow صلاحيات منطقة .text من الذاكرة باستخدام VirtualProtect. على الرغم من أن هذا ملف DLL نظامي، إلا أنه بمجرد تحميله في عمليتنا (التي نتحكم بها)، يمكننا تغيير صلاحيات الذاكرة دون الحاجة إلى صلاحيات مرتفعة.
يقوم ScareCrow بتحميل شيل كود في الذاكرة عن طريق فك تشفير الشيل كود أولاً، والذي يتم تشفيره بواسطة إحدى طرق التشفير الثلاث (الموضحة أدناه). بمجرد فك التشفير والتحميل، يتم تنفيذ الشيل كود. اعتماداً على خيارات المحمل المحددة، سيقوم ScareCrow بإعداد دوال تصدير مختلفة لملف DLL. لا يحتوي ملف DLL المحمل أيضاً على دالة DLLMain القياسية التي تحتاجها جميع ملفات DLL عادةً للعمل. سيستمر تنفيذ DLL دون أي مشكلة لأن العملية التي نحمله إليها ستبحث عن دوال التصدير هذه ولن تقلق بشأن وجود DLLMain.
بعد
KnownDLLs هي قائمة بملفات DLL التي يتم تحميلها بواسطة ويندوز أثناء عملية بدء تشغيل النظام. نظراً لأن ملفات DLL هذه تعتبر أساسية لعمل نظام التشغيل، يتم تخزينها مؤقتاً للمساعدة في تقليل أوقات التحميل وتحسين الأداء عند بدء تشغيل التطبيقات. تتضمن KnownDLLs ملفات مثل kernel32.dll، kernelbase.dll، و ntdll.dll.
باستخدام هذه KnownDlls، يقوم ScareCrow بتعيين نسخة من DLL من \KnownDlls\<dllname> باستخدام مجموعة من NtOpenSection و NtMapViewOfSection لتحميلها في ذاكرة العملية. لا يقوم ScareCrow بتحميل DLL بأكمله، بل يحمل فقط قسم .text من DLL (لأن هذا يحتوي على جميع استدعاءات النظام). من هناك، يستخدم ScareCrow استدعاءات النظام غير المباشرة لاستدعاء NtProtectVirtualMemory وتغيير صلاحيات قسم الذاكرة .text الخاص بـ DLL للسماح لـ ScareCrow بالكتابة فوق خطافات EDR قبل استعادة الصلاحيات.
لمزيد من المعلومات، يمكنك قراءة مقال modexp المفصل هنا
بمجرد إزالة هذه الخطافات، يستخدم ScareCrow بعد ذلك استدعاءات نظام مخصصة لتحميل وتشغيل شيل كود في الذاكرة. يقوم ScareCrow بذلك حتى بعد إزالة خطافات EDR للمساعدة في تجنب الكشف بواسطة أدوات جمع القياسات غير المعتمدة على مساحة المستخدم مثل ETW أو آليات تسجيل الأحداث الأخرى. تُستخدم استدعاءات النظام المخصصة هذه أيضاً لأداء استدعاء VirtualProtect لإزالة الخطافات التي تضعها EDRs، الموضحة أعلاه، لتجنب الكشف بواسطة أي ضوابط مضادة للعبث من EDR. يتم ذلك عن طريق استدعاء نسخة مخصصة من استدعاء نظام VirtualProtect، NtProtectVirtualMemory. يستخدم ScareCrow لغة Go لإنشاء هذه المحملات ثم التجميع لوظائف استدعاء النظام المخصصة هذه.
أثناء عملية إنشاء المحمل، يستخدم ScareCrow مكتبة للاندماج في الخلفية بعد أن يقوم beacon بالاتصال بالمركز. تقوم هذه المكتبة بأمرين:
غالباً ما تخضع الملفات الموقعة بشهادات توقيع الكود لفحص أقل، مما يسهل تنفيذها دون مواجهة تحديات، حيث أن الملفات الموقعة باسم موثوق تكون أقل إثارة للريبة من غيرها. معظم منتجات مكافحة البرامج الضارة ليس لديها الوقت للتحقق من هذه الشهادات والتحقق منها (الآن البعض يفعل ذلك ولكن عادةً ما يتم تضمين أسماء البائعين الشائعة في القائمة البيضاء). يقوم ScareCrow بإنشاء هذه الشهادات باستخدام إصدار حزمة Go من أداة limelighter لإنشاء ملف pfx12. تأخذ هذه الحزمة اسم نطاق يتم إدخاله بواسطة المستخدم لإنشاء شهادة توقيع كود لذلك النطاق. إذا لزم الأمر، يمكنك أيضاً استخدام شهادة توقيع الكود الخاصة بك إذا كانت لديك، باستخدام خيار سطر الأوامر valid.
clone، بالإضافة إلى مسار الملف الذي تريد نسخ الشهادة منه. عند توقيع المحمل باستخدام microsoft.com، قد لا يكون استخدامها ضد منتجات WINDOWS DEFENDER ATP فعالاً لأنها تستطيع التحقق من الشهادة لأنها مملوكة لهم. إذا كنت تستخدم محملاً ضد منتج ويندوز، فمن الممكن استخدام نطاق مختلف.
باستخدام هذه الملفات وكود Go، سيقوم ScareCrow بتجميعها بشكل متقاطع إلى ملفات DLL باستخدام خيار المكتبة المشتركة c-shared. بمجرد تجميع DLL، يتم تشويشه إلى سلسلة base64 مكسورة سيتم تضمينها في ملف. يتيح ذلك سحب الملف عن بعد، والوصول إليه، وتنفيذه برمجياً.
بينما يمتلك 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
تأكد من تثبيت ما يلي على نظام التشغيل الخاص بك:```
openssl
osslsigncode
mingw-w64
ثم قم ببنائه``` go build ScareCrow.go
بالإضافة إلى ذلك، يستخدم ScareCrow [Garble](https://github.com/burrowers/garble) لتعتيم جميع المحملات.
ملاحظة: العديد من التبعيات لا تعمل بشكل جيد على ويندوز عند التجميع، ولهذا يُنصح بتجميع المحملات الخاصة بك على أو إس إكس أو لينكس.
## المساعدة```
./ScareCrow -h