نظام التشغيل Linux المحسَّن للأمان في Android

كجزء من نموذج أمان Android، يستخدم نظام التشغيل Android ‎Security-Enhanced Linux (SELinux) لفرض التحكّم الإجباري في الوصول (MAC) على جميع العمليات، حتى العمليات التي تعمل باستخدام امتيازات المستخدم الجذر/المشرف (إمكانات Linux). ساهمت العديد من الشركات والمؤسسات في تنفيذ SELinux في نظام التشغيل Android. باستخدام SELinux، يمكن لنظام Android حماية خدمات النظام والحد من وصولها بشكل أفضل، والتحكّم في الوصول إلى بيانات التطبيقات وسجلات النظام، والحد من تأثيرات البرامج الضارّة، وحماية المستخدمين من العيوب المحتمَلة في الرموز البرمجية على الأجهزة المتحرّكة.

يعمل SELinux وفقًا لمبدأ الرفض التلقائي: أيّ عملية ليست مُسموحة بشكلٍ صريح تُرفض. يمكن أن يعمل SELinux في وضعَين عامَّين:

  • وضع السماح، الذي يتم فيه تسجيل عمليات رفض الأذونات ولكن لا يتم فرضها
  • وضع فرض، الذي يتم فيه تسجيل عمليات رفض الأذونات و فرضها

يتضمّن نظام التشغيل Android تنسيق SELinux في وضع التنفيذ وسياسة أمان مقابلة تعمل تلقائيًا على مستوى AOSP. في وضع التنفيذ، يتم منع الإجراءات غير المسموح بها، ويُسجِّل نظام التشغيل جميع المخالفات التي تمّت محاولة تنفيذها فيملفَي dmesg وlogcat. عند التطوير، يجب استخدام هذه الأخطاء لتحسين البرامج وسياسات SELinux قبل فرض هذه السياسات. لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة Implementing SELinux.

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

الخلفية

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

في الإصدار Android 5.0 والإصدارات الأحدث، يتم فرض سياسة SELinux بالكامل، استنادًا إلى الإصدار المتساهل من Android 4.3 والفرض الجزئي لسياسة Android 4.4. وبفضل هذا التغيير، توقّف Android عن فرض الامتثال على مجموعة محدودة من النطاقات المهمة (installd وnetd وvold و zygote) وأصبح يفرض الامتثال على كل النطاقات (أكثر من 60 نطاقًا). وعلى وجه التحديد:

  • يتم فرض كل الإعدادات في الإصدار 5.x من نظام التشغيل Android والإصدارات الأحدث.
  • يجب عدم تشغيل أي عمليات أخرى غير init في نطاق init.
  • يشير أي رفض عام (للأجهزة التي تعمل بنظام التشغيل block_device أو socket_device أو default_service) إلى أنّه يحتاج الجهاز إلى نطاق خاص.

في الإصدار 6.0 من Android، تم تحسين أمان النظام من خلال تقليل تساهل سياستنا لتشمل عزلًا أفضل بين المستخدمين، وفلترة IOCTL، وخفض التهديدات التي تواجه الخدمات المكشوفة، وتعزيز إجراءات الأمان في نطاقات SELinux، ومحاولة محدودة للغاية للوصول إلى /proc.

عدّل نظام التشغيل Android 7.0 إعدادات SELinux لتعزيز تأمين مساحة التطبيق المحصورة والحد من مساحة الهجوم. قسّم هذا الإصدار أيضًا حِزمة mediaserver الموحّدة إلى عمليات أصغر حجمًا لتقليل نطاق أذوناتها. لمزيد من التفاصيل، يُرجى الاطّلاع على مقالتَي حماية Android باستخدام المزيد من وسائل الدفاع في نواة Linux وتعزيز أمان حِزمة الوسائط.

عدّل نظام Android 8.0 أمان SELinux للعمل مع Treble، الذي يفصل رمز المورّد من المستوى الأدنى عن إطار عمل نظام Android. عدّل هذا الإصدار سياسة ملف تعريف أمان نظام التشغيل (SELinux) للسماح لمصنعي الأجهزة ومورّدي شرائح المعالجة المركزية (SOC) بتعديل أجزاءهم من السياسة وإنشاء صورهم (vendor.img وboot.img وغيرها)، ثم تعديل هذه الصور بغض النظر عن النظام الأساسي أو العكس.

على الرغم من أنّه من الممكن استخدام إصدار أحدث من النظام الأساسي (إطار العمل) على الجهاز، لا يمكن استخدام إصدار أقدم من إصدار النظام الأساسي (system.img) في صور المورّد (vendor.img/odm.img). وبالتالي، قد يؤدي استخدام إصدار أحدث من النظام الأساسي إلى حدوث مشاكل في توافق SELinux لأنّ سياسة SELinux للنظام الأساسي تكون في إصدار أحدث من أجزاء SELinux الخاصة بالمورّد من السياسة. يقدّم نموذج Android 8.0 طريقة للحفاظ على التوافق لمنع عمليات التحديثات التلقائية المتزامنة غير الضرورية.

مصادر إضافية

للحصول على مساعدة في إنشاء سياسات SELinux مفيدة، يُرجى الرجوع إلى المراجع التالية: