هناك مجال لحقن الكود بين التطبيق ومكتباته الخارجية. القيام بذلك ليس سيئًا بطبيعته ، ولكنه طريقة رائعة لإلحاق الأذى.
عندما يحتاج المطورون إلى توسيع وظائف برنامج ليس لديهم شفرة المصدر له ، فإنهم غالبًا ما يلجأون إلى ربط DLL. هذه طريقة غير تقليدية لجعل البرنامج يفعل شيئًا لا يقصد القيام به.
الشيء هو أن المتسللين يستخدمون هذه التقنية أيضًا لجميع الأسباب الخاطئة ، مثل تسليح التطبيقات غير الضارة أو اختراق البرامج. إذن ما هو ربط DLL ، وكيف يعمل بالفعل؟
ما هو ملف DLL؟
يعتمد كل تطبيق على بعض الملفات خارج الكود الأساسي الخاص به ليتم تشغيله. تحتوي هذه الملفات الخارجية على تعليمات برمجية وبيانات يحتاجها البرنامج ليعمل بشكل صحيح. عند فقد أي من هذه الملفات الخارجية ، قد يواجه البرنامج مشكلات في الاستقرار أو يرفض التشغيل تمامًا.
في نظام التشغيل Windows ، تسمى هذه الملفات الخارجية DLL أو مكتبات الارتباط الديناميكي. تعد مكتبات الارتباط الديناميكي من المكونات الأساسية لنظام التشغيل Windows ، حيث توفر تعليمات برمجية وموارد قابلة لإعادة الاستخدام يمكن مشاركتها عبر تطبيقات متعددة.
تُعرف الملفات الخارجية الموجودة على Windows بالمكتبات. هناك نوعان من المكتبات: ديناميكية وثابتة. يتم تحميل المكتبات الديناميكية في وقت التشغيل ويتم تحميل المكتبات الثابتة في وقت الترجمة. DLL هي مكتبة ديناميكية.
ما هو DLL Hooking؟
ربط DLL هو أسلوب يتضمن اعتراض برامج أو عمليات استدعاءات الوظائف وتعديلها في DLL. بشكل أساسي إعداد رجل في الوسط تم تأسيسه حيث يوجد ربط بين البرنامج و DLLs التي يستدعيها. ثم يتم تتبع جميع مكالمات الوظائف المستهدفة أو تغييرها.
فيما يلي مثال على سير عمل هجوم ربط DLL:
- يقوم المهاجم بتحليل استدعاءات الوظائف التي أجراها البرنامج وملفات DLL التي يعتمد عليها.
- ينشئ المهاجم خطافًا باستخدام إحدى تقنيات التنفيذ العديدة مثل ربط IAT ، والتثبيت المضمن ، وربط COM ، وما إلى ذلك.
- يحدث تنفيذ التعليمات البرمجية التعسفية.
- قد يحدث أو لا يحدث تنفيذ استدعاء الوظيفة الأصلية.
- يخفي المهاجم آثاره عن طريق حذف الخطاف وإعادة جميع التعديلات التي تم إجراؤها.
ربط DLL هو أسلوب متطور يمكن استخدامه لكل من الخير (مثل توسيع وظائف البرنامج ، وتصحيح الأخطاء ، و التسجيل) أو سيئًا (مثل تجاوز الإجراءات الأمنية وسرقة البيانات الحساسة وتنفيذ تعليمات برمجية عشوائية وكتابة لعبة فيديو الخارقة).
كيف يعمل DLL Hooking؟
قبل الغوص في تنفيذ ربط DLL ، من المهم توضيح الأساسيات. لنعد خطوة إلى الوراء ونفهم ما يحدث عندما يتم استدعاء دالة إلى DLL بواسطة أحد البرامج.
عندما يستدعي برنامج دالة في ملف DLL ، يبحث نظام التشغيل أولاً عن اسم الوظيفة بتنسيق جدول عناوين استيراد البرنامج ويحصل على عنوان الوظيفة من عنوان تصدير مكتبة الارتباط الحيوي (DLL) طاولة.
بمجرد حل عنوان الوظيفة ، يمكن للبرنامج الانتقال إلى عنوان الوظيفة للوصول إليها وتنفيذها. تدور ربط DLL حول اعتراض هذه العملية وإعادة توجيه استدعاء الوظيفة إلى وظيفة مختلفة. هناك عدة طرق لتنفيذ ربط DLL. دعونا نلقي نظرة على الأساليب الأكثر استخدامًا لتنفيذها.
يمكن أن يصبح هذا تقنيًا جدًا ، لذلك قد يساعدك إذا كنت هي مستخدم محترف لنظام التشغيل Windows أو لديك فهم قوي لأجزاء Windows الداخلية.
ربط IAT
ربط IAT هو أسلوب فعال يستخدم على نطاق واسع من قبل مؤلفي البرامج الضارة للتحايل على الإجراءات الأمنية والتهرب من الاكتشاف. جدول عناوين الاستيراد (IAT) هو بنية بيانات يتم تحميلها على الذاكرة كلما تم إنشاء عملية جديدة. يحتوي IAT على أسماء جميع استدعاءات الوظائف التي تم استيرادها وعناوين الذاكرة الخاصة بهم.
عندما يستدعي برنامج دالة في مكتبة الارتباط الحيوي (DLL) ، يتم البحث أولاً عن اسم الوظيفة في IAT وإذا كان ملف لم يتم العثور على عنوان الذاكرة للوظيفة المذكورة في IAT ثم تم إنشاؤه من عنوان تصدير DLL طاولة.
إنها بنية بيانات حيث يتم تعيين جميع الوظائف التي تم تصديرها بواسطة DLL إلى عناوين الذاكرة الخاصة بهم. في ربط IAT ، يمكن للخصم تعديل IAT لعملية ما واستبدال تعيينات الوظائف المشروعة مع الخبيثة وبالتالي تعطيل العملية المقصودة وجعل تنفيذ البرنامج تعسفيًا شفرة.
إليك ما يبدو عليه تدفق الهجوم العام في ربط IAT:
- يقوم البرنامج بإجراء مكالمة وظيفية.
- يقع عنوان الوظيفة في IAT.
- منذ أن تم ربط IAT ؛ تم تغيير عنوان الوظيفة ، وتحميل موقع الذاكرة الخاص بوظيفة ضارة.
- ينتقل البرنامج إلى موقع الوظيفة الضارة ويتم تنفيذ تعليمات برمجية عشوائية.
- أخيرًا ، يتم تنفيذ استدعاء الوظيفة الأصلي.
ربط مضمن
الربط المضمن هو تقنية ربط DLL تتضمن تغيير التعليمات البرمجية المصدر لوظيفة الهدف من أجل توجيه تنفيذها إلى وظيفة خاصة. الربط المضمن ، على عكس ربط IAT ، يغير رمز الوظيفة المستهدفة مباشرةً ، مما يمنح المهاجم تحكمًا أكثر دقة في كيفية تصرف وظيفة الهدف.
في الرسم البياني أعلاه ، لاحظ كيف تم العبث بالوظيفة المشروعة للإشارة إلى وظيفة ضارة. بمجرد تنفيذ جميع التعليمات الموجودة في الوظيفة الضارة ، يتم إجراء تعليمات القفز للعودة إلى الوظيفة الشرعية حتى تنتهي من التنفيذ.
يستخدم الأعداء الربط المضمن لإجراء تغييرات دائمة على برنامج مثل تغيير المعلمات أو قيمة إرجاع دالة.
تحويلات مايكروسوفت
طورت Microsoft Research حزمة ربط DLL داخلية ، Detours. إنه يمكّن المبرمجين من تتبع وتعديل استدعاءات الوظائف التي يتم إجراؤها بواسطة البرنامج. يمكن استخدام التحويلات لأداء مجموعة متنوعة من المهام ، بما في ذلك على سبيل المثال لا الحصر: الأجهزة والاختبار وإصلاح الأخطاء.
يستخدم الأعداء Detours لتنفيذ هجمات حقن DLL وربطها ، ويستخدمها المطورون بشكل متكرر لتوسيع وظائف تطبيقاتهم. يمكنك معرفة المزيد حول حزمة Detours على مستودع GitHub الرسمي.
الآن أنت تعرف كيف يعمل DLL Hooking
ربط DLL هو أسلوب متطور ، عند استخدامه للأسباب الصحيحة ، يمكنه تعزيز إمكانيات تطبيقك أو مساعدتك في تصحيح أخطاء البرامج وتحسينها. لسوء الحظ ، يُنظر إلى التثبيت بشكل أكثر شيوعًا باعتباره أسلوبًا عدائيًا وليس أسلوبًا تنمويًا. لذلك ، من المهم أن تتبنى وتلتزم بأفضل ممارسات الأمان لضمان أن تكون تطبيقاتك آمنة وخالية من الهجمات مثل التثبيت والحقن.