كيف تسرب خطأ برنامج تشغيل الرسومات على Samsung Galaxy S6 بيانات علامة تبويب Google Chrome

في أواخر شهر مارس ، اتصلت بنا شركة ناشئة مقرها المملكة المتحدة متخصصة في اختبار موثوقية GPU مع خلل في وحدة معالجة الرسومات اكتشفوا أنه يتسبب في إعادة تشغيل Qualcomm Snapdragon 845 Samsung Galaxy S9 / S9 + عند زيارة صفحة ويب. عملت الشركة ، التي تسمى GraphicsFuzz ، معنا للإبلاغ عن المشكلة إلى كوالكوم وسامسونج. كان بعض قرائنا مهتمين بمعرفة كيفية تمكن شركة مثل GraphicsFuzz من العثور على نقاط الضعف هذه ، لذلك تعاوننا مع الشركة لعرض كيف اكتشفوا ثغرة أمنية قديمة في GPU. هذه الثغرة المصححة بالفعل سمحت للمهاجم "بالتجسس" عن بعد على محتويات علامات تبويب متصفح Google Chrome على Samsung Galaxy S6.

كان هذا المستخدم يشاهد موقع البنك الخاص به قبل زيارة صفحة الويب الضارة. تم التقاط المحتويات وتحميلها على خادم بعيد. المصدر: GraphicsFuzz.

كيف يجد GraphicsFuzz أخطاء GPU

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

نتائج العديد من الأجهزة الشائعة التي تشغل مجموعة اختبار GraphicsFuzz. يتم تضمين Samsung Galaxy S6 و Samsung Galaxy S7 و Samsung Galaxy S8 في هذه المخططات. المصدر: GraphicsFuzz.

بالنسبة إلى Samsung Galaxy S6 ، اكتشف GraphicsFuzz أن الصور الموجودة في أحد الصفوف تعرض صورًا من المفترض أن تكون في جدول آخر. هذا يعني أن الصور من الاختبارات السابقة كانت تتسرب إلى الاختبارات اللاحقة. ثم أعاد الفريق تشغيل مجموعة الاختبار في Google Chrome واكتشف أن أجزاء من صفحة الويب كانت تظهر في الصورة. علاوة على ذلك ، وجدوا أن فتح علامة تبويب أخرى تسبب في إظهار الصورة لأجزاء من علامات تبويب أخرى. في الأساس ، سمح هذا الخطأ لإحدى علامات تبويب Google Chrome بتسريب معلومات حول علامة تبويب أخرى في Chrome! لم يكن الفريق الذي يقف خلف GraphicsFuzz يبحث عن عمد عن الأخطاء الأمنية ، لكن انتهى بهم الأمر إلى العثور على واحد كنتيجة لاختبارهم. (تجدر الإشارة إلى أن الفريق استنسخ الأخطاء في متصفح Samsung الخاص بالأوراق المالية على Galaxy S6 وكذلك Mozilla Firefox.)

كيف يعمل الخلل

الصورة المستخدمة لإطلاق الأخطاء التي طال أمدها على Samsung Galaxy S6. المصدر: GraphicsFuzz.

تستخدم صفحة الويب "الضارة" التي أنشأتها GraphicsFuzz WebGL لمحاولة رسم مشهد فضاء داخل لوحة قماشية كما هو موضح أعلاه. يتم تحديد لون كل بكسل بواسطة تظليل جزء ، وهو برنامج يتم توفيره بواسطة صفحة الويب لتنفيذه على وحدة معالجة الرسومات. قام إطار عمل GraphicsFuzz بتعديل تظليل الأجزاء الذي تسبب في تشغيله لفترة طويلة بالفعل. عندما يعمل التظليل لفترة طويلة ، فإن المتصفح أو نظام التشغيل يجهضان التقديم عادةً. ومع ذلك ، في حين أجهض GPU في العرض بعد رسم عدد قليل من وحدات البكسل ، فإن برنامج تشغيل GPU لم يبلغ Google Chrome بهذا. (إذا ألقيت نظرة على الصورة الموجودة في الجزء العلوي من المقالة والتي تُظهر ذاكرة الفيديو غير المهملة ، يمكنك بالفعل مشاهدة أجزاء من مشهد الفضاء في أعلى اليسار). هذا يعني أن وحدات البكسل التي تم تقديمها قبل الإجهاض لم تُمس ، وهذا يعني أن الصورة المقدمة النهائية هي في معظمها ذاكرة الفيديو القمامة. نظرًا لاستخدام ذاكرة الفيديو بشكل مستمر لتقديم صفحات الويب الأخرى ، تحتوي بيانات "البيانات المهملة" فعليًا على الإصدارات السابقة لصفحات الويب الأخرى. وبالتالي ، يتم عرض صفحات الويب الأخرى على صفحة الويب "الضارة". من الأهمية بمكان أن WebGL تسمح لصفحة الويب بالتقاط محتويات أي شيء يتم تقديمه ؛ ثم يتم تحميل هذه الصورة إلى خادم بعيد.

رسم تخطيطي يشرح علة GPU طويلة الأمد التي تسببت في "تسرب" بيانات بيانات Chrome. المصدر: GraphicsFuzz.

يستخدم Google Chrome عمليات متعددة ، لذلك غالبًا ما تكون علامات التبويب المختلفة معزولة ، مما يجعل هذا الاستغلال يبدو مستحيلًا على السطح. ومع ذلك ، يتفاعل Chrome مع GPU باستخدام "عملية GPU" واحدة ، مما يعني أن جميع علامات التبويب تشترك في نفس ذاكرة GPU ، مما يسمح لهذا الاستغلال بالعمل. يوضح الشكل أعلاه هذا بمزيد من التفصيل.

يظهر الخطأ في هذا الفيديو خلال أول 22 ثانية. يتم توضيح مشكلات الأمان الأخرى التي تم العثور عليها بواسطة GraphicsFuzz.

الدروس التي يجب تعلمها

يمكن أن يتخطى GPU الخاطئ جميع تدابير الأمان الخاصة بـ Google Chrome و Android لأن WebGL يسمح لأي صفحة ويب ضارة بإرسال رمز إلى GPU للتنفيذ. لا تستطيع Google إصلاح أخطاء GPU نظرًا لأن الشركة لا تتحكم في الأجهزة وبرامج التشغيل. في هذه الحالة ، يعود الأمر إلى بائع GPU (في هذه الحالة ، ARM) لإصلاح الخطأ والشركة المصنعة الأصلية التي تتأثر أجهزتها (في هذه الحالة ، Samsung) لدمج الإصلاح في تحديث. أضف شركات النقل إلى هذا المزيج ومن السهل أن ترى كيف يمكن أن يستغرق إصلاح هذا الخطأ وقتًا طويلاً ، فقد استغرق الأمر أكثر من 5 أشهر حتى يتلقى معظم مستخدمي Samsung Galaxy S6 التصحيح.

تساعد GraphicsFuzz موردي GPU في العثور على أخطاء يصعب اكتشافها مثل أخطاء سوء التصنيف التي تتسبب في إنشاء رمز خاطئ وتنفيذه على GPU. يسمح لهم إطار الاختبار الآلي الخاص بهم بالعثور على أخطاء مثل الخطأ الذي تم عرضه في هذه المقالة. كما تبين أن الحلقة الطويلة الأمد الناتجة عن صفحة الويب "الضارة" تسبب مشكلات في أجهزة أخرى مثل HTC One M7 ومؤخراً Samsung Galaxy S9. تقوم GraphicsFuzz باختبار الهواتف الذكية الرائدة وتنشر جدول نتائج يصنف هذه الأجهزة استنادًا إلى أدائها في مجموعة فرعية من اختباراتها. تم العثور على المئات من الأعطال وأخطاء التجسيد أثناء الاختبار ، ولكن لم يتم التحقيق في معظمها لمعرفة ما إذا كانت تشكل تهديدًا أمنيًا. ومع ذلك ، كما هو موضح في هذا الاستغلال ، فإن GPU الخاطئة تمثل مخاطرة أمنية ، ومن المحتمل أن تكون هناك ثغرة أمنية واحدة أو أكثر تنتظر اكتشافها. وتأمل GraphicsFuzz أن يولي بائعو GPU الأولوية لتحسين جودة برنامج التشغيل في المستقبل.

الموثوقية المقارنة لبرامج تشغيل الرسومات ، مرتبة حسب عدد إجمالي المشكلات. المصدر: GraphicsFuzz.

الجدول الزمني للإفصاح

  • في ديسمبر 2016 ، أبلغت GraphicsFuzz عن الخطأ إلى Google Chromium bug tracker لأنه مؤهل لبرنامج مكافآت Chrome. بعد أن أرسلت GraphicsFuzz الخطأ إلى متتبع أخطاء Google Chromium ، تم قبول هذا الخطأ من قِبل Google وأحيلته إلى ARM و Samsung لإجراء الترقيع.
  • أحالت Google التقرير إلى جهات اتصال في ARM و Samsung.
  • قامت شركة Samsung بتصحيح الخطأ ونشر الإصلاح في تحديث Android 7.0 Nougat الذي تم إصداره بين مارس ويونيو من عام 2017. على الرغم من عدم وجود CVE التي أنشأتها Samsung أو Google أو ARM ولم تصدر Samsung أو ARM أي معلومات عن التصحيح ، لاحظ أن GraphicsFuzz لم يبلغ عن الخطأ عبر العملية الصحيحة.
  • في وقت لاحق ، تمكنت GraphicsFuzz من تأكيد أن كل من Samsung و ARM قد شاهدتا التقرير ، وأن ARM كان قادرًا على حل المشكلة بسبب التقرير.
  • في أغسطس 2017 ، تم منح GraphicsFuzz مكافأة قدرها 2000 دولار بواسطة Google لتقرير الأخطاء.
  • في نوفمبر 2017 ، تم نشر تقرير الأخطاء.