
مجموعة EternalBlue المعاد بناؤها بلغة C/C++ والتي تتضمن: ثغرة MS17-010، كاشف ثغرة EternalBlue، كاشف DoublePulsar ورافع شيل كود و DLL لـ DoublePulsar
مجموعة أدوات EternalBlue أعيدت كتابتها بلغة C/C++ وتتضمن:



ثم تُمرر هذه القيم من Recvbuff[18] -> Recvbuff[22] من خلال دالة حساب مفتاح XOR الخاص بـ DoublePulsar، والتي تولد مفتاح XOR صحيحًا غير موقع يمكن استخدامه لتشفير شيل كود أو حمولة DLL التي سيتم تحميلها إلى DoublePulsar. تم اختباره على Windows 7 x64-bit.
لقطة شاشة نموذجية:

نفس المفتاح من ثنائي NSA الأصلي في FUZZBUNCH

DoublePulsar_structure_ping.cpp - يرسل هذا البرنامج 4 حزم SMB: حزمة مفاوضات واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، وحزمة Trans2 SESSION_SETUP. الفرق بين هذا و doublepulsar_check.cpp هو أن هذا يولد حزمة PING الخاصة بـ DoublePulsar باستخدام هيكل بدلاً من سلسلة SMB السداسية العشرية الثابتة التي استخرجتها من عينة Wannacry. فرق آخر هو أن هذا البرنامج يولد حزمة TreeConnect ديناميكيًا بدلاً من استخدام الحزمة الثابتة الموجودة في عينة Wannacry. ستخبرك حزمة ping المولدة في هذا البرنامج ما إذا كان DoublePulsar مثبتًا على الجهاز البعيد.
DoublePulsar_structure_exec.cpp - يرسل هذا البرنامج 5 حزم SMB: حزمة مفاوضات SMB واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، حزمة Ping من DoublePulsar Trans2 SESSION_SETUP، وحزمة تنفيذ من DoublePulsar Trans2 SESSION_SETUP. الفرق بين هذا و Doublepulsar_UploadShellcode.cpp هو أن هذا يولد حزمة تنفيذ DoublePulsar Trans2 باستخدام هيكل بدلاً من سلسلة SMB السداسية العشرية الثابتة التي استخرجتها من عينة Wannacry.
Doublepulsar_UploadDLL.cpp - هذا البرنامج مخصص لـ DLLs. يرسل هذا البرنامج 4 حزم SMB مع بيانات DLL في حزم SMB Trans2: حزمة مفاوضات واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، طلب Ping Trans2 SESSION_SETUP، وحزمة تنفيذ Trans2 SESSION_SETUP. تُرسل حزمة طلب Ping Trans2 SESSION_SETUP للحصول على توقيع SMB في حزمة استجابة Trans2 SESSION_SETUP. تتم معالجة هذا التوقيع من خلال حاسبة مفتاح XOR الخاص بـ DoublePulsar. ثم يقرأ البرنامج ملف DLL ويجمعه مع شيل كود نواة 64 بت وشيل كود مساحة المستخدم لتشغيل DLL، ويقوم بعملية XOR للمخزن المؤقت باستخدام مفتاح XOR الخاص بـ DoublePulsar الذي حسبناه من توقيع SMB. يتم إنشاء حزمة عن طريق تخصيص الذاكرة، ونسخ حزمة Trans2، وتحرير القيم اللازمة لعمل معاملة SMB (UserID، TreeID، TotalDataCount، DataCount، ByteCount)، ثم نسخ بيانات XOR (شيل كود النواة + DLL) إلى النهاية، والتكرار عبر ذلك بإرسالها بحجم حزمة إجمالي 4096 بايت في المرة الواحدة إلى DoublePulsar. الحجم الإجمالي للحزمة = 4178. 4096 بايت مخصصة للبيانات المشفرة بـ XOR. سيتم أيضًا تطبيق استخدام هياكل SMB و TRANSACTION2 في الإصدارات المستقبلية.
Doublepulsar_UploadShellcode.cpp - يرسل هذا البرنامج 5 حزم SMB: حزمة مفاوضات واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، حزمة Ping Trans2 SESSION_SETUP واحدة، وحزمة تنفيذ Trans2 SESSION_SETUP واحدة. تُرسل حزمة طلب Trans2 SESSION_SETUP للحصول على توقيع SMB في حزمة استجابة TRANS2 SESSION_SETUP. تتم معالجة هذا التوقيع من خلال حاسبة مفتاح XOR الخاص بـ DoublePulsar. ثم ينسخ البرنامج شيل كود النواة وشيل كود نموذجي من مخزن مؤقت، ويقوم بعملية XOR للمخزن المؤقت باستخدام مفتاح XOR الخاص بـ DoublePulsar الذي حسبناه من توقيع SMB. يتم إنشاء حزمة عن طريق تخصيص الذاكرة، ونسخ حزمة تنفيذ Trans2، وتحرير القيم اللازمة لعمل معاملة SMB (UserID، TreeID، TotalDataCount، DataCount، ByteCount)، ثم نسخ معاملات SESSION_SETUP و 4096 بايت من بيانات شيل كود المشفرة بـ XOR إلى النهاية، وإرسالها بحجم حزمة إجمالي 4178 بايت إلى DoublePulsar. الحجم الإجمالي للحزمة = 4178. سيكون طول NetBIOS 4174 لأن رأس NetBIOS لا يحسب نفسه للحجم. 12 بايت من هذه الحزمة مخصصة لمعاملات Doublepulsar SESSION_SETUP. 4096 بايت مخصصة للبيانات المشفرة بـ XOR. في إصدار مستقبلي، سيتم استخدام هياكل SMB و TRANSACTION2.

شيل كود مولّد من - كتب zerosum0x0 شيل كود مخصصًا لـ ETERNALBLUE يمكن إعادة استخدامه لـ DOUBLEPULSAR، مع تعديل صغير. نظرًا لأن الكتابة فوق استدعاء النظام في شيل كود المنسوخ كانت غير ضرورية لحالة الاستخدام هذه، قمنا بإلغاء تعريفها:
;%define SYSCALL_OVERWRITE ; to run at process IRQL in syscall
أعد التجميع باستخدام: nasm -w-other -o >(xxd -p -c 16 | sed 's/../\x&/g') external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
https://github.com/rapid7/metasploit-framework/blob/master/external/source/shellcode/windows/multi_arch_kernel_queue_apc.asm
https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x64.asm
https://raw.githubusercontent.com/ninp0/eternalblue/master/eternalblue_kshellcode_x86.asm
https://www.rapid7.com/blog/post/2019/10/02/open-source-command-and-control-of-the-doublepulsar-implant/
DoublePulsar_UploadExe.cpp -
هذا البرنامج مخصص للملفات التنفيذية. سيتم قراءة الملف التنفيذي في الذاكرة ووضعه في DLL مشغل من Wannacry وإرساله عبر DoublePulsar. حزمة مفاوضات واحدة، حزمة إعداد جلسة واحدة، حزمة اتصال شجرة واحدة، حزمة Trans2 Ping واحدة، وحزم متعددة من حزم exec SESSION_SETUP من نوع Trans2. تُرسل حزمة طلب Ping Trans2 للحصول على توقيع SMB في حزمة استجابة Trans2. تتم معالجة هذا التوقيع من خلال حاسبة مفتاح XOR الخاص بـ DoublePulsar. ثم يقرأ البرنامج ملف EXE ويجمعه مع شيل كود نواة 64 بت وشيل كود مساحة المستخدم وملف DLL هيكلي، ويقوم بعملية XOR للمخزن المؤقت باستخدام مفتاح XOR الخاص بـ DoublePulsar الذي حسبناه من توقيع SMB. يتم إنشاء حزمة عن طريق تخصيص الذاكرة، ونسخ حزمة تنفيذ Trans2، وتحرير القيم اللازمة لعمل معاملة SMB (UserID، TreeID، TotalDataCount، DataCount، ByteCount)، ثم نسخ بيانات XOR (شيل كود النواة + DLL + الملف التنفيذي) إلى النهاية، والتكرار عبر ذلك بإرسالها بحجم حزمة إجمالي 4096 بايت في المرة الواحدة إلى DoublePulsar. الحجم الإجمالي للحزمة = 4178. سيكون طول NetBIOS 4174 لأن رأس NetBIOS لا يحسب نفسه للحجم. 12 بايت من هذه الحزمة مخصصة لمعاملات Doublepulsar SESSION_SETUP. 4096 بايت مخصصة للبيانات المشفرة بـ XOR.
EternalBlue.cpp - يرسل هذا البرنامج عدة حزم SMB: مفاوضات، إعداد جلسة، اتصال شجرة، وحزم متعددة من NT trans و Trans2. هذه الحزم من نوع NT trans تكون مشوهة مما يهيئ الاستغلال في ذاكرة الكمبيوتر الضحية. يتم إرسال المزيد من حزم SMB الفارغة أو البيضاء إلى الضحية عبر مقابس متعددة إلى نفس المنفذ على الضحية. معظم حمولة EternalBlue المشفرة بـ base64 تُرسل عبر المقبس 1 حيث تم إرسال حزم المفاوضات وإعداد الجلسة واتصال الشجرة. ثم يتم إنشاء 20 مقبسًا آخر وإرسال البيانات إلى تلك المقابس (المقبس 3 إلى المقبس 21). بعد ذلك، يُرسل DoublePulsar عبر المقبس 3 إلى المقبس 21. ثم تُغلق المقابس بواسطة البرنامج مما يفجر EternalBlue و DoublePulsar على الكمبيوتر الضحية. ثم يتم إرسال طلب قطع اتصال SMB وطلب تسجيل خروج SMB ويغلق الاتصال. يعمل هذا الاستغلال وتم اختباره على Windows 7 x64-bit. استغرق الأمر حوالي 5 ثوانٍ لكي يصبح الباب الخلفي قيد التشغيل بالكامل، كما تم الإبلاغ عنه مسبقًا في تقارير EternalBlue حول الإنترنت. قد تكون هناك حاجة لمزيد من محاولات الاستغلال. ومع ذلك، يوجد حاليًا خطأ في تعيين TreeID و UserID بشكل غير صحيح في الحزم، وسيتم إصلاحه في إصدار لاحق. سيعمل هذا ضد الأجهزة التي تم تشغيلها مؤخرًا حيث يتم تعيين TreeID و UserIDs إلى القيم الافتراضية. ستحتاج هذه الحزم إلى تحديث قيم TreeID و UserID الخاصة بها حيث تم تعيينها حاليًا إلى القيم الافتراضية "08 00".

تم إنشاء وحدة Metasploit مخصصة جعلتها قابلة للتشغيل باستخدام وحدة DoublePulsar RCE مفتوحة المصدر من Metasploit.
قمت بتغيير المنطق للسماح بتوليد DLL ودمجها مع شيل كود نواة x64 (مُسبق الإضافة) الذي أخذته من Wannacry، للسماح لـ DoublePulsar بتشغيل DLL.

يحتوي المستودع أيضًا على ما يلي للأغراض التعليمية وهي غير مدعومة من قبلي:
سكريبت Python لتحميل DLL الخاص بـ DoublePulsar x86/x64
ثنائي EternalBlue الكل في واحد
كود التجميع لـ Multi arch kernel queue apc وكود نواة Multi-Arch Windows x86/x64 من Ring 0 إلى Ring 3 عبر Queued APC
شيل كود حمولة نواة EternalBlue x64/x86 من worawit
ملف إعادة تشغيل Eternalblue