هل تساءلت يومًا عن كيفية اكتشاف الثغرات الأمنية؟ تشرح شركة GraphicsFuzz ومقرها المملكة المتحدة كيف عثرت على خطأ في برنامج تشغيل الرسومات على هاتف Samsung Galaxy S6 والذي يمكنهم استغلاله لرؤية البيانات من علامات التبويب المفتوحة في Google Chrome.
مرة أخرى في أواخر شهر مارس، تواصلت معنا شركة ناشئة مقرها المملكة المتحدة متخصصة في اختبار موثوقية وحدة معالجة الرسومات اكتشفوا خطأ GPU الذي يسبب كوالكوم سناب دراجون 845سامسونج جالاكسي اس9/اس9+ لإعادة التشغيل عند زيارة صفحة ويب. ودعت الشركة GraphicsFuzz، عملت معنا لإبلاغ المشكلة إلى كوالكوم و سامسونج. كان بعض قرائنا مهتمين بمعرفة كيف تبدو الشركة GraphicsFuzz قادرة على العثور على هذه الثغرات الأمنية، لذلك تعاوننا مع الشركة لعرض كيفية اكتشافها لثغرة أمنية قديمة في وحدة معالجة الرسومات. سمحت هذه الثغرة الأمنية التي تم تصحيحها بالفعل للمهاجم "بالتجسس" عن بعد على محتويات جوجل كروم علامات تبويب المتصفح على سامسونج جالاكسي اس 6.
كان هذا المستخدم يتصفح موقع البنك الخاص به قبل زيارة صفحة الويب الضارة. تم التقاط المحتويات وتحميلها إلى خادم بعيد. مصدر: GraphicsFuzz.
كيف يجد GraphicsFuzz أخطاء GPU
يعمل برنامج تشغيل الرسومات عن طريق أخذ برنامج تظليل وإرساله إلى وحدة معالجة الرسومات ليتم تنفيذه وبالتالي عرض الصورة. قبل إرسال التظليل إلى وحدة معالجة الرسومات، يقوم برنامج تشغيل الرسومات بترجمته إلى نموذج يمكن لوحدة معالجة الرسومات فهمه؛ يمكن أن تؤدي الترجمة الخاطئة إلى فشل العرض، أو تعطل البرنامج أو الجهاز، أو ظهور صور خاطئة، أو حتى مشكلات أمنية. GraphicsFuzz لديه مجموعة الاختبارات الآلية يتيح لهم العثور على هذه الأخطاء بناءً على مجموعة من التظليل المرجعي. عندما يكون المستخدم يدير اختبارهم، من المفترض أن تبدو جميع الصور الناتجة متماثلة. أي صورة تبدو مختلفة تعني وجود خطأ.
نتائج العديد من الأجهزة الشائعة التي تقوم بتشغيل مجموعة اختبار GraphicsFuzz. تم تضمين Samsung Galaxy S6 وSamsung Galaxy S7 وSamsung Galaxy S8 في هذه المخططات. مصدر: GraphicsFuzz.
بالنسبة لهاتف سامسونج جالاكسي S6، GraphicsFuzz اكتشفت أن الصور الموجودة في أحد الصفوف كانت تعرض صورًا من المفترض أن تكون في جدول آخر. وهذا يعني أن الصور من الاختبارات السابقة كانت تتسرب إلى الاختبارات اللاحقة. أعاد الفريق بعد ذلك تشغيل مجموعة الاختبار في Google Chrome واكتشف أن أجزاء من صفحة الويب تظهر في الصورة. علاوة على ذلك، وجدوا أن فتح علامة تبويب أخرى يتسبب في إظهار الصورة لأجزاء من علامات التبويب الأخرى. في الأساس، سمح هذا الخطأ لإحدى علامات تبويب Google Chrome بتسريب معلومات حول علامة تبويب أخرى في Chrome! الفريق خلف GraphicsFuzz لم يبحثوا عمدًا عن الأخطاء الأمنية، لكن انتهى بهم الأمر إلى العثور على واحدة نتيجة للاختبار. (تجدر الإشارة إلى أن الفريق أعاد إنتاج الخلل الموجود في متصفح Samsung الموجود على هاتف Galaxy S6 أيضًا موزيلا فايرفوكس.)
كيف يعمل الخطأ
الصورة المستخدمة لإثارة الخلل طويل الأمد في هاتف Samsung Galaxy S6. مصدر: GraphicsFuzz.
صفحة الويب "الخبيثة" التي أنشأها GraphicsFuzz يستخدم WebGL لمحاولة رسم مشهد فضائي داخل لوحة قماشية كما هو موضح أعلاه. يتم تحديد لون كل بكسل بواسطة تظليل الأجزاء، وهو برنامج توفره صفحة الويب ليتم تنفيذه على وحدة معالجة الرسومات. ال GraphicsFuzz قام إطار العمل بتعديل تظليل الأجزاء مما أدى إلى تشغيله لفترة طويلة جدًا. عندما يتم تشغيل التظليل لفترة طويلة جدًا، عادةً ما يقوم المتصفح أو نظام التشغيل بإحباط العرض. ومع ذلك، على الرغم من أن وحدة معالجة الرسومات قد أوقفت العرض بعد رسم بضع وحدات بكسل، إلا أن برنامج تشغيل وحدة معالجة الرسومات لم يبلغ Google Chrome بهذا الأمر. (إذا ألقيت نظرة على الصورة الموجودة أعلى المقالة والتي تظهر ذاكرة الفيديو المهملة، فيمكنك في الواقع رؤية أجزاء من مشهد الفضاء في الأعلى اليسار.) وهذا يعني أن وحدات البكسل التي تم عرضها قبل الإجهاض تُركت دون تغيير، مما يعني أن الصورة النهائية التي تم عرضها هي في الغالب فيديو تافه ذاكرة. نظرًا لاستخدام ذاكرة الفيديو بشكل مستمر لعرض صفحات الويب الأخرى، فإن البيانات "غير المرغوب فيها" تحتوي في الواقع على عروض سابقة لصفحات الويب الأخرى. وبالتالي، يتم عرض صفحات الويب الأخرى على صفحة الويب "الضارة". والأهم من ذلك، أن WebGL يسمح لصفحة الويب بالتقاط محتويات كل ما يتم عرضه؛ ثم يتم تحميل هذه الصورة إلى خادم بعيد.
رسم تخطيطي يشرح خطأ وحدة معالجة الرسومات (GPU) طويل الأمد والذي يتسبب في "تسريب" بيانات علامة تبويب Chrome. مصدر: GraphicsFuzz.
يستخدم Google Chrome عمليات متعددة، لذلك غالبًا ما يتم عزل علامات التبويب المختلفة، مما يجعل هذا الاستغلال يبدو مستحيلاً على السطح. ومع ذلك، يتفاعل Chrome مع وحدة معالجة الرسومات باستخدام "عملية GPU" واحدة، مما يعني أن جميع علامات التبويب تشترك في نفس ذاكرة وحدة معالجة الرسومات، مما يسمح لهذا الاستغلال بالعمل. ويوضح الرسم البياني أعلاه هذا بمزيد من التفصيل.
تم توضيح الخطأ في هذا الفيديو خلال أول 22 ثانية. تم أيضًا عرض المشكلات الأمنية الأخرى التي عثر عليها GraphicsFuzz.
الدروس التي يجب تعلمها
يمكن لوحدة معالجة الرسومات التي تسيء التصرف أن تتجاوز جميع إجراءات الأمان الخاصة بـ Google Chrome وAndroid نظرًا لأن WebGL يسمح لأي صفحة ويب ضارة بإرسال تعليمات برمجية إلى وحدة معالجة الرسومات للتنفيذ. لا تستطيع Google إصلاح أخطاء GPU نظرًا لأن الشركة لا تتحكم في الأجهزة وبرامج التشغيل. في هذه الحالة، يعود الأمر إلى بائع وحدة معالجة الرسومات (في هذه الحالة، ARM) لإصلاح الخلل وعلى الشركة المصنّعة للمعدات الأصلية (OEM) التي تأثرت أجهزتها (في هذه الحالة، Samsung) لدمج الإصلاح في التحديث. أضف شركات النقل إلى هذا المزيج وسيكون من السهل أن ترى كيف يمكن أن يستغرق إصلاح خطأ مثل هذا وقتًا طويلاً - لقد استغرق الأمر 5 أشهر على الأقل ليحصل معظم مستخدمي Samsung Galaxy S6 على التصحيح.
GraphicsFuzz يساعد بائعي وحدة معالجة الرسومات في العثور على الأخطاء التي يصعب اكتشافها مثل أخطاء الترجمة الخاطئة التي تتسبب في إنشاء تعليمات برمجية خاطئة وتنفيذها على وحدة معالجة الرسومات. يتيح لهم إطار الاختبار الآلي الخاص بهم العثور على أخطاء مثل تلك الموضحة في هذه المقالة. تبين أيضًا أن الحلقة الطويلة الأمد التي تسببها صفحة الويب "الضارة" تسبب مشكلات على الأجهزة الأخرى مثل اتش تي سي وان ام7 ومؤخرا سامسونج جالاكسي اس9. GraphicsFuzz تختبر الهواتف الذكية الرائدة وتنشر جدول النتائج الذي يصنف هذه الأجهزة بناءً على أدائها في مجموعة فرعية من اختباراتها. مئات من الأعطال وأخطاء العرض تم العثور عليها أثناء الاختبار، ولكن لم يتم التحقيق في معظمها لمعرفة ما إذا كانت تشكل تهديدًا أمنيًا. ومع ذلك، كما هو موضح من خلال هذا الاستغلال، فإن سوء استخدام وحدة معالجة الرسومات يمثل خطرًا أمنيًا، ومن الممكن أن تكون هناك ثغرة أمنية خطيرة واحدة أو أكثر في انتظار اكتشافها. GraphicsFuzz تأمل أن يعطي بائعو GPU الأولوية لتحسين جودة برنامج التشغيل في المستقبل.
الموثوقية المقارنة لبرامج تشغيل الرسومات، مرتبة حسب عدد المشكلات الإجمالية. مصدر: GraphicsFuzz.
الجدول الزمني للإفصاح
- في ديسمبر 2016، GraphicsFuzz أبلغ عن الخلل إلى أداة تعقب الأخطاء في Google Chromium لأنها كانت مؤهلة لبرنامج مكافآت Chrome. بعد أن أرسل موقع GraphicsFuzz الخطأ إلى متتبع أخطاء Google Chromium، قبلت Google الخطأ وأحالته إلى ARM وSamsung لإصلاحه.
- جوجل أحال التقرير إلى جهات الاتصال في ARM وSamsung.
- قامت شركة Samsung بتصحيح الخطأ بصمت وطرحت الإصلاح في تحديث Android 7.0 Nougat الذي تم إصداره بين مارس ويونيو من عام 2017. على الرغم من عدم وجود CVE تم إنشاؤه بواسطة Samsung أو Google أو ARM ولم تصدر Samsung أو ARM أي معلومات حول التصحيح، لاحظ أنه GraphicsFuzz لم يبلغ عن الخطأ عبر عملية مناسبة.
- لاحقاً، GraphicsFuzz تمكنت من التأكد من أن كلاً من Samsung وARM قد اطلعتا على التقرير، وأن ARM تمكنت من إصلاح المشكلة بسبب التقرير.
- في أغسطس 2017، GraphicsFuzz حصل على مكافأة قدرها 2000 دولار من Google مقابل تقرير الخطأ.
- في نوفمبر 2017، تم نشر تقرير الخطأ للعامة.