
CobaltWhispers هو سكربت aggressor يستخدم مجموعة من ملفات Beacon Object Files (BOF) لـ Cobalt Strike لتنفيذ حقن العمليات والاستمرارية والمزيد، مستفيدًا من استدعاءات النظام المباشرة (SysWhispers2) لتجاوز EDR/AV
المؤلف: @Cerbersec
CobaltWhispers هو سكربت aggressor يستخدم مجموعة من ملفات Beacon Object Files الخاصة بـ Cobalt Strike لتنفيذ حقن العمليات (process injection) والاستمرارية (persistence) وغير ذلك، مستفيدًا من استدعاءات النظام المباشرة (direct syscalls) لتجاوز EDR/AV.
CobaltWhispers مدعوم بواسطة SysWhispers2 وInlineWhispers2
CobaltWhispers مبني على StayKit وأعمال كل من Hasherezade وForrest Orr.
تم تطوير CobaltWhispers كجزء من تدريب داخلي في فريق Red Team التابع لـ NVISO Security. يمكن العثور على المقالات ذات الصلة هنا (process-injection) وهنا (kernel karnage).
يتطلب CobaltWhispers عدة أدوات للتجميع:
apt install mingw-w64apt install makeيتطلب كل مشروع 3 ملفات مولّدة بواسطة SysWhispers2 / InlineWhispers2 ليعمل:
يمكن توليد هذه الملفات وفقًا لتوثيق InlineWhispers2، ولكن هذه ليست الطريقة المثلى لأنها ستتضمن الكثير من الكود غير المستخدم:
git clone https://github.com/Sh0ckFR/InlineWhispers2 && cd InlineWhispers2
cd SysWhispers2/ && python3 syswhispers.py --preset all -o syscalls_all && cd ..
python3 InlineWhispers2.py
بدلاً من ذلك، استخدم SysWhispers2 لتوليد ملفات الإخراج لواجهات برمجة التطبيقات (APIs) الضرورية فقط، ثم قم بتزويدها يدويًا (أو عبر سكربت) إلى InlineWhispers2 الذي سيحوّلها إلى الصيغة المناسبة. راجع ملف makefile المرفق للحصول على معلومات إضافية أو استخدم الملفات المرفقة على مسؤوليتك الخاصة.
| نوع الحمولة | الهدف | الموثوقية (0-5) | صلاحيات مرتفعة | ملاحظات |
|---|---|---|---|---|
| - | - | 5 | لا | يرث الصلاحيات من العملية الأم |
ينشئ عملية جديدة معلّقة مع تفعيل Code Integrity Guard (CIG) لحظر الملفات الثنائية غير الموقعة من Microsoft. يزيّف (spoof) العملية الأم المحددة. يتم إرجاع PID.
العملية الأم: اسم العملية التي سيتم تعيينها كعملية أم
موقع الملف التنفيذي: المسار الكامل للملف التنفيذي على القرص المستخدم لإنشاء العملية الجديدة
| نوع الحمولة | الهدف | الموثوقية (0-5) | صلاحيات مرتفعة | ملاحظات |
|---|---|---|---|---|
| Shellcode/Raw | PID | 5 | لا | - |
يحقن حمولة في عملية بعيدة باستخدام NtCreateThreadEx
PID العملية: معرف العملية البعيدة
موقع الحمولة: موقع الحمولة بشكل ثنائي على القرص (شرطي | اختياري)
الحمولة b64: شيل كود خام بتنسيق سلسلة base64 (شرطي | اختياري)
المستمع (Listener): المستمع الذي سيتم توليد الحمولة له (شرطي)
يجب تحديد مستمع لتوليد حمولة Beacon. إذا كانت الحمولة اليدوية مطلوبة، فيجب توفيرها عبر مسار إلى الملف الثنائي الخام على القرص، أو شيل كود مشفر بـ Base64.
| نوع الحمولة | الهدف | الموثوقية (0-5) | صلاحيات مرتفعة | ملاحظات |
|---|---|---|---|---|
| Shellcode/Raw | PID | 2 | لا | قد يتسبب في تعطل العملية المستهدفة |
يحقن حمولة في عملية بعيدة باستخدام NtQueueApcThread
PID العملية: معرف العملية البعيدة
الخيوط: عدد الخيوط التي سيتم إضافة استدعاء APC إليها
موقع الحمولة: موقع الحمولة بشكل ثنائي على القرص (شرطي | اختياري)
الحمولة b64: شيل كود خام بتنسيق سلسلة base64 (شرطي | اختياري)
المستمع (Listener): المستمع الذي سيتم توليد الحمولة له (شرطي)
يجب تحديد مستمع لتوليد حمولة Beacon. إذا كانت الحمولة اليدوية مطلوبة، فيجب توفيرها عبر مسار إلى الملف الثنائي الخام على القرص، أو شيل كود مشفر بـ Base64.
| نوع الحمولة | الهدف | الموثوقية (0-5) | صلاحيات مرتفعة | ملاحظات |
|---|---|---|---|---|
| Shellcode/Raw | عملية بديلة | 5 | لا | - |
يحقن حمولة في عملية بديلة (surrogate process) باستخدام NtMapViewOfSection
العملية الأم: اسم العملية التي سيتم تعيينها كعملية أم
موقع الملف التنفيذي: موقع الملف التنفيذي على القرص المستخدم لإنشاء عملية جديدة
موقع الحمولة: موقع الحمولة بشكل ثنائي على القرص (شرطي | اختياري)
الحمولة b64: شيل كود خام بتنسيق سلسلة base64 (شرطي | اختياري)
المستمع (Listener): المستمع الذي سيتم توليد الحمولة له (شرطي)
يجب تحديد مستمع لتوليد حمولة Beacon. إذا كانت الحمولة اليدوية مطلوبة، فيجب توفيرها عبر مسار إلى الملف الثنائي الخام على القرص، أو شيل كود مشفر بـ Base64.
| نوع الحمولة | الهدف | الموثوقية (0-5) | صلاحيات مرتفعة | ملاحظات |
|---|---|---|---|---|
| PE | عملية بديلة | 5 | لا | يتطلب حمولة PE بصيغة x64 |
يحقن حمولة في عملية بديلة باستخدام أقسام المعاملات (transacted sections) وطرق عرض معيّنة (mapped views). يتم تحديث نقطة الدخول البعيدة وPEB، دون وجود أقسام ذاكرة شاذة أو صلاحيات ذاكرة غير طبيعية. انظر هنا لمزيد من المعلومات.
العملية الأم: اسم العملية التي سيتم تعيينها كعملية أم
موقع الملف التنفيذي: موقع الملف التنفيذي على القرص المستخدم لإنشاء عملية جديدة
موقع الحمولة: موقع حمولة PE بصيغة x64 على القرص (شرطي | اختياري)
الحمولة b64: حمولة PE بصيغة x64 بتنسيق سلسلة base64 (شرطي | اختياري)
المستمع (Listener): المستمع الذي سيتم توليد الحمولة له (شرطي)
يجب تحديد مستمع لتوليد حمولة Beacon. إذا كانت الحمولة اليدوية مطلوبة، فيجب توفيرها عبر مسار إلى ملف PE بصيغة x64 على القرص، أو حمولة PE بصيغة x64 مشفرة بـ Base64.
غير مُنفَّذ حاليًا
| نوع الحمولة | الهدف | الموثوقية (0-5) | صلاحيات مرتفعة | ملاحظات |
|---|---|---|---|---|
| Position Independent Shellcode (PIC) | عملية بديلة | 5 | نعم | تتطلب صلاحيات مرتفعة لفتح مكتبات DLL الخاصة بالنظام بصلاحيات الكتابة |
يحقن حمولة في عملية بديلة باستخدام أقسام المعاملات (transacted sections) مع تجويف DLL (DLL hollowing). انظر هنا لمزيد من المعلومات.
العملية الأم: اسم العملية التي سيتم تعيينها كعملية أم
موقع الملف التنفيذي: موقع الملف التنفيذي على القرص المستخدم لإنشاء عملية جديدة
موقع الحمولة: موقع الحمولة بشكل ثنائي على القرص (شرطي | اختياري)
الحمولة b64: شيل كود خام بتنسيق سلسلة base64 (شرطي | اختياري)
المستمع (Listener): المستمع الذي سيتم توليد الحمولة له (شرطي)
يجب تحديد مستمع لتوليد حمولة Beacon. إذا كانت الحمولة اليدوية مطلوبة، فيجب توفيرها عبر مسار إلى الملف الثنائي الخام على القرص، أو شيل كود مشفر بـ Base64.
إنشاء أو تعديل مفتاح تسجيل (registry key) في الموقع المحدد.
اسم المفتاح: اسم القيمة
الأمر: الأمر الذي سيتم تشغيله عند استخدام التسجيل
مفتاح التسجيل: الموقع الذي سيتم فيه إنشاء مفتاح التسجيل
مخفي: سيضيف بايت فارغ (null byte) في بداية اسم المفتاح؛ يسبب أخطاء في regedit
التنظيف: يزيل المفتاح الذي تم إنشاؤه
يتطلب التنظيف اسم المفتاح ومفتاح التسجيل (الموقع).
إنشاء أو تعديل مفتاح تسجيل في الموقع المحدد.
اسم المفتاح: اسم القيمة
الأمر: الأمر الذي سيتم تشغيله عند استخدام التسجيل
مفتاح التسجيل: الموقع الذي سيتم فيه إنشاء مفتاح التسجيل
مخفي: سيضيف بايت فارغ (null byte) في بداية اسم المفتاح؛ يسبب أخطاء في regedit
التنظيف: يزيل المفتاح الذي تم إنشاؤه