
DLLHijackHunter v2.5.0
Automated DLL हाइजैकिंग खोज, सत्यापन और पुष्टि। स्थानीय गलत कॉन्फ़िगरेशन को हथियारबद्ध, पुष्ट हमले के पथों में बदलना।
DLLHijackHunter
द्वारा ProjectMerai
स्वचालित DLL हाईजैकिंग खोज, सत्यापन और पुष्टि
स्थानीय गलत कॉन्फ़िगरेशन को हथियारबंद, पुष्टि किए गए हमले के रास्तों में बदलना।
अवलोकन
DLLHijackHunter एक स्वचालित Windows DLL हाईजैकिंग पहचान उपकरण है जो स्थैतिक विश्लेषण से आगे जाता है। यह बहु-चरणीय पाइपलाइन का उपयोग करके DLL हाईजैकिंग के अवसरों की खोज, सत्यापन और पुष्टि करता है:
- खोज — सेवाओं, निर्धारित कार्यों, स्टार्टअप आइटम, COM ऑब्जेक्ट्स और AutoElevate UAC बायपास वेक्टरों में बाइनरी की गणना करता है
- फ़िल्टरेशन — बुद्धिमान हार्ड और सॉफ्ट गेट्स के माध्यम से गलत सकारात्मक परिणामों को समाप्त करता है
- कैनरी पुष्टि — एक हानिरहित कैनरी DLL तैनात करता है और हाईजैक के काम करने को साबित करने के लिए बाइनरी को ट्रिगर करता है
- स्कोरिंग और रिपोर्टिंग — स्तरीय विश्वास प्रणाली के साथ शोषण-क्षमता के आधार पर निष्कर्षों को रैंक करता है
अधिकांश DLL हाईजैकिंग उपकरण "यह DLL हाईजैक हो सकता है" पर रुक जाते हैं। DLLHijackHunter इसे सत्यापित करने, ज्ञात शोषण खुफिया जानकारी के विरुद्ध क्रॉस-रेफरेंस करने और जहाँ संभव हो वास्तविक निष्पादन पथों की पुष्टि करने का प्रयास करता है।
आर्किटेक्चर
flowchart TB
subgraph Phase1["चरण 1: खोज"]
SE["स्थैतिक इंजन<br/>सेवाएँ, कार्य, स्टार्टअप,<br/>COM, रन कुंजियाँ"]
AE["AutoElevate इंजन<br/>मैनिफेस्ट + COM UAC बायपास"]
PE["PE विश्लेषक<br/>इम्पोर्ट टेबल, डिले लोड्स,<br/>मैनिफेस्ट, एक्सपोर्ट्स"]
ETW["ETW इंजन<br/>रीयल-टाइम DLL लोड<br/>निगरानी"]
SO["खोज क्रम<br/>कैलकुलेटर"]
end
subgraph Phase2["चरण 2: फ़िल्टर पाइपलाइन"]
direction LR
HG["हार्ड गेट्स<br/>(बाइनरी किल)"]
SG["सॉफ्ट गेट्स<br/>(विश्वास समायोजन)"]
end
subgraph Phase3["चरण 3: लोड सत्यापन (--verify-load)"]
LP["LoadProbe<br/>चाइल्ड-प्रोसेस लोडर परीक्षण<br/>प्रोब DLL रखा और हटाया गया"]
end
subgraph Phase4["चरण 4: कैनरी"]
CB["कैनरी DLL बिल्डर"]
TE["ट्रिगर निष्पादक"]
VF["सत्यापन"]
end
subgraph Phase5["चरण 5: आउटपुट"]
SC["स्तरीय स्कोरर"]
RC["कंसोल रिपोर्ट"]
RJ["JSON रिपोर्ट"]
RH["HTML रिपोर्ट"]
end
SE --> PE --> SO
AE --> PE
ETW --> SO
SO --> Phase2
HG --> SG
Phase2 --> Phase3
Phase3 --> Phase4
CB --> TE --> VF
Phase4 --> Phase5
मुख्य विशेषताएँ
हाईजैक प्रकार कवरेज
| प्रकार | विवरण | गोपनीयता | स्थिति |
|---|---|---|---|
| फैंटम | DLL डिस्क पर कहीं भी मौजूद नहीं है | उच्च | लागू |
| खोज क्रम | DLL को Windows खोज क्रम में पहले रखें | उच्च | लागू |
| साइड-लोडिंग | वैध ऐप द्वारा अपनी निर्देशिका से DLL लोड करने का दुरुपयोग | उच्च | लागू (AutoElevate कॉपी-टू-टेम्प पथ) |
| .local रीडायरेक्ट | .local निर्देशिका पुनर्निर्देशन के माध्यम से हाईजैक | उच्च | लागू |
| ENV PATH | सिस्टम PATH में लिखने योग्य निर्देशिकाओं का हथियारीकरण | उच्च | लागू (क्यूरेटेड सेवा/DLL मानचित्र) |
| AppInit DLLs | AppInit_DLLs रजिस्ट्री दुरुपयोग | निम्न | लागू |
| AppCert DLLs | AppCertDLLs रजिस्ट्री दुरुपयोग (हर CreateProcess/WinExec कॉलर में लोड होता है) | निम्न | लागू |
| CWD | वर्तमान कार्यशील निर्देशिका हाईजैक | निम्न | योजनाबद्ध — वर्तमान में किसी भी खोज पथ द्वारा उत्पन्न नहीं |
IFEO डीबगर प्रविष्टियों की गणना की जाती है और संदर्भित बाइनरी का DLL इम्पोर्ट्स के लिए विश्लेषण किया जाता है, लेकिन कोई समर्पित IFEO/KnownDLL-बायपास हाईजैक प्रकार नहीं है — उन्हें स्टैंडअलोन पहचान के रूप में विज्ञापित नहीं किया जाता है।
UAC बायपास खोज
DLLHijackHunter में समर्पित UAC बायपास खोज शामिल है:
- मैनिफेस्ट AutoElevate — एम्बेडेड मैनिफेस्ट में
<autoElevate>true</autoElevate>वाले EXE के लिएSystem32औरSysWOW64स्कैन करता है - COM AutoElevation —
Elevation\Enabled=1वाले COM ऑब्जेक्ट्स के लिएHKLM\SOFTWARE\Classes\CLSIDस्कैन करता है - साइड-लोड सिमुलेशन — उन AutoElevate बाइनरी के लिए जो
SetDllDirectoryयाSetDefaultDllDirectoriesको कॉल नहीं करती हैं, "EXE को लिखने योग्य फ़ोल्डर में कॉपी करें + DLL ड्रॉप करें" हमले के पथ का अनुकरण करता है
लक्षित भेद्यता ज्ञान आधार
- लक्षित भेद्यता मैपिंग — खोजे गए इम्पोर्ट्स को HijackLibs डेटासेट के बंडल स्नैपशॉट (≈590 प्रलेखित DLL प्रविष्टियाँ ≈700 भेद्य निष्पादन योग्य फ़ाइलों में फैली हुई) के विरुद्ध क्रॉस-रेफरेंस करता है, जो
Resources/hijacklibs.jsonके रूप में एम्बेडेड है। एक मिलान विश्वास बढ़ाता है और निष्कर्ष को उसके HijackLibs संदर्भ पृष्ठ से जोड़ता है; मिलान की अनुपस्थिति का कोई मतलब नहीं है। डेटासेट डेटा-संचालित है — उस संसाधन परhttps://hijacklibs.net/api/hijacklibs.jsonको फिर से डाउनलोड करके इसे रीफ्रेश करें (कोई कोड परिवर्तन आवश्यक नहीं)। डेटासेट © HijackLibs परियोजना और योगदानकर्ता। - स्वचालित PATH शोषण — लिखने योग्य
PATHफ़ोल्डरों का मूल्यांकन करता है और मूल Windows सेवाओं के क्यूरेटेड मानचित्र के लिए हाईजैक उम्मीदवार उत्पन्न करता है जो लापता DLL के लिएPATHखोजने के लिए जानी जाती हैं - विस्तारित फैंटम DLL शिकार — कई श्रेणियों में उच्च-मूल्य वाले फैंटम DLL अवसरों की लाइब्रेरी खोजता है
फ़िल्टर पाइपलाइन
पाइपलाइन दो चरणों के माध्यम से गलत सकारात्मक परिणामों को कम करती है:
हार्ड गेट्स
- API सेट स्कीमा फ़िल्टरिंग (
api-ms-*,ext-ms-*) - KnownDLL फ़िल्टरिंग
- हमलावर-सापेक्ष ACL लिखने-योग्यता सत्यापन — एक पथ केवल तभी लिखने योग्य माना जाता है जब एक अविशेषाधिकार प्राप्त प्रिंसिपल (
Users/Authenticated Users/Everyone, साथ ही लीक-प्रूफ उप-प्रशासक सेवा खाते जैसेLOCAL SERVICE/NETWORK SERVICE) के पास प्रभावी लेखन अधिकार हों। महत्वपूर्ण रूप से, यह उस टोकन से स्वतंत्र रूप से गणना की जाती है जिसके तहत उपकरण चलता है, इसलिए उन्नत (elevated) चलाने सेSystem32/Program Filesलिखने योग्य नहीं दिखते। यही कारण है कि LPE ट्राइएज के लिए उन्नत रन सार्थक होते हैं।
सॉफ्ट गेट्स
- WinSxS मैनिफेस्ट पेनल्टी
- विशेषाधिकार डेल्टा विश्लेषण
LoadLibraryExशमन जाँच- हस्ताक्षर सत्यापन जाँच
- सुंदर त्रुटि-हैंडलिंग पेनल्टी
कैनरी पुष्टि
अनुमान लगाने के बजाय, DLLHijackHunter हाईजैक के काम करने को साबित करने का प्रयास करता है:
sequenceDiagram
participant H as DLLHijackHunter
participant B as कैनरी DLL बिल्डर
participant T as ट्रिगर निष्पादक
participant V as पीड़ित बाइनरी
H->>B: कैनरी DLL बनाएँ
B->>B: पूर्व-संकलित कैनरी निकालें<br/>(या MSVC के साथ प्रॉक्सी संकलित करें)
B-->>H: canary.dll + पुष्टि फ़ाइल पथ
H->>H: DLL को हाईजैक पथ पर रखें
H->>T: बाइनरी निष्पादन ट्रिगर करें
T->>V: सेवा शुरू करें / कार्य चलाएँ / COM सक्रिय करें
V->>V: कैनरी DLL लोड करता है
V-->>H: पुष्टि फ़ाइल लिखता है<br/>PID, विशेषाधिकार, अखंडता स्तर
H->>H: रिकॉर्ड: CONFIRMED
H->>H: कैनरी DLL साफ़ करें
कैनरी DLL:
- x64 और x86 दोनों के लिए पूर्व-संकलित भेजा जाता है, स्कैनर में एम्बेडेड, इसलिए स्कैन समय पर किसी कंपाइलर की आवश्यकता नहीं होती। पीड़ित की बिटनेस से मेल खाने के लिए सही आर्किटेक्चर चुना जाता है और मांग पर निकाला जाता है।
- स्व-स्थानीकरण है: यह अपने पुष्टि-फ़ाइल पथ को रनटाइम पर अपने स्वयं के लोड किए गए मॉड्यूल पथ से प्राप्त करता है (
%ProgramData%\DLLHijackHunter\canary_<hash>.confirm), इसलिए एक बाइनरी हर उम्मीदवार की सेवा करता है। स्कैनर तैनाती पथ से समान हैश की गणना करता है और उस फ़ाइल के लिए पोल करता है। - फ़ाइल-आधारित पुष्टि तंत्र का उपयोग करता है
- उपयोगकर्ता, अखंडता स्तर और विशेषाधिकार संकेतक जैसे निष्पादन मेटाडेटा कैप्चर करता है
- इसमें कोई दुर्भावनापूर्ण पेलोड नहीं होता; यह सख्ती से एक पहचान और सत्यापन तंत्र है
- CRT को स्थिर रूप से लिंक करता है, इसलिए पीड़ित होस्ट पर इसकी कोई रनटाइम निर्भरता (ucrtbase/vcruntime) नहीं होती।
बंडल किए गए बाइनरी src/DLLHijackHunter/Resources/canary_src.c पर ऑडिट करने योग्य स्रोत से बनाए गए हैं और Resources/build_canary.bat के साथ पुनः उत्पन्न किए जा सकते हैं (MSVC C++ टूलचेन की आवश्यकता है; स्कैनर को नहीं)।
कार्यात्मक-प्रॉक्सी अपवाद: जब एक खोज-क्रम हाईजैक एक ऐसी DLL को लक्षित करता है जो मौजूद है और एक्सपोर्ट्स उजागर करती है, तो पुष्टि के बाद होस्ट को जीवित रखने के लिए एक एक्सपोर्ट-फ़ॉरवर्डिंग प्रॉक्सी की आवश्यकता होती है, जिसे प्रति-DLL MSVC (
cl.exe,vswhere/vcvarsallके माध्यम से स्थित) के साथ संकलित किया जाता है। यदि कोई टूलचेन मौजूद नहीं है, तो पूर्व-संकलित कैनरी का उपयोग किया जाता है — यह अभी भी लोड की पुष्टि करता है (DllMain फायर होता है) लेकिन एक्सपोर्ट्स को फ़ॉरवर्ड नहीं करता, इसलिए पुष्टि दर्ज होने के बाद होस्ट प्रक्रिया क्रैश हो सकती है। फैंटम-DLL और अन्य नो-एक्सपोर्ट उम्मीदवारों को किसी कंपाइलर की बिल्कुल आवश्यकता नहीं होती।
हस्ताक्षर: एम्बेडेड कैनरी अहस्ताक्षरित हैं। उन्हें कोड-साइन करना (ताकि वे सख्त नीतियों के तहत लोड हों और जिम्मेदार ठहराए जा सकें) के लिए एक हस्ताक्षर प्रमाणपत्र की आवश्यकता होती है और इसे अनुरक्षक के लिए रिलीज़-समय चरण के रूप में छोड़ दिया जाता है।
प्रॉक्सी/एक्सपोर्ट-फ़ॉरवर्डिंग मोड पर महत्वपूर्ण नोट
प्रॉक्सी/एक्सपोर्ट-फ़ॉरवर्डिंग कैनरी प्रयोगात्मक और सर्वोत्तम-प्रयास हैं। कुछ लक्ष्य सही ढंग से लोड नहीं हो सकते हैं या अप्रत्याशित व्यवहार कर सकते हैं, जो इस पर निर्भर करता है:
- केवल-ऑर्डिनल एक्सपोर्ट्स
- सजाए गए एक्सपोर्ट नाम
- कॉलिंग कन्वेंशन बेमेल
- लक्ष्य प्रक्रिया में लोडर/रनटाइम धारणाएँ
इसका मतलब है कि एक असफल प्रॉक्सी कैनरी हमेशा यह नहीं दर्शाता कि अंतर्निहित हाईजैक पथ असंभव है।
लोड-ऑर्डर सत्यापन (--verify-load)
एक ऑप्ट-इन, मानक-उपयोगकर्ता सत्यापन जो फ़िल्टर पाइपलाइन और कैनरी चरण के बीच स्थित है। प्रत्येक लागू उम्मीदवार के लिए यह संक्षेप में एक हानिरहित प्रोब DLL को लिखने योग्य हाईजैक स्थिति में लिखता है, फिर वास्तविक Windows लोडर से — एक अल्पकालिक चाइल्ड प्रक्रिया में — नाम से DLL को हल करने के लिए कहता है। लोडर जहाँ हल करता है वह फैसला निर्धारित करता है:
- सत्यापित जीत — लोडर लिखने योग्य स्थिति चुनता है। खोज-क्रम का दावा सिद्ध है (यह पुष्टि निष्कर्ष को उच्च स्तर तक पहुँचने देती है; कैनरी निष्पादन Confirmed तक पहुँचने का एकमात्र मार्ग बना रहता है)।
- संरक्षित से हार — लोडर इसके बजाय KnownDLL, System32 कॉपी, या SxS-रीडायरेक्टेड कॉपी चुनता है। स्थिति लगभग निश्चित रूप से हाईजैक करने योग्य नहीं है, इसलिए उम्मीदवार को भारी रूप से पदावनत किया जाता है। यह उन क्लासिक गलत सकारात्मक परिणामों को पकड़ता है जिन्हें एक स्थैतिक खोज-क्रम कैलकुलेटर चूक जाता है (जैसे
ntdll.dllके लिए एक.local/खोज-क्रम "निष्कर्ष" जिसे KnownDLLs अशोषणीय बनाता है)।
डिज़ाइन और सुरक्षा नोट:
- चाइल्ड प्रक्रिया में चलता है ताकि स्कैनर में पहले से लोड किया गया नाम परिणाम को शॉर्ट-सर्किट न कर सके, और ताकि कोई भी लोड साइड इफेक्ट या क्रैश अलग हो। किसी उन्नयन की आवश्यकता नहीं।
- प्रत्येक प्रोब को रखा जाता है, हल किया जाता है, और फिर हटाया जाता है; किसी भी पहले से मौजूद फ़ाइल का बैकअप लिया जाता है और पुनर्स्थापित किया जाता है।
- यह आधुनिक
LOAD_LIBRARY_SEARCHक्रम का मॉडल करता है, इसलिए इसे केवल फैंटम / खोज-क्रम / साइड-लोड उम्मीदवारों पर लागू किया जाता है।.local, PATH, और AppInit/AppCert उम्मीदवार विभिन्न तंत्रों का उपयोग करते हैं और उन्हें Skipped के रूप में रिपोर्ट किया जाता है। - यह उम्मीदवार स्थितियों में क्षणिक रूप से फ़ाइलें लिखता है (मध्यम प्रभाव); पूरी तरह से निष्क्रिय, केवल-पढ़ने योग्य ट्राइएज के लिए इसे बंद रखें।
# लोडर-सत्यापित खोज क्रम के साथ मानक-उपयोगकर्ता ट्राइएज (कोई कैनरी नहीं, कोई ETW नहीं)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load
तुलना
| विशेषता | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|---|---|---|---|---|
| स्वचालित खोज | ✅ | ✅ | ✅ | ✅ | ❌ |
| फैंटम DLL पहचान | ✅ | ❌ | ✅ | ❌ | ✅ |
| खोज क्रम विश्लेषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| ACL-आधारित लिखने-योग्यता जाँच | ✅ | आंशिक | ❌ | बुनियादी | ❌ |
| ETW रीयल-टाइम निगरानी | ✅ | ❌ | ❌ | ❌ | ✅ |
| कैनरी पुष्टि | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| विशेषाधिकार वृद्धि जाँच | ✅ | ❌ | ❌ | ❌ | ❌ |
| UAC बायपास खोज | ✅ | ❌ | ❌ | ❌ | ❌ |
| गलत सकारात्मक कमी | ✅² | कोई नहीं | बुनियादी | कोई नहीं | कोई नहीं |
| रीबूट स्थिरता जाँच | ✅³ | ❌ | ❌ | ❌ | ❌ |
| प्रॉक्सी DLL निर्माण | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| विश्वास स्कोरिंग | ✅ | ❌ | ❌ | ❌ | ❌ |
| स्वचालित ट्रिगर (svc/task/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| HTML/JSON रिपोर्टिंग | ✅ | ❌ | ❌ | TXT | ❌ |
| खतरा खुफिया सहसंबंध | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| स्वचालित PATH शोषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| लक्ष्य-विशिष्ट स्कैनिंग | ✅ | ❌ | ❌ | ❌ | ✅ |
| स्व-निहित बाइनरी | ✅ | ❌ | ❌ | ✅ | ❌ |
² हमलावर-सापेक्ष ACL लिखने-योग्यता के माध्यम से (फ़िल्टर पाइपलाइन देखें)। यह गलत सकारात्मक परिणामों को कम करता है — समाप्त नहीं करता; सॉफ्ट-गेट अनुमान (मैनिफेस्ट/SxS/LoadLibraryEx) अभी भी अनिश्चितता रखते हैं। असत्यापित स्थैतिक निष्कर्ष अब **उच्च** स्तर से नीचे सीमित हैं।
³ ऑटो-स्टार्ट स्थिति से व्युत्पन्न, सत्यापित रीबूट परीक्षण नहीं।
⁴ एक्सपोर्ट-फ़ॉरवर्डिंग प्रॉक्सी प्रयोगात्मक/सर्वोत्तम-प्रयास है (ऊपर नोट देखें)।
⁵ केवल सेवा/कार्य/COM ट्रिगर; UAC-बायपास निष्कर्ष कैनरी-ट्रिगर नहीं हैं।
⁶ HijackLibs डेटासेट के बंडल स्नैपशॉट (~590 प्रविष्टियाँ) द्वारा समर्थित; hijacklibs.net से रीफ्रेश करने योग्य।
उपयोग
पूर्वापेक्षाएँ
- Windows 10/11 या Windows Server 2016+
- .NET 8.0 या 10.0 रनटाइम (या स्व-निहित बिल्ड का उपयोग करें)
- प्रशासक विशेषाधिकार अनुशंसित (ETW, कैनरी तैनाती और कुछ सेवा ट्रिगर के लिए आवश्यक)
बिल्ड
git clone https://github.com/ghostvectoracademy/DLLHijackHunter.git
cd DLLHijackHunter
# बिल्ड (स्व-निहित एकल फ़ाइल)
dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj `
-c Release -r win-x64 --self-contained `
-p:PublishSingleFile=true -o ./publish
# या बिल्ड स्क्रिप्ट का उपयोग करें
.\build.ps1
त्वरित प्रारंभ
# पूर्ण आक्रामक स्कैन (अनुशंसित, व्यवस्थापक की आवश्यकता है)
.\DLLHijackHunter.exe --profile aggressive
# सुरक्षित स्कैन (कोई फ़ाइल ड्रॉप नहीं, कोई ट्रिगर नहीं)
.\DLLHijackHunter.exe --profile safe
# UAC बायपास केंद्रित स्कैन
.\DLLHijackHunter.exe --profile uac-bypass
# किसी विशिष्ट बाइनरी को लक्षित करें
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe"
# फ़ाइलनाम द्वारा लक्षित करें (आंशिक मिलान)
.\DLLHijackHunter.exe --target notepad.exe
# केवल पुष्टि किए गए निष्कर्ष
.\DLLHijackHunter.exe --profile redteam --format json -o report.json
CLI विकल्प
DLLHijackHunter — स्वचालित DLL हाईजैकिंग पहचान
विकल्प:
-p, --profile <profile> स्कैन प्रोफ़ाइल [डिफ़ॉल्ट: aggressive]
aggressive | strict | safe | redteam | uac-bypass
-o, --output <path> आउटपुट फ़ाइल पथ (प्रारूप स्वतः पहचाना जाता है)
-f, --format <format> आउटपुट प्रारूप [डिफ़ॉल्ट: console]
console | json | html
-t, --target <target> विशिष्ट बाइनरी, निर्देशिका, या फ़ाइलनाम लक्षित करें
--min-confidence <value> न्यूनतम विश्वास सीमा 0-100। जब छोड़ा जाता है, प्रत्येक
प्रोफ़ाइल की अपनी सीमा लागू होती है; इसे पास करना उसे ओवरराइड करता है।
--no-canary कैनरी पुष्टि अक्षम करें
--no-etw ETW रनटाइम खोज अक्षम करें
--verify-load वास्तविक लोडर के साथ खोज क्रम सत्यापित करें (नीचे देखें)।
मानक-उपयोगकर्ता; क्षणिक रूप से एक हान