
أداة لاستخدام شيلكود وضع المستخدم من حمولة DOUBLEPULSAR لتحميل مكتبة DLL عشوائية بشكل انعكاسي داخل عملية أخرى، لاستخدامها في اختبار تقنيات الكشف أو أبحاث أمنية أخرى.
المؤلف: Matt Hillman ([email protected] - @sp1nl0ck)
الشركة: Countercept (@countercept)
الموقع الإلكتروني: https://countercept.com
أداة تستخدم شيفرة usermode shellcode من حمولة DOUBLEPULSAR لتحميل مكتبة DLL عشوائية بشكل انعكاسي (reflectively) داخل عملية أخرى، وذلك لاستخدامها في اختبار تقنيات الكشف أو أبحاث أمنية أخرى.
حمولة DOUBLEPULSAR التي نشرتها Shadow Brokers تعمل في البداية في وضع kernel وتقوم بتحميل مكتبة DLL بشكل انعكاسي داخل عملية usermode باستخدام استدعاء إجراء غير متزامن (Asynchronous Procedure Call - APC). التحميل الفعلي لمكتبة DLL يحدث في usermode، وهذه الأداة تستخدم شيفرة usermode shellcode هذه لتحميل مكتبة DLL في عملية محددة وتنفيذ ordinal معين. هذا يساعد في اختبار تقنيات كشف الهجمات والاستجابة للحوادث الرقمية الجنائية ضد الحمولة.
يُعتبر المحمّل (loader) ذا أهمية لأنه يعمل مع أي مكتبة DLL عشوائية دون استخدام استدعاء LoadLibrary القياسي. تجنّب LoadLibrary يمكن أن يجعل التحميل أكثر تمويهاً (stealthy) لأنه يتجنب الحاجة إلى كتابة DLL على القرص، ويمكن أن يتجنب أي شيء يراقب استدعاءات LoadLibrary، ويمكنه أيضاً تجنب وجود إدخال في كتلة بيئة العملية (Process Environment Block - PEB)، والتي عادةً ما تكون الطريقة التي يتم بها الحصول على قائمة الوحدات المحمّلة. هذه التقنيات أصبحت شائعة إلى حد ما الآن، لكن حتى الآن لم نكن على علم بأي كود عام يمكنه تحميل مكتبة DLL عشوائية بهذه الطريقة - الكود الموجود حالياً يتطلب أن تكون DLL مبنية خصيصاً لدعم التحميل. DOUBLEPULSAR مختلفة من حيث أنها تنفذ محمّلاً أكثر اكتمالاً يمكنه تحميل أي مكتبة DLL تقريباً. يعمل هذا المحمّل على أي إصدار تقريباً من Windows كما هو.
بينما تستخدم DOUBLEPULSAR نفسها استدعاء APC من وضع kernel يتم وضعه في قائمة انتظار ضد عملية usermode، فإن هذه الأداة تضع APC في قائمة الانتظار من usermode؛ وهذا لا يُحدث فرقاً عملياً كبيراً. بالإضافة إلى ذلك، يمكن لهذه الأداة تشغيل شيفرة shellcode باستخدام CreateRemoteThread بدلاً من ذلك.
C:\>DOUBLEPULSAR-usermode-injector.exe
الاستخدام: <pid> <shellcode_file> <dll_to_inject> <ordinal_to_execute> [use_CreateRemoteProcess]
الوسيطة الأخيرة اختيارية، إذا تم تحديدها 'true' فسيتم استخدام CreateRemoteProcess بدلاً من استخدام استدعاء APC
وهي الطريقة الافتراضية التي يعمل بها Doublepulsar. هذا للسماح للأشخاص باختباره بطرق مختلفة.
الافتراضي هو استخدام APC. سيتم الحقن في جميع الخيوط (threads) في العملية المستهدفة، مما يجعل من المرجح أن يقوم أحدها
بالتشغيل بسرعة. هذا مناسب فقط للاختبار لأنه قد يكون غير مرغوب فيه استدعاء الحمولة أكثر من
مرة واحدة.
على سبيل المثال، حقن somelibrary.dll في العملية 1234 باستخدام استدعاء إجراء غير متزامن (APC) واستدعاء ordinal 1:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1
Using thread: 2456
Using thread: 2032
Using thread: 3876
أو كما هو مذكور أعلاه، ولكن باستخدام CreateRemoteThread بدلاً من APC:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1 true
تحليل كامل لشيفرة usermode shellcode الخاصة بـ DOUBLEPULSAR:
عمل سابق على مكوّن kernel الخاص بـ DOUBLEPULSAR: