Linux المعزز بالأمان في Android

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

يعمل SELinux على مبدأ الرفض الافتراضي: يتم رفض أي شيء غير مسموح به صراحةً. يمكن أن يعمل SELinux في وضعين عالميين:

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

يتضمن Android SELinux في وضع الفرض وسياسة الأمان المقابلة التي تعمل بشكل افتراضي عبر AOSP. في وضع الفرض، يتم منع الإجراءات غير المسموح بها ويتم تسجيل جميع محاولات الانتهاكات بواسطة kernel إلى dmesg و logcat . عند التطوير، يجب عليك استخدام هذه الأخطاء لتحسين برامجك وسياسات SELinux قبل تنفيذها. لمزيد من التفاصيل، راجع تنفيذ SELinux .

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

خلفية

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

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

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

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

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

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

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

مصادر إضافية

للمساعدة في إنشاء سياسات SELinux مفيدة، راجع المصادر التالية.