رابط مسبق

في مجال الحوسبة ، يعتبر الربط المسبق ، والذي يسمى أيضًا الربط المسبق ، طريقة لتحسين أوقات تحميل التطبيقات عن طريق حل رموز المكتبة قبل التشغيل.

خلفية

تتألف معظم برامج الحاسوب من شفرة تتطلب مكتبات مشتركة خارجية لتنفيذها. وعادةً ما يتم دمج هذه المكتبات مع البرنامج أثناء التشغيل بواسطة مُحمِّل ، في عملية تُسمى الربط الديناميكي .

على الرغم من مزايا الربط الديناميكي في تقليل حجم الكود وإدارته، إلا أن له عيوبًا أيضًا. ففي كل مرة يُشغّل فيها البرنامج، يحتاج مُحمّل المكتبات إلى تحديد (العثور على) المكتبات ذات الصلة. ونظرًا لأن المكتبات تنتقل من مكان لآخر في الذاكرة، فإن عملية تحديدها تُؤثر سلبًا على الأداء. ويزداد هذا التأثير مع كل مكتبة إضافية تحتاج إلى تحديدها.

يقلل الربط المسبق من هذه المشكلة عن طريق تحديد المكتبات مسبقًا. بعد ذلك، لا يتم تحديد المكتبات إلا إذا تغيرت منذ الربط المسبق، كما هو الحال بعد الترقية مثلاً.

نظام التشغيل ماك

يخزن نظام التشغيل ماك أو إس الملفات التنفيذية بتنسيق ملف Mach-O .

نظام التشغيل ماك أو إس إكس

يقوم نظام التشغيل Mac OS X بإجراء الربط المسبق في مرحلة "التحسين" لتثبيت برامج النظام أو تطبيقات معينة.

طرأ تغيير على آلية الربط المسبق عدة مرات ضمن سلسلة أنظمة التشغيل Mac OS X. قبل الإصدار 10.2، كان الربط المسبق يتم فقط أثناء عملية التثبيت (مرحلة "التحسين" المذكورة سابقًا). من الإصدار 10.2 إلى 10.3، كان نظام التشغيل يتحقق من الربط المسبق عند تشغيل التطبيقات، وفي المرة الأولى التي يتم فيها تشغيل التطبيق، يتم ربطه مسبقًا، مما يُسرّع عمليات التشغيل اللاحقة. كان من الممكن أيضًا تشغيل هذه العملية يدويًا، كما هو الحال في بعض عمليات تثبيت نظام التشغيل. في الإصدار 10.4، كانت مكتبات نظام التشغيل فقط هي التي يتم ربطها مسبقًا. في الإصدار 10.5 والإصدارات اللاحقة، استبدلت Apple الربط المسبق بآلية ذاكرة التخزين المؤقت المشتركة dyld ، [ 1 ] مما حسّن أداء نظام التشغيل.

لينكس

في نظام لينكس، يتم إنجاز الربط المسبق عبر برنامج prelink ، وهو برنامج مجاني كتبه جاكوب جيلينك من ريد هات للثنائيات ELF .

كانت نتائج الأداء متفاوتة ، ولكن يبدو أنها تساعد الأنظمة التي تحتوي على عدد كبير من المكتبات، مثل KDE . [ 2 ]

عند تشغيل prelink مع الخيار " -R "، فإنه يختار عشوائيًا قاعدة العناوين التي تُحمّل عليها المكتبات. هذا الاختيار يُصعّب تنفيذ هجوم العودة إلى libc لأن العناوين فريدة لهذا النظام. والسبب في ذلك هو أن وظائف النواة التي توفر عشوائية تخطيط مساحة العناوين (ASLR) للمكتبات لا يمكن استخدامها مع prelink دون إفشال الغرض منه وإجبار الرابط الديناميكي على إجراء عمليات إعادة توجيه عند تحميل البرنامج.

كما ذُكر، لا يمكن استخدام خاصية الربط المسبق وتعشيش عناوين المكتبات لكل عملية معًا. ولتجنب إزالة هذا التحسين الأمني ​​تمامًا، توفر خاصية الربط المسبق تعشيشًا خاصًا بها؛ إلا أن هذا لا يمنع تسريب المعلومات العام الناتج عنها. يستطيع المهاجمون القادرون على قراءة ملفات معينة على النظام المستهدف اكتشاف أماكن تحميل المكتبات في البرامج الخفية ذات الامتيازات؛ وغالبًا ما تكون مكتبة libc كافية لأنها المكتبة الأكثر شيوعًا في هجمات العودة إلى libc .

من خلال قراءة ملف مكتبة مشتركة مثل libc، يستطيع المهاجم الذي يتمتع بوصول محلي اكتشاف عنوان تحميل libc في جميع التطبيقات الأخرى على النظام. ولأن معظم البرامج ترتبط بـ libc، يجب أن يكون ملف مكتبة libc قابلاً للقراءة دائمًا؛ ما يُمكّن أي مهاجم يتمتع بوصول محلي من جمع معلومات حول مساحة عناوين العمليات ذات الامتيازات الأعلى. ويمكن عادةً الحصول على الوصول المحلي عبر حسابات shell أو حسابات خادم الويب التي تسمح باستخدام نصوص CGI البرمجية، والتي بدورها تستطيع قراءة أي ملف على النظام وإخراجه. ويمكن للمهاجمين الذين لا يملكون حسابات استغلال ثغرات اختراق الدليل إذا كانت ثغرات نصوص CGI البرمجية متاحة.

نظرًا لأن عملية الربط المسبق تُنفذ دوريًا، عادةً كل أسبوعين، فإن عنوان أي مكتبة معينة قد يتغير بمرور الوقت. غالبًا ما تُستخدم عملية الربط المسبق في وضع تزايدي، حيث لا تُعدّل المكتبات المرتبطة مسبقًا إلا عند الضرورة القصوى، لذا قد لا يتغير عنوان المكتبة الأساسي عند إعادة تشغيل عملية الربط المسبق. هذا يُعطي أي عنوان مُشتق نصف عمر يُساوي فترة تشغيل عملية الربط المسبق. تجدر الإشارة أيضًا إلى أنه في حال تثبيت إصدار جديد من المكتبة، تتغير العناوين.

يشير جاكوب جيلينك إلى أن الملفات التنفيذية المستقلة عن الموقع (PIE) تتجاهل الربط المسبق على Red Hat Enterprise Linux و Fedora ، ويوصي ببناء برامج الشبكة وبرامج SUID باستخدام PIE لتسهيل بيئة أكثر أمانًا.

مشاكل

في بعض الأحيان، قد يتسبب الربط المسبق في مشاكل مع مكتبات نقاط التحقق وإعادة التشغيل للتطبيقاتblcr ، مثل [ 3 ] ، بالإضافة إلى مكتبات أخرى (مثل OpenMPI ) التي تستخدمها blcrداخليًا. تحديدًا، عند إنشاء نقطة تحقق لبرنامج على مضيف واحد، ومحاولة إعادة تشغيله على مضيف آخر، قد يفشل البرنامج المُعاد تشغيله بسبب خطأ تجزئة الذاكرة نتيجةً لاختلافات في عشوائية عناوين ذاكرة المكتبات الخاصة بكل مضيف . [ 4 ] [ 5 ]

انظر أيضاً

مراجع

  1. "صفحة دليل لتحديث الربط المسبق" . اتصال مطوري Apple . شركة Apple Computer Inc.
  2. كراستا، جيمس (17-05-2004). "الربط المسبق لملفات ELF وما يمكن أن يقدمه لك" . تم الاسترجاع في 10-05-2006 .
  3. blcr
  4. "أسئلة وأجوبة حول BLCR" . تم الاطلاع عليه بتاريخ 2012-01-05 .
  5. هيرسي، جوش (29-12-2011). "خطأ تجزئة الذاكرة عند استئناف التشغيل على مضيف مختلف" . مستخدمو OpenMPI (قائمة بريدية) . تم الاسترجاع في 5-1-2012 .

للمزيد من القراءة

  • جيلينك ، جاكوب (2004/03/04). "الارتباط المسبق" (PDF) . مشروع 0.7 . تم الاسترجاع 2006-07-14 .{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=