Har du noen gang lurt på hvordan sikkerhetssårbarheter blir funnet? Det britiske selskapet GraphicsFuzz forklarer hvordan de kom over en grafikkdriverfeil på Samsung Galaxy S6 som de kunne utnytte for å se data fra åpne faner i Google Chrome.
Tilbake i slutten av mars henvendte et britisk-basert oppstartsfirma som spesialisert seg på testing av GPU-pålitelighet oss med en GPU-feil de oppdaget som forårsaker Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ for å starte på nytt når du besøker en nettside. Firmaet, ringte GraphicsFuzz, jobbet med oss for å rapportere problemet til Qualcomm og Samsung. Noen av våre lesere var interessert i å lære hvordan et selskap liker GraphicsFuzz er i stand til å finne disse sårbarhetene, så vi samarbeidet med selskapet for å vise frem hvordan de oppdaget en eldre GPU-sårbarhet. Denne allerede korrigerte sårbarheten tillot en angriper å eksternt "spionere" på innholdet i Google Chrome nettleserfaner på Samsung Galaxy S6.
Denne brukeren så på bankens nettsted før han besøkte den ondsinnede nettsiden. Innholdet ble fanget opp og lastet opp til en ekstern server. Kilde:
Hvordan GraphicsFuzz finner GPU-feil
En grafikkdriver fungerer ved å ta et shader-program og sende det til GPUen for å bli utført og dermed gjengi bildet. Før shaderen sendes til GPUen, oversetter grafikkdriveren den til en form som GPUen kan forstå; en feil oversettelse kan føre til gjengivelsesfeil, program- eller enhetskrasj, feil bilder og til og med sikkerhetsproblemer. GraphicsFuzz har en automatisert testpakke som lar dem finne disse feilene basert på et sett med referanseskyggere. Når en bruker kjører testen deres, skal alle de resulterende bildene se like ut. Ethvert bilde som ser annerledes ut betyr at det var en feil.
Resultater fra flere populære enheter som kjører GraphicsFuzz-testpakken. Samsung Galaxy S6, Samsung Galaxy S7 og Samsung Galaxy S8 er inkludert i disse listene. Kilde: GraphicsFuzz.
For Samsung Galaxy S6, GraphicsFuzz oppdaget at bildene i en av radene viste bilder som skulle være i en annen tabell. Dette betyr at bilder fra tidligere tester lekket inn i senere tester. Teamet kjørte deretter testpakken på nytt i Google Chrome og oppdaget at deler av nettsiden dukket opp i bildet. Videre fant de ut at åpning av en annen fane førte til at bildet viste deler av andre faner. I hovedsak tillot denne feilen en Google Chrome-fane å lekke informasjon om en annen Chrome-fane! Teamet bak GraphicsFuzz søkte ikke med vilje etter sikkerhetsfeil, men de endte opp med å finne en som et resultat av testingen. (Det skal bemerkes at teamet reproduserte feilen på Samsung-nettleseren på Galaxy S6 også Mozilla Firefox.)
Hvordan feilen fungerer
Bilde som ble brukt til å utløse den langvarige feilen på Samsung Galaxy S6. Kilde: GraphicsFuzz.
Den "ondsinnede" nettsiden opprettet av GraphicsFuzz bruker WebGL til å forsøke å tegne en romscene inne i et lerret som vist ovenfor. Fargen på hver piksel bestemmes av en fragmentskyggelegging, et program levert av nettsiden for å kjøre på GPU. De GraphicsFuzz rammeverket endret fragmentet shader som fikk den til å kjøre i veldig lang tid. Når en shader kjører for lenge, avbryter nettleseren eller operativsystemet vanligvis gjengivelsen. Mens GPU-en avbrøt gjengivelsen etter å ha tegnet noen få piksler, rapporterte ikke GPU-driveren dette til Google Chrome. (Hvis du tar en titt på bildet øverst i artikkelen som viser søppelvideominne, kan du faktisk se deler av romscenen øverst venstre.) Dette betyr at pikslene som ble gjengitt før avbruddet forblir urørt, noe som betyr at det endelige gjengitte bildet stort sett er søppelvideo hukommelse. Siden videominne kontinuerlig brukes til å gjengi andre nettsider, inneholder "søppel"-data faktisk tidligere gjengivelser av andre nettsider. Dermed ender andre nettsider med å bli vist på den "ondsinnede" nettsiden. Det er avgjørende at WebGL lar nettsiden fange opp innholdet i det som blir gjengitt; Dette bildet blir deretter lastet opp til en ekstern server.
Diagram som forklarer den langvarige GPU-feilen som får Chrome-fanedata til å "lekke". Kilde: GraphicsFuzz.
Google Chrome bruker flere prosesser, så forskjellige faner er ofte isolert, noe som gjør at denne utnyttelsen virker umulig på overflaten. Chrome samhandler imidlertid med GPU-en ved hjelp av en enkelt "GPU-prosess", noe som betyr at alle fanene deler samme GPU-minne, og dermed lar denne utnyttelsen fungere. Diagrammet ovenfor viser dette mer detaljert.
Feilen demonstreres i denne videoen i løpet av de første 22 sekundene. Andre sikkerhetsproblemer funnet av GraphicsFuzz er også demonstrert.
Leksjoner å lære
En GPU som oppfører seg dårlig kan omgå alle sikkerhetstiltakene til Google Chrome og Android, siden WebGL lar enhver ondsinnet nettside sende kode til GPUen for kjøring. Google kan ikke fikse GPU-feil siden selskapet ikke kontrollerer maskinvaren og driverne. I dette tilfellet er det opp til GPU-leverandøren (i dette tilfellet ARM) å fikse feilen og OEM hvis enheter er berørt (i dette tilfellet Samsung) å integrere rettelsen i en oppdatering. Legg til bærere til blandingen og det er lett å se hvordan en feil som dette kan ta veldig lang tid å fikse – det tok minst 5 måneder for de fleste Samsung Galaxy S6-brukere å motta oppdateringen.
GraphicsFuzz hjelper GPU-leverandører med å finne vanskelige å oppdage feil som feilkompileringsfeil som forårsaker at feil kode genereres og kjøres på GPUen. Deres automatiserte testramme lar dem finne feil som den som vises i denne artikkelen. Den langvarige sløyfen forårsaket av den "ondsinnede" nettsiden har også vist seg å forårsake problemer på andre enheter som f.eks. HTC One M7 og mer nylig Samsung Galaxy S9. GraphicsFuzz tester flaggskipsmarttelefoner og publiserer en resultattabell som rangerer disse enhetene basert på ytelsen deres på et undersett av testene deres. Hundrevis av krasj og gjengivelsesfeil har blitt funnet under testingen, men de fleste blir ikke undersøkt for å se om de utgjør en sikkerhetstrussel. Som vist av denne utnyttelsen er imidlertid en feilaktig GPU en sikkerhetsrisiko, og det er mulig at en eller flere kritiske sikkerhetssårbarheter venter på å bli oppdaget. GraphicsFuzz håper at GPU-leverandører prioriterer å forbedre driverkvaliteten i fremtiden.
Komparativ pålitelighet av grafikkdrivere, sortert etter antall totale problemer. Kilde: GraphicsFuzz.
Tidslinje for avsløring
- I desember 2016, GraphicsFuzz rapporterte feilen til Google Chromium feilsporer fordi den var kvalifisert for Chrome Reward-programmet. Etter at GraphicsFuzz sendte inn feilen til Google Chromium-feilsporeren, ble feilen akseptert av Google og videresendt den til ARM og Samsung for oppdatering.
- Google videresendte rapporten til kontakter hos ARM og Samsung.
- Samsung lappet feilen stille og rullet ut rettelsen i Android 7.0 Nougat-oppdateringen som ble utgitt mellom mars og juni 2017. Selv om det ikke var noen CVE laget av Samsung, Google eller ARM og verken Samsung eller ARM ga ut noen informasjon om oppdateringen, merk at GraphicsFuzz rapporterte ikke feilen via riktig prosess.
- Seinere, GraphicsFuzz kunne bekrefte at både Samsung og ARM hadde sett rapporten, og at ARM var i stand til å fikse problemet på grunn av rapporten.
- I august 2017, GraphicsFuzz ble belønnet $2000 av Google for feilrapporten.
- I november 2017, feilrapporten ble offentliggjort.