Hoe een bug in het grafische stuurprogramma op de Samsung Galaxy S6 gegevens op het Google Chrome-tabblad lekte

Heeft u zich ooit afgevraagd hoe beveiligingskwetsbaarheden worden ontdekt? Het Britse bedrijf GraphicsFuzz legt uit hoe ze een bug in het grafische stuurprogramma op de Samsung Galaxy S6 tegenkwamen die ze konden misbruiken om gegevens van geopende tabbladen in Google Chrome te bekijken.

Eind maart benaderde een in Groot-Brittannië gevestigd start-upbedrijf dat gespecialiseerd is in het testen van GPU-betrouwbaarheid ons met een GPU-bug die ze hebben ontdekt dat veroorzaakt de Qualcomm Leeuwebek 845Samsung Galaxy S9/S9+ om opnieuw op te starten bij het bezoeken van een webpagina. De firma heeft gebeld GrafischFuzz, heeft met ons samengewerkt om het probleem aan te melden Qualcomm En Samsung. Sommige van onze lezers waren geïnteresseerd om te leren hoe een bedrijf eruit ziet GrafischFuzz is in staat deze kwetsbaarheden te vinden, dus hebben we met het bedrijf samengewerkt om te laten zien hoe ze een oudere GPU-kwetsbaarheid ontdekten. Door dit reeds gepatchte beveiligingslek kon een aanvaller op afstand de inhoud van Google Chrome browsertabbladen op de Samsung Galaxy S6.

Deze gebruiker bekeek de website van zijn bank voordat hij de kwaadaardige webpagina bezocht. De inhoud werd vastgelegd en geüpload naar een externe server. Bron: GrafischFuzz.

Hoe GraphicsFuzz GPU-bugs vindt

Een grafisch stuurprogramma werkt door een shader-programma te nemen en dit naar de GPU te sturen om het uit te voeren en zo de afbeelding weer te geven. Voordat de shader naar de GPU wordt gestuurd, vertaalt het grafische stuurprogramma deze in een vorm die de GPU kan begrijpen; een foutieve vertaling kan leiden tot weergavefouten, programma- of apparaatcrashes, verkeerde afbeeldingen en zelfs beveiligingsproblemen. GrafischFuzz heeft een geautomatiseerde testsuite waarmee ze deze bugs kunnen vinden op basis van een reeks referentie-shaders. Wanneer een gebruiker voert hun test uit, moeten alle resulterende afbeeldingen er hetzelfde uitzien. Elke afbeelding die er anders uitziet, betekent dat er een bug is.

Resultaten van verschillende populaire apparaten waarop de GraphicsFuzz-testsuite draait. De Samsung Galaxy S6, Samsung Galaxy S7 en Samsung Galaxy S8 zijn opgenomen in deze grafieken. Bron: GrafischFuzz.

Voor de Samsung Galaxy S6, GrafischFuzz ontdekte dat de afbeeldingen in een van de rijen afbeeldingen vertoonden die in een andere tabel hadden moeten staan. Dit betekent dat beelden van eerdere tests lekten naar latere tests. Het team voerde de testsuite vervolgens opnieuw uit in Google Chrome en ontdekte dat delen van de webpagina in de afbeelding verschenen. Bovendien ontdekten ze dat het openen van een ander tabblad ervoor zorgde dat de afbeelding delen van andere tabbladen liet zien. In wezen zorgde deze bug ervoor dat één Google Chrome-tabblad informatie over een ander Chrome-tabblad kon lekken! Het team erachter GrafischFuzz was niet opzettelijk op zoek naar beveiligingsfouten, maar ze vonden er uiteindelijk een als resultaat van hun tests. (Opgemerkt moet worden dat het team de bug ook in de standaard Samsung-browser op de Galaxy S6 heeft gereproduceerd Mozilla Firefox.)

Hoe de bug werkt

Afbeelding gebruikt om de langlopende bug op de Samsung Galaxy S6 te activeren. Bron: GrafischFuzz.

De "kwaadaardige" webpagina gemaakt door GrafischFuzz gebruikt WebGL om te proberen een ruimtescène in een canvas te tekenen, zoals hierboven weergegeven. De kleur van elke pixel wordt bepaald door een fragment shader, een programma dat door de webpagina wordt geleverd en op de GPU wordt uitgevoerd. De GrafischFuzz framework wijzigde de fragment-shader waardoor deze heel lang bleef werken. Wanneer een shader te lang actief blijft, wordt de weergave doorgaans afgebroken door de browser of het besturingssysteem. Hoewel de GPU het renderen afbrak na het tekenen van een paar pixels, rapporteerde het GPU-stuurprogramma dit niet aan Google Chrome. (Als je naar de afbeelding bovenaan het artikel kijkt, waarin het vervuilde videogeheugen wordt getoond, kun je bovenaan zelfs delen van de ruimtescène zien links.) Dit betekent dat de pixels die vóór het afbreken zijn weergegeven, onaangeroerd blijven, wat betekent dat het uiteindelijk gerenderde beeld grotendeels uit afvalvideo bestaat geheugen. Omdat videogeheugen voortdurend wordt gebruikt om andere webpagina's weer te geven, bevatten de "rommel"-gegevens feitelijk eerdere weergaven van andere webpagina's. Zo worden uiteindelijk andere webpagina's weergegeven op de "kwaadaardige" webpagina. Cruciaal is dat WebGL de webpagina in staat stelt de inhoud vast te leggen van wat er ook wordt weergegeven; deze afbeelding wordt vervolgens geüpload naar een externe server.

Diagram waarin de langlopende GPU-bug wordt uitgelegd die ervoor zorgt dat gegevens op het Chrome-tabblad 'lekken'. Bron: GrafischFuzz.

Google Chrome gebruikt meerdere processen, waardoor verschillende tabbladen vaak geïsoleerd zijn, waardoor deze exploit op het eerste gezicht onmogelijk lijkt. Chrome communiceert echter met de GPU via een enkel "GPU-proces", wat betekent dat alle tabbladen hetzelfde GPU-geheugen delen, waardoor deze exploit kan werken. Het bovenstaande diagram laat dit in meer detail zien.

De bug wordt in deze video gedurende de eerste 22 seconden gedemonstreerd. Andere beveiligingsproblemen gevonden door GraphicsFuzz worden ook gedemonstreerd.

Lessen die geleerd moeten worden

Een zich misdragende GPU kan alle beveiligingsmaatregelen van Google Chrome en Android omzeilen, aangezien WebGL elke kwaadaardige webpagina toestaat code naar de GPU te sturen voor uitvoering. Google kan GPU-bugs niet repareren omdat het bedrijf geen controle heeft over de hardware en stuurprogramma's. In dit geval is het aan de GPU-leverancier (in dit geval ARM) om de bug op te lossen en aan de OEM wiens apparaten getroffen zijn (in dit geval Samsung) om de oplossing in een update te integreren. Voeg vervoerders aan de mix toe en het is gemakkelijk in te zien hoe het erg lang kan duren om een ​​bug als deze op te lossen. minimaal 5 maanden voor de meeste Samsung Galaxy S6-gebruikers om de patch te ontvangen.

GrafischFuzz helpt GPU-leveranciers moeilijk te detecteren bugs te vinden, zoals fouten bij het verkeerd compileren die ervoor zorgen dat de verkeerde code wordt gegenereerd en uitgevoerd op de GPU. Dankzij hun geautomatiseerde testframework kunnen ze bugs vinden zoals die in dit artikel worden beschreven. Er is ook aangetoond dat de langlopende lus die wordt veroorzaakt door de "kwaadaardige" webpagina problemen veroorzaakt op andere apparaten, zoals de HTC One M7 en recenter de Samsung Galaxy S9. GrafischFuzz test vlaggenschip-smartphones en publiceert een resultaten tabel die deze apparaten rangschikt op basis van hun prestaties in een subset van hun tests. Honderden crashes en weergavefouten zijn gevonden tijdens hun tests, maar de meeste worden niet onderzocht om te zien of ze een veiligheidsrisico vormen. Zoals uit deze exploit blijkt, vormt een slecht functionerende GPU echter een veiligheidsrisico en is het mogelijk dat een of meer kritieke beveiligingsproblemen wachten om ontdekt te worden. GrafischFuzz hoopt dat GPU-leveranciers in de toekomst prioriteit zullen geven aan het verbeteren van de driverkwaliteit.

Vergelijkende betrouwbaarheid van grafische stuurprogramma's, gesorteerd op het totale aantal problemen. Bron: GrafischFuzz.

Tijdlijn voor openbaarmaking

  • In december 2016 GrafischFuzz rapporteerde de bug aan de Google Chromium-bugtracker omdat het in aanmerking kwam voor het Chrome Reward Program. Nadat GraphicsFuzz de bug had ingediend bij de Google Chromium-bugtracker, werd de bug door Google geaccepteerd en doorgestuurd naar ARM en Samsung voor patching.
  • Googlen het rapport doorgestuurd naar contacten bij ARM en Samsung.
  • Samsung heeft de bug stilletjes gepatcht en de oplossing uitgerold in de Android 7.0 Nougat-update die tussen maart en juni 2017 werd uitgebracht. Hoewel er geen CVE is gemaakt door Samsung, Google of ARM en noch Samsung noch ARM enige informatie over de patch hebben vrijgegeven, moet u er rekening mee houden dat GrafischFuzz heeft de bug niet gerapporteerd via de juiste proces.
  • Later, GrafischFuzz kon bevestigen dat zowel Samsung als ARM het rapport hadden gezien en dat ARM het probleem dankzij het rapport kon oplossen.
  • In augustus 2017, GrafischFuzz werd door Google beloond met $ 2.000 voor het bugrapport.
  • In november 2017 het bugrapport is openbaar gemaakt.