
Automated DLL हाइजैकिंग खोज, सत्यापन और पुष्टि। स्थानीय गलत कॉन्फ़िगरेशन को हथियारबद्ध, पुष्ट हमले के पथों में बदलना।
स्वचालित DLL हाईजैकिंग खोज, सत्यापन और पुष्टि
स्थानीय गलत कॉन्फ़िगरेशन को हथियारबंद, पुष्टि किए गए हमले के रास्तों में बदलना।
DLLHijackHunter एक स्वचालित Windows DLL हाईजैकिंग पहचान उपकरण है जो स्थैतिक विश्लेषण से आगे जाता है। यह बहु-चरणीय पाइपलाइन का उपयोग करके 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 --> Phase5IFEO डीबगर प्रविष्टियों की गणना की जाती है और संदर्भित बाइनरी का DLL इम्पोर्ट्स के लिए विश्लेषण किया जाता है, लेकिन कोई समर्पित IFEO/KnownDLL-बायपास हाईजैक प्रकार नहीं है — उन्हें स्टैंडअलोन पहचान के रूप में विज्ञापित नहीं किया जाता है।
DLLHijackHunter में समर्पित UAC बायपास खोज शामिल है:
<autoElevate>true</autoElevate> वाले EXE के लिए System32 और SysWOW64 स्कैन करता हैElevation\Enabled=1 वाले COM ऑब्जेक्ट्स के लिए HKLM\SOFTWARE\Classes\CLSID स्कैन करता हैSetDllDirectory या SetDefaultDllDirectories को कॉल नहीं करती हैं, "EXE को लिखने योग्य फ़ोल्डर में कॉपी करें + DLL ड्रॉप करें" हमले के पथ का अनुकरण करता हैResources/hijacklibs.json के रूप में एम्बेडेड है। एक मिलान विश्वास बढ़ाता है और निष्कर्ष को उसके HijackLibs संदर्भ पृष्ठ से जोड़ता है; मिलान की अनुपस्थिति का कोई मतलब नहीं है। डेटासेट डेटा-संचालित है — उस संसाधन पर https://hijacklibs.net/api/hijacklibs.json को फिर से डाउनलोड करके इसे रीफ्रेश करें (कोई कोड परिवर्तन आवश्यक नहीं)। डेटासेट © HijackLibs परियोजना और योगदानकर्ता।PATH फ़ोल्डरों का मूल्यांकन करता है और मूल Windows सेवाओं के क्यूरेटेड मानचित्र के लिए हाईजैक उम्मीदवार उत्पन्न करता है जो लापता DLL के लिए PATH खोजने के लिए जानी जाती हैंपाइपलाइन दो चरणों के माध्यम से गलत सकारात्मक परिणामों को कम करती है:
हार्ड गेट्स
api-ms-*, ext-ms-*)Users / Authenticated Users / Everyone, साथ ही लीक-प्रूफ उप-प्रशासक सेवा खाते जैसे LOCAL SERVICE/NETWORK SERVICE) के पास प्रभावी लेखन अधिकार हों। महत्वपूर्ण रूप से, यह उस टोकन से स्वतंत्र रूप से गणना की जाती है जिसके तहत उपकरण चलता है, इसलिए उन्नत (elevated) चलाने से System32/Program Files लिखने योग्य नहीं दिखते। यही कारण है कि LPE ट्राइएज के लिए उन्नत रन सार्थक होते हैं।सॉफ्ट गेट्स
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:
%ProgramData%\DLLHijackHunter\canary_<hash>.confirm), इसलिए एक बाइनरी हर उम्मीदवार की सेवा करता है। स्कैनर तैनाती पथ से समान हैश की गणना करता है और उस फ़ाइल के लिए पोल करता है।बंडल किए गए बाइनरी 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 को हल करने के लिए कहता है। लोडर जहाँ हल करता है वह फैसला निर्धारित करता है:
ntdll.dll के लिए एक .local/खोज-क्रम "निष्कर्ष" जिसे KnownDLLs अशोषणीय बनाता है)।डिज़ाइन और सुरक्षा नोट:
LOAD_LIBRARY_SEARCH क्रम का मॉडल करता है, इसलिए इसे केवल फैंटम / खोज-क्रम / साइड-लोड उम्मीदवारों पर लागू किया जाता है। .local, PATH, और AppInit/AppCert उम्मीदवार विभिन्न तंत्रों का उपयोग करते हैं और उन्हें Skipped के रूप में रिपोर्ट किया जाता है।# लोडर-सत्यापित खोज क्रम के साथ मानक-उपयोगकर्ता ट्राइएज (कोई कैनरी नहीं, कोई ETW नहीं)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load
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
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 वास्तविक लोडर के साथ खोज क्रम सत्यापित करें (नीचे देखें)।
मानक-उपयोगकर्ता; क्षणिक रूप से एक हान
| प्रकार | विवरण | गोपनीयता | स्थिति |
|---|
| फैंटम | DLL डिस्क पर कहीं भी मौजूद नहीं है | उच्च | लागू |
| खोज क्रम | DLL को Windows खोज क्रम में पहले रखें | उच्च | लागू |
| साइड-लोडिंग | वैध ऐप द्वारा अपनी निर्देशिका से DLL लोड करने का दुरुपयोग | उच्च | लागू (AutoElevate कॉपी-टू-टेम्प पथ) |
| .local रीडायरेक्ट | .local निर्देशिका पुनर्निर्देशन के माध्यम से हाईजैक | उच्च | लागू |
| ENV PATH | सिस्टम PATH में लिखने योग्य निर्देशिकाओं का हथियारीकरण | उच्च | लागू (क्यूरेटेड सेवा/DLL मानचित्र) |
| AppInit DLLs | AppInit_DLLs रजिस्ट्री दुरुपयोग | निम्न | लागू |
| AppCert DLLs | AppCertDLLs रजिस्ट्री दुरुपयोग (हर CreateProcess/WinExec कॉलर में लोड होता है) | निम्न | लागू |
| CWD | वर्तमान कार्यशील निर्देशिका हाईजैक | निम्न | योजनाबद्ध — वर्तमान में किसी भी खोज पथ द्वारा उत्पन्न नहीं |
| विशेषता | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|
| स्वचालित खोज | ✅ | ✅ | ✅ | ✅ | ❌ |
| फैंटम DLL पहचान | ✅ | ❌ | ✅ | ❌ | ✅ |
| खोज क्रम विश्लेषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| ACL-आधारित लिखने-योग्यता जाँच | ✅ | आंशिक | ❌ | बुनियादी | ❌ |
| ETW रीयल-टाइम निगरानी | ✅ | ❌ | ❌ | ❌ | ✅ |
| कैनरी पुष्टि | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| विशेषाधिकार वृद्धि जाँच | ✅ | ❌ | ❌ | ❌ | ❌ |
| UAC बायपास खोज | ✅ | ❌ | ❌ | ❌ | ❌ |
| गलत सकारात्मक कमी | ✅² | कोई नहीं | बुनियादी | कोई नहीं | कोई नहीं |
| रीबूट स्थिरता जाँच | ✅³ | ❌ | ❌ | ❌ | ❌ |
| प्रॉक्सी DLL निर्माण | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| विश्वास स्कोरिंग | ✅ | ❌ | ❌ | ❌ | ❌ |
| स्वचालित ट्रिगर (svc/task/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| HTML/JSON रिपोर्टिंग | ✅ | ❌ | ❌ | TXT | ❌ |
| खतरा खुफिया सहसंबंध | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| स्वचालित PATH शोषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| लक्ष्य-विशिष्ट स्कैनिंग | ✅ | ❌ | ❌ | ❌ | ✅ |
| स्व-निहित बाइनरी | ✅ | ❌ | ❌ | ✅ | ❌ |