Wie ein Grafiktreiberfehler auf dem Samsung Galaxy S6 Google Chrome-Tabulatordaten durchsickerte

Ende März trat ein britisches Start-up-Unternehmen, das auf das Testen der Zuverlässigkeit von GPUs spezialisiert ist, mit einem GPU-Fehler auf uns zu, der beim Besuch einer Webseite einen Neustart des Samsung Galaxy S9 / S9 + von Qualcomm Snapdragon 845 zur Folge hatte. Die Firma GraphicsFuzz hat mit uns zusammengearbeitet, um Qualcomm und Samsung über das Problem zu informieren. Einige unserer Leser waren daran interessiert zu erfahren, wie ein Unternehmen wie GraphicsFuzz diese Sicherheitsanfälligkeiten finden kann. Daher haben wir mit dem Unternehmen zusammengearbeitet, um zu zeigen, wie sie eine ältere GPU-Sicherheitsanfälligkeit entdeckt haben. Diese bereits gepatchte Sicherheitsanfälligkeit ermöglichte es einem Angreifer, den Inhalt der Google Chrome-Browser-Registerkarten auf dem Samsung Galaxy S6 aus der Ferne auszuspionieren.

Dieser Benutzer hat die Website seiner Bank angesehen, bevor er die bösartige Webseite aufgerufen hat. Die Inhalte wurden erfasst und auf einen Remote-Server hochgeladen. Quelle: GraphicsFuzz.

Wie GraphicsFuzz GPU-Fehler findet

Ein Grafiktreiber nimmt ein Shader-Programm und sendet es zur Ausführung an die GPU, um das Bild zu rendern. Bevor der Shader an die GPU gesendet wird, übersetzt der Grafiktreiber ihn in eine Form, die die GPU verstehen kann. Eine fehlerhafte Übersetzung kann zu Renderfehlern, Programm- oder Geräteabstürzen, falschen Bildern und sogar Sicherheitsproblemen führen. GraphicsFuzz verfügt über eine automatisierte Testsuite, mit der sie diese Fehler anhand einer Reihe von Referenz-Shadern finden können. Wenn ein Benutzer seinen Test ausführt, sollen alle resultierenden Bilder gleich aussehen. Jedes Bild, das anders aussieht, weist auf einen Fehler hin.

Ergebnisse mehrerer gängiger Geräte, auf denen die GraphicsFuzz-Testsuite ausgeführt wird. Das Samsung Galaxy S6, Samsung Galaxy S7 und Samsung Galaxy S8 sind in diesen Tabellen enthalten. Quelle: GraphicsFuzz.

Beim Samsung Galaxy S6 stellte GraphicsFuzz fest, dass die Bilder in einer der Zeilen Bilder zeigten, die sich in einer anderen Tabelle befinden sollten. Dies bedeutet, dass Bilder aus früheren Tests in spätere Tests eindrangen. Anschließend führte das Team die Testsuite in Google Chrome erneut aus und stellte fest, dass Teile der Webseite im Bild angezeigt wurden. Außerdem wurde festgestellt, dass das Öffnen eines anderen Registers dazu führte, dass das Bild Teile anderer Registerkarten zeigte. Im Wesentlichen erlaubte dieser Fehler einem Google Chrome-Tab, Informationen über einen anderen Chrome-Tab zu verlieren! Das Team hinter GraphicsFuzz suchte nicht absichtlich nach Sicherheitslücken, fand jedoch aufgrund seiner Tests eine. (Es sollte beachtet werden, dass das Team den Fehler im serienmäßigen Samsung-Browser auf dem Galaxy S6 sowie in Mozilla Firefox reproduziert hat.)

Wie der Bug funktioniert

Bild, das verwendet wurde, um den lang anhaltenden Fehler auf dem Samsung Galaxy S6 auszulösen. Quelle: GraphicsFuzz.

Die von GraphicsFuzz erstellte „böswillige“ Webseite verwendet WebGL, um zu versuchen, eine Raumszene wie oben gezeigt innerhalb einer Zeichenfläche zu zeichnen. Die Farbe jedes Pixels wird von einem Fragment-Shader bestimmt, einem Programm, das von der Webseite zur Ausführung auf der GPU bereitgestellt wird. Das GraphicsFuzz- Framework hat den Fragment-Shader geändert, wodurch er sehr lange ausgeführt wurde. Wenn ein Shader zu lange ausgeführt wird, bricht der Browser oder das Betriebssystem das Rendern normalerweise ab. Während die GPU das Rendern nach dem Zeichnen einiger Pixel abbrach, meldete der GPU-Treiber dies jedoch nicht an Google Chrome. (Wenn Sie sich das Bild oben im Artikel ansehen, in dem der Speicherplatz für Müllvideos angezeigt wird, sehen Sie tatsächlich Teile der Raumszene oben links.) Dies bedeutet, dass die Pixel, die vor dem Abbruch gerendert wurden, unberührt bleiben. Das heißt, das endgültig gerenderte Bild ist meistens Müllvideospeicher. Da der Videospeicher kontinuierlich zum Rendern anderer Webseiten verwendet wird, enthalten die "Müll" -Daten tatsächlich vorherige Renderings anderer Webseiten. Somit werden andere Webseiten auf der "böswilligen" Webseite angezeigt. Entscheidend ist, dass WebGL es der Webseite ermöglicht, den Inhalt von allem, was gerendert wird, zu erfassen. Dieses Bild wird dann auf einen Remote-Server hochgeladen.

Diagramm zur Erläuterung des lang andauernden GPU-Fehlers, durch den Chrome-Tab-Daten "verloren gehen". Quelle: GraphicsFuzz.

Google Chrome verwendet mehrere Prozesse, sodass häufig unterschiedliche Tabs isoliert werden. Dies scheint auf der Oberfläche unmöglich zu sein. Chrome interagiert jedoch mit der GPU über einen einzigen „GPU-Prozess“. Dies bedeutet, dass sich alle Registerkarten den gleichen GPU-Speicher teilen, sodass dieser Exploit funktioniert. Das obige Diagramm zeigt dies detaillierter.

Der Fehler wird in diesem Video in den ersten 22 Sekunden gezeigt. Andere von GraphicsFuzz festgestellte Sicherheitsprobleme werden ebenfalls aufgezeigt.

Lektionen, die gelernt werden müssen

Eine sich schlecht verhaltende GPU kann alle Sicherheitsmaßnahmen von Google Chrome und Android umgehen, da WebGL es jeder böswilligen Webseite ermöglicht, Code zur Ausführung an die GPU zu senden. Google kann keine GPU-Fehler beheben, da das Unternehmen die Hardware und Treiber nicht kontrolliert. In diesem Fall müssen der GPU-Hersteller (in diesem Fall ARM) den Fehler beheben und der OEM, dessen Geräte betroffen sind (in diesem Fall Samsung), das Update in ein Update integrieren. Fügen Sie der Mischung Netzbetreiber hinzu, und es ist leicht zu erkennen, dass die Behebung eines solchen Fehlers sehr lange dauern kann. Die meisten Samsung Galaxy S6-Benutzer haben mindestens 5 Monate gebraucht, um den Patch zu erhalten.

GraphicsFuzz hilft GPU-Anbietern dabei, schwer zu erkennende Fehler zu finden, z. B. Fehler bei der Kompilierung, durch die der falsche Code generiert und auf der GPU ausgeführt wird. Ihr automatisiertes Test-Framework ermöglicht es ihnen, Fehler wie den in diesem Artikel vorgestellten zu finden. Es hat sich gezeigt, dass die durch die „böswillige“ Webseite verursachte Langzeitschleife auch auf anderen Geräten wie dem HTC One M7 und in jüngerer Zeit dem Samsung Galaxy S9 zu Problemen führt. GraphicsFuzz testet Flaggschiff-Smartphones und veröffentlicht eine Ergebnistabelle, in der diese Geräte anhand ihrer Leistung in einer Teilmenge ihrer Tests eingestuft werden. Während der Tests wurden Hunderte von Abstürzen und Rendering-Fehlern festgestellt, die meisten werden jedoch nicht untersucht, um festzustellen, ob sie eine Sicherheitsbedrohung darstellen. Wie dieser Exploit zeigt, stellt eine sich schlecht verhaltende GPU ein Sicherheitsrisiko dar und es ist möglich, dass eine oder mehrere kritische Sicherheitslücken darauf warten, entdeckt zu werden. GraphicsFuzz hofft, dass GPU-Anbieter künftig die Treiberqualität verbessern.

Vergleichende Zuverlässigkeit von Grafiktreibern, sortiert nach der Anzahl der Gesamtprobleme. Quelle: GraphicsFuzz.

Offenlegungszeitraum

  • Im Dezember 2016 meldete GraphicsFuzz den Fehler an den Google Chromium-Bug-Tracker, da er für das Chrome-Prämienprogramm in Frage kam. Nachdem GraphicsFuzz den Fehler an den Google Chromium Bug-Tracker übermittelt hatte, wurde der Fehler von Google akzeptiert und zum Patchen an ARM und Samsung weitergeleitet.
  • Google hat den Bericht an Kontakte bei ARM und Samsung weitergeleitet.
  • Samsung hat den Fehler stillschweigend behoben und das Update im Nougat-Update für Android 7.0, das zwischen März und Juni 2017 veröffentlicht wurde, veröffentlicht. Es wurde jedoch kein CVE von Samsung, Google oder ARM erstellt, und weder Samsung noch ARM haben Informationen zu dem Patch veröffentlicht Beachten Sie, dass GraphicsFuzz den Fehler nicht über den richtigen Prozess gemeldet hat.
  • Später konnte GraphicsFuzz bestätigen, dass sowohl Samsung als auch ARM den Bericht gesehen hatten und dass ARM das Problem aufgrund des Berichts beheben konnte.
  • Im August 2017 wurde GraphicsFuzz von Google für den Fehlerbericht mit 2.000 US-Dollar belohnt.
  • Im November 2017 wurde der Fehlerbericht veröffentlicht.