
विंडोज एक्सीक्यूटेबल्स में DLL सर्च ऑर्डर हाईजैकिंग उम्मीदवारों की खोज के लिए स्वचालित स्कैनर, जिसमें इम्पोर्ट टेबल पार्सिंग, रनटाइम मॉड्यूल गणना, और माइक्रोसॉफ्ट डिटॉर्स के माध्यम से API हुकिंग शामिल है।
DLL Hijack SCanner - एक ऐसा उपकरण जो DLL सर्च ऑर्डर हाईजैकिंग के लिए उम्मीदवारों की खोज को लीड उत्पन्न करने और स्वचालित करने का काम करता है
यह रिपॉजिटरी उपकरण (DLLHSC) के लिए Visual Studio प्रोजेक्ट फ़ाइल, API हुकिंग कार्यक्षमता (detour) के लिए प्रोजेक्ट फ़ाइल, पेलोड के लिए प्रोजेक्ट फ़ाइल और अंत में x86 और x64 आर्किटेक्चर के लिए संकलित निष्पादन योग्य (इस रिपॉजिटरी के रिलीज़ अनुभाग में) होस्ट करती है। कोड Visual Studio Community 2019 के साथ लिखा और संकलित किया गया था।
यदि आप उपकरण को स्रोत से संकलित करना चुनते हैं, तो आपको DLLHSC, detour और payload प्रोजेक्ट्स को संकलित करना होगा। DLLHSC इस उपकरण की मुख्य कार्यक्षमता को लागू करता है। detour प्रोजेक्ट एक DLL उत्पन्न करता है जिसका उपयोग APIs को हुक करने के लिए किया जाता है। और payload प्रोजेक्ट एक DLL उत्पन्न करता है जिसका उपयोग प्रूफ ऑफ कॉन्सेप्ट के रूप में किया जाता है ताकि यह जांचा जा सके कि परीक्षण किया गया निष्पादन योग्य इसे सर्च ऑर्डर हाईजैकिंग के माध्यम से लोड कर सकता है या नहीं। उत्पन्न पेलोड को DLLHSC और detour के साथ उसी निर्देशिका में रखा जाना चाहिए जिसका नाम x86 के लिए payload32.dll और x64 आर्किटेक्चर के लिए payload64.dll हो।
उपकरण 3 ऑपरेशन मोड लागू करता है जिन्हें नीचे समझाया गया है।
निष्पादन योग्य इमेज को मेमोरी में लोड करता है, आयात तालिका (Import table) को पार्स करता है और फिर आयात तालिका में संदर्भित किसी भी DLL को पेलोड DLL से बदल देता है।
उपकरण केवल उस मॉड्यूल (DLL) को एप्लिकेशन निर्देशिका में रखता है जो एप्लिकेशन निर्देशिका में मौजूद नहीं है, WinSxS से संबंधित नहीं है और KnownDLLs से संबंधित नहीं है।
पेलोड DLL निष्पादन पर, निम्न पथ में एक फ़ाइल बनाता है:
C:\Users\%USERNAME%\AppData\Local\Temp\DLLHSC.tmp निष्पादन के प्रमाण के रूप में।
उपकरण एप्लिकेशन को लॉन्च करता है और रिपोर्ट करता है कि पेलोड DLL को निष्पादित किया गया था या नहीं, यह जाँच करके कि अस्थायी फ़ाइल मौजूद है या नहीं। चूंकि कुछ निष्पादन योग्य अपने द्वारा लोड किए गए DLLs से फ़ंक्शन आयात करते हैं, त्रुटि संदेश बॉक्स दिखाई दे सकते हैं जब प्रदान किया गया DLL इन फ़ंक्शनों को निर्यात करने में विफल रहता है और इस प्रकार प्रदान की गई इमेज की निर्भरताओं को पूरा नहीं करता है। हालांकि, संदेश बॉक्स इंगित करते हैं कि यदि निर्भरताएं पूरी हो जाती हैं तो DLL पेलोड निष्पादन के लिए एक अच्छा उम्मीदवार हो सकता है। इस मामले में, अतिरिक्त विश्लेषण की आवश्यकता है। इन संदेश बॉक्स के शीर्षक में स्ट्रिंग्स हो सकती हैं: Ordinal Not Found या Entry Point Not Found। DLLHSC उन विंडो की तलाश करता है जिनमें ये स्ट्रिंग्स होती हैं, जैसे ही वे दिखाई देती हैं उन्हें बंद कर देता है और परिणामों की रिपोर्ट करता है।
प्रदान किए गए निष्पादन योग्य इमेज के साथ एक प्रक्रिया बनाता है, इस प्रक्रिया के पता स्थान में लोड किए गए मॉड्यूल को गिनता है और फ़िल्टर लागू करने के बाद परिणामों की रिपोर्ट करता है।
उपकरण केवल सिस्टम निर्देशिका से लोड किए गए मॉड्यूल की रिपोर्ट करता है जो KnownDLLs से संबंधित नहीं हैं। परिणाम लीड हैं जिनके लिए अतिरिक्त विश्लेषण की आवश्यकता है। विश्लेषक फिर रिपोर्ट किए गए मॉड्यूल को एप्लिकेशन निर्देशिका में रख सकता है और जाँच सकता है कि एप्लिकेशन प्रदान किए गए मॉड्यूल को लोड करता है या नहीं।
Microsoft Detours के माध्यम से LoadLibrary और LoadLibraryEx APIs को हुक करता है और रन-टाइम में लोड किए गए मॉड्यूल की रिपोर्ट करता है।
हर बार जब स्कैन किया गया एप्लिकेशन LoadLibrary और LoadLibraryEx को कॉल करता है, तो उपकरण कॉल को इंटरसेप्ट करता है और अनुरोधित मॉड्यूल को फ़ाइल C:\Users\%USERNAME%\AppData\Local\Temp\DLLHSCRTLOG.tmp में लिखता है। यदि LoadLibraryEx को विशेष रूप से LOAD_LIBRARY_SEARCH_SYSTEM32 फ़्लैग के साथ कॉल किया जाता है, तो फ़ाइल में कोई आउटपुट नहीं लिखा जाता है। सभी इंटरसेप्शन समाप्त होने के बाद, उपकरण फ़ाइल को पढ़ता है और परिणाम प्रिंट करता है। आगे के विश्लेषण के लिए रुचि के मॉड्यूल हैं जो KnownDLLs रजिस्ट्री कुंजी में मौजूद नहीं हैं, जो सिस्टम निर्देशिका में मौजूद नहीं हैं और जिनके पास पूर्ण पथ नहीं है (इन मॉड्यूल के लिए लोडर सामान्य खोज क्रम लागू करता है)।
यदि आप उपकरण को स्रोत से संकलित करना चुनते हैं, तो इसे Visual Studio Community 2019 पर करने की अनुशंसा की जाती है। उपकरण के ठीक से काम करने के लिए, प्रोजेक्ट्स DLLHSC, detour और payload को एक ही आर्किटेक्चर के लिए संकलित करना होगा और फिर उसी निर्देशिका में रखना होगा। कृपया ध्यान दें कि प्रोजेक्ट payload से उत्पन्न DLL का नाम 32-बिट आर्किटेक्चर के लिए payload32.dll या 64-बिट आर्किटेक्चर के लिए payload64.dll रखा जाना चाहिए।
इस एप्लिकेशन का सहायता मेनू
NAME
dllhsc - DLL Hijack SCanner
SYNOPSIS
dllhsc.exe -h
dllhsc.exe -e <executable image path> (-l|-lm|-rt) [-t seconds]
DESCRIPTION
DLLHSC scans a given executable image for DLL Hijacking and reports the results
It requires elevated privileges
OPTIONS
-h, --help
display this help menu and exit
-e, --executable-image
executable image to scan
-l, --lightweight
parse the import table, attempt to launch a payload and report the results
-lm, --list-modules
list loaded modules that do not exist in the application's directory
-rt, --runtime-load
display modules loaded in run-time by hooking LoadLibrary and LoadLibraryEx APIs
-t, --timeout
number of seconds to wait for checking any popup error windows - defaults to 10 seconds
यह खंड उदाहरण प्रदान करता है कि आप DLLHSC कैसे चला सकते हैं और यह किन परिणामों की रिपोर्ट करता है। इस उद्देश्य के लिए, वैध Microsoft उपयोगिता OleView.exe (MD5: D1E6767900C85535F300E08D76AAC9AB) का उपयोग किया गया था। बेहतर परिणामों के लिए, यह अनुशंसा की जाती है कि प्रदान की गई निष्पादन योग्य इमेज को उसकी स्थापना निर्देशिका के भीतर स्कैन किया जाए।
फ़्लैग -l प्रदान किए गए निष्पादन योग्य की आयात तालिका को पार्स करता है, फ़िल्टर लागू करता है और एप्लिकेशन की वर्तमान निर्देशिका में पेलोड DLL रखकर आयातित मॉड्यूल को हथियार बनाने का प्रयास करता है। स्कैन किया गया निष्पादन योग्य एक त्रुटि बॉक्स पॉप कर सकता है जब पेलोड DLL (निर्यातित फ़ंक्शन) के लिए निर्भरताएं पूरी नहीं होती हैं। इस मामले में, एक त्रुटि संदेश बॉक्स पॉप होता है। DLLHSC डिफ़ॉल्ट रूप से 10 सेकंड तक जाँचता है कि क्या कोई संदेश बॉक्स खोला गया था या उतने सेकंड के लिए जितने उपयोगकर्ता द्वारा फ़्लैग -t के साथ निर्दिष्ट किए गए हैं। एक त्रुटि संदेश बॉक्स इंगित करता है कि यदि निर्भरताएं पूरी हो जाती हैं, तो मॉड्यूल को हथियार बनाया जा सकता है।
निम्नलिखित स्क्रीनशॉट OleView.dll द्वारा पेलोड DLL को लोड करने पर उत्पन्न त्रुटि संदेश बॉक्स दिखाता है:

उपकरण अधिकतम 10 सेकंड या -t सेकंड की समयावधि की प्रतीक्षा करता है ताकि यह सुनिश्चित हो सके कि प्रक्रिया प्रारंभ समाप्त हो गई है और कोई संदेश बॉक्स उत्पन्न हुआ है। फिर यह संदेश बॉक्स का पता लगाता है, उसे बंद करता है और परिणाम की रिपोर्ट करता है:

फ़्लैग -lm प्रदान किए गए निष्पादन योग्य को लॉन्च करता है और उन मॉड्यूल को प्रिंट करता है जिन्हें वह लोड करता है जो KnownDLLs सूची में नहीं हैं और न ही WinSxS निर्भरताएं हैं। इस मोड का उद्देश्य DLLs का एक विचार देना है जिनका उपयोग पेलोड के रूप में किया जा सकता है और यह केवल विश्लेषक के लिए लीड उत्पन्न करने के लिए मौजूद है।

फ़्लैग -rt उन मॉड्यूल को प्रिंट करता है जो प्रदान की गई निष्पादन योग्य इमेज अपने पता स्थान में लोड करती है जब इसे एक प्रक्रिया के रूप में लॉन्च किया जाता है। यह Microsoft Detours के माध्यम से LoadLibrary और LoadLibraryEx APIs को हुक करके प्राप्त किया जाता है।

इस उपकरण पर किसी भी प्रतिक्रिया के लिए, कृपया GitHub Issues अनुभाग का उपयोग करें।