
EternalBlue सूट को C/C++ में फिर से बनाया गया है जिसमें शामिल हैं: MS17-010 Exploit, EternalBlue भेद्यता डिटेक्टर, DoublePulsar डिटेक्टर और DoublePulsar Shellcode और DLL अपलोडर
EternalBlue सूट को C/C++ में पुनर्निर्मित किया गया जिसमें शामिल हैं:



Recvbuff[18] से Recvbuff[22] तक के इन मानों को तब DoublePulsar XOR कुंजी कैलकुलेटर फ़ंक्शन के माध्यम से चलाया जाता है, जो एक unsigned इंटीजर XOR कुंजी उत्पन्न करता है जिसका उपयोग DoublePulsar पर अपलोड किए जाने वाले शेलकोड या DLL पेलोड को एन्क्रिप्ट करने के लिए किया जा सकता है। Windows 7 x64 बिट पर परीक्षण किया गया।
नमूना स्क्रीनशॉट:

FUZZBUNCH में मूल NSA बाइनरी से समान कुंजी

DoublePulsar_structure_ping.cpp - यह प्रोग्राम 4 SMB पैकेट भेजता है: 1 नेगोशिएशन, 1 सेशन सेटअप, 1 ट्री कनेक्ट और Trans2 SESSION_SETUP पैकेट। इसका doublepulsar_check.cpp से अंतर यह है कि यह Trans2 DoublePulsar PING पैकेट को एक संरचना का उपयोग करके उत्पन्न करता है, न कि हार्डकोडेड SMB हेक्स स्ट्रिंग जो मैंने Wannacry सैंपल से ली थी। एक और अंतर यह है कि यह प्रोग्राम TreeConnect पैकेट को गतिशील रूप से उत्पन्न करता है, न कि Wannacry सैंपल में मौजूद हार्डकोडेड का उपयोग करता है। इस प्रोग्राम में उत्पन्न पिंग पैकेट आपको बताएगा कि रिमोट मशीन पर DoublePulsar स्थापित है या नहीं।
DoublePulsar_structure_exec.cpp - यह प्रोग्राम 5 SMB पैकेट भेजता है: 1 SMB नेगोशिएशन, 1 सेशन सेटअप, 1 ट्री कनेक्ट, 1 Doublepulsar Trans2 SESSION_SETUP Ping पैकेट और 1 Doublepulsar Trans2 SESSION_SETUP Execution पैकेट। इसका Doublepulsar_UploadShellcode.cpp से अंतर यह है कि यह Trans2 DoublePulsar Execution पैकेट को एक संरचना का उपयोग करके उत्पन्न करता है, न कि हार्डकोडेड SMB हेक्स स्ट्रिंग जो मैंने Wannacry सैंपल से ली थी।
Doublepulsar_UploadDLL.cpp - यह प्रोग्राम DLL के लिए है। यह प्रोग्राम DLL डेटा के साथ SMB Trans2 पैकेट में 4 SMB पैकेट भेजता है: 1 नेगोशिएशन, 1 सेशन सेटअप, 1 ट्री कनेक्ट, 1 Ping Trans2 SESSION_SETUP अनुरोध और एक Execution Trans2 SESSION_SETUP पैकेट। Ping Trans2 SESSION_SETUP अनुरोध पैकेट Trans2 SESSION_SETUP प्रतिक्रिया पैकेट में SMB हस्ताक्षर प्राप्त करने के लिए भेजा जाता है। इस हस्ताक्षर को DoublePulsar XOR कुंजी कैलकुलेटर के माध्यम से संसाधित किया जाता है। प्रोग्राम तब एक DLL फ़ाइल पढ़ता है और इसे DLL चलाने के लिए 64 बिट कर्नेल और यूजरलैंड शेलकोड के साथ जोड़ता है और बफर को SMB हस्ताक्षर से गणना किए गए DoublePulsar XOR कुंजी से XOR करता है। मेमोरी आवंटित करके, Trans2 पैकेट को कॉपी करके, SMB लेन-देन के लिए आवश्यक मानों (UserID, TreeID, TotalDataCount, DataCount, ByteCount) को संपादित करके, फिर XOR किए गए डेटा (कर्नेल शेलकोड + DLL) को अंत में कॉपी करके और इसे 4096 बाइट्स के कुल पैकेट लंबाई में एक बार में DoublePulsar को भेजने के लिए लूप करके एक पैकेट उत्पन्न किया जाता है। कुल पैकेट लंबाई = 4178। 4096 XOR एन्क्रिप्टेड डेटा के लिए है। भविष्य के रिलीज़ में SMB और TRANSACTION2 संरचनाओं का उपयोग भी लागू किया जाएगा।
Doublepulsar_UploadShellcode.cpp - यह प्रोग्राम 5 SMB पैकेट भेजता है: 1 नेगोशिएशन, 1 सेशन सेटअप, 1 ट्री कनेक्ट, 1 Ping Trans2 SESSION_SETUP पैकेट और 1 execute Trans2 SESSION_SETUP पैकेट। Trans2 SESSION_SETUP अनुरोध पैकेट TRANS2 SESSION_SETUP प्रतिक्रिया पैकेट में SMB हस्ताक्षर प्राप्त करने के लिए भेजा जाता है। इस हस्ताक्षर को DoublePulsar XOR कुंजी कैलकुलेटर के माध्यम से संसाधित किया जाता है। प्रोग्राम तब एक बफर से कर्नेल शेलकोड और नमूना शेलकोड कॉपी करता है, यह बफर को SMB हस्ताक्षर से गणना किए गए DoublePulsar XOR कुंजी से XOR करता है। मेमोरी आवंटित करके, Trans2 exec पैकेट को कॉपी करके, SMB लेन-देन के लिए आवश्यक मानों (UserID, TreeID, TotalDataCount, DataCount, ByteCount) को संपादित करके, फिर SESSION_SETUP पैरामीटर्स और XOR किए गए शेलकोड डेटा के 4096 बाइट्स को अंत में कॉपी करके और इसे कुल पैकेट लंबाई 4178 बाइट्स में DoublePulsar को भेजने के लिए एक पैकेट उत्पन्न किया जाता है। कुल पैकेट लंबाई = 4178। NetBIOS लंबाई 4174 होगी क्योंकि NetBIOS हेडर आकार के लिए स्वयं की गणना नहीं करता है। इस पैकेट के 12 बाइट्स Doublepulsar SESSION_SETUP पैरामीटर्स के लिए हैं। 4096 XOR एन्क्रिप्टेड डेटा के लिए है। भविष्य के रिलीज़ में SMB और TRANSACTION2 संरचनाओं का उपयोग किया जाएगा।

से शेलकोड उत्पन्न - zerosum0x0 ने ETERNALBLUE के लिए कस्टम शेलकोड लिखा था जिसे DOUBLEPULSAR के लिए पुनः उपयोग किया जा सकता है, हालांकि एक छोटे संशोधन के साथ। चूंकि कॉपी किए गए शेलकोड में सिस्कॉल ओवरराइट इस उपयोग के मामले के लिए अनावश्यक था, हमने इसे अपरिभाषित किया:
;%define SYSCALL_OVERWRITE ; सिस्कॉल में प्रक्रिया IRQL पर चलाने के लिए
इसके साथ पुनर्मूल्यांकन करें: 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 -
यह प्रोग्राम निष्पादनयोग्य (executable) के लिए है। निष्पादनयोग्य को मेमोरी में पढ़ा जाएगा और Wannacry लॉन्चर DLL में रखा जाएगा और DoublePulsar के माध्यम से भेजा जाएगा। 1 नेगोशिएशन, 1 सेशन सेटअप, 1 ट्री कनेक्ट, 1 Trans2 Ping पैकेट और कई Trans2 exec SESSION_SETUP पैकेट। Trans2 Ping अनुरोध पैकेट Trans2 प्रतिक्रिया पैकेट में SMB हस्ताक्षर प्राप्त करने के लिए भेजा जाता है। इस हस्ताक्षर को DoublePulsar XOR कुंजी कैलकुलेटर के माध्यम से संसाधित किया जाता है। फिर प्रोग्राम एक EXE फ़ाइल पढ़ता है और इसे 64 बिट कर्नेल और यूजरलैंड शेलकोड और एक स्केलेटन DLL फ़ाइल के साथ जोड़ता है और बफर को SMB हस्ताक्षर से गणना किए गए DoublePulsar XOR कुंजी से XOR करता है। मेमोरी आवंटित करके, Trans2 निष्पादन पैकेट को कॉपी करके, SMB लेन-देन के लिए आवश्यक मानों (UserID, TreeID, TotalDataCount, DataCount, ByteCount) को संपादित करके, फिर XOR किए गए डेटा (कर्नेल शेलकोड + DLL + निष्पादनयोग्य) को अंत में कॉपी करके और इसे 4096 बाइट्स के कुल पैकेट लंबाई में एक बार में DoublePulsar को भेजने के लिए लूप करके एक पैकेट उत्पन्न किया जाता है। कुल पैकेट लंबाई = 4178। NetBIOS लंबाई 4174 होगी क्योंकि NetBIOS हेडर आकार के लिए स्वयं की गणना नहीं करता है। इस पैकेट के 12 बाइट्स Doublepulsar SESSION_SETUP पैरामीटर्स के लिए हैं। 4096 XOR एन्क्रिप्टेड डेटा के लिए है।
एक कस्टम Metasploit मॉड्यूल बनाया जिसे मैंने Metasploit के ओपन सोर्स DoublePulsar RCE मॉड्यूल का उपयोग करके कार्यात्मक बनाया।
मैंने तर्क को बदल दिया ताकि एक DLL उत्पन्न हो सके, इसे x64 कर्नेल शेलकोड (प्रीपेंडेड) के साथ मर्ज किया जा सके जो मैंने Wannacry से लिया था, ताकि DoublePulsar DLL को चला सके।

रिपॉजिटरी में शैक्षिक उद्देश्यों के लिए निम्नलिखित भी शामिल है और मेरे द्वारा समर्थित नहीं हैं:
DoublePulsar x86/x64 Upload DLL पायथन स्क्रिप्ट
EternalBlue एक ही बाइनरी में
मल्टी आर्क कर्नेल क्यू APC असेंबली कोड और Windows x86/x64 मल्टी-आर्क कर्नेल रिंग 0 से रिंग 3 Queued APC कर्नेल कोड के माध्यम से
EternalBlue x64/x86 कर्नेल पेलोड शेलकोड worawit से
Eternalblue रीप्ले फ़ाइल
EternalBlue.cpp - यह प्रोग्राम कई SMB पैकेट भेजता है: नेगोशिएशन, SessionSetup, TreeConnect और कई NT trans और Trans2 पैकेट। ये NT trans पैकेट विकृत (malformed) होते हैं जो पीड़ित कंप्यूटर की मेमोरी में एक्सप्लॉइट को तैयार करते हैं। पीड़ित के समान पोर्ट पर कई सॉकेट्स के माध्यम से पीड़ित को अधिक व्हाइटस्पेस या खाली SMB पैकेट भेजे जाते हैं। EternalBlue के अधिकांश base64 पेलोड को सॉकेट 1 पर भेजा जा रहा है जहां Negotiation, SessionSetup और TreeConnect पैकेट भेजे गए थे। फिर 20 अन्य सॉकेट बनाए जाते हैं और उन सॉकेट्स (सॉकेट 3 से सॉकेट 21) को डेटा भेजा जाता है। बाद में, DoublePulsar को सॉकेट 3 से सॉकेट 21 पर भेजा जाता है। फिर प्रोग्राम द्वारा सॉकेट बंद कर दिए जाते हैं जो पीड़ित कंप्यूटर पर EternalBlue और DoublePulsar को विस्फोटित (detonate) करता है। फिर एक SMB डिस्कनेक्ट और SMB लॉगऑफ अनुरोध भेजा जाता है और कनेक्शन बंद हो जाता है। यह एक्सप्लॉइट काम करता है और Windows 7 x64 बिट पर परीक्षण किया गया। बैकडोर को पूरी तरह से संचालित होने में लगभग 5 सेकंड लगे, जैसा कि पहले से इंटरनेट पर EternalBlue राइटअप में बताया गया है। अधिक शोषण प्रयास आवश्यक हो सकते हैं। हालांकि वर्तमान में पैकेट में TreeID और UserID के सही ढंग से सेट न होने में एक बग है, जिसे बाद के रिलीज़ में ठीक किया जाएगा। यह हाल ही में चालू की गई मशीनों के खिलाफ काम करेगा क्योंकि TreeID और UserID डिफ़ॉल्ट मानों पर सेट हैं। इन पैकेट्स को अपने TreeID और UserID मानों को अपडेट करना होगा क्योंकि वे वर्तमान में डिफ़ॉल्ट मान "08 00" पर सेट हैं।
