[تحديث: تم تصحيح الثغرة الأمنية الثانية] تم اكتشاف عيبين أمنيين خطيرين في أداة تحميل التشغيل OnePlus 3/3T، ويتم تصحيح أحدهما والآخر قيد المعالجة

تم اكتشاف عيبين متعلقين بأداة تحميل التشغيل لجهازي OnePlus 3 وOnePlus 3T. تم تصحيح أحدهما، والآخر قيد المعالجة.

منذ نشر هذه المقالة، قام الإصدار 4.0.3 من نظام التشغيل Oxygen بتصحيح الثغرة الأمنية الثانية التي تمت مناقشتها في هذه المقالة، وهي ثغرة dm-verity.

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

في بعض الأجهزة (خاصة الأجهزة التي تحمل علامة تجارية)، يشكل هذا مشكلة حيث يتعين على المستخدمين التعامل مع عقبات فنية كبيرة قبل أن يتمكنوا من إلغاء قفل أداة تحميل التشغيل. تتطلب الأجهزة الأخرى مثل هواتف Huawei تقديم التماس إلى OEM للحصول على رمز فريد لفتح أداة تحميل التشغيل - وهو عائق بسيط أمام الدخول، ولكنه ليس صعبًا للغاية. والأفضل من ذلك هو هواتف سلسلة Google Nexus/Pixel أو هواتف OnePlus التي تتطلب منك فقط تحديد خيار في إعدادات المطور ثم إرسال القليل منه fastboot الأوامر.

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


أداة تحميل التشغيل OnePlus 3/3T تفتح الثغرة الأمنية

وكانت مجموعة جديدة من نقاط الضعف كشفت للتو بواسطة روي هاي (@roeehay)، أولها يسمح بإلغاء قفل أداة تحميل التشغيل الخاصة بـ OnePlus 3/3T دون تأكيد المستخدم ودون إجراء إعادة ضبط المصنع. وصفت هذه الثغرة الأمنية CVE-2017-5625تعتبر ثغرة أمنية خطيرة وتؤثر على جميع أجهزة OnePlus 3/3T التي تعمل بنظام التشغيل OxygenOS 3.2-4.0.1. المستخدمون الذين قاموا بالترقية بالفعل إلى OxygenOS التزايدي 4.0.2 تحديث لا تتأثر بسبب هذه الثغرة الأمنية، حيث كشف السيد Hay بشكل خاص عن هذا الخلل لشركة OnePlus في 23 يناير حتى يتمكنوا من تصحيح المشكلة على الفور.

يعمل الخلل عن طريق إرسال أمر fastboot خاص ومخفي: fastboot oem 4F500301. بإرسال هذا الأمر، يتم تجاوز حالة قفل أداة تحميل التشغيل الخاصة بالمستخدم (حتى عندما لا يتم تمكين "السماح بإلغاء قفل OEM" في إعدادات المطور). لا يقوم الجهاز بمطالبة المستخدم ولا يقوم بمسح الجهاز كما ينبغي - في الواقع، سيستمر الجهاز في الإبلاغ عن قفل أداة تحميل التشغيل! أمر Fastboot آخر، fastboot oem 4F500302، سيعيد ضبط بعض إعدادات أداة تحميل التشغيل، ويمكن استخدامه لقفل جهاز غير مقفل بالفعل.

اكتشف السيد هاي أن أمر fastboot الأول يحدد ما أطلق عليه اسم "com.magicFlag" الذي يتجاوز الفحص الذي يحدد حالة قفل أداة تحميل التشغيل عند تنفيذ أمر الوميض أو المسح.

// 'oem 4F500301' handler
intsub_918427F0()
{
magicFlag_dword_91989C10 = 1;
if ( dword_9198D804 != dword_9198D804 )
assert(1, dword_9198D804, dword_9198D804);
return sendOK((int)"", dword_9198D804);
}

معالج فلاش Fastboot


// 'flash' handler
constchar *__fastcall sub_91847EEC(char *partitionName, int *a2, int a3)
{
char *pname; // r5@1
...
pname = partitionName;
v4 = a2;
v5 = a3;
if ( returnTRUE1(partitionName, (int)a2) )
{
result = (constchar *)sub_918428F0(pname, v6);
if ( (result || magicFlag_dword_91989C10)
&& ((result = (constchar *)sub_91842880(pname, v10)) != 0 || magicFlag_dword_91989C10) )
{
result = (constchar *)sub_918428F0(pname, v10);
if ( !result || magicFlag_dword_91989C10 )
goto LABEL_7;
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Critical partition flashing is not allowed";
}
else
{
v8 = dword_9198D804;
if ( dword_9198D804 != dword_9198D804 )
goto LABEL_28;
v11 = "Partition flashing is not allowed";
}
return (constchar *)FAIL2((int)v11, v10);
}
LABEL_7:
...
if ( *v4 != 0xED26FF3A )
{
if ( *v4 == 0xCE1AD63C )
cmd_flash_meta_img(pname, (unsigned int)v4, v5);
else
cmd_flash_mmc_img(pname, (int)v4, v5);
goto LABEL_10;
}
v7 = v4;
}
cmd_flash_mmc_sparse_img(pname, (int)v7, v5);
...
 }

اقرأ أكثر

معالج مسح Fastboot


// 'erase' handler
int __fastcall sub_91847118(char *partitionName, int a2, int a3)
{
 ...
v3 = partitionName;
v4 = returnTRUE1(partitionName, a2);
if ( !v4 )
{
LABEL_7:
...
if ( v4 )
{
if ( dword_9198D804 == dword_9198D804 )
return eraseParition(v3);
}
...
}
v4 = sub_918428F0(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition erase is not allowed";
return FAIL2((int)v7, v5);
}
goto LABEL_23;
}
v4 = sub_91842880(v3, v5);
if ( !v4 && !magicFlag_dword_91989C10 )
{
v6 = dword_9198D804;
if ( dword_9198D804 == dword_9198D804 )
{
v7 = "Partition flashing is not allowed";
return FAIL2((int)v7, v5);
}
LABEL_23:
assert(v4, v5, v6);
}
v4 = sub_918428F0(v3, v5);
if ( !v4 || magicFlag_dword_91989C10 )
goto LABEL_7;
v6 = dword_9198D804;
...
v7 = "Critical partition erase is not allowed";
return FAIL2((int)v7, v5);
}

اقرأ أكثر

يمكن استخدام CVE-2017-5626 لـ تنفيذ كود النواة. يمكن للمهاجم وميض أي صورة تمهيد يريدها. على الرغم من ذلك، إذا قاموا بوميض صورة تمهيد معدلة، فسيتم تفعيل "التمهيد المعتمد" وتحذير المستخدم من اكتشاف تعديل. إحدى الطرق التي يمكن من خلالها تجاوز ذلك هي عرض صورة تمهيد قديمة وغير معدلة - وهي صورة تحتوي على برامج استغلال قديمة تم تصحيحها منذ ذلك الحين. ومع ذلك، فإن "التحذير" الذي يتم إعطاؤه لك يستمر لمدة 5 ثوانٍ فقط، ويتجاهل نفسه تلقائيًا وينتقل إلى حالة التشغيل التي تم التحقق منها حيث سيستمر تنفيذ تعليمات المهاجم البرمجية.

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

OnePlus3:/ # id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),
1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),
3003(inet),3006(net_bw_stats),3009(readproc) context=u: r: su: s0

OnePlus3:/ # getenforce
Permissive

وغني عن القول أن هذا أمر خطير إلى حد ما. يمكن هزيمة الجهاز المسروق أو المعطل الذي تعتقد أنه آمن بسبب إجراءات الأمان النموذجية الخاصة بك تمامًا باستخدام هذا الاستغلال.


ثغرة أمنية في أجهزة OnePlus 3/3T SELinux

الثغرة الثانية، المسمى CVE-2017-5624يؤثر جميع إصدارات OxygenOS ويسمح لأحد تعطيل DM-الحقيقة. كشف السيد Hay عن هذه الثغرة الأمنية لفريق OnePlus Security يوم 16 ينايرولكن تجدر الإشارة إلى أنه عضو كبير في XDA th3g1zاكتشف بشكل مستقل هذه الثغرة الأمنية على 23 يناير. لقد تحدثنا إلى OnePlus الذين لديهم أكدوا أنهم اعترفوا وسيعملون على إصلاح الثغرة الأمنية الثانية في التحديث المستقبلي.

هذا الهجوم أيضًا سهل التنفيذ إلى حد ما. يحتاج المرء فقط إلى إصدار أمر fastboot واحد لتعطيل (أو تمكين) dm-verity: fastboot oem disable dm-verity. لتمكينه، ببساطة الإصدار fastboot oem enable dm-verity. يظهر أدناه معالج هذا الأمر، المأخوذ من تفريغ أداة تحميل التشغيل.


// 'oem disable_dm_verity' handler
intsub_9183B8EC()
{
int v0; // r0@1
int v1; // r1@1

dmVerity_dword_91960740 = 0;
v0 = sub_91845E10("ANDROID-BOOT!");
if ( dword_9198D804 != dword_9198D804 )
assert(v0, v1, dword_9198D804);
return sendOK((int)"", v1);
}

سيؤدي إصدار هذا الأمر إلى تعيين علامة، والتي يسميها السيد Hay dmVerity، والتي يستخدمها محمل الإقلاع لإرسال وسيطة سطر أوامر kernel والتي يمكنها تمكين أو تعطيل dm-verity.

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


الاستنتاج والملاحظة من OnePlus

إن الانتهاكات المحتملة لهاتين الثغرات الأمنية أمر مخيف. نثني على السيد Hay لكشفه عن نقاط الضعف هذه بشكل خاص وبسرعة كبيرة لـ OnePlus. ومع ذلك، لا يسعنا إلا أن نشعر بالقلق من إمكانية الوصول إلى أوامر التشغيل السريع هذه على هذه الأجهزة. عندما كتبنا دليلاً حول كيفية القيام بذلك اكتشف أوامر Fastboot المخفية، كان هدفنا هو إعلام المستخدمين بأنه قد تكون هناك بعض الأوامر المثيرة للاهتمام التي يمكنهم استخدامها لتحسين تجربتهم. لم نعتقد أبدًا أن مثل هذه الأوامر المميزة للغاية ستكون موجودة في كود أداة تحميل التشغيل. أما بالنسبة لل "لماذا" يتم تضمين أوامر fastboot هذه في البرامج الثابتة، وقد حصلنا على "لا تعليق." 

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


المصدر: روي هاي