
تنفيذ ملفات ويندوز التنفيذية غير المُدارة في بيقون CobaltStrike
Inline-Execute-PE هي مجموعة من ملفات Beacon Object Files (BOFs) وسكريبت Aggressor لـ CobaltStrike، تتيح للمشغلين تحميل برامج ويندوز القابلة للتنفيذ غير المُدارة (unmanaged executables) إلى ذاكرة Beacon وتنفيذها، واسترجاع المخرجات وعرضها في وحدة تحكم Beacon.
يمكّن ذلك المشغلين من استخدام العديد من الأدوات الخارجية (Mimikatz, Dsquery, أدوات Sysinternals, إلخ) دون الحاجة إلى إسقاطها على القرص، أو إعادة تنسيقها إلى كود مستقل عن الموضع (position independent code) باستخدام أداة مثل Donut، أو إنشاء عملية جديدة لتشغيلها.
يتم تعيين هذه البرامج القابلة للتنفيذ في ذاكرة Beacon بحيث يمكن تشغيلها مرارًا دون الحاجة إلى إرسالها عبر الشبكة، أو تخصيص ذاكرة جديدة، أو إنشاء عملية conhost.exe جديدة في كل مرة.
البرامج القابلة للتنفيذ المحملة في Beacons يمكن الوصول إليها وتشغيلها من قبل جميع عملاء CobaltStrike المتصلين بخادم CobaltStrike Team Server.
تم تصميم Inline-Execute-PE لـ Beacons 64 بت وبرامج ويندوز C أو C++ القابلة للتنفيذ 64 بت والمجمعة باستخدام Mingw أو Visual Studio. لا يدعم هذا المشروع برامج 32 بت أو برامج 64 بت المكتوبة بلغة أخرى أو المترجمة باستخدام مترجم مختلف.

استنساخ المستودع، وتشغيل make اختياريًا لإعادة ترجمة الـ BOFs.
قم بتحميل Inline-Execute-PE.cna إلى عميل CobaltStrike. تأكد من أن الدليل الذي يعمل منه CobaltStrike قابل للكتابة بواسطة المستخدم الخاص بك؛ يقوم Inline-Execute-PE بإنشاء ملف نصي هناك (petable.txt) لضمان توفر البيانات المطلوبة لتشغيل Inline-Execute-PE.
يتكون Inline-Execute-PE من 3 أوامر موجهة للهدف تقوم بتشغيل الـ BOFs، و3 أوامر داخلية تتعامل مع بنية بيانات المشروع:
موجهة للهدف:
بنية البيانات الداخلية:
peload هو البداية لـ Inline-Execute-PE. يُستخدم هذا الأمر لتحميل PE في ذاكرة Beacon. يقوم بالإجراءات الرئيسية التالية:
perun هو الخطوة الثانية في Inline-Execute-PE. يقوم بالإجراءات الرئيسية التالية:
يتم استدعاء peunload لإزالة الـ PE من ذاكرة Beacon عندما ينتهي المشغل منه أو يرغب في تحميل PE مختلف. يقوم بالإجراءات الرئيسية التالية:
يتم استخدام petable لعرض معلومات حول جميع الـ PEs المحملة حاليًا في Beacons.
كل عميل CobaltStrike لديه petable خاص به؛ يبذل Inline-Execute-PE جهودًا كبيرة لضمان تزامن بياناته بين جميع عملاء CobaltStrike المتصلين بحيث يمكن لجميع المشغلين استخدام الـ PEs. لمزيد من المعلومات، راجع "اعتبارات التصميم والتعليقات".

يتم استخدام peconfig لتكوين الخيارات المتعلقة بكيفية عمل Inline-Execute-PE. الخياران الحاليان اللذان يمكن تغييرهما هما:
يمكن استخدام pebroadcast لنشر محتويات petable الخاص بأحد العملاء يدويًا إلى جميع عملاء CobaltStrike الآخرين المتصلين.
سيقوم كل عميل CobaltStrike آخر بتحديث petable الخاص به بالبيانات المنشورة. لا ينبغي أن يكون هذا ضروريًا أبدًا، لكن الميزة موجودة فقط في حالة الحاجة.
استخدم peload لتحميل PE في ذاكرة Beacon

بدلاً من ذلك، إذا كان هناك PE على الجهاز الهدف ترغب في استخدامه دون إنشاء عملية جديدة، فقدم المسار والمفتاح --local

اتصل بـ perun، مررًا أي وسائط إلى الـ PE المحمل

يجب الهروب من علامات الاقتباس المزدوجة في الوسائط باستخدام الخطوط المائلة العكسية

إذا اكتشفت أن PE يسبب مشاكل عند محاولة تحرير الـ DLLs أثناء التفريغ، استخدم peconfig لضبط unloadlibraries على false

بمجرد الانتهاء من استخدام PE، اتصل بـ peunload لتنظيفه من Beacon

يمكن الآن تحميل PE مختلف إلى Beacon

يجب أن تكون حذرًا بشأن وسائط سطر الأوامر التي تمررها إلى الـ PE؛ بعض الـ PEs ستعطل تمامًا إذا أعطيت وسائط خاطئة، بينما سيعمل البعض الآخر إلى ما لا نهاية مما يؤدي إلى عدم عودة Beacon أبدًا على الرغم من أن العملية لا تزال قيد التشغيل.
يمكن رؤية ذلك مع Mimikatz.exe عندما لا يتم تحديد 'exit' في نهاية قائمة الوسائط

...

سيقوم Inline-Execute-PE بإنهاء سلسلة محادثات الـ PE الجاري تشغيله بعد الوصول إلى قيمة المهلة المحددة. يتيح ذلك لـ Beacon استئناف الاتصالات العادية (لا يتصل Beacon مرة أخرى حتى يكتمل تنفيذ BOF perun). بينما لا يزال من الممكن استخدام أوامر CobaltStrike العادية و BOFs الأخرى في هذا Beacon، فإن Inline-Execute-PE معطل الآن؛ عندما يتم إنهاء PE قيد التشغيل بهذه الطريقة، يبدو أنه يعطل stdout و stderr في عملية Beacon، ولا تعمل الـ PEs المحملة لاحقًا بشكل صحيح.