
एक उपयोगिता जो DOUBLEPULSAR पेलोड से यूज़रमोड शेलकोड का उपयोग करके किसी अन्य प्रक्रिया में एक मनमाना DLL को रिफ्लेक्टिव रूप से लोड करने के लिए है, जिसका उपयोग डिटेक्शन तकनीकों या अन्य सुरक्षा अनुसंधान के परीक्षण के लिए किया जाता है।
लेखक: मैट हिलमैन ([email protected] - @sp1nl0ck)
कंपनी: काउंटरसेप्ट (@countercept)
वेबसाइट: https://countercept.com
DOUBLEPULSAR पेलोड से यूज़रमोड शेलकोड का उपयोग करके किसी अन्य प्रक्रिया में एक मनमाना DLL को रिफ्लेक्टिव रूप से लोड करने के लिए एक उपयोगिता, जिसका उपयोग डिटेक्शन तकनीकों या अन्य सुरक्षा अनुसंधान के परीक्षण के लिए किया जाता है।
शैडो ब्रोकर्स द्वारा जारी DOUBLEPULSAR पेलोड शुरू में कर्नेल मोड में चलता है और एक एसिंक्रोनस प्रोसीजर कॉल (APC) का उपयोग करके एक यूज़रमोड प्रक्रिया में एक DLL को रिफ्लेक्टिव रूप से लोड करता है। DLL की वास्तविक लोडिंग यूज़रमोड में होती है, और यह उपयोगिता उस यूज़रमोड शेलकोड का उपयोग करके एक निर्दिष्ट प्रक्रिया में DLL लोड करने और दिए गए ऑर्डिनल को निष्पादित करने के लिए करती है। यह पेलोड के विरुद्ध हमले का पता लगाने और डिजिटल फोरेंसिक घटना प्रतिक्रिया तकनीकों के परीक्षण में मदद करने के लिए है।
यह लोडर दिलचस्प है क्योंकि यह मानक LoadLibrary कॉल का उपयोग किए बिना किसी भी मनमाने DLL के साथ काम करता है। LoadLibrary से बचना लोड को अधिक गुप्त बना सकता है क्योंकि यह DLL को डिस्क पर लिखने की आवश्यकता से बचाता है, LoadLibrary कॉल की निगरानी करने वाली किसी भी चीज़ से बच सकता है, और प्रोसेस एनवायरनमेंट ब्लॉक (PEB) में प्रविष्टि से भी बच सकता है, जो आमतौर पर लोड किए गए मॉड्यूल की सूची प्राप्त करने का तरीका है। ऐसी तकनीकें अब काफी सामान्य हैं, लेकिन अब तक हमें किसी भी सार्वजनिक कोड के बारे में जानकारी नहीं थी जो इस तरह से एक मनमाना DLL लोड कर सके - मौजूदा कोड के लिए DLL को लोड होने का समर्थन करने के लिए कस्टम-निर्मित होना आवश्यक है। DOUBLEPULSAR अलग है क्योंकि यह एक अधिक पूर्ण लोडर लागू करता है जो लगभग किसी भी DLL को लोड कर सकता है। यह लोडर लगभग किसी भी विंडोज़ संस्करण पर जैसा है वैसा ही काम करता है।
जबकि DOUBLEPULSAR स्वयं कर्नेल मोड से एक यूज़रमोड प्रक्रिया के विरुद्ध कतारबद्ध APC कॉल का उपयोग करता है, यह उपयोगिता APC को यूज़रमोड से कतारबद्ध करती है; इससे व्यावहारिक रूप से बहुत कम अंतर पड़ता है। इसके अतिरिक्त, यह उपयोगिता CreateRemoteThread का उपयोग करके भी शेलकोड को ट्रिगर कर सकती है।
C:\>DOUBLEPULSAR-usermode-injector.exe
USAGE: <pid> <shellcode_file> <dll_to_inject> <ordinal_to_execute> [use_CreateRemoteProcess]
अंतिम तर्क वैकल्पिक है, यदि 'true' निर्दिष्ट किया गया है तो APC कॉल के बजाय CreateRemoteProcess का उपयोग किया जाएगा, जो डिफ़ॉल्ट तरीका है जिससे डबलपल्सर काम करता है। यह लोगों को इसे विभिन्न तरीकों से परीक्षण करने की अनुमति देने के लिए है।
डिफ़ॉल्ट APC का उपयोग करना है। यह लक्ष्य में सभी थ्रेड्स में इंजेक्ट करेगा, जिससे उनमें से एक के तुरंत ट्रिगर होने की संभावना बढ़ जाती है। यह केवल परीक्षण के लिए उपयुक्त है क्योंकि पेलोड को एक से अधिक बार कॉल करना अवांछनीय हो सकता है।
उदाहरण के लिए, एक एसिंक्रोनस प्रोसीजर कॉल (APC) का उपयोग करके प्रक्रिया 1234 में somelibrary.dll इंजेक्ट करें और ऑर्डिनल 1 कॉल करें:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1
Using thread: 2456
Using thread: 2032
Using thread: 3876
या ऊपर जैसा ही, लेकिन APC के बजाय CreateRemoteThread का उपयोग करके:
C:\>dopu-usermode-injector.exe 1234 dopu-64bit-usermode-shellcode.bin somelibrary.dll 1 true
DOUBLEPULSAR के यूज़रमोड शेलकोड का पूर्ण विश्लेषण:
DOUBLEPULSAR के कर्नेल घटक पर पूर्व कार्य: