بوابة الاتصال (إنتل)
بوابة الاستدعاء هي آلية في بنية x86 الخاصة بشركة Intel لتغيير مستوى امتياز العملية عندما تقوم بتنفيذ استدعاء دالة محددة مسبقًا باستخدام تعليمة CALL FAR.
ملخص
تهدف بوابات الاستدعاء إلى السماح للتعليمات البرمجية ذات الصلاحيات الأقل باستدعاء تعليمات برمجية ذات صلاحيات أعلى. يُعد هذا النوع من الآليات أساسيًا في أنظمة التشغيل الحديثة التي تستخدم حماية الذاكرة ، حيث يسمح لتطبيقات المستخدم باستخدام وظائف النواة واستدعاءات النظام بطريقة يمكن التحكم بها من قِبل نظام التشغيل .
تستخدم بوابات الاستدعاء قيمة مُحدِّد خاصة للإشارة إلى واصف يتم الوصول إليه عبر جدول الواصفات العام أو جدول الواصفات المحلي ، والذي يحتوي على المعلومات اللازمة للاستدعاء عبر حدود الامتيازات. وهذا مشابه للآلية المستخدمة في المقاطعات .
الاستخدام
بافتراض أن نواة نظام التشغيل قد أنشأت بوابة استدعاء ، يقوم البرنامج ببساطة باستدعاء دالة CALL FAR مع مُحدد المقطع المطلوب (مع تجاهل حقل الإزاحة). سيُجري المعالج عددًا من الفحوصات للتأكد من صحة الإدخال وأن البرنامج يعمل بصلاحيات كافية لاستخدام البوابة. بافتراض نجاح جميع الفحوصات، يتم تحميل مُحدد مقطع/ مؤشر تعليمة جديد من واصف المقطع ، وتُضاف معلومات الاستمرار إلى مكدس مستوى الصلاحية الجديد (مُحدد المقطع القديم، مؤشر تعليمة المقطع القديم، مُحدد المقطع القديم، مؤشر تعليمة المقطع القديم، مؤشر تعليمة المقطع القديم، بهذا الترتيب). يمكن أيضًا نسخ المعلمات من المكدس القديم إلى المكدس الجديد إذا لزم الأمر. يُحدد عدد المعلمات المراد نسخها في واصف بوابة الاستدعاء.
قد تعود النواة إلى برنامج مساحة المستخدم باستخدام تعليمة RET FAR التي تقوم بسحب معلومات الاستمرار من المكدس والعودة إلى مستوى الامتياز الخارجي.
تنسيق واصف بوابة الاتصال
typedef struct _CALL_GATE { USHORT OffsetLow ; USHORT Selector ; UCHAR NumberOfArguments : 5 ; UCHAR Reserved : 3 ; UCHAR Type : 5 ; // 01100 في i386، 00100 في i286 UCHAR Dpl : 2 ; UCHAR Present : 1 ; USHORT OffsetHigh ; } CALL_GATE , * PCALL_GATE ;الاستخدام السابق
كانت شركة Multics أول من استخدم بوابات الاتصال. كان جهاز Honeywell 6180 يحتوي على بوابات اتصال كجزء من بنيته، لكن Multics قامت بمحاكاتها على جهاز GE 645 الأقدم .
كان نظام التشغيل OS/2 من أوائل المستخدمين لبوابات استدعاء Intel لنقل التعليمات البرمجية للتطبيقات التي تعمل في الحلقة 3، والتعليمات البرمجية المميزة التي تعمل في الحلقة 2، وتعليمات النواة في الحلقة 0.
يُشغّل نظام التشغيل Windows 95 برامج التشغيل وعمليات تبديل العمليات في الحلقة 0، بينما تُشغّل التطبيقات، بما في ذلك مكتبات API DLL مثل kernel32.dll وkrnl386.exe، في الحلقة 3. يوفر برنامج التشغيل VWIN32.VXD وظائف أساسية لنظام التشغيل في الحلقة 0، مما يسمح باستدعاء وظائف برنامج التشغيل من تطبيقات 16 بت (MSDOS وWin16). يُحصل على هذا العنوان باستدعاء الأمر INT 2Fh، مع وجود القيمة 1684h في سجل AX. لتحديد برنامج VxD المطلوب الوصول إليه، يُضبط سجل BX على مُعرّف VxD ذي 16 بت. عند العودة من تعليمة INT، تحتوي سجلات ES.DI على مؤشر بعيد يمكن استدعاؤه لنقل التحكم إلى برنامج VxD الذي يعمل في الحلقة 0. الواصف الذي يشير إليه ES هو في الواقع بوابة استدعاء. [ 1 ] تطبيقات 32 بت، مع ذلك، عندما تحتاج إلى الوصول إلى كود برنامج تشغيل Windows 95، تستدعي وظيفة VxDCall غير الموثقة في KERNEL32.DLL والتي تستدعي بشكل أساسي INT 30h، والتي تغير وضع الرنين.
الاستخدام الحديث
تتجه أنظمة التشغيل الحديثة x86 نحو التخلي عن بوابات استدعاء CALL FAR. مع ظهور تعليمات x86 لاستدعاء النظام (SYSENTER/SYSEXIT من إنتل وSYSCALL/SYSRET من AMD)، تم تقديم آلية جديدة أسرع لنقل التحكم في برامج x86. ولأن معظم البنى الأخرى لا تدعم بوابات الاستدعاء، كان استخدامها نادرًا حتى قبل هذه التعليمات الجديدة، حيث كان يُفضل استخدام المقاطعات أو المصائد البرمجية لضمان قابلية النقل، على الرغم من أن بوابات الاستدعاء أسرع بكثير من المقاطعات.
تُعدّ بوابات الاستدعاء أكثر مرونة من تعليمات SYSENTER/SYSEXIT وSYSCALL/SYSRET، إذ تسمح، على عكس الأخيرتين، بالانتقال من مستوى امتياز عشوائي إلى مستوى امتياز عشوائي آخر (وإن كان أعلى أو مساوياً). أما تعليمات SYS* السريعة، فتسمح فقط بنقل التحكم من الحلقة 3 إلى الحلقة 0 والعكس.
قضايا أمنية
للحفاظ على أمان النظام، يجب تخزين جدول الواصفات العامة في ذاكرة محمية، وإلا سيتمكن أي برنامج من إنشاء بوابة استدعاء خاصة به واستخدامها لرفع مستوى صلاحياته. وقد استُخدمت بوابات الاستدعاء في ثغرات أمنية برمجية ، عندما تم إيجاد طرق للتحايل على هذه الحماية. [ 2 ] ومن الأمثلة على ذلك دودة البريد الإلكتروني Gurong.A ، المصممة لاستغلال نظام التشغيل مايكروسوفت ويندوز ، والتي تستخدم \Device\PhysicalMemory لتثبيت بوابة استدعاء. [ 3 ]
انظر أيضاً
مراجع
- ↑ مات بيترك ، أسرار برمجة نظام ويندوز 95
- ↑ مدونة مشروع Xen حول تصعيد امتيازات Intel SYSRET
- ↑ دودة: W32/Gurong.A الوصف مختبرات F-Secure
- معمارية X86
