
.lnk भेद्यता का शोषण और explorer.exe तथा USB ड्राइव से संबंधित ऑपरेटिंग सिस्टम हैंडलिंग तंत्र।
एक Shortcut + एक .DLL बनाएं जिसमें दुर्भावनापूर्ण payload हो => USB में डालकर victim को भेजें => victim USB खोलता है => Payload स्वचालित रूप से सक्रिय हो जाता है !
पहले हमें यह जानना होगा कि यह गड़बड़ी वास्तव में कहाँ से आती है! यह Plug-and-Play (प्लग करें और चलाएं) नामक सुविधा के कारण है — OS स्वचालित रूप से डिवाइस का पता लगाता है, संसाधन आवंटित करता है और उपयुक्त Driver लोड करता है ताकि वह बिना मशीन को पुनरारंभ किए तुरंत काम कर सके। जब आप USB लगाते हैं और Windows Explorer explorer.exe से फ़ोल्डर खोलते हैं, तो ऑपरेटिंग सिस्टम उपयोगकर्ता को संबंधित आइकन (icon) दिखाने के लिए फ़ाइलों को स्कैन करता है!
पुराने Windows संस्करणों से, Microsoft चाहता था कि Control Panel सुविधाओं (जो मूल रूप से .cpl या .dll फ़ाइलें हैं) की ओर इशारा करने वाले शॉर्टकट (shortcut .lnk) लचीले ढंग से गतिशील आइकन प्रदर्शित कर सकें। इसलिए, Windows की मुख्य इंटरफ़ेस प्रबंधन लाइब्रेरी shell32.dll में CPL_LoadCPLModule नामक एक फ़ंक्शन डिज़ाइन किया गया।
अंधाधुंध तरीके से LoadLibrary का उपयोग करना: Control Panel Applet संरचना फ़ाइल से आइकन प्राप्त करने के लिए, ऑपरेटिंग सिस्टम केवल एक स्थिर छवि फ़ाइल नहीं पढ़ता, बल्कि LoadLibraryW फ़ंक्शन का उपयोग करके उस पूरी डायनेमिक लिंक लाइब्रेरी को सीधे explorer.exe प्रक्रिया की मेमोरी स्पेस में लोड करता है। लोड करने के बाद, वह स्क्रीन पर आइकन बनाने के लिए CPlApplet नामक एक मानक निर्यात फ़ंक्शन को कॉल करता है।
यह साबित करने के लिए कि LoadLibraryW वास्तव में उपरोक्त exploit श्रृंखला से संबंधित है:
1/
x64dbg với quyền adminचालू करें2/
explorer.exeसे attach करें3/
bp LoadLibraryWकमांड टाइप करें4/ F9 दबाकर
explorer.exeको चलाते रहें5/ USB लगाएं, तुरंत
hit breakpointहोगा!
मुझे समस्या आई कि exploit श्रृंखला पूरी तरह से शांत थी, भले ही मैंने सब कुछ check और debug करने की कोशिश की, लेकिन fix का तरीका नहीं मिल सका! फिर मैंने दूसरों का PoC खोजकर चलाने की कोशिश की, लेकिन वह भी fail रहा!
हालाँकि, जब मैं दोपहर का खाना खाकर वापस आया, तो मेरी एकाग्रता और शांति लौट आई। मैंने सवाल उठाना शुरू किया कि इस व्यक्ति का PoC work क्यों करता है और मेरी मशीन पर लाकर work नहीं करता? ठीक है, मैंने उसके .lnk और .dll का हल्का रिवर्स इंजीनियरिंग करना शुरू किया, तो 2 चीज़ें पता चलीं!
1 / मेरी .dll उसकी तुलना में लंबी है! लेकिन कोई बात नहीं, यह समस्या नहीं है!
2 / जब मैंने strings पढ़ने के लिए .lnk को HxD में डाला, तो मुझे पता चला कि यह व्यक्ति सापेक्ष पथ (relative path) का नहीं, बल्कि निरपेक्ष पथ (absolute path) का उपयोग कर रहा है!
सापेक्ष : ../example.dll
निरपेक्ष : O:/example.dll
ठीक है, अब fix का तरीका यह होगा कि हमें यह जानना होगा कि USB को जब पीड़ित की मशीन में लगाया जाएगा तो उसे auto कौन सा ड्राइव अक्षर मिलेगा, उसके आधार पर हम absolute path लगाएंगे और यह सफल होगा, क्योंकि मेरे Win7 पर USB लगाते ही वह हमेशा F ड्राइव के रूप में आता है, इसलिए मेरा build सिंटैक्स था:
python Make_PoC.py FakeGoogleChrome F:\Pwned.dll
चूंकि यह सिस्टम आर्किटेक्चर डिज़ाइन सोच (Logic/Architecture Flaw) से संबंधित दोष है, न कि मेमोरी ओवरफ्लो दोष, Microsoft को Control Panel को संभालने के तरीके को पूरी तरह से बदलना पड़ा:
.cpl या .dll फ़ाइलों के पास Microsoft का वैध डिजिटल हस्ताक्षर हो या वे कड़ी सुरक्षित सिस्टम निर्देशिकाओं (जैसे System32) में स्थित हों, ताकि USB से "Binary Planting" त्रुटि से बचा जा सके।explorer.exe [cite: 1058] में लोड करने के बजाय, नए Windows संस्करण Control Panel applets को एक पृथक मध्यस्थ प्रक्रिया (जैसे dllhost.exe या rundll32.exe) के माध्यम से चलाते हैं। यदि DLL crash हो जाता है या उसमें दुर्भावनापूर्ण कोड होता है, तो वह केवल उस मध्यस्थ प्रक्रिया को गिराता है, पूरे यूज़र इंटरफ़ेस सिस्टम को नियंत्रित नहीं कर सकता।शोध VN
PoC
vul .lnk बनाने का टूल