
Automated DLL हाइजैकिंग खोज, सत्यापन और पुष्टि। स्थानीय गलत कॉन्फ़िगरेशन को हथियारबद्ध, पुष्ट हमले के पथों में बदलना।
स्वचालित DLL हाइजैकिंग खोज, सत्यापन और पुष्टि
स्थानीय गलत कॉन्फ़िगरेशन को हथियारबंद, पुष्ट हमले के रास्तों में बदलना।
DLLHijackHunter एक स्वचालित विंडोज DLL हाइजैकिंग डिटेक्शन टूल है जो स्थैतिक विश्लेषण से आगे जाता है। यह एक बहु-चरण पाइपलाइन का उपयोग करके DLL हाइजैकिंग अवसरों की खोज, सत्यापन और पुष्टि करता है:
अधिकांश DLL हाइजैकिंग टूल "यह DLL हाइजैकेबल हो सकता है" पर रुक जाते हैं। DLLHijackHunter इसे मान्य करने, ज्ञात शोषण खुफिया के विरुद्ध क्रॉस-रेफरेंस करने और जहाँ संभव हो वास्तविक निष्पादन पथों की पुष्टि करने का प्रयास करता है।
flowchart TB
subgraph Phase1["Phase 1: Discovery"]
SE["Static Engine<br/>Services, Tasks, Startup,<br/>COM, Run Keys"]
AE["AutoElevate Engine<br/>Manifest + COM UAC Bypass"]
PE["PE Analyzer<br/>Import Tables, Delay Loads,<br/>Manifests, Exports"]
ETW["ETW Engine<br/>Real-time DLL Load<br/>Monitoring"]
SO["Search Order<br/>Calculator"]
end
subgraph Phase2["Phase 2: Filter Pipeline"]
direction LR
HG["Hard Gates<br/>(Binary Kill)"]
SG["Soft Gates<br/>(Confidence Adj.)"]
end
subgraph Phase3["Phase 3: Canary"]
CB["Canary DLL Builder"]
TE["Trigger Executor"]
VF["Verification"]
end
subgraph Phase4["Phase 4: Output"]
SC["Tiered Scorer"]
RC["Console Report"]
RJ["JSON Report"]
RH["HTML Report"]
end
SE --> PE --> SO
AE --> PE
ETW --> SO
SO --> Phase2
HG --> SG
Phase2 --> Phase3
CB --> TE --> VF
Phase3 --> Phase4
| प्रकार | विवरण | गुप्तता | स्थिति |
|---|---|---|---|
| Phantom | DLL डिस्क पर कहीं मौजूद नहीं है | उच्च | कार्यान्वित |
| Search Order | DLL को विंडोज खोज क्रम में पहले रखें | उच्च | कार्यान्वित |
| Side-Loading | वैध ऐप का अपने निर्देशिका से DLL लोड करने का दुरुपयोग | उच्च | कार्यान्वित (AutoElevate copy-to-temp path) |
| .local Redirect | .local निर्देशिका पुनर्निर्देशन के माध्यम से हाइजैक | उच्च | कार्यान्वित |
| ENV PATH | सिस्टम PATH में लिखने योग्य निर्देशिकाओं का हथियारीकरण | उच्च | कार्यान्वित (क्यूरेटेड सेवा/DLL मैप) |
| AppInit DLLs | AppInit_DLLs रजिस्ट्री का दुरुपयोग | निम्न | कार्यान्वित |
| AppCert DLLs | AppCertDLLs रजिस्ट्री का दुरुपयोग (हर CreateProcess/WinExec कॉलर में लोड होता है) | निम्न | कार्यान्वित |
| CWD | वर्तमान कार्यशील निर्देशिका हाइजैक | निम्न | योजनाबद्ध — वर्तमान में किसी भी खोज पथ द्वारा उत्पन्न नहीं |
IFEO डिबगर प्रविष्टियाँ गणना की जाती हैं और संदर्भित बाइनरी का DLL आयात के लिए विश्लेषण किया जाता है, लेकिन कोई समर्पित IFEO/KnownDLL-बायपास हाइजैक प्रकार नहीं है — उन्हें स्टैंडअलोन डिटेक्शन के रूप में विज्ञापित नहीं किया जाता है।
DLLHijackHunter में समर्पित UAC बायपास खोज शामिल है:
<autoElevate>true</autoElevate> वाले EXEs के लिए System32 और SysWOW64 स्कैन करता हैHKLM\SOFTWARE\Classes\CLSID में Elevation\Enabled=1 वाले COM ऑब्जेक्ट्स को स्कैन करता हैSetDllDirectory या SetDefaultDllDirectories को कॉल नहीं करतीं, "EXE को लिखने योग्य फ़ोल्डर में कॉपी करें + DLL ड्रॉप करें" हमले के पथ का अनुकरण करता हैResources/hijacklibs.json के रूप में एम्बेडेड है। एक मिलान आत्मविश्वास बढ़ाता है और निष्कर्ष को इसके HijackLibs संदर्भ पृष्ठ से जोड़ता है; मिलान की अनुपस्थिति का कोई मतलब नहीं है। डेटासेट डेटा-संचालित है — उस संसाधन पर https://hijacklibs.net/api/hijacklibs.json को पुनः डाउनलोड करके इसे ताज़ा करें (कोई कोड परिवर्तन आवश्यक नहीं)। डेटासेट © HijackLibs प्रोजेक्ट और योगदानकर्ता।PATH फ़ोल्डरों का मूल्यांकन करता है और मूल विंडोज सेवाओं के एक क्यूरेटेड मैप के लिए हाइजैक उम्मीदवार उत्पन्न करता है जो लापता DLLs के लिए PATH खोजने के लिए जानी जाती हैंपाइपलाइन दो चरणों के माध्यम से झूठी सकारात्मकताओं को कम करती है:
हार्ड गेट्स
api-ms-*, ext-ms-*)Users / Authenticated Users / Everyone, साथ ही लीक-प्रूफ उप-एडमिन सेवा खाते जैसे LOCAL SERVICE/NETWORK SERVICE) के पास प्रभावी लेखन अधिकार हों। महत्वपूर्ण रूप से, यह टूल के चलने वाले टोकन से स्वतंत्र रूप से गणना किया जाता है, इसलिए एलिवेटेड चलाने पर System32/Program Files लिखने योग्य नहीं दिखते। यही बात LPE ट्राइएज के लिए एलिवेटेड रन को सार्थक बनाती है।सॉफ्ट गेट्स
LoadLibraryEx शमन जाँचअनुमान लगाने के बजाय, DLLHijackHunter साबित करने का प्रयास करता है कि हाइजैक काम करते हैं:
sequenceDiagram
participant H as DLLHijackHunter
participant B as Canary DLL Builder
participant T as Trigger Executor
participant V as Victim Binary
H->>B: Build canary DLL
B->>B: Extract precompiled canary<br/>(or compile a proxy with MSVC)
B-->>H: canary.dll + confirmation file path
H->>H: Place DLL at hijack path
H->>T: Trigger binary execution
T->>V: Start service / run task / COM activate
V->>V: Loads canary DLL
V-->>H: Writes confirmation file<br/>PID, privilege, integrity level
H->>H: Record: CONFIRMED
H->>H: Cleanup canary 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 को लिखने योग्य हाइजैक स्थिति में लिखता है, फिर एक अल्पकालिक चाइल्ड प्रक्रिया में वास्तविक विंडोज लोडर से DLL को नाम से हल करने के लिए कहता है। लोडर जहाँ हल करता है वह फैसला निर्धारित करता है:
ntdll.dll के लिए एक .local/सर्च-ऑर्डर "खोज" जिसे KnownDLLs अशोषणीय बना देता है)।डिज़ाइन और सुरक्षा नोट:
LOAD_LIBRARY_SEARCH ऑर्डरिंग का मॉडल करता है, इसलिए इसे केवल Phantom / Search-Order / Side-Load उम्मीदवारों पर लागू किया जाता है। .local, PATH, और AppInit/AppCert उम्मीदवार विभिन्न तंत्रों का उपयोग करते हैं और छोड़े गए के रूप में रिपोर्ट किए जाते हैं।# लोडर-सत्यापित सर्च ऑर्डर के साथ मानक-उपयोगकर्ता ट्राइएज (कोई कैनरी नहीं, कोई ETW नहीं)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load
| फीचर | DLLHijackHunter | Robber | DLLSpy | WinPEAS | Procmon |
|---|---|---|---|---|---|
| स्वचालित खोज | ✅ | ✅ | ✅ | ✅ | ❌ |
| फैंटम DLL डिटेक्शन | ✅ | ❌ | ✅ | ❌ | ✅ |
| सर्च ऑर्डर विश्लेषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| ACL-आधारित लेखनीयता जाँच | ✅ | आंशिक | ❌ | बुनियादी | ❌ |
| ETW रीयल-टाइम मॉनिटरिंग | ✅ | ❌ | ❌ | ❌ | ✅ |
| कैनरी पुष्टि | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| विशेषाधिकार वृद्धि जाँच | ✅ | ❌ | ❌ | ❌ | ❌ |
| UAC बायपास खोज | ✅ | ❌ | ❌ | ❌ | ❌ |
| झूठी सकारात्मकता में कमी | ✅² | कोई नहीं | बुनियादी | कोई नहीं | कोई नहीं |
| रिबूट स्थिरता जाँच | ✅³ | ❌ | ❌ | ❌ | ❌ |
| प्रॉक्सी DLL निर्माण | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| आत्मविश्वास स्कोरिंग | ✅ | ❌ | ❌ | ❌ | ❌ |
| ऑटो ट्रिगर (svc/task/COM) |
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 वास्तविक लोडर के साथ सर्च ऑर्डर सत्यापित करें (नीचे देखें)।
मानक-उपयोगकर्ता; क्षणिक रूप से एक सौम्य प्रोब लिखता है।
--confirmed-only केवल कैनरी-पुष्ट निष्कर्ष दिखाएं
--lpe-only सख्त LPE शिकार: System32/Program Files को अनदेखा करें, केवल
मानक-उपयोगकर्ता-लेखनीय कमजोरियाँ दिखाएं
--log-file <path> फ़ाइल में एक डायग्नोस्टिक स्कैन लॉग लिखें
-v, --verbose विस्तृत आउटपुट
नोट:
--min-confidenceको केवल तभी ओवरराइड माना जाता है जब आप इसे स्पष्ट रूप से पास करते हैं। अन्यथा चयनित प्रोफ़ाइल की सीमा का उपयोग किया जाता है (जैसेsafe= 50%,strict= 80%)।
| प्रोफ़ाइल | उपयोग मामला | कैनरी | ETW | UAC बायपास | न्यूनतम आत्मविश्वास | ट्रिगर |
|---|---|---|---|---|---|---|
| aggressive | पूर्ण ऑडिट, लैब वातावरण | ✅ | ✅ | ✅ | 15% | सेवाएँ, कार्य, COM |
| strict | केवल उच्च-आत्मविश्वास निष्कर्ष | ✅ | ✅ | ❌ | 80% | सेवाएँ, कार्य |
| safe | उत्पादन प्रणाली, केवल-पढ़ने | ❌ | ❌ | ❌ | 50% | कोई नहीं |
| redteam | केवल पुष्ट शोषण योग्य | ✅ | ✅ | ❌ | 50% | सेवाएँ, कार्य, COM |
| uac-bypass | केवल UAC बायपास वैक्टर | ❌ | ❌ | ✅ | 20% | केवल AutoElevate |
प्रत्येक निष्कर्ष आत्मविश्वास और प्रभाव संकेत प्राप्त करता है जो एक अंतिम प्राथमिकता स्तर में संयुक्त होते हैं।
विशिष्ट प्रभाव विचारों में शामिल हैं:
पुष्ट कैनरी निष्पादन को सबसे मजबूत सत्यापन संकेत माना जाना चाहिए।
स्तर गेटिंग: उच्च और पुष्ट स्तर एक प्रमाण संकेत द्वारा समर्थित निष्कर्षों के लिए आरक्षित हैं — एक फायर्ड कैनरी, एक ETW रनटाइम लोड अवलोकन, या एक प्रलेखित ज्ञान-आधार मिलान। एक विशुद्ध स्थैतिक सर्च-ऑर्डर मिलान, चाहे कितना भी साफ हो, मध्यम स्तर के शीर्ष पर सीमित है और इसे Static-only के रूप में एनोटेट किया जाता है ताकि असत्यापित ह्युरिस्टिक्स कभी उच्च-आत्मविश्वास के रूप में प्रस्तुत न हों।
चूँकि लेखनीयता का मूल्यांकन हमलावर-सापेक्ष किया जाता है, एलिवेटेड और मानक-उपयोगकर्ता दोनों रन सार्थक हैं:
--lpe-only (और --no-canary यदि कंपाइलर उपलब्ध नहीं है) — प्रत्येक जीवित निष्कर्ष वास्तव में एक अनप्रिविलेज्ड प्रिंसिपल द्वारा लिखने योग्य है।DLLHijackHunter को रक्षात्मक सुरक्षा अनुसंधान, लैब सत्यापन, ऑडिटिंग और अधिकृत वातावरणों में रेड-टीम सिमुलेशन के लिए डिज़ाइन किया गया है।
इसे केवल उन प्रणालियों और नेटवर्कों पर उपयोग करें जिनके आप मालिक हैं या जिनका मूल्यांकन करने के लिए आप स्पष्ट रूप से अधिकृत हैं।
DLLHijackHunter समर्थन करता है:
अनुशंसित कार्यप्रवाह:
MIT
GhostVector Academy द्वारा निर्मित।
| ✅⁵ |
| ❌ |
| ❌ |
| ❌ |
| ❌ |
| HTML/JSON रिपोर्टिंग | ✅ | ❌ | ❌ | ❌ | ❌ |
| थ्रेट इंटेल सहसंबंध | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| स्वचालित PATH शोषण | ✅ | ❌ | ❌ | ❌ | ❌ |
| लक्ष्य-विशिष्ट स्कैनिंग | ✅ | ❌ | ❌ | ❌ | ✅ |
| स्व-निहित बाइनरी | ✅ | ❌ | ❌ | ✅ | ❌ |