Zaujímalo vás niekedy, ako sa zisťujú slabé miesta v zabezpečení? Britská firma GraphicsFuzz vysvetľuje, ako narazili na chybu grafického ovládača na Samsung Galaxy S6, ktorú mohli využiť na zobrazenie údajov z otvorených kariet v prehliadači Google Chrome.
Koncom marca nás začínajúca firma so sídlom v Spojenom kráľovstve, ktorá sa špecializuje na testovanie spoľahlivosti GPU, oslovila s a Objavili chybu GPU to spôsobuje Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ reštartovať pri návšteve webovej stránky. Firma, tzv GraphicsFuzz, spolupracoval s nami na nahlásení problému Qualcomm a Samsung. Niektorí z našich čitateľov mali záujem dozvedieť sa, ako sa spoločnosti páčia GraphicsFuzz dokáže nájsť tieto zraniteľnosti, preto sme so spoločnosťou spolupracovali, aby sme ukázali, ako objavili staršiu zraniteľnosť GPU. Táto už opravená zraniteľnosť umožnila útočníkovi vzdialene „špehovať“ obsah Google Chrome karty prehliadača na Samsung Galaxy S6.
Tento používateľ si pred návštevou škodlivej webovej stránky prezeral webovú stránku svojej banky. Obsah bol zachytený a odovzdaný na vzdialený server. Zdroj: GraphicsFuzz.
Ako GraphicsFuzz nájde chyby GPU
Grafický ovládač funguje tak, že vezme shader program a pošle ho do GPU, aby sa spustil, a tak vykreslil obrázok. Pred odoslaním shadera na GPU ho grafický ovládač preloží do podoby, ktorej GPU rozumie; chybný preklad môže viesť k zlyhaniu vykresľovania, zlyhaniu programu alebo zariadenia, nesprávnym obrázkom a dokonca aj bezpečnostným problémom. GraphicsFuzz má automatizovaný testovací balík čo im umožňuje nájsť tieto chyby na základe súboru referenčných shaderov. Keď používateľ vykoná svoj test, všetky výsledné obrázky majú vyzerať rovnako. Každý obrázok, ktorý vyzerá inak, znamená, že sa vyskytla chyba.
Výsledky niekoľkých populárnych zariadení s testovacím balíkom GraphicsFuzz. Samsung Galaxy S6, Samsung Galaxy S7 a Samsung Galaxy S8 sú zahrnuté v týchto grafoch. Zdroj: GraphicsFuzz.
Pre Samsung Galaxy S6, GraphicsFuzz zistil, že obrázky v jednom z riadkov zobrazujú obrázky, ktoré sa mali nachádzať v inej tabuľke. To znamená, že obrázky z predchádzajúcich testov unikali do neskorších testov. Tím potom znova spustil testovaciu sadu v prehliadači Google Chrome a zistil, že na obrázku sa objavujú časti webovej stránky. Okrem toho zistili, že otvorenie ďalšej karty spôsobilo, že sa na obrázku zobrazili časti iných kariet. Táto chyba v podstate umožnila jednej karte prehliadača Google Chrome uniknúť informácie o inej karte prehliadača Chrome! Tým vzadu GraphicsFuzz zámerne nehľadali bezpečnostné chyby, ale nakoniec jednu našli ako výsledok ich testovania. (Treba poznamenať, že tím reprodukoval chybu na sériovom prehliadači Samsung na Galaxy S6, ako aj Mozilla Firefox.)
Ako funguje chyba
Obrázok použitý na spustenie dlhotrvajúcej chyby na Samsung Galaxy S6. Zdroj: GraphicsFuzz.
„Škodlivá“ webová stránka vytvorená používateľom GraphicsFuzz používa WebGL na pokus o nakreslenie vesmírnej scény na plátno, ako je uvedené vyššie. Farba každého pixelu je určená fragment shaderom, programom poskytovaným webovou stránkou, ktorý sa spúšťa na GPU. The GraphicsFuzz framework upravil fragment shader, čo spôsobilo, že bežal naozaj dlho. Keď shader beží príliš dlho, prehliadač alebo operačný systém zvyčajne preruší vykresľovanie. Zatiaľ čo GPU prerušilo vykresľovanie po nakreslení niekoľkých pixelov, ovládač GPU to neoznámil prehliadaču Google Chrome. (Ak sa pozriete na obrázok v hornej časti článku zobrazujúci odpadovú videopamäť, v skutočnosti môžete vidieť časti vesmírnej scény v hornej časti vľavo.) To znamená, že pixely, ktoré boli vykreslené pred prerušením, zostanú nedotknuté, čo znamená, že konečný vykreslený obrázok je väčšinou odpadové video Pamäť. Keďže videopamäť sa nepretržite používa na vykresľovanie iných webových stránok, „odpadové“ údaje v skutočnosti obsahujú predchádzajúce vykresľovanie iných webových stránok. Na „škodlivej“ webovej stránke sa tak skončia ďalšie webové stránky. Rozhodujúce je, že WebGL umožňuje webovej stránke zachytiť obsah čohokoľvek, čo sa vykresľuje; tento obrázok sa potom nahrá na vzdialený server.
Diagram vysvetľujúci dlhotrvajúcu chybu GPU, ktorá spôsobuje „únik údajov na karte Chrome“. Zdroj: GraphicsFuzz.
Prehliadač Google Chrome používa viacero procesov, takže rôzne karty sú často izolované, takže toto zneužitie sa na prvý pohľad zdá nemožné. Prehliadač Chrome však spolupracuje s GPU pomocou jediného „procesu GPU“, čo znamená, že všetky karty zdieľajú rovnakú pamäť GPU, čo umožňuje, aby tento exploit fungoval. Vyššie uvedený diagram to ukazuje podrobnejšie.
Chyba je demonštrovaná v tomto videu počas prvých 22 sekúnd. Sú tiež demonštrované ďalšie bezpečnostné problémy, ktoré zistil GraphicsFuzz.
Poučenie, ktoré sa treba naučiť
Nesprávne fungujúci GPU môže obísť všetky bezpečnostné opatrenia prehliadača Google Chrome a systému Android, pretože WebGL umožňuje akejkoľvek škodlivej webovej stránke odoslať kód na vykonanie GPU. Google nedokáže opraviť chyby GPU pretože spoločnosť nekontroluje hardvér a ovládače. V tomto prípade je na dodávateľovi GPU (v tomto prípade ARM), aby chybu opravil, a na výrobcovi OEM, ktorého zariadenia sa to týka (v tomto prípade Samsung), aby opravu integroval do aktualizácie. Pridajte operátorov do mixu a je ľahké vidieť, ako môže oprava takejto chyby trvať naozaj dlho – trvalo to aspoň 5 mesiacov väčšina používateľov Samsung Galaxy S6 dostane opravu.
GraphicsFuzz pomáha predajcom GPU nájsť ťažko odhaliteľné chyby, ako sú chyby pri nesprávnej kompilácii, ktoré spôsobujú vygenerovanie a spustenie nesprávneho kódu na GPU. Ich automatizovaný testovací rámec im umožňuje nájsť chyby, ako je tá, ktorá je uvedená v tomto článku. Ukázalo sa, že dlhotrvajúca slučka spôsobená „škodlivou“ webovou stránkou spôsobuje problémy aj na iných zariadeniach, napr. HTC One M7 a nedávno aj Samsung Galaxy S9. GraphicsFuzz testuje vlajkové smartfóny a vydáva a výsledková tabuľka ktorá zoraďuje tieto zariadenia na základe ich výkonu v podmnožine ich testov. Stovky pádov a chýb pri vykresľovaní boli nájdené počas ich testovania, no väčšina z nich nie je skúmaná, aby sa zistilo, či nepredstavujú bezpečnostnú hrozbu. Ako však ukazuje tento exploit, nesprávne fungujúci GPU predstavuje bezpečnostné riziko a je možné, že jedna alebo viacero kritických bezpečnostných chýb čaká na odhalenie. GraphicsFuzz dúfa, že predajcovia GPU uprednostnia zlepšenie kvality ovládačov v budúcnosti.
Porovnateľná spoľahlivosť grafických ovládačov zoradená podľa počtu celkových problémov. Zdroj: GraphicsFuzz.
Časová os zverejnenia
- V decembri 2016 GraphicsFuzz nahlásil chybu na Nástroj na sledovanie chýb Google Chromium pretože spĺňal podmienky programu odmeňovania prehliadača Chrome. Potom, čo GraphicsFuzz odoslal chybu do nástroja na sledovanie chýb Google Chromium, spoločnosť Google túto chybu prijala a postúpila ju spoločnostiam ARM a Samsung na opravu.
- Google preposlala správu na kontakty v spoločnostiach ARM a Samsung.
- Spoločnosť Samsung potichu opravila chybu a zaviedla opravu v aktualizácii Android 7.0 Nougat, ktorá bola vydaná medzi marcom a júnom 2017. Hoci Samsung, Google alebo ARM nevytvorili žiadne CVE a ani Samsung ani ARM nezverejnili žiadne informácie o oprave, uvedomte si, že GraphicsFuzz nenahlásili chybu cez správny proces.
- neskôr GraphicsFuzz sa podarilo potvrdiť, že spoločnosť Samsung aj ARM videli správu a že ARM bola schopná vyriešiť problém kvôli správe.
- V auguste 2017 GraphicsFuzz bol od spoločnosti Google odmenený 2 000 USD za hlásenie chyby.
- V novembri 2017 správa o chybe bola zverejnená.