Hogyan szivárogtatta ki a Samsung Galaxy S6 grafikus illesztőprogramjának hibája a Google Chrome lap adatait

Gondolkozott már azon, hogyan találják meg a biztonsági réseket? Az egyesült királyságbeli GraphicsFuzz cég elmagyarázza, hogyan találtak rá egy grafikus illesztőprogram-hibára a Samsung Galaxy S6-on, amelyet kihasználva megtekinthették a Google Chrome megnyitott lapjairól származó adatokat.

Még március végén egy brit székhelyű, GPU megbízhatóságának tesztelésére szakosodott start-up cég keresett meg minket egy GPU hibát fedeztek fel ami a Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ újraindításhoz, amikor meglátogat egy weboldalt. A cég hívott GraphicsFuzz, együttműködött velünk, hogy jelentse a problémát Qualcomm és Samsung. Néhány olvasónk érdeklődött, hogy megtudja, hogyan szereti egy cég GraphicsFuzz képes megtalálni ezeket a sebezhetőségeket, ezért együttműködtünk a céggel, hogy bemutassuk, hogyan fedeztek fel egy régebbi GPU-sérülékenységet. Ez a már kijavított biztonsági rés lehetővé tette a támadók számára, hogy távolról „kémkedjenek” a webhely tartalma után Google Chrome böngésző lapjait a Samsung Galaxy S6.

Ez a felhasználó bankja webhelyét tekintette meg, mielőtt felkereste a rosszindulatú weboldalt. A tartalmat rögzítették és feltöltötték egy távoli szerverre. Forrás: GraphicsFuzz.

Hogyan találja meg a GraphicsFuzz a GPU-hibákat?

A grafikus illesztőprogram úgy működik, hogy vesz egy shader programot, és elküldi a GPU-nak, hogy végre lehessen hajtani, és így renderelje le a képet. Mielőtt elküldené a shadert a GPU-nak, a grafikus illesztőprogram a GPU számára érthető formára fordítja azt; a hibás fordítás renderelési hibához, program- vagy eszközösszeomláshoz, rossz képekhez és akár biztonsági problémákhoz is vezethet. GraphicsFuzz rendelkezik egy automatizált tesztelő csomag amely lehetővé teszi számukra, hogy megtalálják ezeket a hibákat referencia-shaderek alapján. Amikor egy felhasználó lefuttatja a tesztjüket, az összes kapott képnek ugyanúgy kell kinéznie. Bármely kép, amely máshogy néz ki, azt jelenti, hogy hiba történt.

A GraphicsFuzz tesztcsomagot futtató számos népszerű eszköz eredményei. A Samsung Galaxy S6, a Samsung Galaxy S7 és a Samsung Galaxy S8 szerepel ezeken a táblázatokon. Forrás: GraphicsFuzz.

A Samsung Galaxy S6 esetében GraphicsFuzz felfedezte, hogy az egyik sorban lévő képek olyan képeket mutatnak, amelyeknek egy másik táblázatban kellett volna lenniük. Ez azt jelenti, hogy a korábbi tesztek képei beszivárogtak a későbbi tesztekbe. A csapat ezután újra futtatta a tesztcsomagot a Google Chrome-ban, és felfedezte, hogy a weboldal egyes részei megjelennek a képen. Ezenkívül azt találták, hogy egy másik lap megnyitása azt eredményezte, hogy a képen más lapok részei jelennek meg. Lényegében ez a hiba lehetővé tette, hogy egy Google Chrome-lap információ szivárogjon ki egy másik Chrome-lapról! A csapat mögött GraphicsFuzz nem szándékosan keresett biztonsági hibákat, de a tesztelés eredményeként végül találtak egyet. (Megjegyzendő, hogy a csapat reprodukálta a hibát a Samsung gyári böngészőjében a Galaxy S6-on, valamint Mozilla Firefox.)

Hogyan működik a hiba

A kép a Samsung Galaxy S6 régóta fennálló hibáját váltotta ki. Forrás: GraphicsFuzz.

által létrehozott "rosszindulatú" weboldal GraphicsFuzz a WebGL-t használja, hogy megpróbáljon teret rajzolni a vásznon belül, a fentiek szerint. Az egyes pixelek színét egy fragment shader határozza meg, egy olyan program, amelyet a weboldal biztosít a GPU-n történő végrehajtáshoz. A GraphicsFuzz A keretrendszer módosította a fragment shader-t, ami miatt az nagyon hosszú ideig futott. Ha egy shader túl sokáig fut, a böngésző vagy az operációs rendszer általában megszakítja a megjelenítést. Míg azonban a GPU néhány képpont rajzolása után megszakította a megjelenítést, a GPU illesztőprogramja nem jelentette ezt a Google Chrome-nak. (Ha megnézed a cikk tetején lévő képet, amely szemét videomemóriát mutat, valójában az űrjelenet részeit láthatod felül balra.) Ez azt jelenti, hogy a megszakítás előtt renderelt képpontok érintetlenül maradnak, vagyis a végső renderelt kép többnyire szemét videó memória. Mivel a videomemóriát folyamatosan használják más weboldalak megjelenítésére, a "szemét" adatok valójában más weboldalak korábbi megjelenítéseit tartalmazzák. Így végül más weboldalak is megjelennek a „rosszindulatú” weboldalon. Lényeges, hogy a WebGL lehetővé teszi a weboldal számára, hogy rögzítse a megjelenített tartalom tartalmát; ez a kép ezután feltöltődik egy távoli szerverre.

Diagram, amely elmagyarázza a régóta fennálló GPU-hibát, amely a Chrome lap adatainak "kiszivárgását" okozza. Forrás: GraphicsFuzz.

A Google Chrome több folyamatot használ, így a különböző lapok gyakran el vannak különítve, így ez a kizsákmányolás a felszínen lehetetlennek tűnik. A Chrome azonban egyetlen "GPU-folyamat" használatával kölcsönhatásba lép a GPU-val, ami azt jelenti, hogy minden lap ugyanazon a GPU-memórián osztozik, így ez a kihasználás működik. A fenti ábra ezt mutatja be részletesebben.

A hiba az első 22 másodpercben látható ebben a videóban. A GraphicsFuzz által talált egyéb biztonsági problémák is bemutatásra kerülnek.

Levonandó tanulságok

A rosszul működő GPU megkerülheti a Google Chrome és az Android összes biztonsági intézkedését, mivel a WebGL lehetővé teszi, hogy bármely rosszindulatú weboldal kódot küldjön a GPU-nak végrehajtásra. A Google nem tudja kijavítani a GPU hibákat mivel a cég nem ellenőrzi a hardvert és az illesztőprogramokat. Ebben az esetben a GPU gyártójának (jelen esetben az ARM-nek) a dolga a hiba kijavítása, az OEM-nek pedig, akinek az eszközei érintettek (jelen esetben a Samsung), integrálni kell a javítást egy frissítésbe. Adjon hozzá hordozókat a keverékhez, és könnyen belátható, hogy egy ilyen hiba kijavítása nagyon sokáig tarthat – ez kellett legalább 5 hónap hogy a legtöbb Samsung Galaxy S6 felhasználó megkapja a javítást.

GraphicsFuzz segít a GPU-gyártóknak megtalálni a nehezen észlelhető hibákat, például a félrefordítási hibákat, amelyek rossz kód generálását és végrehajtását okozzák a GPU-n. Automatizált tesztelési keretrendszerük lehetővé teszi számukra, hogy megtalálják a jelen cikkben bemutatotthoz hasonló hibákat. A "rosszindulatú" weboldal által okozott hosszan tartó hurok más eszközökön is problémákat okoz, mint pl. HTC One M7 és újabban a Samsung Galaxy S9. GraphicsFuzz teszteli a zászlóshajó okostelefonokat és közzéteszi a eredmények táblázata amely a tesztek egy részhalmazában teljesített teljesítményük alapján rangsorolja ezeket az eszközöket. Több száz összeomlás és renderelési hiba a tesztelés során találtak rájuk, de a legtöbbet nem vizsgálják annak megállapítására, hogy jelentenek-e biztonsági fenyegetést. Amint azonban ez a kizsákmányolás is mutatja, a rosszul működő GPU biztonsági kockázatot jelent, és lehetséges, hogy egy vagy több kritikus biztonsági rés vár felfedezésre. GraphicsFuzz reméli, hogy a GPU-gyártók a jövőben az illesztőprogramok minőségének javítását helyezik előtérbe.

A grafikus illesztőprogramok összehasonlító megbízhatósága, az összes probléma száma szerint rendezve. Forrás: GraphicsFuzz.

Közzétételi idővonal

  • 2016 decemberében GraphicsFuzz jelentette a hibát a Google Chromium hibakövető mert jogosult volt a Chrome Reward Programra. Miután a GraphicsFuzz elküldte a hibát a Google Chromium hibakövetőnek, a Google elfogadta a hibát, és továbbította az ARM-nek és a Samsungnak javításra.
  • Google továbbította a jelentést az ARM és a Samsung kapcsolattartóihoz.
  • A Samsung csendben kijavította a hibát, és bevezette a javítást az Android 7.0 Nougat frissítésében, amely 2017 márciusa és júniusa között jelent meg. Bár a Samsung, a Google vagy az ARM nem hozott létre CVE-t, és sem a Samsung, sem az ARM nem adott ki semmilyen információt a javításról, vegye figyelembe, hogy GraphicsFuzz nem jelentette a hibát a megfelelő folyamat.
  • A későbbiekben, GraphicsFuzz meg tudta erősíteni, hogy a Samsung és az ARM is látta a jelentést, és az ARM a jelentésnek köszönhetően meg tudta oldani a problémát.
  • 2017 augusztusában GraphicsFuzz 2000 dollárt kapott a Google a hibajelentésért.
  • 2017 novemberében nyilvánosságra került a hibajelentés.