حماية الذاكرة
حماية الذاكرة هي وسيلة للتحكم في حقوق الوصول إلى الذاكرة في الحاسوب، وهي جزء لا يتجزأ من معظم بنى مجموعات التعليمات وأنظمة التشغيل الحديثة . يتمثل الهدف الرئيسي لحماية الذاكرة في منع أي عملية من الوصول إلى ذاكرة غير مخصصة لها. وهذا يمنع أي خلل أو برمجيات خبيثة داخل عملية ما من التأثير على العمليات الأخرى أو نظام التشغيل نفسه. قد تشمل الحماية جميع عمليات الوصول إلى منطقة محددة من الذاكرة، أو عمليات الكتابة، أو محاولات تنفيذ محتويات تلك المنطقة. تؤدي محاولة الوصول إلى ذاكرة غير مصرح بها إلى عطل في العتاد ، مثل خطأ تجزئة الذاكرة أو استثناء انتهاك التخزين ، مما يتسبب عادةً في إنهاء غير طبيعي للعملية المخالفة. تتضمن حماية الذاكرة لأغراض أمن الحاسوب تقنيات إضافية مثل عشوائية تخطيط مساحة العناوين وحماية مساحة التنفيذ .
طُرق
التجزئة
يشير تجزئة الذاكرة إلى تقسيم ذاكرة الحاسوب إلى أجزاء. يتضمن مرجع موقع الذاكرة قيمة تُعرّف جزءًا وإزاحة داخل ذلك الجزء. قد يُقيّد مُعرّف الجزء حقوق الوصول، مثل: للقراءة فقط، أو من حلقات معينة فقط .
تتميز بنية x86 بميزات تجزئة متعددة، مما يُسهّل استخدام الذاكرة المحمية فيها. [ 1 ] في بنية x86، يُمكن استخدام جدول الواصفات العام وجداول الواصفات المحلية للإشارة إلى المقاطع في ذاكرة الحاسوب. كما يُمكن تخزين مؤشرات مقاطع الذاكرة في معالجات x86 في سجلات المقاطع الخاصة بالمعالج. في البداية، احتوت معالجات x86 على أربعة سجلات مقاطع: CS (مقطع التعليمات البرمجية)، وSS (مقطع المكدس)، وDS (مقطع البيانات)، وES (المقطع الإضافي)؛ ثم أُضيف سجلان آخران لاحقًا : FS وGS. [ 1 ]
الذاكرة الافتراضية ذات الصفحات
في تقنية الترحيل ، تُقسّم مساحة عناوين الذاكرة أو مقطعها إلى كتل متساوية الحجم تُسمى صفحات . باستخدام أجهزة الذاكرة الافتراضية ، يمكن أن تتواجد كل صفحة في أي موقع على حدود مناسبة للذاكرة الفعلية للحاسوب، أو أن تُصنّف على أنها محمية. تُمكّن الذاكرة الافتراضية من امتلاك مساحة عناوين ذاكرة افتراضية خطية ، واستخدامها للوصول إلى الكتل المُجزأة عبر مساحة عناوين الذاكرة الفعلية .
تستخدم معظم بنى الحاسوب التي تدعم الترحيل الصفحات أيضاً كأساس لحماية الذاكرة.
يربط جدول الصفحات الذاكرة الافتراضية بالذاكرة الفعلية. قد يكون هناك جدول صفحات واحد، أو جدول صفحات لكل عملية، أو جدول صفحات لكل جزء، أو تسلسل هرمي لجداول الصفحات، وذلك حسب بنية النظام ونظام التشغيل. عادةً ما تكون جداول الصفحات غير مرئية للعمليات. تُسهّل جداول الصفحات تخصيص ذاكرة إضافية، حيث يمكن تخصيص كل صفحة جديدة من أي مكان في الذاكرة الفعلية. في بعض الأنظمة، يمكن أيضًا أن يُشير إدخال في جدول الصفحات إلى أن الصفحة للقراءة فقط.
تُخصص بعض أنظمة التشغيل مساحة عناوين مختلفة لكل عملية، مما يوفر حدودًا صارمة لحماية الذاكرة. [ 2 ] يستحيل على أي تطبيق غير مُصرَّح له الوصول إلى صفحة لم تُخصَّص له صراحةً، لأن كل عنوان ذاكرة إما يُشير إلى صفحة مُخصَّصة لهذا التطبيق، أو يُولِّد مقاطعة تُسمى خطأ الصفحة . الصفحات غير المُخصَّصة، والصفحات المُخصَّصة لأي تطبيق آخر، لا تملك أي عناوين من وجهة نظر التطبيق.
قد لا يشير خطأ الصفحة بالضرورة إلى وجود خطأ حقيقي. لا تُستخدم أخطاء الصفحات لحماية الذاكرة فحسب، بل قد يُدير نظام التشغيل جدول الصفحات بطريقة تجعل الإشارة إلى صفحة تم نقلها مسبقًا إلى وحدة التخزين الثانوية [ d ] تتسبب في حدوث خطأ الصفحة. يعترض نظام التشغيل خطأ الصفحة، ويُحمّل صفحة الذاكرة المطلوبة، ويستمر التطبيق في العمل كما لو لم يحدث أي خطأ. تسمح هذه الآلية، وهي نوع من الذاكرة الافتراضية ، بنقل البيانات الموجودة في الذاكرة غير المستخدمة حاليًا إلى وحدة التخزين الثانوية والعودة إليها بطريقة شفافة للتطبيقات، وذلك لزيادة سعة الذاكرة الإجمالية.
في بعض الأنظمة، قد يُخصص طلب التخزين الافتراضي كتلة من العناوين الافتراضية دون تخصيص أي إطارات صفحات لها، ولن يقوم النظام بتخصيص إطارات الصفحات وتهيئتها إلا عند حدوث أخطاء في الصفحات. وفي بعض الأنظمة الأخرى، قد تُستخدم صفحة حماية ، إما لاكتشاف الأخطاء أو لتوسيع هياكل البيانات تلقائيًا.
في بعض الأنظمة، يتم استخدام آلية خطأ الصفحة أيضًا لحماية مساحة التنفيذ مثل W^X .
مفاتيح الحماية
تقوم آلية مفتاح حماية الذاكرة (MPK) [ 3 ] بتقسيم الذاكرة الفعلية إلى كتل ذات حجم محدد (مثلاً، 4 كيلوبايت)، ولكل كتلة قيمة عددية مرتبطة بها تُسمى مفتاح الحماية. كما أن لكل عملية قيمة مفتاح حماية خاصة بها. عند الوصول إلى الذاكرة، يتحقق الجهاز من تطابق مفتاح الحماية الخاص بالعملية الحالية مع القيمة المرتبطة بكتلة الذاكرة التي يتم الوصول إليها؛ وإذا لم يكن كذلك، يحدث استثناء. تم تقديم هذه الآلية في بنية System/360 ، وهي متوفرة في أجهزة System z الرئيسية الحالية ، وتُستخدم بكثافة من قِبل أنظمة تشغيل System z وأنظمتها الفرعية.
ترتبط مفاتيح الحماية الخاصة بنظام System/360 المذكورة أعلاه بعناوين فيزيائية. وهذا يختلف عن آلية مفاتيح الحماية المستخدمة في بنى معمارية مثل Hewlett-Packard / Intel IA-64 و Hewlett-Packard PA-RISC ، والتي ترتبط بعناوين افتراضية، وتسمح باستخدام عدة مفاتيح لكل عملية.
في معماريتي إيتانيوم وPA-RISC، ترتبط الترجمات (مدخلات TLB ) بمفاتيح (في إيتانيوم) أو معرّفات وصول (في PA-RISC). تحتوي العملية الجارية على عدة سجلات لمفاتيح الحماية (16 سجلًا في إيتانيوم، و 4 سجلات في PA-RISC ) . تتم مقارنة مفتاح الترجمة المختارة بواسطة العنوان الظاهري مع كل سجل من سجلات مفاتيح الحماية. إذا تطابق أي منها (بالإضافة إلى عمليات التحقق الأخرى الممكنة)، يُسمح بالوصول. في حال عدم التطابق، يتم إنشاء خطأ أو استثناء. يمكن لمعالج أخطاء البرنامج، إذا لزم الأمر، التحقق من المفتاح المفقود مقابل قائمة أكبر من المفاتيح التي يحتفظ بها البرنامج؛ وبالتالي، يمكن اعتبار سجلات مفاتيح الحماية داخل المعالج بمثابة ذاكرة تخزين مؤقتة مُدارة برمجياً لقائمة أكبر من المفاتيح المرتبطة بالعملية.
يحتوي معالج PA-RISC على 15-18 بت من المفتاح؛ بينما يشترط معالج Itanium 18 بت على الأقل. وعادة ما ترتبط المفاتيح بمجالات الحماية ، مثل المكتبات والوحدات النمطية وما إلى ذلك.
في معمارية x86، تسمح بنية مفاتيح الحماية [ 6 ] بتصنيف العناوين الافتراضية لصفحات المستخدم باستخدام أي من مفاتيح الحماية الستة عشر. تشكل جميع الصفحات المصنفة بنفس مفتاح الحماية نطاق حماية. يحتوي سجل جديد على الأذونات المرتبطة بكل نطاق حماية. تُفحص عمليات التحميل والتخزين مقابل أذونات جدول الصفحات وأذونات مفتاح الحماية المرتبطة بنطاق حماية العنوان الافتراضي، ولا يُسمح بها إلا إذا سمحت كلتا الإذنين بالوصول. يمكن ضبط أذونات مفتاح الحماية من مساحة المستخدم، مما يسمح للتطبيقات بتقييد الوصول إلى بيانات التطبيق مباشرةً دون تدخل نظام التشغيل. بما أن مفاتيح الحماية مرتبطة بعنوان افتراضي، فإن نطاقات الحماية خاصة بكل مساحة عنوان، لذا يمكن للعمليات التي تعمل في مساحات عناوين مختلفة استخدام جميع النطاقات الستة عشر.
خواتم الحماية
في نظام Multics والأنظمة المشتقة منه، يمتلك كل جزء حلقة حماية للقراءة والكتابة والتنفيذ؛ ومحاولة أي عملية ذات رقم حلقة أعلى من رقم حلقة الجزء تُسبب خطأً. توجد آلية لاستدعاء الإجراءات التي تعمل في حلقة أقل بأمان والعودة إلى الحلقة الأعلى. كما توجد آليات لروتين يعمل برقم حلقة منخفض للوصول إلى مُعامل ذي رقم حلقة أعلى من رقم حلقة المُستدعي.
التجزئة المحاكاة
المحاكاة هي استخدام برنامج مراقبة لتفسير تعليمات لغة الآلة لبعض بنى الحاسوب. يمكن لمحاكي مجموعة التعليمات هذا توفير حماية للذاكرة باستخدام آلية شبيهة بالتجزئة، والتحقق من صحة عنوان الهدف وطول كل تعليمة في الوقت الفعلي قبل تنفيذها. يجب على المحاكي حساب عنوان الهدف وطوله ومقارنتهما بقائمة نطاقات العناوين الصالحة التي يحتفظ بها فيما يتعلق ببيئة الخيط ، مثل أي كتل ذاكرة ديناميكية تم الحصول عليها منذ بدء الخيط، بالإضافة إلى أي خانات ذاكرة ثابتة مشتركة صالحة. قد يتغير معنى "صالح" خلال دورة حياة الخيط تبعًا للسياق. قد يُسمح أحيانًا بتعديل كتلة تخزين ثابتة، وأحيانًا أخرى لا، وذلك اعتمادًا على وضع التنفيذ الحالي، والذي قد يعتمد أو لا يعتمد على مفتاح تخزين أو حالة المشرف.
لا يُنصح عمومًا باستخدام هذه الطريقة لحماية الذاكرة في حال توفر إمكانيات كافية على وحدة المعالجة المركزية، لأنها تستنزف قدرة المعالجة القيّمة للحاسوب. مع ذلك، تُستخدم هذه الطريقة عادةً لأغراض تصحيح الأخطاء والاختبار لتوفير مستوى عالٍ من الدقة في رصد انتهاكات التخزين العامة ، ويمكنها تحديد التعليمات التي تحاول الكتابة فوق قسم معين من التخزين قد يحمل نفس مفتاح التخزين غير المحمي.
العنونة القائمة على القدرات
العنونة القائمة على القدرات هي طريقة لحماية الذاكرة غير مستخدمة في الحواسيب التجارية الحديثة. في هذه الطريقة، تُستبدل المؤشرات بكائنات محمية (تُسمى قدرات ) لا يمكن إنشاؤها إلا باستخدام تعليمات ذات امتيازات خاصة ، والتي لا يُمكن تنفيذها إلا بواسطة النواة، أو عملية أخرى مُصرّح لها بذلك. وهذا يُتيح فعليًا للنواة التحكم في العمليات التي يُمكنها الوصول إلى أي كائنات في الذاكرة، دون الحاجة إلى استخدام مساحات عناوين منفصلة أو تبديل السياق . لم تستخدم سوى بعض المنتجات التجارية أمانًا قائمًا على القدرات، مثل: Plessey System 250 ، و IBM System/38 ، وبنية Intel iAPX 432 ، و KeyKOS . تُستخدم أساليب القدرات على نطاق واسع في أنظمة البحث مثل EROS ومتصفح Combex DARPA. كما تُستخدم نظريًا كأساس لبعض الآلات الافتراضية ، وأبرزها Smalltalk و Java . حاليًا، يعمل مشروع CHERI المُموّل من DARPA في جامعة كامبريدج على إنشاء آلة قدرات حديثة تدعم أيضًا البرامج القديمة.
التلوث الديناميكي
يُعدّ التلوين الديناميكي تقنية لحماية البرامج من الوصول غير المصرح به إلى الذاكرة. عند تخصيص الذاكرة، وأثناء التشغيل، تُلوّث هذه التقنية كلاً من الذاكرة والمؤشر المقابل لها باستخدام علامة التلوين نفسها. ثم تُنشر علامات التلوين بشكل مناسب أثناء تنفيذ البرنامج، ويتم التحقق منها في كل مرة يتم فيها الوصول إلى عنوان الذاكرة m عبر المؤشر p ؛ إذا اختلفت علامات التلوين المرتبطة بـ m و p ، يتم إيقاف التنفيذ والإبلاغ عن الوصول غير المصرح به. [ 7 ] [ 8 ]
تُطبّق معالجات SPARC M7 (وما فوقها) تقنية التلوث الديناميكي في مكوناتها المادية. تُسوّق أوراكل هذه الميزة تحت اسم "الذاكرة الآمنة بالسيليكون " (SSM) (وكانت تُعرف سابقًا باسم "سلامة بيانات التطبيق" (ADI)). [ 9 ]
يتضمن تصميم وحدة المعالجة المركزية منخفضة RISC تقنية التلوين الديناميكي تحت اسم الذاكرة الموسومة. [ 10 ]
مقاسات
يمكن قياس مستوى الحماية لتطبيق معين بمدى التزامه بمبدأ الحد الأدنى من الامتيازات . [ 11 ]
حماية الذاكرة في أنظمة التشغيل المختلفة
تستخدم أنظمة التشغيل المختلفة أشكالًا متباينة من حماية الذاكرة أو فصلها. مع أن حماية الذاكرة كانت شائعة في معظم الحواسيب المركزية والعديد من أنظمة الحواسيب الصغيرة منذ ستينيات القرن الماضي، إلا أن فصل الذاكرة الحقيقي لم يُستخدم في أنظمة تشغيل الحواسيب المنزلية حتى إصدار نظام التشغيل OS/2 (وفي نظام RISC OS ) عام 1987. في الأنظمة السابقة، استُخدم هذا النقص في الحماية كشكل من أشكال التواصل بين العمليات ، وذلك عن طريق إرسال مؤشر بينها. من الممكن للعمليات الوصول إلى ذاكرة النظام في أنظمة تشغيل Windows 9x . [ 12 ]
تتضمن بعض أنظمة التشغيل التي تطبق حماية الذاكرة ما يلي:
- أتاري مالتي توس (منذ عام 1991)
- عائلة أنظمة تشغيل مايكروسوفت ويندوز بدءًا من ويندوز إن تي 3.1 (1993)
- نظام التشغيل Microware OS-9 ، كوحدة اختيارية (منذ عام 1992)
- نظام التشغيل OS/2 (1987)
- فاروس [ 13 ] (منذ عام 2017)
- Plan9 و Inferno ، تم إنشاؤهما في مختبرات بيل كخلفاء لنظام يونكس (1992، 1995).
- نظام التشغيل RISC OS (1987) (حماية ذاكرة نظام التشغيل ليست شاملة.)
- أنظمة شبيهة بنظام يونكس (منذ أواخر سبعينيات القرن العشرين)، بما في ذلك سولاريس ، ولينكس ، وبي إس دي ، وماك أو إس إكس (من عام 2001؛ ويُسمى الآن ماك أو إس)، وآي أو إس ، وجنو هيرد
في الأنظمة الشبيهة بنظام يونكس، يتم استخدام mprotectاستدعاء النظام للتحكم في حماية الذاكرة. [ 14 ]
انظر أيضاً
- إدارة الذاكرة (أنظمة التشغيل)
- انتهاك التخزين ، بسبب انتهاك حماية الذاكرة
مراجع
- 1 2 إنتل (يوليو 2008). أدلة مطوري البرامج لبنيتي إنتل 64 و IA-32: المجلد 3أ: دليل برمجة النظام، الجزء 1 (ملف PDF) . إنتل . تم الاطلاع عليه بتاريخ 21 أغسطس 2008 .
- ↑ جيفري إس. تشيس؛ هنري إم. ليفي؛ مايكل جيه. فيلي؛ وإدوارد دي. لازوسكا. "المشاركة والحماية في نظام تشغيل ذي مساحة عنوان واحدة" . doi : 10.1145/195792.195795 1993. ص 2.
- ↑ مفاتيح حماية الذاكرة ، جوناثان كوربيت، 13 مايو 2015، LWN.net
- ↑ "مفاتيح في إيتانيوم" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 28-11-2007.
- ↑ "حماية الذاكرة في معالجات HP PA-RISC" (ملف PDF) . فبراير 1994. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 5 سبتمبر 2015. تم الاطلاع عليه بتاريخ 29 أكتوبر 2018 .
- ↑ "دليل مطوري برامج إنتل" (ملف PDF) . مارس 2012. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 1 يونيو 2012. تم الاطلاع عليه بتاريخ 29 أكتوبر 2018 .
- ↑ كلاوس، جيمس؛ دوداليس، يوانيس؛ أورسو، أليساندرو؛ بروفولوفيتش، ميلوس (2007). "حماية فعالة للذاكرة باستخدام التلوث الديناميكي". وقائع المؤتمر الدولي الثاني والعشرين لـ IEEE/ACM حول هندسة البرمجيات الآلية (PDF) . الصفحات 284-292 . doi : 10.1145/1321631.1321673 . ISBN 9781595938824. S2CID 6334541 .
- ↑ دوداليس، يوانيس؛ كلاوس، جيمس؛ فينكاتاراماني، جورو؛ بروفولوفيتش، ميلوس؛ أورسو، أليساندرو (2012). "حماية فعالة وكفؤة للذاكرة باستخدام التلوين الديناميكي" (ملف PDF) . مجلة IEEE للمعاملات الحاسوبية . 61 (1): 87-100 . doi : 10.1109/TC.2010.215 . ISSN 0018-9340 . S2CID 15913190 .
- ↑ جينكينز، ميشيل. "أوراكل تعلن عن معالج وتصميم أنظمة ثوريين مع SPARC M7" . www.oracle.com . تاريخ الاسترجاع: 18 نوفمبر 2016 .
- ↑ "دعم الذاكرة الموسومة" . www.lowrisc.org . تم الاطلاع عليه بتاريخ 24-05-2018 .
- ↑ كوك، دي جيه قياس حماية الذاكرة ، تم قبولها في المؤتمر الدولي الثالث لهندسة البرمجيات، أتلانتا، جورجيا، مايو 1978.
- ↑ "لا يمتلك نظام التشغيل Windows 9x حماية حقيقية للذاكرة" . Everything2. 24-06-2000 . تم الاطلاع عليه بتاريخ 29-04-2009 .
- ^ "فاروس" . 16 ديسمبر 2020.
- ↑ "mprotect" . المواصفات الأساسية لمجموعة Open Group، الإصدار 6. مجموعة Open Group.
ملحوظات
- ↑ اعتمادًا على البنية، قد يشمل ذلك، على سبيل المثال، الصفحات والقطاعات غير المخصصة، والصفحات الموجودة في نطاق حماية مختلف، والصفحات التي تتطلب مستوى امتياز أعلى.
- ↑ بعض الأنظمة، على سبيل المثال، z/OS ، تدعم أكثر من حجم صفحة واحد.
- ↑ في بعض الأنظمة توجد تعليمات مميزة للوصول إلى التخزين عن طريق العنوان الحقيقي.
- ↑ في الأيام الأولى لتقنية مشاركة الوقت ، كان الترحيل يتم عادةً إلى أسطوانة مغناطيسية ؛ أما في الأنظمة المعاصرة، فيتم الترحيل عادةً إلى قرص صلب أو جهاز ذي حالة صلبة .
روابط خارجية
- كتيبات مطوري إنتل – معلومات متعمقة حول حماية الذاكرة للبنى القائمة على معالجات إنتل
- إدارة الذاكرة
