Как грешка в графичен драйвер на Samsung Galaxy S6 изтече данни от раздела на Google Chrome

click fraud protection

Някога чудили ли сте се как се откриват уязвимости в сигурността? Базираната в Обединеното кралство фирма GraphicsFuzz обяснява как са попаднали на грешка в графичния драйвер на Samsung Galaxy S6, която могат да използват, за да видят данни от отворени раздели в Google Chrome.

Още в края на март базирана в Обединеното кралство стартираща фирма, специализирана в тестване на надеждността на GPU, се обърна към нас с GPU грешка, която откриха което причинява Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ за рестартиране при посещение на уеб страница. Фирмата, наречена GraphicsFuzz, работи с нас, за да докладва проблема на Qualcomm и Samsung. Някои от нашите читатели се интересуваха да научат как изглежда една компания GraphicsFuzz е в състояние да открие тези уязвимости, така че си сътрудничихме с компанията, за да покажем как са открили по-стара уязвимост на GPU. Тази вече коригирана уязвимост позволи на нападателя да „шпионира“ дистанционно съдържанието на Google Chrome раздели на браузъра на Samsung Galaxy S6.

Този потребител е разглеждал уебсайта на своята банка, преди да посети злонамерената уеб страница. Съдържанието беше заснето и качено на отдалечен сървър. източник: GraphicsFuzz.

Как GraphicsFuzz намира GPU грешки

Графичният драйвер работи, като взема програма за шейдър и я изпраща до GPU, за да бъде изпълнена и по този начин да изобрази изображението. Преди да изпрати шейдъра към GPU, графичният драйвер го превежда във форма, която 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 модифицира фрагментния шейдър, което го накара да работи наистина дълго време. Когато даден шейдър работи твърде дълго, браузърът или операционната система обикновено прекъсва изобразяването. Въпреки това, докато GPU прекъсна изобразяването след изчертаване на няколко пиксела, драйверът на GPU не докладва това на Google Chrome. (Ако погледнете изображението в горната част на статията, показващо боклук видеопамет, всъщност можете да видите части от космическата сцена в горната част вляво.) Това означава, че пикселите, които са били изобразени преди прекъсването, са оставени недокоснати, което означава, че окончателното изобразено изображение е предимно боклук памет. Тъй като видеопаметта се използва непрекъснато за изобразяване на други уеб страници, данните за "боклук" всъщност съдържат предишни изобразявания на други уеб страници. По този начин други уеб страници в крайна сметка се показват на „злонамерената“ уеб страница. Най-важното е, че WebGL позволява на уеб страницата да улавя съдържанието на всичко, което се изобразява; това изображение след това се качва на отдалечен сървър.

Диаграма, обясняваща дългогодишния бъг на графичния процесор, причиняващ „изтичане“ на данни от раздела на Chrome. източник: GraphicsFuzz.

Google Chrome използва множество процеси, така че различните раздели често са изолирани, което прави този експлойт да изглежда невъзможен на пръв поглед. Chrome обаче взаимодейства с графичния процесор, използвайки един „процес на графичния процесор“, което означава, че всички раздели споделят една и съща памет на графичния процесор, което позволява на този експлойт да работи. Диаграмата по-горе показва това по-подробно.

Грешката е демонстрирана в това видео през първите 22 секунди. Други проблеми със сигурността, открити от GraphicsFuzz, също са демонстрирани.

Уроци, които трябва да се научат

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

GraphicsFuzz помага на доставчиците на графични процесори да намерят трудни за откриване грешки, като грешки при неправилно компилиране, които причиняват генерирането и изпълнението на грешен код на графичния процесор. Тяхната автоматизирана рамка за тестване им позволява да откриват грешки като този, представен в тази статия. Доказано е също, че продължителният цикъл, причинен от „злонамерената“ уеб страница, причинява проблеми на други устройства, като 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г. докладът за грешка беше публикуван.