
إثبات مفهوم (PoC) لـ UDRL لـ Cobalt Strike مبني باستخدام Crystal Palace يجمع بين تقنية تدفق الصفحات الخاصة بـ Raphael Mudge وبوابة استدعاء معيارية (Draugr)
Eden loader هو UDRL (إثبات المفهوم) لـ Cobalt Strike مبني باستخدام Crystal Palace الذي يجمع بين تقنية تدفق الصفحات لـ Raphael Mudge مع بوابة اتصال وحداتية (حاليًا نسخة PIC من BOF بوابة اتصال Draugr من Sleepmask-VS).
الهدف من Eden loader هو:
لمزيد من المعلومات حول Eden loader، راجع المقال المصاحب.
ملاحظة: الغرض من Eden هو إظهار فكرة استخدام Crystal Palace لدمج "وحدات تنفيذ" مختلفة (أي الإمكانيات) لإنشاء محملات مخصصة. ليس المقصود منه أن يكون محملًا "مراوغًا" كامل المواصفات، وبالتالي فهو يفتقر إلى عدد من ميزات OPSEC الأساسية حسب التصميم. على سبيل المثال، يستخدم ذاكرة RWX ولا يتتبع/يخفي ذاكرة الكومة الخاصة بـ Beacon (وبالتالي فهو عرضة لتوقيعات YARA مثل هذه).
ملاحظة: يفترض دليل البدء السريع هذا أنك قمت بتنزيل/بناء Crystal Palace وأكملت الخطوات التالية لتكوين بيئة التطوير الخاصة بك.
stage {
set sleep_mask "false";
}
WSL في جذر المستودع وقم ببناء Eden loader: make clean; make.crystalpalace.jar إلى دليل عميل Cobalt Strike الخاص بك.eden.cna في عميل Cobalt Strike.[14:55:55] [*] Generating Payload: HTTP -- Type: HTTP -- Arch: x64 -- Exit Function: Thread -- System Call: None -- HTTP Library: wininet
[14:55:56] [EDEN] Parsing C:\Users\wb\Desktop\eden\eden.spec...
[14:55:56] [EDEN] Applying eden ldr spec...
[14:55:56] [EDEN] Payload Size: 387060 bytes
[14:55:56] [*] Using user modified reflective DLL! DLLName=resources/beacon.x64.rl0k.dll Arch=x64
ملاحظة: يدعم Eden أنواع إشارات HTTP(S)، DNS، و Pivot Beacons.
أحد القيود الخاصة بـ Crystal Palace وقت الإصدار هو أنه يدعم حاليًا فقط ملفات الكائنات المبنية باستخدام mingw. إذا حاولت استخدام COFF مبني باستخدام MSVC أو Clang، فستحصل عادةً على أخطاء إعادة التوطين. قد يكون هذا محبطًا لأن mingw لا يدعم بشكل مباشر ملفات pdb، وبالتالي قد يكون من الصعب تصحيح الأخطاء عند كتابة حِرف Windows معقدة. ومع ذلك، يمكنك إضافة الخيار -g إلى Makefile الخاص بك لتضمين معلومات التصحيح في بناءات الملف التنفيذي. هذا يجعل من الممكن التنقل عبر الكود الخاص بك في WinDbg. لمزيد من المعلومات حول هذه العملية، يُنصح بقراءة المقال التالي لـ Rastamouse.
يستخدم هذا المستودع النهج أعلاه لبناء إصدار تصحيح من Draugr (draugr.x64.exe) وكود تدفق الصفحات (guardexec.x64.exe) افتراضيًا. إصدار تصحيح Draugr ليس له تبعيات وبالتالي سيتم بناؤه فورًا، ولكن إذا كنت ترغب في التنقل/تصحيح كود تدفق الصفحات/خطاف IAT، فستحتاج إلى اتباع الخطوات أدناه:
1. تصدير Beacon بدون محمل:
debug/export_beacon_with_no_ldr.cna في عميل CS الخاص بك وقم بتصدير Beacon خام غير مرحلي من نوع x64 (HTTP) إلى دليل /eden/debug/. سيؤدي هذا إلى تصدير DLL Beacon بدون محمل انعكاسي يمكننا استخدامه لمحاكاة نقطة الدخول guardexec.$ xxd -i ./beacon_x64.bin > debug_beacon.h2. تصدير كعب Draugr PIC من Crystal Palace:
$ ./piclink /<path>/eden/debug/draugr.spec x64 /<path>/eden/debug/draugr.bin. سيستخدم هذا Crystal Palace لإخراج فقط كعب Draugr PIC الذي يمكننا استخدامه لمحاكاة نقطة الدخول guardexec.$ xxd -i ./draugr.bin > debug_druagr.h3. بدء التصحيح في WinDbg
make clean;makeWinDbg واختر تشغيل الملف التنفيذي (/eden/bin/draugr.exe أو /eden/bin/guardexec.exe)Open source file واختر ملف .c المناسب (أي guardexec.c إذا كنت تقوم بتصحيح كود تدفق الصفحات).ملاحظة: لا يوجد ملف تنفيذي للتصحيح للمحمل حيث لا توجد طريقة واضحة لجعل Crystal Palace يصدر حمولات تصحيح لأشياء مثل DLLs المشفرة ومفاتيحها. وبالتالي، يصبح من غير التافه تمرير مخازن PIC "مشفرة" مزيفة.
Eden loader مصمم بشكل أساسي لإظهار قوة Crystal Palace من خلال دمج "إمكانيات" مختلفة لإنشاء محمل جديد. يمكن تطوير هذه الفكرة أكثر بكثير مما هو موجود في هذا المستودع (أي محمل PIC "ثابت" قابل للتخصيص بالكامل عبر وحدات COFF (بوابات حماية، بوابات اتصال، إخفاء النوم إلخ.)).
يستخدم Eden loader نسخة PIC من Draugr بشكل صريح حتى يتمكن من تزوير كل استدعاء في دورة حياة Beacon (أي استدعاءات VirtualAlloc / LoadLibrary المستخدمة أثناء عملية التحميل الانعكاسي). في بعض الحالات، قد يكون هذا مبالغًا فيه (أي أن EDR لا يهتم باستدعاءات غير مدعومة لـ LoadLibrary إلخ.) وفي هذه الحالة يمكن تعديله لاستخدام مكافئ PICO (== 'BOF') لـ Draugr وهو أبسط بكثير.
يحاول Eden loader عمدًا الحفاظ على فك الارتباط بين 'Callgate' والمحمل. هذا حسب التصميم من أجل النمطية، حيث أن الفكرة هي أنه يمكنك تبديل BOFs BeaconGate/callgate وإخراجها. وبالتالي، فإن كود Draugr callgate موجود بالكامل في ملف كائناته الخاص. عن طريق استبدال هذا بـ 'إمكانية' أخرى، يمكنك تغيير TTPs الخاصة بـ Eden بشكل جذري.
لا يستخدم Eden loader ميزات أحدث من Crystal Palace عن قصد. كمثال، يمكن استخدام mergelib مع المكتبة المشتركة لـ Crystal Palace، LibTCG. ومع ذلك، لاحظ أن هذا يعني أنك تفقد القدرة على تصحيح الكود الخاص بك.
يمكن أن تؤثر تقنية تدفق الصفحات على أداء Beacon لأوامر معينة (على سبيل المثال، افتراضيًا، سيستغرق الحقن في العملية حوالي ~1 دقيقة(!) مع تكوين 4 صفحات مرئية). يمكنك زيادة #define MAXVISIBLE في guardexec.h لحل معظم المشكلات (القيمة الافتراضية لـ Eden هي 6). كمعلومة عامة، يمكن أن يتسبب تدفق الصفحات في مشاكل مع تقنيات حقن العمليات (خاصة إذا كانت تعتمد على التوقيت).
https://aff-wg.org/2025/03/13/the-security-conversation/
تم بناء Eden loader باستخدام Crystal Palace (https://tradecraftgarden.org/crystalpalace.html) ويستخدم المشاريع التالية:
أخيرًا، شكر خاص لـ @rastamouse الذي ساعدت مدوناته حول Crystal Palace أثناء التطوير.