
اكتشاف اختطاف DLL الآلي، والتحقق منه، والتأكيد عليه. تحويل الأخطاء المحلية في التهيئة إلى مسارات هجوم مؤكدة ومسلحة.
اكتشاف، تحقق، وتأكيد آلي لاختطاف DLL
تحويل الأخطاء المحلية في الإعدادات إلى مسارات هجوم مؤكدة وجاهزة للاستغلال.
DLLHijackHunter هي أداة آلية لاكتشاف اختطاف DLL على نظام Windows تتجاوز التحليل الثابت. تكتشف، وتتحقق، وتؤكد فرص اختطاف DLL باستخدام خط أنابيب متعدد المراحل:
معظم أدوات اختطاف DLL تتوقف عند "قد يكون هذا DLL قابلاً للاختطاف." DLLHijackHunter تحاول التحقق من ذلك، ومطابقته مع معلومات استغلال معروفة، وتأكيد مسارات التنفيذ الفعلية حيثما أمكن.
flowchart TB
subgraph Phase1["المرحلة 1: الاكتشاف"]
SE["المحرك الثابت<br/>الخدمات، المهام، بدء التشغيل،<br/>COM، مفاتيح التشغيل"]
AE["محرك AutoElevate<br/>Manifest + تجاوز UAC عبر COM"]
PE["محلل PE<br/>جداول الاستيراد، التحميل المؤجل،<br/>Manifests، الصادرات"]
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: Canary"]
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يتم تعداد إدخالات IFEO Debugger وتحليل الملف التنفيذي المرجعي لاستيرادات DLL، ولكن لا يوجد نوع اختطاف مخصص لـ IFEO/تجاوز KnownDLL — لا يتم الإعلان عنها كاكتشافات مستقلة.
يتضمن DLLHijackHunter اكتشافاً مخصصاً لتجاوز UAC:
System32 وSysWOW64 بحثاً عن ملفات EXE تحتوي على <autoElevate>true</autoElevate> في الـ manifests المدمجةHKLM\SOFTWARE\Classes\CLSID بحثاً عن كائنات COM مع Elevation\Enabled=1SetDllDirectory أو SetDefaultDllDirectories، محاكاة مسار الهجوم "نسخ EXE إلى مجلد قابل للكتابة + إسقاط DLL"Resources/hijacklibs.json. التطابق يعزز الثقة ويربط النتيجة بصفحة مرجع HijackLibs الخاصة بها؛ غياب التطابق لا يعني شيئاً. مجموعة البيانات مدفوعة بالبيانات — قم بتحديثها بإعادة تنزيل https://hijacklibs.net/api/hijacklibs.json فوق هذا المورد (بدون تغييرات في الكود). مجموعة البيانات © مشروع HijackLibs والمساهمين.PATH القابلة للكتابة وتوليد مرشحين للاختطاف لخريطة منسقة من خدمات Windows الأصلية المعروفة بالبحث في PATH عن ملفات DLL مفقودةيقلل خط الأنابيب النتائج الإيجابية الكاذبة عبر مرحلتين:
البوابات الصارمة
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 باني 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) لكنه لا يعيد توجيه الصادرات، لذا قد تتعطل عملية المضيف بعد تسجيل التأكيد. مرشحو Phantom-DLL وغيرهم من المرشحين بدون صادرات لا يحتاجون مترجماً على الإطلاق.
التوقيع: الكناري المدمجة غير موقعة. توقيعها بالكود (بحيث تُحمّل تحت سياسات أكثر صرامة وتكون قابلة للنسب) يتطلب شهادة توقيع ويُترك كخطوة وقت الإصدار للمشرف.
كناري الوكيل/إعادة توجيه الصادرات تجريبية وبأفضل جهد. قد تفشل بعض الأهداف في التحميل بشكل صحيح أو تتصرف بشكل غير متوقع اعتماداً على:
هذا يعني أن فشل كناري الوكيل لا يعني دائماً أن مسار الاختطاف الأساسي مستحيل.
--verify-load)تحقق اختياري لمستخدم قياسي يقع بين خط أنابيب التصفية ومرحلة الكناري. لكل مرشح مناسب، يكتب مؤقتاً DLL تجريبي غير ضار في موضع الاختطاف القابل للكتابة، ثم يطلب من محمل Windows الفعلي — في عملية فرعية قصيرة العمر — حل DLL بالاسم. حيث يحل المحمل يحدد الحكم:
.local/ترتيب بحث لـ ntdll.dll تجعلها KnownDLLs غير قابلة للاستغلال).ملاحظات التصميم والسلامة:
LOAD_LIBRARY_SEARCH الحديث، لذا يتم تطبيقه فقط على مرشحي Phantom / ترتيب البحث / Side-Load. مرشحو .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 التحقق من ترتيب البحث مع المحمل الفعلي (انظر أدناه).
مستخدم قياسي؛ يكتب مؤقتاً تجربة غير ضارة.
--confirmed-only إظهار النتائج المؤكدة بالكناري فقط
--lpe-only صيد LPE صارم: تجاهل System32/Program Files، إظهار
فقط الثغرات القابلة للكتابة من مستخدم قياسي
--log-file <path> كتابة سجل فحص تشخيصي إلى ملف
-v, --verbose إخراج مفصّل
ملاحظة:
--min-confidenceيُعتبر تجاوزاً فقط عند تمريره صراحة. وإلا يتم استخدام عتبة ملف الفحص المحدد (مثلsafe= 50%،strict= 80%).
تتلقى كل نتيجة إشارات ثقة وتأثير يتم دمجها في طبقة أولوية نهائية.
اعتبارات التأثير النموذجية تشمل:
يجب التعامل مع تنفيذ الكناري المؤكد كأقوى إشارة تحقق.
تقييد الطبقات: الطبقتان High وConfirmed محجوزتان للنتائج المدعومة بإشارة إثبات — كناري مُطلق، ملاحظة تحميل ETW في وقت التشغيل، أو تطابق موثق في قاعدة المعرفة. تطابق ترتيب بحث ثابت بحت، مهما كان نظيفاً، محدود بأعلى الطبقة Medium ومُعلَّم كـ Static-only حتى لا تظهر الاستدلالات غير المُتحقق منها كعالية الثقة أبداً.
لأن قابلية الكتابة تُقيَّم بالنسبة للمهاجم، فإن كلاً من التشغيل بصلاحيات مرتفعة وبمستخدم قياسي ذو معنى:
--lpe-only (و--no-canary إذا لم يكن المترجم متاحاً) — كل نتيجة متبقية قابلة للكتابة فعلياً من قبل مبدأ غير مميز.DLLHijackHunter مصمم للبحث الأمني الدفاعي، والتحقق في المختبر، والتدقيق، ومحاكاة الفريق الأحمر في بيئات مصرح بها.
استخدمه فقط على الأنظمة والشبكات التي تملكها أو مخول صراحة بتقييمها.
يدعم DLLHijackHunter:
سير العمل الموصى به:
MIT
بُني بواسطة ProjectMerai.
| النوع | الوصف | التخفي | الحالة |
|---|
| Phantom | DLL غير موجود في أي مكان على القرص | عالي | منفذ |
| ترتيب البحث | وضع DLL في وقت أبكر في ترتيب بحث Windows | عالي | منفذ |
| Side-Loading | استغلال تحميل التطبيقات الشرعية لملفات DLL من دليلها | عالي | منفذ (مسار النسخ إلى temp عبر 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 في الوقت الفعلي | ✅ | ❌ | ❌ | ❌ | ✅ |
| تأكيد Canary | ✅¹ | ❌ | ❌ | ❌ | ❌ |
| فحص تصعيد الامتيازات | ✅ | ❌ | ❌ | ❌ | ❌ |
| اكتشاف تجاوز UAC | ✅ | ❌ | ❌ | ❌ | ❌ |
| تقليل النتائج الإيجابية الكاذبة | ✅² | لا شيء | أساسي | لا شيء | لا شيء |
| فحص استمرارية إعادة التشغيل | ✅³ | ❌ | ❌ | ❌ | ❌ |
| توليد DLL وكيل | ✅⁴ | ❌ | ❌ | ❌ | ❌ |
| تقييم الثقة | ✅ | ❌ | ❌ | ❌ | ❌ |
| تشغيل تلقائي (svc/task/COM) | ✅⁵ | ❌ | ❌ | ❌ | ❌ |
| تقارير HTML/JSON | ✅ | ❌ | ❌ | TXT | ❌ |
| ربط معلومات التهديدات | ✅⁶ | ❌ | ❌ | ❌ | ❌ |
| استغلال PATH آلي | ✅ | ❌ | ❌ | ❌ | ❌ |
| فحص مستهدف محدد | ✅ | ❌ | ❌ | ❌ | ✅ |
| ملف ثنائي مكتفٍ ذاتياً | ✅ | ❌ | ❌ | ✅ | ❌ |
| ملف الفحص | حالة الاستخدام | Canary | ETW | تجاوز UAC | الحد الأدنى للثقة | المشغلات |
|---|
| aggressive | تدقيق كامل، بيئات المختبر | ✅ | ✅ | ✅ | 15% | الخدمات، المهام، COM |
| strict | النتائج عالية الثقة فقط | ✅ | ✅ | ❌ | 80% | الخدمات، المهام |
| safe | أنظمة الإنتاج، للقراءة فقط | ❌ | ❌ | ❌ | 50% | لا شيء |
| redteam | القابل للاستغلال المؤكد فقط | ✅ | ✅ | ❌ | 50% | الخدمات، المهام، COM |
| uac-bypass | نواقل تجاوز UAC فقط | ❌ | ❌ | ✅ | 20% | AutoElevate فقط |