Как ошибка графического драйвера на Samsung Galaxy S6 привела к утечке данных вкладок Google Chrome

click fraud protection

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

Еще в конце марта британская стартап-компания, специализирующаяся на тестировании надежности графических процессоров, обратилась к нам с предложением Ошибка графического процессора, которую они обнаружили что вызывает Qualcomm Snapdragon 845Самсунг Галакси С9/С9+ для перезагрузки при посещении веб-страницы. Фирма под названием ГрафикаFuzz, работал с нами, чтобы сообщить о проблеме Квалкомм и Samsung. Некоторым из наших читателей было интересно узнать, как такая компания, как ГрафикаFuzz способна находить эти уязвимости, поэтому мы сотрудничали с компанией, чтобы продемонстрировать, как они обнаружили более старую уязвимость графического процессора. Эта уже исправленная уязвимость позволяла злоумышленнику удаленно «шпионить» за содержимым Гугл Хром вкладки браузера на Самсунг Галакси С6.

Этот пользователь просматривал веб-сайт своего банка перед посещением вредоносной веб-страницы. Содержимое было захвачено и загружено на удаленный сервер. Источник: ГрафикаFuzz.

Как GraphicsFuzz находит ошибки графического процессора

Графический драйвер работает, беря программу шейдера и отправляя ее на выполнение в графический процессор и, таким образом, визуализируя изображение. Прежде чем отправить шейдер в графический процессор, графический драйвер преобразует его в форму, понятную графическому процессору; неправильный перевод может привести к сбою рендеринга, сбоям программы или устройства, неправильным изображениям и даже проблемам с безопасностью. ГрафикаFuzz имеет пакет автоматизированного тестирования это позволяет им находить эти ошибки на основе набора эталонных шейдеров. Когда пользователь проводит свой тест, все полученные изображения должны выглядеть одинаково. Любое изображение, которое выглядит по-другому, означает, что произошла ошибка.

Результаты нескольких популярных устройств, на которых выполняется набор тестов GraphicsFuzz. В эти таблицы включены Samsung Galaxy S6, Samsung Galaxy S7 и Samsung Galaxy S8. Источник: ГрафикаFuzz.

Для Samsung Galaxy S6: ГрафикаFuzz обнаружил, что изображения в одной из строк отображали изображения, которые должны были находиться в другой таблице. Это означает, что изображения из более ранних тестов просочились в более поздние тесты. Затем команда повторно запустила набор тестов в Google Chrome и обнаружила, что на изображении появляются части веб-страницы. Кроме того, они обнаружили, что при открытии другой вкладки на изображении появляются части других вкладок. По сути, эта ошибка позволяла одной вкладке Google Chrome передавать информацию о другой вкладке Chrome! Команда позади ГрафикаFuzz не искали намеренно ошибки безопасности, но в итоге обнаружили одну в результате тестирования. (Следует отметить, что команда воспроизвела ошибку в стандартном браузере Samsung на Galaxy S6, а также Мозилла Фаерфокс.)

Как работает ошибка

Изображение, использованное для запуска давней ошибки на Samsung Galaxy S6. Источник: ГрафикаFuzz.

«Вредоносная» веб-страница, созданная ГрафикаFuzz использует WebGL, чтобы попытаться нарисовать космическую сцену внутри холста, как показано выше. Цвет каждого пикселя определяется фрагментным шейдером — программой, предоставляемой веб-страницей для выполнения на графическом процессоре. ГрафикаFuzz framework изменил фрагментный шейдер, из-за чего он работал очень долго. Когда шейдер работает слишком долго, браузер или операционная система обычно прерывает рендеринг. Однако, хотя графический процессор прервал рендеринг после отрисовки нескольких пикселей, драйвер графического процессора не сообщил об этом в Google Chrome. (Если вы посмотрите на изображение в верхней части статьи, показывающее мусорную видеопамять, вы действительно сможете увидеть части космической сцены вверху. влево.) Это означает, что пиксели, которые были визуализированы до прерывания, остаются нетронутыми, а это означает, что окончательное визуализированное изображение в основном представляет собой мусорное видео. Память. Поскольку видеопамять постоянно используется для рендеринга других веб-страниц, «мусорные» данные фактически содержат предыдущие рендеры других веб-страниц. Таким образом, другие веб-страницы в конечном итоге отображаются на «вредоносной» веб-странице. Важно отметить, что WebGL позволяет веб-странице захватывать содержимое всего, что отображается; это изображение затем загружается на удаленный сервер.

Диаграмма, объясняющая длительную ошибку графического процессора, приводящую к «утечке» данных вкладок Chrome. Источник: ГрафикаFuzz.

Google Chrome использует несколько процессов, поэтому разные вкладки часто изолированы, что на первый взгляд делает этот эксплойт невозможным. Однако Chrome взаимодействует с графическим процессором, используя один «процесс графического процессора», что означает, что все вкладки используют одну и ту же память графического процессора, что позволяет этому эксплойту работать. На схеме выше это показано более подробно.

В этом видео ошибка демонстрируется в течение первых 22 секунд. Также продемонстрированы другие проблемы безопасности, обнаруженные GraphicsFuzz.

Уроки, которые необходимо извлечь

Некорректно работающий графический процессор может обойти все меры безопасности Google Chrome и Android, поскольку WebGL позволяет любой вредоносной веб-странице отправлять код на графический процессор для выполнения. Google не может исправить ошибки графического процессора поскольку компания не контролирует оборудование и драйверы. В этом случае поставщик графического процессора (в данном случае ARM) должен исправить ошибку, а OEM-производитель, чьи устройства затронуты (в данном случае Samsung), должен интегрировать исправление в обновление. Добавьте к этому операторов связи, и вы легко увидите, что исправление такой ошибки может занять очень много времени — на это ушло много времени. минимум 5 месяцев для большинства пользователей Samsung Galaxy S6 получить патч.

ГрафикаFuzz помогает производителям графических процессоров находить труднообнаружимые ошибки, например ошибки компиляции, которые приводят к генерации и выполнению неправильного кода на графическом процессоре. Их система автоматического тестирования позволяет им находить ошибки, подобные той, что продемонстрирована в этой статье. Также было показано, что длительный цикл, вызванный «вредоносной» веб-страницей, вызывает проблемы на других устройствах, таких как HTC One M7 и совсем недавно Самсунг Галакси С9. ГрафикаFuzz тестирует флагманские смартфоны и публикует таблица результатов который ранжирует эти устройства на основе их производительности в подмножестве тестов. Сотни сбоев и ошибок рендеринга были обнаружены во время тестирования, но большинство из них не исследовались на предмет того, представляют ли они угрозу безопасности. Однако, как показывает этот эксплойт, неправильно работающий графический процессор представляет собой угрозу безопасности, и вполне возможно, что одна или несколько критических уязвимостей безопасности ждут своего обнаружения. ГрафикаFuzz надеется, что производители графических процессоров в будущем будут уделять приоритетное внимание улучшению качества драйверов.

Сравнительная надежность графических драйверов, отсортированная по общему количеству проблем. Источник: ГрафикаFuzz.

График раскрытия информации

  • В декабре 2016 года ГрафикаFuzz сообщил об ошибке в Трекер ошибок Google Chromium потому что он имел право на участие в программе вознаграждений Chrome. После того, как GraphicsFuzz отправил ошибку в систему отслеживания ошибок Google Chromium, ошибка была принята Google и отправлена ​​​​в ARM и Samsung для исправления.
  • Google отправил отчет контактам в ARM и Samsung.
  • Samsung молча исправила ошибку и выпустила исправление в обновлении Android 7.0 Nougat, выпущенном в период с марта по июнь 2017 года. Хотя ни Samsung, ни Google, ни ARM не создали CVE, и ни Samsung, ни ARM не опубликовали никакой информации о патче, обратите внимание, что ГрафикаFuzz не сообщил об ошибке через правильный процесс.
  • Позже, ГрафикаFuzz смог подтвердить, что и Samsung, и ARM видели отчет и что ARM смогла устранить проблему благодаря отчету.
  • В августе 2017 года ГрафикаFuzz был вознагражден Google в размере 2000 долларов за отчет об ошибке.
  • В ноябре 2017 года отчет об ошибке был обнародован.