مقرر أمن أنظمة التشغيل

حماية أنظمة التشغيل (Windows, Linux, macOS) من التهديدات الأمنية

الوحدة 2: مساحة النواة ومساحة المستخدم وتأثيرها الأمني

يعتمد أمن نظام التشغيل بدرجة كبيرة على البنية المعمارية التي تفصل بين العمليات ذات الامتيازات المرتفعة (Kernel Space) وتلك الخاصة بالمستخدمين العاديين والبرامج (User Space). يعتبر هذا الفصل حجر الزاوية في تصميم أنظمة التشغيل الحديثة، حيث يُسهم بشكل مباشر في تقليل سطح الهجوم المتاح أمام البرمجيات الخبيثة، ويمنع التطبيقات من العبث بالموارد الحساسة للنظام.

أهداف الوحدة:
  • فهم الفروقات المعمارية والوظيفية بين مساحة النواة ومساحة المستخدم.
  • تحليل التحديات الأمنية الناتجة عن آليات التواصل بين المساحتين.
  • استيعاب كيف يمكن للفصل الفعّال أن يمنع تسرب البيانات أو تصعيد الامتيازات.
  • دراسة أمثلة واقعية لثغرات برمجية ناتجة عن فشل في هذا الفصل.
  • تقييم تقنيات الحماية الحديثة مثل KASLR وUAC.

1. ما هي مساحة النواة ومساحة المستخدم؟

تُقسّم أنظمة التشغيل الحديثة الذاكرة إلى منطقتين رئيسيتين:

  • مساحة النواة (Kernel Space): تمثل الجزء المحمي من الذاكرة حيث يتم تنفيذ العمليات الحيوية لنظام التشغيل مثل إدارة العمليات، وإدارة الذاكرة، والتحكم في العتاد. يُسمح فقط للكود الذي يملك امتيازات عالية (مثل برامج التشغيل والنواة نفسها) بالعمل في هذه المساحة.
  • مساحة المستخدم (User Space): هي البيئة التي تُنفذ فيها معظم التطبيقات التي يتفاعل معها المستخدمون، مثل متصفحات الإنترنت وبرامج تحرير النصوص. الكود في هذه المساحة لا يمكنه الوصول مباشرةً إلى مكونات النواة، بل يتطلب ذلك وسائط رسمية مثل نداءات النظام (System Calls).
معلومة تقنية:

في العديد من أنظمة التشغيل، يُستخدم نموذج الحلقات (Ring Model) لتحديد الامتيازات، حيث تعمل النواة في الحلقة 0 (Ring 0) بينما تعمل التطبيقات في الحلقة 3 (Ring 3).

2. لماذا يعتبر هذا الفصل ضروريًا؟

يُعد الفصل بين المساحتين ركيزة أساسية للأمن لعدة أسباب:

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

3. كيف يتم التواصل بين المساحتين؟

يتم التفاعل بين مساحة المستخدم ومساحة النواة بطرق محكمة:

  • نداءات النظام (System Calls): هي الطريقة الرئيسية لطلب الخدمات من النواة. مثال: طلب قراءة ملف أو إرسال بيانات عبر الشبكة.
  • واجهات برمجة التطبيقات (APIs): واجهات تُقدّم وظائف عالية المستوى للمطورين، وتُترجم داخليًا إلى نداءات نظام. مثال: Win32 API في Windows.
  • برامج التشغيل (Drivers): برامج تُشغّل داخل النواة لتسهيل التفاعل مع الأجهزة المادية.

مثال توضيحي: عندما تطلب من متصفح الويب حفظ ملف، يرسل التطبيق طلبًا عبر API، يُترجم إلى نداء نظام (System Call) يتم التعامل معه من قبل النواة، والتي بدورها تقوم بتشغيل برنامج تشغيل القرص الصلب لتنفيذ عملية الكتابة.

4. التهديدات المتعلقة بهذا النموذج

التهديد الوصف مثال
Privilege Escalation تصعيد امتيازات تطبيق من مستوى مستخدم عادي إلى مستوى النواة. استغلال ثغرة في برنامج تشغيل للحصول على صلاحيات root.
Kernel Exploits استغلال أخطاء برمجية في كود النواة للوصول غير المشروع. استغلال ثغرة Use-After-Free في النواة لتجاوز صلاحيات الذاكرة.
Malicious Drivers تثبيت برامج تشغيل تحتوي على كود خبيث أو غير موثوق. برنامج تشغيل غير موقع يُعدّل وظائف النظام الأساسية.
Kernel Rootkits برمجيات خبيثة تُثبت داخل النواة وتتحكم بالنظام وتُخفي وجودها. Rootkit يقوم بتعديل نداءات النظام لإخفاء العمليات الخبيثة.

5. دراسات مقارنة وتقنيات حماية

طور كل نظام تشغيل تقنيات خاصة به لتعزيز الفصل بين المساحتين:

  • Windows: يستخدم **UAC** (User Account Control) للتحكم في صلاحيات المستخدم، و**Kernel Patch Protection** لمنع تعديل النواة، و**ASLR** (Address Space Layout Randomization) لمنع التنبؤ بمواقع الذاكرة.
  • Linux: يعتمد على **SELinux** و **AppArmor** لفرض سياسات تحكم في الوصول، و**seccomp** لتقييد نداءات النظام التي يمكن للتطبيقات استخدامها.
  • macOS: يطبق **SIP** (System Integrity Protection) لحماية ملفات النظام الأساسية، و**Gatekeeper** لمنع تشغيل التطبيقات غير الموثوقة.
نشاط تطبيقي: تحليل نداءات النظام في Linux

استخدام أداة strace لتحليل كيفية تواصل التطبيقات مع النواة يُعد طريقة ممتازة لفهم هذا المفهوم عمليًا.

تمرين عملي:

  1. افتح طرفية (Terminal) في نظام Linux.
  2. نفّذ الأمر whoami للتأكد من أنك لست مستخدمًا بصلاحيات root.
  3. حاول الوصول إلى ملف محمي بصلاحيات الجذر:
    ls /root/

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

  4. استخدم الأمر strace لتحليل نداءات النظام التي يقوم بها أمر بسيط مثل ls:
    strace ls

    هذا سيُظهر قائمة طويلة من نداءات النظام التي يستخدمها الأمر ls للتفاعل مع النواة، مثل فتح الملفات وقراءتها.

  5. (تمرين متقدم) قم بتتبع تطبيق يعمل في الخلفية مثل Firefox:
    sudo strace -p $(pidof firefox) -o trace.txt

    هذا الأمر سيُسجل جميع نداءات النظام الخاصة بـ Firefox في ملف trace.txt، مما يسمح لك بتحليلها لاحقًا.

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


أسئلة للمراجعة:

  • 1. اشرح الفرق بين **مساحة النواة** و**مساحة المستخدم** بكلماتك الخاصة.
  • 2. ما هو دور **نداء النظام (System Call)** في حماية نظام التشغيل؟
  • 3. اذكر ثلاثة أنواع من التهديدات التي تستهدف الفصل بين المساحتين.
  • 4. ما هي وظيفة تقنية **KASLR**؟ ولماذا تعتبر مهمة؟

مخرجات التعلم المتوقعة:

بنهاية هذه الوحدة، ينبغي أن يكون المتعلم قادرًا على:

  • التمييز بين مساحة النواة ومساحة المستخدم بدقة.
  • شرح الآليات الأمنية التي تحكم التفاعل بين المساحتين.
  • تحليل تأثير الثغرات البرمجية الناتجة عن فشل العزل بين المساحات.
  • تقديم حلول عملية لتحسين أمن التواصل بين التطبيقات والنواة.