Jak błąd sterownika karty graficznej w Samsungu Galaxy S6 spowodował wyciek danych karty Google Chrome

Pod koniec marca brytyjska firma startowa specjalizująca się w testowaniu niezawodności GPU zwróciła się do nas z odkrytym błędem GPU, który powoduje ponowne uruchomienie Qualcomm Snapdragon 845 Samsung Galaxy S9 / S9 + podczas odwiedzania strony internetowej. Firma o nazwie GraphicsFuzz współpracowała z nami, aby zgłosić problem Qualcomm i Samsung. Niektórzy z naszych czytelników chcieli dowiedzieć się, w jaki sposób firma taka jak GraphicsFuzz jest w stanie znaleźć te luki, dlatego współpracowaliśmy z firmą, aby pokazać, w jaki sposób odkryli starszą lukę w GPU. Ta już załatana luka umożliwiła atakującemu zdalne „szpiegowanie” zawartości kart przeglądarki Google Chrome na Samsung Galaxy S6.

Ten użytkownik przeglądał witrynę swojego banku przed odwiedzeniem złośliwej strony internetowej. Zawartość została przechwycona i przesłana na zdalny serwer. Źródło: GraphicsFuzz.

Jak GraphicsFuzz znajduje błędy w GPU

Sterownik graficzny działa, pobierając program cieniujący i wysyłając go do procesora graficznego w celu wykonania, a tym samym renderowania obrazu. Przed wysłaniem modułu cieniującego do procesora graficznego sterownik grafiki przekształca go w formę zrozumiałą dla GPU; błędne tłumaczenie może prowadzić do niepowodzenia renderowania, awarii programu lub urządzenia, błędnych obrazów, a nawet problemów z bezpieczeństwem. GraphicsFuzz ma zautomatyzowany pakiet testowy, który pozwala im znaleźć te błędy w oparciu o zestaw shaderów referencyjnych. Gdy użytkownik uruchomi test, wszystkie powstałe obrazy powinny wyglądać tak samo. Każdy obraz, który wygląda inaczej, oznacza błąd.

Wyniki kilku popularnych urządzeń z uruchomionym pakietem testowym GraphicsFuzz. Samsung Galaxy S6, Samsung Galaxy S7 i Samsung Galaxy S8 znajdują się na tych wykresach. Źródło: GraphicsFuzz.

W przypadku Samsunga Galaxy S6 GraphicsFuzz odkrył, że obrazy w jednym z rzędów pokazują obrazy, które powinny znajdować się w innej tabeli. Oznacza to, że obrazy z wcześniejszych testów wyciekały do ​​późniejszych testów. Następnie zespół ponownie uruchomił pakiet testowy w Google Chrome i odkrył, że części strony internetowej pojawiają się na obrazie. Ponadto odkryli, że otwarcie kolejnej karty spowodowało, że obraz wyświetlał części innych kart. Zasadniczo ten błąd pozwolił jednej karcie Google Chrome na wyciek informacji o innej karcie Chrome! Zespół odpowiedzialny za GraphicsFuzz nie celowo szukał błędów bezpieczeństwa, ale w wyniku ich testów znalazł jeden. (Należy zauważyć, że zespół odtworzył błąd w standardowej przeglądarce Samsung na Galaxy S6, a także Mozilla Firefox).

Jak działa błąd

Obraz użyty do wywołania długotrwałego błędu w Samsung Galaxy S6. Źródło: GraphicsFuzz.

„Szkodliwa” strona internetowa stworzona przez GraphicsFuzz używa WebGL do próby narysowania sceny kosmicznej w obszarze roboczym, jak pokazano powyżej. Kolor każdego piksela jest określany przez moduł cieniujący fragmenty, program dostarczany przez stronę internetową do wykonania na GPU. Framework GraphicsFuzz zmodyfikował moduł cieniujący fragmenty, co spowodowało, że działał on naprawdę długo. Gdy moduł cieniujący działa zbyt długo, przeglądarka lub system operacyjny zwykle przerywa renderowanie. Jednak podczas gdy procesor graficzny przerwał renderowanie po narysowaniu kilku pikseli, sterownik GPU nie zgłosił tego w Google Chrome. (Jeśli spojrzysz na obraz w górnej części artykułu pokazujący śmieciową pamięć wideo, możesz faktycznie zobaczyć części sceny kosmicznej w lewym górnym rogu.) Oznacza to, że piksele, które były renderowane przed przerwaniem, pozostają nietknięte, co oznacza, że ​​ostateczny renderowany obraz to głównie śmieciowa pamięć wideo. Ponieważ pamięć wideo jest stale używana do renderowania innych stron internetowych, dane „śmieci” faktycznie zawierają poprzednie renderingi innych stron internetowych. W ten sposób inne strony internetowe są wyświetlane na „złośliwej” stronie internetowej. Co najważniejsze, WebGL pozwala stronie internetowej na przechwytywanie zawartości tego, co jest renderowane; ten obraz jest następnie przesyłany na zdalny serwer.

Schemat wyjaśniający długotrwały błąd GPU powodujący „wyciek” danych karty Chrome. Źródło: GraphicsFuzz.

Google Chrome korzysta z wielu procesów, więc różne karty są często izolowane, co sprawia, że ​​exploit wydaje się niemożliwy na pozór. Jednak Chrome współdziała z GPU za pomocą jednego „procesu GPU”, co oznacza, że ​​wszystkie karty współużytkują tę samą pamięć GPU, umożliwiając w ten sposób wykorzystanie tego exploita. Powyższy schemat pokazuje to bardziej szczegółowo.

Błąd jest pokazany w tym filmie przez pierwsze 22 sekundy. Pokazane są również inne problemy bezpieczeństwa wykryte przez GraphicsFuzz.

Lekcje do nauczenia się

Źle zachowujący się procesor GPU może ominąć wszystkie zabezpieczenia Google Chrome i Androida, ponieważ WebGL pozwala dowolnej złośliwej stronie internetowej wysłać kod do GPU w celu wykonania. Google nie może naprawić błędów GPU, ponieważ firma nie kontroluje sprzętu ani sterowników. W takim przypadku to dostawca GPU (w tym przypadku ARM) naprawi błąd, a producent OEM, którego urządzenia dotyczą (w tym przypadku Samsung), zintegruje poprawkę z aktualizacją. Dodaj nośniki do miksu, a łatwo będzie zobaczyć, jak naprawienie takiego błędu może zająć naprawdę dużo czasu - większość użytkowników Samsung Galaxy S6 zajęło co najmniej 5 miesięcy .

GraphicsFuzz pomaga sprzedawcom GPU znaleźć trudne do wykrycia błędy, takie jak błędy błędnej kompilacji, które powodują generowanie i wykonywanie nieprawidłowego kodu na GPU. Ich zautomatyzowane ramy testowania pozwalają im znaleźć błędy, takie jak te przedstawione w tym artykule. Wykazano, że długo działająca pętla spowodowana przez „złośliwą” stronę internetową powoduje problemy na innych urządzeniach, takich jak HTC One M7, a ostatnio także Samsung Galaxy S9. GraphicsFuzz testuje flagowe smartfony i publikuje tabelę wyników, która uszeregowuje te urządzenia na podstawie ich wydajności w podzbiorze ich testów. Podczas testowania znaleziono setki awarii i błędów renderowania, ale większość z nich nie jest badana w celu sprawdzenia, czy stanowią one zagrożenie bezpieczeństwa. Jednak, jak pokazuje ten exploit, źle zachowujący się procesor graficzny stanowi zagrożenie dla bezpieczeństwa i możliwe jest, że jedna lub kilka krytycznych luk w zabezpieczeniach czeka na wykrycie. GraphicsFuzz ma nadzieję, że dostawcy GPU będą priorytetem dla poprawy jakości sterowników w przyszłości.

Porównawcza niezawodność sterowników graficznych, posortowana według liczby całkowitych problemów. Źródło: GraphicsFuzz.

Oś czasu ujawnienia

  • W grudniu 2016 r. GraphicsFuzz zgłosił błąd do modułu śledzenia błędów Google Chromium, ponieważ kwalifikował się do programu nagród Chrome. Po przesłaniu błędu przez GraphicsFuzz do modułu śledzenia błędów Google Chromium, błąd został zaakceptowany przez Google i przesłany do ARM i Samsunga w celu poprawienia.
  • Google przekazało raport do kontaktów w ARM i Samsung.
  • Samsung po cichu załatał błąd i wprowadził poprawkę do aktualizacji Androida 7.0 Nougat, która została wydana między marcem a czerwcem 2017 r. Chociaż nie było CVE utworzonego przez Samsunga, Google'a ani ARM, a ani Samsung, ani ARM nie opublikowali żadnych informacji o łatce, zwróć uwagę, że GraphicsFuzz nie zgłosił błędu poprzez prawidłowy proces.
  • Później GraphicsFuzz był w stanie potwierdzić, że zarówno Samsung, jak i ARM widziały raport, a ARM był w stanie rozwiązać problem z powodu raportu.
  • W sierpniu 2017 r. Firma GraphicsFuzz otrzymała 2000 USD za zgłoszenie błędu.
  • W listopadzie 2017 r. Raport o błędzie został opublikowany.