
DLLHijackHunter v2.5.0
اكتشاف اختطاف DLL الآلي، والتحقق منه، والتأكيد عليه. تحويل الأخطاء المحلية في التهيئة إلى مسارات هجوم مؤكدة ومسلحة.
DLLHijackHunter
بواسطة ProjectMerai
اكتشاف، تحقق، وتأكيد آلي لاختطاف DLL
تحويل الأخطاء المحلية في الإعدادات إلى مسارات هجوم مؤكدة وجاهزة للاستغلال.
نظرة عامة
DLLHijackHunter هي أداة آلية لاكتشاف اختطاف DLL على نظام Windows تتجاوز التحليل الثابت. تكتشف، وتتحقق، وتؤكد فرص اختطاف DLL باستخدام خط أنابيب متعدد المراحل:
- الاكتشاف — تعداد الملفات التنفيذية عبر الخدمات، المهام المجدولة، عناصر بدء التشغيل، كائنات COM، ونواقل تجاوز UAC عبر AutoElevate
- التصفية — القضاء على النتائج الإيجابية الكاذبة من خلال بوابات ذكية صارمة ومرنة
- تأكيد Canary — نشر 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
الميزات الرئيسية
تغطية أنواع الاختطاف
| النوع | الوصف | التخفي | الحالة |
|---|---|---|---|
| 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 | اختطاف دليل العمل الحالي | منخفض | مخطط — لا يُنتج حالياً من أي مسار اكتشاف |
يتم تعداد إدخالات IFEO Debugger وتحليل الملف التنفيذي المرجعي لاستيرادات DLL، ولكن لا يوجد نوع اختطاف مخصص لـ IFEO/تجاوز KnownDLL — لا يتم الإعلان عنها كاكتشافات مستقلة.
اكتشاف تجاوز UAC
يتضمن DLLHijackHunter اكتشافاً مخصصاً لتجاوز UAC:
- Manifest AutoElevate — فحص
System32وSysWOW64بحثاً عن ملفات EXE تحتوي على<autoElevate>true</autoElevate>في الـ manifests المدمجة - COM AutoElevation — فحص
HKLM\SOFTWARE\Classes\CLSIDبحثاً عن كائنات COM معElevation\Enabled=1 - محاكاة Side-Load — للملفات التنفيذية AutoElevate التي لا تستدعي
SetDllDirectoryأوSetDefaultDllDirectories، محاكاة مسار الهجوم "نسخ EXE إلى مجلد قابل للكتابة + إسقاط DLL"
قاعدة معرفة الثغرات المستهدفة
- تخطيط الثغرات المستهدفة — مطابقة الاستيرادات المكتشفة مع لقطة مدمجة من مجموعة بيانات HijackLibs (≈590 إدخال DLL موثق تغطي ≈700 ملف تنفيذي ضعيف)، مدمجة كـ
Resources/hijacklibs.json. التطابق يعزز الثقة ويربط النتيجة بصفحة مرجع HijackLibs الخاصة بها؛ غياب التطابق لا يعني شيئاً. مجموعة البيانات مدفوعة بالبيانات — قم بتحديثها بإعادة تنزيلhttps://hijacklibs.net/api/hijacklibs.jsonفوق هذا المورد (بدون تغييرات في الكود). مجموعة البيانات © مشروع HijackLibs والمساهمين. - استغلال PATH الآلي — تقييم مجلدات
PATHالقابلة للكتابة وتوليد مرشحين للاختطاف لخريطة منسقة من خدمات Windows الأصلية المعروفة بالبحث فيPATHعن ملفات DLL مفقودة - توسيع صيد DLL الوهمي — البحث عن مكتبة من فرص DLL الوهمية عالية القيمة عبر فئات متعددة
خط أنابيب التصفية
يقلل خط الأنابيب النتائج الإيجابية الكاذبة عبر مرحلتين:
البوابات الصارمة
- تصفية مخطط مجموعات API (
api-ms-*,ext-ms-*) - تصفية KnownDLL
- التحقق من قابلية الكتابة عبر ACL بالنسبة للمهاجم — المسار يُعتبر قابلاً للكتابة فقط إذا كان لدى مبدأ غير مميز (
Users/Authenticated Users/Everyone، بالإضافة إلى حسابات خدمات فرعية مقاومة لتسريب الامتيازات مثلLOCAL SERVICE/NETWORK SERVICE) حقوق كتابة فعلية. الأهم من ذلك، يتم حساب هذا بشكل مستقل عن الرمز المميز الذي تعمل به الأداة، لذا فإن التشغيل بصلاحيات مرتفعة لا يجعلSystem32/Program Filesتبدو قابلة للكتابة. هذا ما يجعل التشغيل بصلاحيات مرتفعة ذا معنى لفرز LPE.
البوابات المرنة
- عقوبة WinSxS manifest
- تحليل فجوة الامتيازات
- فحوصات تخفيف
LoadLibraryEx - فحوصات التحقق من التوقيع
- عقوبات معالجة الأخطاء بأناقة
تأكيد Canary
بدلاً من التخمين، يحاول 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++؛ الماسح الضوئي لا يتطلبها).