
Shhhloader عبارة عن أداة تحميل شيل كود قيد التطوير. تأخذ شيل كود خام كمدخل وتقوم بتجميع كود بدائي C++ يقوم بمجموعة من الأمور المختلفة لمحاولة تجاوز برامج مكافحة الفيروسات/منصة الكشف والاستجابة (AV/EDR). سيعمل الباني بايثون المضمن على أي نظام لينكس مثبت عليه Mingw-w64.
تعديل 1/25/24: يدعم Shhhloader الآن PoolParty النمط 7! تمت إضافة خيار أيضًا يمكنه دمج PoolParty مع Module Stomping لمنع بقاء الشيل كود المنفذ في الذاكرة غير المدعومة. انظر أدناه للحصول على فيديو يوضح طريقة الحقن الجديدة هذه ضد Defender ATP:
┳┻|
┻┳|
┳┻|
┻┳|
┳┻| _
┻┳| •.•) - شششش، قد يسمعنا برنامج مكافحة الفيروسات!
┳┻|⊂ノ
┻┳|
الاستخدام: Shhhloader.py [-h] [-p explorer.exe] [-m QueueUserAPC] [-u] [-w] [-nr] [-ns] [-l] [-v] [-sc GetSyscallStub] [-d] [-dp apphelp.dll] [-s domain]
[-sa testlab.local] [-o a.exe] [-pp explorer.exe] [-ppv] [-np] [-cp] [-td ntdll.dll] [-ef NtClose]
file
مُحَمِّل شيل كود استدعاءات النظام المخصص من ICYGUIDER
الوسائط الموضعية:
file الملف الذي يحتوي على الشيل كود الخام
الخيارات:
-h, --help عرض رسالة المساعدة هذه والخروج
-p explorer.exe, --process explorer.exe
العملية للحقن فيها (الافتراضي: explorer.exe)
-m QueueUserAPC, --method QueueUserAPC
طريقة تنفيذ الشيل كود (الخيارات: PoolPartyModuleStomping, PoolParty, ThreadlessInject, ModuleStomping, QueueUserAPC,
ProcessHollow, EnumDisplayMonitors, RemoteThreadContext, RemoteThreadSuspended, CurrentThread) (الافتراضي: QueueUserAPC)
-u, --unhook فك ربط NTDLL في العملية الحالية
-w, --word-encode حفظ الشيل كود في الكود البدائي كمصفوفة من كلمات إنجليزية
-nr, --no-randomize تعطيل التوزيع العشوائي لأسماء استدعاءات النظام
-ns, --no-sandbox تعطيل فحوصات الصندوق الرملي
-l, --llvm-obfuscator
استخدام Obfuscator-LLVM لتجميع الكود البدائي
-v, --verbose تمكين رسائل التصحيح عند التنفيذ
-sc GetSyscallStub, --syscall GetSyscallStub
طريقة تنفيذ استدعاء النظام (الخيارات: SysWhispers2, SysWhispers3, GetSyscallStub, None) (الافتراضي: GetSyscallStub)
-d, --dll إنشاء DLL بدلاً من EXE
-dp apphelp.dll, --dll-proxy apphelp.dll
إنشاء DLL وكيل باستخدام DLL شرعي مزود (يجب أن يكون الملف موجودًا في الدليل الحالي)
-s domain, --sandbox domain
تقنية تجنب الصندوق الرملي (الخيارات: sleep, domain, hostname, username, dll) (الافتراضي: sleep)
-sa testlab.local, --sandbox-arg testlab.local
وسيطة تقنية تجنب الصندوق الرملي (مثال: WIN10CO-DESKTOP, testlab.local)
-o a.exe, --outfile a.exe
اسم الملف المترجم
انتحال PPID:
-pp explorer.exe, --ppid explorer.exe
العملية الأم لاستخدامها في انتحال PPID (الافتراضي: explorer.exe)
-ppv, --ppid-priv تمكين الانتحال لعملية أم مميزة (معطل افتراضيًا)
-np, --no-ppid-spoof تعطيل انتحال PPID
ThreadlessInject:
-cp, --create-process
إنشاء عملية بدلاً من الحقن في عملية موجودة
-td ntdll.dll, --target-dll ntdll.dll
DLL الهدف الذي يحتوي على دالة التصدير المراد استبدالها
-ef NtClose, --export-function NtClose
دالة التصدير المراد استبدالها
الميزات:
انظر أدناه للحصول على فيديو إثبات المفهوم لطريقة ThreadlessInject المستخدمة لحقن Havoc beacon في IE دون إنشاء أي تنبيهات وحدث أدنى في Microsoft Defender for Endpoint (MDE) EDR (تم التسجيل في 4/3/2023):
انظر الفيديو أدناه الذي يوضح تقنية حقن Module Stomping المنفذة عبر DLL Proxying (تم التسجيل في 8/9/2022):
تم أيضًا دمج Shhhloader في إطار Havoc C2 عبر وحدة من @jakobfriedl. انظر أدناه للحصول على فيديو يوضح الوحدة:
المشكلات/الملاحظات المعروفة:
-p لتوفير اسم عملية تعرف أو تشك بأنها قيد التشغيل بالفعل على النظام المستهدف.التحديثات المخطط لها:
اختياري: لاستخدام علامة Obfuscator-LLVM، يجب أن يكون مثبتًا على نظامك إلى جانب wclang. لقد وجدت أن هذا صعب بعض الشيء ولكن يجب أن تكون قادرًا على القيام بذلك بقليل من المثابرة. فيما يلي خطوة بخطوة استخدمتها لتثبيت فرع llvm-13.x من OLLVM على نظام Kali Linux الخاص بي:
# استنساخ وتشغيل CMake
git clone -b llvm-13.x https://github.com/heroims/obfuscator.git
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF ../obfuscator/llvm/
# تكوين CMake وتجميع OLLVM
export clang_build_dir=$(cd ../; pwd)/obfuscator/clang
sed -i 's/LLVM_TOOL_CLANG_BUILD:BOOL=OFF/LLVM_TOOL_CLANG_BUILD:BOOL=ON/g' CMakeCache.txt
sed -i "s|LLVM_EXTERNAL_CLANG_SOURCE_DIR:PATH=|LLVM_EXTERNAL_CLANG_SOURCE_DIR:PATH=$clang_build_dir|g" CMakeCache.txt
make -j7
# بمجرد التجميع، قم بعمل نسخة احتياطية من ثنائيات CLANG الأصلية
mv /usr/bin/clang /usr/bin/clang13.0.1
mv /usr/bin/clang++ /usr/bin/clang++13.0.1
# ثم في دليل OLLVM build/bin، انسخ ثنائيات clang المُنشأة حديثًا
cp bin/clang /usr/bin/clang
cp bin/clang++ /usr/bin/clang++
# ثم ثبّت wclang
cd ..
git clone https://github.com/tpoechtrager/wclang.git
cd wclang/
cmake -DCMAKE_INSTALL_PREFIX=_prefix_ .
make
make install
export wclang_path=$(pwd)/_prefix_/bin
echo "export PATH=$wclang_path:$PATH" >> ~/.bashrc
export PATH=$wclang_path:$PATH
# ثم قم بعمل نسخة احتياطية من ملفات lib الأصلية
cp -R /lib/llvm-13/lib/clang/13.0.1/include/ /lib/llvm-13/lib/clang/13.0.1/include_backup/
# أخيرًا في دليل OLLVM build/bin/lib/clang/13.0.1/، انسخ مجلد include
cd ../build/lib/clang/13.0.1/
cp -R include/ /lib/llvm-13/lib/clang/13.0.1/
ربما توجد طريقة أفضل للقيام بذلك ولكن هذا ما نجح معي. إذا كانت لديك مشكلات، فما عليك سوى الاستمرار في المحاولة وتأكد من أنك تستطيع تشغيل x86_64-w64-mingw32-clang++ -v وأنه يحتوي على "Obfuscator-LLVM" أو "heroims" في الإخراج. لسوء الحظ، ليس لدي الوقت لمساعدة الأفراد الذين قد يحتاجون إلى مزيد من المساعدة، ولكن يمكنك محاولة قراءة هذه المشكلة على مستودع Nimcrypt2 الخاص بي حيث تمكن مستخدمان من معرفة كيفية القيام بذلك على أنظمتهم.
تحيات وتقدير: