Як помилка графічного драйвера на Samsung Galaxy S6 призвела до витоку даних вкладки Google Chrome

Ви коли-небудь замислювалися, як виявляються вразливі місця? Британська фірма GraphicsFuzz пояснює, як вони натрапили на помилку графічного драйвера на Samsung Galaxy S6, яку вони могли використовувати для перегляду даних із відкритих вкладок у Google Chrome.

Ще наприкінці березня британська компанія-стартап, що спеціалізується на тестуванні надійності GPU, звернулася до нас із Вони виявили помилку GPU що викликає Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ для перезавантаження під час відвідування веб-сторінки. Фірма, дзвон GraphicsFuzz, працював з нами, щоб повідомити про проблему Qualcomm і Samsung. Деяким із наших читачів було цікаво дізнатися, як виглядає компанія GraphicsFuzz може знайти ці вразливості, тому ми співпрацювали з компанією, щоб продемонструвати, як вони виявили старішу вразливість GPU. Ця вже виправлена ​​вразливість дозволяла зловмиснику віддалено «шпигувати» за вмістом Гугл хром вкладки браузера на 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, щоб спробувати намалювати космічну сцену всередині полотна, як показано вище. Колір кожного пікселя визначається фрагментним шейдером, програмою, яка надається веб-сторінкою для виконання на GPU. The GraphicsFuzz Framework змінив шейдер фрагментів, через що він працював дуже довго. Коли шейдер працює надто довго, браузер або операційна система зазвичай припиняє рендеринг. Однак, хоча графічний процесор перервав рендеринг після малювання кількох пікселів, драйвер графічного процесора не повідомив про це Google Chrome. (Якщо ви подивитеся на зображення у верхній частині статті, яке показує сміттєву відеопам’ять, ви дійсно зможете побачити частини космічної сцени вгорі ліворуч.) Це означає, що пікселі, які були відрендерені до переривання, залишаються недоторканими, тобто остаточне відрендерене зображення є здебільшого сміттєвим відео пам'ять. Оскільки відеопам'ять постійно використовується для відтворення інших веб-сторінок, "сміттєві" дані насправді містять попередні відтворення інших веб-сторінок. Таким чином, на «шкідливій» веб-сторінці відображаються інші веб-сторінки. Важливо те, що WebGL дозволяє веб-сторінці фіксувати вміст усього, що відображається; це зображення потім завантажується на віддалений сервер.

Діаграма, що пояснює тривалу помилку GPU, яка спричинила «витік» даних вкладки Chrome. Джерело: GraphicsFuzz.

Google Chrome використовує кілька процесів, тому різні вкладки часто ізольовані, що робить цей експлойт неможливим на перший погляд. Однак Chrome взаємодіє з GPU за допомогою єдиного «процесу GPU», що означає, що всі вкладки спільно використовують ту саму пам’ять GPU, що дозволяє цьому експлойту працювати. Діаграма вище показує це більш детально.

Помилка демонструється в цьому відео протягом перших 22 секунд. Також показано інші проблеми безпеки, виявлені GraphicsFuzz.

Уроки, які потрібно вивчити

Графічний процесор, що працює неправильно, може обійти всі заходи безпеки Google Chrome і Android, оскільки WebGL дозволяє будь-якій шкідливій веб-сторінці надсилати код на виконання графічному процесору. Google не може виправити помилки GPU оскільки компанія не контролює обладнання та драйвери. У цьому випадку постачальник графічного процесора (у цьому випадку ARM) має виправити помилку, а OEM, чиї пристрої зазнали впливу (у цьому випадку Samsung), інтегрувати виправлення в оновлення. Додайте операторів зв’язку, і ви легко побачите, як виправлення подібної помилки може зайняти дуже багато часу. не менше 5 місяців для більшості користувачів Samsung Galaxy S6 отримати виправлення.

GraphicsFuzz допомагає постачальникам GPU знаходити помилки, які важко виявити, наприклад помилки компіляції, які спричиняють генерацію та виконання неправильного коду на GPU. Їх система автоматизованого тестування дозволяє знаходити такі помилки, як описана в цій статті. Доведено, що тривалий цикл, спричинений «зловмисною» веб-сторінкою, також спричиняє проблеми на інших пристроях, таких як HTC One M7 а нещодавно Samsung Galaxy S9. GraphicsFuzz тестує флагманські смартфони та публікує a таблиця результатів який класифікує ці пристрої на основі їх продуктивності в підмножині їхніх тестів. Сотні збоїв і помилок візуалізації були виявлені під час тестування, але більшість з них не досліджено, щоб визначити, чи становлять вони загрозу безпеці. Однак, як показує цей експлойт, графічний процесор, що працює неправильно, становить загрозу безпеці, і можливо, що одна або кілька критичних вразливостей безпеки очікують свого виявлення. GraphicsFuzz сподівається, що постачальники GPU нададуть пріоритет покращенню якості драйверів у майбутньому.

Порівняльна надійність графічних драйверів, упорядкована за кількістю проблем. Джерело: GraphicsFuzz.

Графік розкриття інформації

  • У грудні 2016 р. GraphicsFuzz повідомили про помилку в Відстеження помилок Google Chromium оскільки він відповідав вимогам програми винагороди 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 р. повідомлення про помилку було оприлюднено.