تسمح الثغرة الأمنية في OnePlus 3/3T Bootloader بتغيير SELinux إلى الوضع المسموح به في Fastboot

click fraud protection

ثغرة أمنية خطيرة في أداة تحميل التشغيل OnePlus 3/3T تسمح للمهاجمين بتبديل حالة SELinux من فرض إلى السماح! واصل القراءة لمعرفة المزيد!

ال ون بلس 3 و ال ون بلس 3T من بين أفضل الهواتف التي يمكنك شراؤها الآن. في حين أن الهواتف الرائدة القادمة لعام 2017 لم يتم الكشف عنها بعد للمستهلكين، في غيابها يهيمن OnePlus 3/3T على الأداء العالمي الحقيقي بسعر مناسب.

لكن، إذا أردنا أن نكون عادلين في تقييم الجهاز، علينا أن نعترف أنه على الرغم من الجهود التي بذلها OnePlus، إلا أن OnePlus 3/3T لا يخلو من العيوب. على سبيل المثال، لقد أبلغنا سابقًا عن مشكلات أمنية مثل OnePlus يقوم بتسريب تفاصيل IMEI عبر الشبكة عند التحقق من وجود تحديثات على هاتفك. والآن، لدينا مشكلة أمنية أخرى نضيفها إلى القائمة، وهذه المشكلة ذات تداعيات أكثر خطورة.

تفتح الثغرة الأمنية في أداة تحميل التشغيل لجهاز OnePlus 3/3T الأبواب أمام الهجمات الضارة. كما وجد Roee Hay من فريق أبحاث أمان التطبيقات IBM X-Force و تم الكشف عنها على منصة IBM X-Force Exchangeتسمح هذه الثغرة الأمنية للمهاجم بالتلاعب بحالة SELinux على الأجهزة، وبالتالي تحويلها إلى الوضع المسموح به. كل ما يحتاجه المهاجم هو

إما الوصول المادي للجهاز، أو الوصول عن بعد إلى اتصال ADB إلى الجهاز.

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

من السهل استغلال الثغرة الأمنية، في الواقع، يبدو أنها تمثل خطأً كبيرًا من جانب OnePlus بدلاً من الشكل الذي تتخيله. أولاً، يقوم أحد المهاجمين بإعادة تشغيل جهاز OnePlus 3/3T في وضع "fastboot" - إذا كان لديك وصول فعلي، فما عليك سوى الضغط على زر رفع مستوى الصوت أثناء التمهيد، ولكن إذا لم يكن لديك إمكانية الوصول، فيمكنك إصدار أمر ADB adb reboot bootloader إلى الجهاز. يعرض وضع التشغيل السريع الموجود على الجهاز واجهة USB، والتي لا ينبغي أن تسمح بإكمال أي أمر حساس للأمان على الأجهزة المقفلة. ولكن على OnePlus 3/3T، ما عليك سوى إصدار ملف fastboot oem selinux permissive يقوم الأمر من خلال واجهة fastboot بتبديل وضع SELinux من إنفاذ ل متساهل.

fastboot oem selinux permissive
...
OKAY[ 0.045s]
finished. totaltime: 0.047s

...

OnePlus3:/ $ getenforce
Permissive
OnePlus3:/ $

ولزيادة تعقيد المشكلة، لا يوجد لدى OnePlus 3 و3T أي إدخال في "حول الشاشة" لذكر حالة SELinux الحالية للجهاز. سيظل الضحية غافلاً عن حالة أجهزته المخترقة إذا لم يشهد استغلال الاستغلال بشكل نشط. إن عدم وجود إدخال حالة SELinux في "حول الشاشة" مفقود من إصدارات Open Beta المستندة إلى Android 6.0 بالإضافة إلى ROM الرسمية لنظام Android 7.0.

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

لا توجد علاجات ضد الضعف اعتبارا من اليوم.


تحديث:

لقد تواصلنا مع سلطانكسدا، أحد مطوري ROM المخصص الأكثر شهرة لأجهزة OnePlus، لمعرفة ما إذا كان يمكنه مساعدتنا في معرفة المزيد حول هذه المشكلة. لقد بحث على الفور في الكود للعثور على المصدر الجذري، وهذا ما وجده:

الطريقة التي يتم بها تشغيل "fastboot oem selinux "يعمل الأمر لأنه يضيف وسيطة إضافية إلى سطر أوامر kernel عند تشغيل Linux. تأتي الوسيطة الإضافية في شكل "androidboot.selinux="، أين يمكن أن يكون "متسامحا". هناك حيث تصبح الأمور مضحكة: "androidboot."يتم تحليل الوسائط الموجودة في سطر أوامر kernel بواسطة ملف init الخاص بنظام Android. في إصدار إنتاج Android العادي (إصدار "مستخدم")، يتم تجاهل الوسيطة "androidboot.selinux" تمامًا ويتم إجبار selinux دائمًا على التنفيذ. إذن فإن هذا الخلل يتكون من مسألتين:

  1. يمكن للمستخدمين جعل أداة تحميل التشغيل تمرر علامة من شأنها أن تجعل selinux متساهلًا في إنشاء ROM للهندسة/تصحيح الأخطاء
  2. قام OnePlus بتعديل init الخاص بنظام Android من أجل احترام علامة "androidboot.selinux" حتى بالنسبة لإصدارات ROM الإنتاجية

هنا حيث تم تكوين init الخاص بنظام Android لتجاهل علامة "androidboot.selinux" الخاصة بتصميمات الإنتاج: https://android.googlesource.com/platform/system/core/+/android-6.0.0_r41/init/Android.mk#7

تم تعيين علامة ALLOW_DISABLE_SELINUX في الكود المصدري على 1 فقط لتصحيح أخطاء المستخدم والإنشاءات الهندسية

(لا يتأثر ROM الخاص بي بهذا لأنني أقوم بإنشاء ROM الخاص بي في وضع الإنتاج (المستخدم))

لذلك يتم تجاهل "androidboot.selinux" ببساطة في ذاكرة القراءة فقط (ROM) الخاصة بي، و"fastboot oem selinux" يبدو أيضًا أن الأمر هو شيء أنشأه OnePlus، حيث لا يوجد مثل هذا الأمر في مصادر أداة تحميل التشغيل العامة لـ CAF. في أعلى رأسي، يمكنني التفكير في 4 طرق لإصلاح هذه المشكلة للمستخدمين الذين لديهم أدوات تحميل التشغيل غير المؤمّنة:

  1. قم بتحرير أداة تحميل التشغيل لتغيير كافة مثيلات السلسلة "selinux" إلى شيء مختلف (مثل "sclinux") بحيث لا يتم التعرف على العلامة بواسطة init الخاص بنظام Android
  2. قم بتحرير ملف Android init الثنائي في OxygenOS لاستبدال كافة مثيلات "androidboot.selinux" إلى شيء مختلف (مثل "androidboot.sclinux") بحيث لا يتعرف Android init على ملف علامة androidboot.selinux
  3. قم بإضافة اختراق لبرنامج تشغيل سطر أوامر kernel مشابه لتجاوز SafetyNet الخاص بي لإخفاء علامة "androidboot.selinux" من init الخاص بنظام Android

نود أن نشكر Sultanxda على وقته وجهده في مساعدتنا في معرفة ما يجري خلف الكواليس. لقد تواصلنا أيضًا مع OnePlus، الذي على علم بالموقف وينظر في الأمر.


نأمل أن تعترف شركة OnePlus علنًا بالمشكلة الخطيرة وأن تتحلى بالشفافية في خططها لإصلاحها.