
نسخة متغيرة من Gargoyle لـ x64 لإخفاء آثار الذاكرة باستخدام ROP فقط و PIC
نسخة مُعدّلة من Gargoyle لمعمارية x64 لإخفاء القطع الأثرية في الذاكرة باستخدام ROP فقط وPIC.
شكرًا جزيلاً لـ @waldoirc لتوثيقه أجزاء كبيرة من هذه التقنية في مدونته يختلف هذا التطبيق بأنه لا يستخدم أي APCs ويُطبَّق بالكامل بصيغة PIC.
لقد أنشأت هذا لفهم أفضل لكيفية التهرب من القطع الأثرية في الذاكرة باستخدام تقنية شبيهة بـ Gargoyle على x64. الفكرة هي إعداد ROPChain تستدعي VirtualProtect() -> Sleep() -> VirtualProtect() لتمييز صفحتي الخاصة كـ N/A أثناء النوم.
على عكس Gargoyle وتطبيقات Gargoyle الأخرى، أعتمد كليًا على ROP ولا أضع أي APC في قائمة الانتظار. DeepSleep نفسها مُطبَّقة بالكامل كـ PIC، مما يسهل تعداد صفحات الذاكرة التي يجب إخفاؤها عن الماسحات الضوئية.
أثناء نشاط الخيط، يظهر مربع رسالة MessageBox ويتم تمييز صفحة DeepSleep كقابلة للتنفيذ. أثناء النوم، يتم تمييز الصفحة كـ N/A.
هذا يتجاوز Moneta بفعالية وقت كتابة هذا التقرير إذا تم حقن DeepSleep وكان عنوان الخيط المنفذ الأساسي لا يشير إلى ذاكرة خاصة ملتزمة (private committed memory).
لقد تحققت من ذلك باستخدام تقنية الحقن Earlybird لحقن DeepSleep.bin في notepad.exe

باستخدام Mingw:
اكتب make وسيظهر DeepSleep.bin جاهزًا.
بدلاً من ذلك، استخدم DeepSleep.bin المُجمَّع مسبقًا :-)
قد أُصدر مُحَمِّلاً لـ CS أو وكلاء C2 آخرين. على غرار YouMayPasser، سيقوم المُحَمِّل بربط sleep باستخدام نقاط توقف الأجهزة (HW breakpoints) لتجنب التعديلات المشبوهة على kernel32.dll.
تم اختبار هذا على 10.0.19044 N/A Build 19044
قد لا تكون أدوات ROPgadgets التي أعتمد عليها موجودة في ntdll.dll في إصدارات أخرى من Windows. من الجيد على الأرجح استخدام أدوات ROPgadgets أصغر وأكثر عمومية وتعداد الأدوات في ملفات dll أكثر من ntdll.dll.
سلسلة الاستدعاءات (callstack) لخيط في حالة DelayExecution تتضمن مناطق ذاكرة غير معروفة/مُعدَّلة وتتضمن أيضًا عناوين لـ VirtualProtect(). يكتشف Hunt-Sleeping-Beacons ذلك.
قد يكون من الممكن تطبيق هذا المقياس على C2 الأخرى التي تستخدم تقنية مختلفة للانتظار بين عمليات الاستدعاء.

@waldoirc لتوثيقه أجزاء كبيرة من التقنية هنا @forrest Orr لـ Moneta Josh Lospinoso لتقنية Gargoyle الأصلية