
إثبات مفهوم (POC) لتقنية حقن عمليات جديدة "بدون خيط" تعمل من خلال استخدام مفهوم استدعاءات إعلام DLL في العمليات المحلية والبعيدة.
DllNotificationInjection هو دليل على المفهوم (POC) لتقنية جديدة لحقن العمليات بدون خيوط (threadless) تعمل عن طريق استخدام مفهوم ردود اتصال إشعارات DLL (DLL Notification Callbacks) في العمليات المحلية والبعيدة.
منشور مدونة مصاحب مع مزيد من التفاصيل متاح هنا:
https://shorsec.io/blog/dll-notification-injection/
DllNotificationInjection تعمل عن طريق إنشاء LDR_DLL_NOTIFICATION_ENTRY جديد في العملية البعيدة. تقوم بإدراجه يدويًا في LdrpDllNotificationList البعيد عن طريق تصحيح List.Flink لرأس القائمة و List.Blink للإدخال الأول (الذي أصبح الآن الثاني) من القائمة.
سيشير LDR_DLL_NOTIFICATION_ENTRY الجديد لدينا إلى شيلكود ترامبولين مخصص (مبني باستخدام مشروع ShellcodeTemplate الخاص بـ @C5pider) والذي سيعيد تغييراتنا وينفذ شيلكود ضار في خيط جديد باستخدام TpWorkCallback.
بعد تسجيل إدخالنا الجديد يدويًا في العملية البعيدة، نحتاج فقط إلى انتظار العملية البعيدة لتشغيل رد اتصال إشعار DLL الخاص بنا عن طريق تحميل أو تفريغ بعض ملفات DLL. من الواضح أن هذا لا يحدث بانتظام في كل عملية، لذا فإن العمل المسبق لإيجاد مرشحين مناسبين لهذه التقنية الحقنية ضروري. من بحثي المختصر، يبدو أن RuntimeBroker.exe و explorer.exe مرشحان مناسبون لهذا، على الرغم من أنني أشجعك على إيجاد آخرين أيضًا.
هذا دليل على المفهوم. لكي يكون هذا آمنًا من ناحية أمن العمليات ويتجنب منتجات مكافحة الفيروسات/كشف الاستغلال، هناك حاجة لبعض التعديلات. على سبيل المثال، استخدمت RWX عند تخصيص الذاكرة للشيلكودات - لا تكن كسولًا (مثلي) وقم بتغييرها. قد يرغب المرء أيضًا في استبدال OpenProcess و ReadProcessMemory و WriteProcessMemory ببعض واجهات برمجة التطبيقات ذات المستوى المنخفض واستخدام Indirect Syscalls أو (توصية غير محتشمة) HWSyscalls. ربما قم بتشفير الشيلكودات أو حتى ابذل جهدًا إضافيًا وقم بتعديل شيلكود الترامبولين ليناسب احتياجاتك، أو على الأقل قم بتغيير قيم التجزئة الافتراضية في مشروع ShellcodeTemplate الخاص بـ @C5pider والذي تم استخدامه لإنشاء شيلكود الترامبولين.