حماية الذاكرة

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

طُرق

التجزئة

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

تتميز بنية x86 بميزات تجزئة متعددة، مما يُسهّل استخدام الذاكرة المحمية فيها. [ 1 ] في بنية x86، يُمكن استخدام جدول الواصفات العام وجداول الواصفات المحلية للإشارة إلى المقاطع في ذاكرة الحاسوب. كما يُمكن تخزين مؤشرات مقاطع الذاكرة في معالجات x86 في سجلات المقاطع الخاصة بالمعالج. في البداية، احتوت معالجات x86 على أربعة سجلات مقاطع: CS (مقطع التعليمات البرمجية)، وSS (مقطع المكدس)، وDS (مقطع البيانات)، وES (المقطع الإضافي)؛ ثم أُضيف سجلان آخران لاحقًا : FS وGS. [ 1 ]

الذاكرة الافتراضية ذات الصفحات

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

تستخدم معظم بنى الحاسوب التي تدعم الترحيل الصفحات أيضاً كأساس لحماية الذاكرة.

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

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

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

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

في بعض الأنظمة، يتم استخدام آلية خطأ الصفحة أيضًا لحماية مساحة التنفيذ مثل W^X .

مفاتيح الحماية

A memory protection key (MPK)[3] mechanism divides physical memory into blocks of a particular size (e.g., 4 KiB), each of which has an associated numerical value called a protection key. Each process also has a protection key value associated with it. On a memory access the hardware checks that the current process's protection key matches the value associated with the memory block being accessed; if not, an exception occurs. This mechanism was introduced in the System/360 architecture. It is available on today's System z mainframes and heavily used by System z operating systems and their subsystems.

The System/360 protection keys described above are associated with physical addresses. This is different from the protection key mechanism used by architectures such as the Hewlett-Packard/IntelIA-64 and Hewlett-Packard PA-RISC, which are associated with virtual addresses, and which allow multiple keys per process.

In the Itanium and PA-RISC architectures, translations (TLB entries) have keys (Itanium) or access ids (PA-RISC) associated with them. A running process has several protection key registers (16 for Itanium,[4] 4 for PA-RISC[5]). A translation selected by the virtual address has its key compared to each of the protection key registers. If any of them match (plus other possible checks), the access is permitted. If none match, a fault or exception is generated. The software fault handler can, if desired, check the missing key against a larger list of keys maintained by software; thus, the protection key registers inside the processor may be treated as a software-managed cache of a larger list of keys associated with a process.

PA-RISC has 15–18 bits of key; Itanium mandates at least 18. Keys are usually associated with protection domains, such as libraries, modules, etc.

في معمارية 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 ]

تتضمن بعض أنظمة التشغيل التي تطبق حماية الذاكرة ما يلي:

في الأنظمة الشبيهة بنظام يونكس، يتم استخدام mprotectاستدعاء النظام للتحكم في حماية الذاكرة. [ 14 ]

انظر أيضاً

مراجع

  1. 1 2 إنتل (يوليو 2008). أدلة مطوري البرامج لبنيتي إنتل 64 و IA-32: المجلد 3أ: دليل برمجة النظام، الجزء 1 (ملف PDF) . إنتل . تم الاطلاع عليه بتاريخ 21 أغسطس 2008 .
  2. جيفري إس. تشيس؛ هنري إم. ليفي؛ مايكل جيه. فيلي؛ وإدوارد دي. لازوسكا. "المشاركة والحماية في نظام تشغيل ذي مساحة عنوان واحدة" . doi : 10.1145/195792.195795 1993. ص 2.
  3. مفاتيح حماية الذاكرة ، جوناثان كوربيت، 13 مايو 2015، LWN.net
  4. "مفاتيح في إيتانيوم" (ملف PDF) . مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 28-11-2007.
  5. "حماية الذاكرة في معالجات HP PA-RISC" (ملف PDF) . فبراير 1994. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 5 سبتمبر 2015. تم الاطلاع عليه بتاريخ 29 أكتوبر 2018 .
  6. "دليل مطوري برامج إنتل" (ملف PDF) . مارس 2012. مؤرشف من النسخة الأصلية (ملف PDF) بتاريخ 1 يونيو 2012. تم الاطلاع عليه بتاريخ 29 أكتوبر 2018 .
  7. كلاوس، جيمس؛ دوداليس، يوانيس؛ أورسو، أليساندرو؛ بروفولوفيتش، ميلوس (2007). "حماية فعالة للذاكرة باستخدام التلوث الديناميكي". وقائع المؤتمر الدولي الثاني والعشرين لـ IEEE/ACM حول هندسة البرمجيات الآلية (PDF) . الصفحات 284-292 . doi : 10.1145/1321631.1321673 . ISBN  9781595938824. S2CID 6334541 . 
  8. دوداليس، يوانيس؛ كلاوس، جيمس؛ فينكاتاراماني، جورو؛ بروفولوفيتش، ميلوس؛ أورسو، أليساندرو (2012). "حماية فعالة وكفؤة للذاكرة باستخدام التلوين الديناميكي" (ملف PDF) . مجلة IEEE للمعاملات الحاسوبية . 61 (1): 87-100 . doi : 10.1109/TC.2010.215 . ISSN 0018-9340 . S2CID 15913190 .  
  9. جينكينز، ميشيل. "أوراكل تعلن عن معالج وتصميم أنظمة ثوريين مع SPARC M7" . www.oracle.com . تاريخ الاسترجاع: 18 نوفمبر 2016 .
  10. "دعم الذاكرة الموسومة" . www.lowrisc.org . تم الاطلاع عليه بتاريخ 24-05-2018 .
  11. كوك، دي جيه قياس حماية الذاكرة ، تم قبولها في المؤتمر الدولي الثالث لهندسة البرمجيات، أتلانتا، جورجيا، مايو 1978.
  12. "لا يمتلك نظام التشغيل Windows 9x حماية حقيقية للذاكرة" . Everything2. 24-06-2000 . تم الاطلاع عليه بتاريخ 29-04-2009 .
  13. ^ "فاروس" . 16 ديسمبر 2020.
  14. "mprotect" . المواصفات الأساسية لمجموعة Open Group، الإصدار 6. مجموعة Open Group.

ملحوظات

  1. اعتمادًا على البنية، قد يشمل ذلك، على سبيل المثال، الصفحات والقطاعات غير المخصصة، والصفحات الموجودة في نطاق حماية مختلف، والصفحات التي تتطلب مستوى امتياز أعلى.
  2. بعض الأنظمة، على سبيل المثال، z/OS ، تدعم أكثر من حجم صفحة واحد.
  3. في بعض الأنظمة توجد تعليمات مميزة للوصول إلى التخزين عن طريق العنوان الحقيقي.
  4. في الأيام الأولى لتقنية مشاركة الوقت ، كان الترحيل يتم عادةً إلى أسطوانة مغناطيسية ؛ أما في الأنظمة المعاصرة، فيتم الترحيل عادةً إلى قرص صلب أو جهاز ذي حالة صلبة .