Přemýšleli jste někdy nad tím, jak se zjišťují slabá místa zabezpečení? Britská firma GraphicsFuzz vysvětluje, jak narazila na chybu grafického ovladače na Samsung Galaxy S6, kterou mohli využít k zobrazení dat z otevřených karet v prohlížeči Google Chrome.
Koncem března se na nás obrátila start-upová firma se sídlem ve Spojeném království specializující se na testování spolehlivosti GPU s a Objevili chybu GPU to způsobuje Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ pro restartování při návštěvě webové stránky. Firma, tzv GraphicsFuzz, spolupracovali s námi na nahlášení problému Qualcomm a Samsung. Někteří z našich čtenářů se zajímali o to, jak se společnost líbí GraphicsFuzz je schopen tyto zranitelnosti najít, a tak jsme se společností spolupracovali, abychom předvedli, jak objevili starší zranitelnost GPU. Tato již opravená zranitelnost umožnila útočníkovi vzdáleně „špionovat“ obsah Google Chrome kartách prohlížeče na Samsung Galaxy S6.
Tento uživatel si před návštěvou škodlivé webové stránky prohlížel web své banky. Obsah byl zachycen a nahrán na vzdálený server. Zdroj:
Jak GraphicsFuzz najde chyby GPU
Ovladač grafiky funguje tak, že vezme shader program a odešle ho do GPU, aby se provedl, a tím vykreslil obrázek. Před odesláním shaderu na GPU jej grafický ovladač převede do podoby, které GPU rozumí; chybný překlad může vést k selhání vykreslování, selhání programu nebo zařízení, nesprávným obrázkům a dokonce i bezpečnostním problémům. GraphicsFuzz má automatizovaná testovací sada což jim umožňuje najít tyto chyby na základě sady referenčních shaderů. Když uživatel provede svůj test, všechny výsledné obrázky mají vypadat stejně. Jakýkoli obrázek, který vypadá jinak, znamená, že došlo k chybě.
Výsledky několika oblíbených zařízení s testovací sadou GraphicsFuzz. V těchto žebříčcích jsou zahrnuty Samsung Galaxy S6, Samsung Galaxy S7 a Samsung Galaxy S8. Zdroj: GraphicsFuzz.
Pro Samsung Galaxy S6, GraphicsFuzz zjistili, že obrázky v jednom z řádků zobrazují obrázky, které měly být v jiné tabulce. To znamená, že obrázky z dřívějších testů unikaly do pozdějších testů. Tým poté znovu spustil testovací sadu v prohlížeči Google Chrome a zjistil, že na obrázku se objevují části webové stránky. Dále zjistili, že otevření další karty způsobilo, že se na obrázku zobrazily části jiných karet. Tato chyba v podstatě umožnila, aby jedna karta Google Chrome unikla informace o jiné kartě Chrome! Tým vzadu GraphicsFuzz záměrně nehledali bezpečnostní chyby, ale nakonec jednu našli jako výsledek svého testování. (Je třeba poznamenat, že tým reprodukoval chybu ve standardním prohlížeči Samsung na Galaxy S6 a také Mozilla Firefox.)
Jak chyba funguje
Obrázek použitý ke spuštění dlouhotrvající chyby na Samsung Galaxy S6. Zdroj: GraphicsFuzz.
„Škodlivá“ webová stránka vytvořená uživatelem GraphicsFuzz používá WebGL k pokusu nakreslit prostorovou scénu na plátno, jak je uvedeno výše. Barva každého pixelu je určena fragment shaderem, programem poskytovaným webovou stránkou, který se spouští na GPU. The GraphicsFuzz framework upravil fragment shader, který způsobil, že běžel opravdu dlouho. Když shader běží příliš dlouho, prohlížeč nebo operační systém obvykle přeruší vykreslování. Zatímco však GPU přerušilo vykreslování po nakreslení několika pixelů, ovladač GPU to Google Chrome nenahlásil. (Pokud se podíváte na obrázek v horní části článku zobrazující odpadní videopaměť, můžete ve skutečnosti vidět části vesmírné scény nahoře vlevo.) To znamená, že pixely, které byly vykresleny před přerušením, zůstanou nedotčeny, což znamená, že konečný vykreslený obrázek je většinou nesmyslné video. Paměť. Vzhledem k tomu, že se videopaměť nepřetržitě používá k vykreslování jiných webových stránek, „odpadní“ data ve skutečnosti obsahují předchozí vykreslování jiných webových stránek. Na „škodlivé“ webové stránce se tak nakonec zobrazí jiné webové stránky. Podstatné je, že WebGL umožňuje webové stránce zachytit obsah čehokoli, co je vykreslováno; tento obrázek je poté nahrán na vzdálený server.
Diagram vysvětlující dlouhotrvající chybu GPU způsobující „únik dat na kartě Chrome“. Zdroj: GraphicsFuzz.
Google Chrome používá více procesů, takže různé karty jsou často izolované, takže toto zneužití se na první pohled zdá nemožné. Chrome však spolupracuje s GPU pomocí jediného „procesu GPU“, což znamená, že všechny karty sdílejí stejnou paměť GPU, což umožňuje, aby tento exploit fungoval. Výše uvedený diagram to ukazuje podrobněji.
Chyba je demonstrována v tomto videu během prvních 22 sekund. Jsou také demonstrovány další bezpečnostní problémy zjištěné GraphicsFuzz.
Ponaučení
Špatně fungující GPU může obejít všechna bezpečnostní opatření Google Chrome a Android, protože WebGL umožňuje jakékoli škodlivé webové stránce odeslat kód do GPU ke spuštění. Google nemůže opravit chyby GPU protože společnost nekontroluje hardware a ovladače. V tomto případě je na dodavateli GPU (v tomto případě ARM), aby chybu opravil, a OEM, jehož zařízení se to týká (v tomto případě Samsung), aby opravu integroval do aktualizace. Přidejte do mixu operátory a je snadné vidět, jak může oprava takové chyby trvat opravdu dlouho – trvalo to minimálně 5 měsíců většina uživatelů Samsung Galaxy S6 obdrží opravu.
GraphicsFuzz pomáhá dodavatelům GPU najít těžko odhalitelné chyby, jako jsou chyby při chybné kompilaci, které způsobují generování a provádění nesprávného kódu na GPU. Jejich automatizovaný testovací rámec jim umožňuje najít chyby, jako je ta, která je uvedena v tomto článku. Ukázalo se také, že dlouhotrvající smyčka způsobená „škodlivou“ webovou stránkou způsobuje problémy na jiných zařízeních, např. HTC One M7 a v poslední době také Samsung Galaxy S9. GraphicsFuzz testuje vlajkové smartphony a vydává a výsledková tabulka který řadí tato zařízení na základě jejich výkonu na podmnožinu jejich testů. Stovky pádů a chyb při vykreslování byly nalezeny během jejich testování, ale většina z nich není vyšetřována, aby se zjistilo, zda nepředstavují bezpečnostní hrozbu. Jak však ukazuje tento exploit, nefunkční GPU představuje bezpečnostní riziko a je možné, že jedna nebo více kritických bezpečnostních chyb čeká na své objevení. GraphicsFuzz doufá, že výrobci GPU v budoucnu upřednostní zlepšení kvality ovladačů.
Srovnávací spolehlivost grafických ovladačů seřazená podle počtu celkových problémů. Zdroj: GraphicsFuzz.
Časová osa zveřejnění
- V prosinci 2016 GraphicsFuzz nahlásil chybu na Google Chromium bug tracker protože byl způsobilý pro program odměn Chrome. Poté, co GraphicsFuzz odeslal chybu do Google Chromium bug trackeru, chybu přijal Google a předal ji ARM a Samsung k opravě.
- Google zprávu přeposlal na kontakty ve společnostech ARM a Samsung.
- Společnost Samsung v tichosti opravila chybu a zavedla opravu v aktualizaci Android 7.0 Nougat, která byla vydána mezi březnem a červnem 2017. Přestože Samsung, Google nebo ARM nevytvořily žádné CVE a ani Samsung ani ARM nezveřejnily žádné informace o opravě, vezměte na vědomí, že GraphicsFuzz nenahlásili chybu prostřednictvím správný proces.
- Později, GraphicsFuzz se podařilo potvrdit, že jak Samsung, tak ARM zprávu viděly a že ARM byla schopna problém kvůli zprávě opravit.
- V srpnu 2017 GraphicsFuzz byl od Googlu odměněn 2 000 $ za zprávu o chybě.
- V listopadu 2017 zpráva o chybě byla zveřejněna.