Kuinka Samsung Galaxy S6:n näytönohjainvirhe vuoti Google Chrome -välilehden tiedot

Oletko koskaan miettinyt, kuinka tietoturva-aukkoja löydetään? Yhdistyneessä kuningaskunnassa toimiva GraphicsFuzz selittää, kuinka he löysivät Samsung Galaxy S6:n grafiikkaohjainvirheen, jota he saattoivat hyödyntää nähdäkseen tietoja Google Chromen avatuista välilehdistä.

Vielä maaliskuun lopulla Iso-Britanniassa toimiva GPU-luotettavuuden testaamiseen erikoistunut start-up-yritys otti meihin yhteyttä He löysivät GPU-virheen joka aiheuttaa Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ käynnistääksesi uudelleen vieraillessasi verkkosivulla. Yritys soitti GraphicsFuzz, ilmoitti ongelmasta kanssamme Qualcomm ja Samsung. Jotkut lukijoistamme olivat kiinnostuneita oppimaan, miten yritys pitää GraphicsFuzz pystyy löytämään nämä haavoittuvuudet, joten teimme yhteistyötä yrityksen kanssa esitelläksemme, kuinka he löysivät vanhemman GPU-haavoittuvuuden. Tämän jo korjatun haavoittuvuuden ansiosta hyökkääjä pystyi etävakoilemaan kohteen sisältöä Google Chrome selaimen välilehdet Samsung Galaxy S6.

Tämä käyttäjä katseli pankkinsa verkkosivustoa ennen kuin kävi haitallisella verkkosivulla. Sisältö kaapattiin ja lähetettiin etäpalvelimelle. Lähde: GraphicsFuzz.

Miten GraphicsFuzz löytää GPU-virheet

Grafiikkaohjain toimii ottamalla Shader-ohjelman ja lähettämällä sen GPU: lle suoritettavaksi ja siten renderöimään kuvan. Ennen varjostimen lähettämistä GPU: lle grafiikkaohjain kääntää sen GPU: n ymmärtämään muotoon. virheellinen käännös voi johtaa renderöintivirheeseen, ohjelman tai laitteen kaatumiseen, vääriin kuviin ja jopa tietoturvaongelmiin. GraphicsFuzz on automaattinen testauspaketti jonka avulla he voivat löytää nämä virheet joukon viitevarjostimia perusteella. Kun käyttäjä suorittaa testinsä, kaikkien tulosten kuvien pitäisi näyttää samalta. Mikä tahansa kuva, joka näyttää erilaiselta, tarkoittaa, että siinä on virhe.

Tulokset useista suosituista laitteista, jotka käyttävät GraphicsFuzz-testipakettia. Samsung Galaxy S6, Samsung Galaxy S7 ja Samsung Galaxy S8 ovat mukana näissä taulukoissa. Lähde: GraphicsFuzz.

Samsung Galaxy S6:lle GraphicsFuzz havaitsi, että yhden rivin kuvat näyttivät kuvia, joiden piti olla toisessa taulukossa. Tämä tarkoittaa, että aiempien testien kuvat vuotivat myöhemmissä testeissä. Tämän jälkeen tiimi suoritti testisarjan uudelleen Google Chromessa ja huomasi, että kuvassa näkyi verkkosivun osia. Lisäksi he havaitsivat, että toisen välilehden avaaminen sai kuvan näyttämään osia muista välilehdistä. Pohjimmiltaan tämä virhe antoi yhden Google Chromen välilehden vuotaa tietoja toisesta Chrome-välilehdestä! Joukkue takana GraphicsFuzz ei etsinyt tietoturvavirheitä, mutta he päätyivät löytämään sellaisen testauksensa tuloksena. (On syytä huomata, että tiimi toisti virheen Galaxy S6:n Samsung-selaimessa sekä Mozilla Firefox.)

Kuinka bugi toimii

Kuva, jota käytettiin Samsung Galaxy S6:n pitkään jatkuneen bugin laukaisemiseen. Lähde: GraphicsFuzz.

"Haitallinen" verkkosivu, jonka on luonut GraphicsFuzz käyttää WebGL: ää yrittääkseen piirtää avaruusnäkymän kankaalle yllä kuvatulla tavalla. Jokaisen pikselin väri määräytyy fragmenttivarjostimella, joka on verkkosivun tarjoama ohjelma, joka suoritetaan GPU: lla. The GraphicsFuzz framework muokkasi fragmenttivarjostajaa, mikä sai sen toimimaan todella pitkään. Kun varjostin on käynnissä liian kauan, selain tai käyttöjärjestelmä yleensä keskeyttää renderoinnin. Vaikka grafiikkasuoritin keskeytti renderöinnin muutaman pikselin piirtämisen jälkeen, GPU-ohjain ei ilmoittanut tästä Google Chromelle. (Jos katsot artikkelin yläosassa olevaa kuvaa, jossa näkyy roskavideomuisti, voit itse asiassa nähdä osia avaruuskohtauksesta yläosassa vasemmalle.) Tämä tarkoittaa, että pikselit, jotka renderöitiin ennen keskeytystä, jätetään koskemattomiksi, mikä tarkoittaa, että lopullinen renderöity kuva on enimmäkseen roskavideota muisti. Koska videomuistia käytetään jatkuvasti muiden verkkosivujen hahmontamiseen, "roska"-tiedot sisältävät itse asiassa muiden verkkosivujen aiemmat renderöinnit. Siten muut verkkosivut päätyvät näkyviin "haitalliselle" verkkosivulle. Tärkeää on, että WebGL sallii verkkosivun kaapata hahmonnettavan sisällön; tämä kuva ladataan sitten etäpalvelimelle.

Kaavio, joka selittää pitkään jatkuneen GPU-virheen, joka aiheuttaa Chrome-välilehden tietojen "vuotamisen". Lähde: GraphicsFuzz.

Google Chrome käyttää useita prosesseja, joten eri välilehdet ovat usein eristettyjä, minkä vuoksi tämä hyväksikäyttö vaikuttaa mahdottomalta. Chrome on kuitenkin vuorovaikutuksessa GPU: n kanssa käyttämällä yhtä "GPU-prosessia", mikä tarkoittaa, että kaikilla välilehdillä on sama GPU-muisti, mikä mahdollistaa tämän hyväksikäytön toiminnan. Yllä oleva kaavio osoittaa tämän tarkemmin.

Virhe esitellään tässä videossa ensimmäisen 22 sekunnin aikana. Myös muut GraphicsFuzzin löytämät tietoturvaongelmat on osoitettu.

Opittavia asioita

Virheellisesti toimiva grafiikkasuoritin voi ohittaa kaikki Google Chromen ja Androidin turvatoimenpiteet, koska WebGL sallii minkä tahansa haitallisen verkkosivun lähettää koodia GPU: lle suoritettavaksi. Google ei voi korjata GPU-virheitä koska yritys ei hallitse laitteistoa ja ohjaimia. Tässä tapauksessa GPU-toimittajan (tässä tapauksessa ARM) tehtävänä on korjata virhe ja OEM: n, jonka laitteita tämä koskee (tässä tapauksessa Samsungin) tehtävä integroida korjaus päivitykseen. Lisää kantoaineita sekoitukseen ja on helppo nähdä, kuinka tällaisen bugin korjaaminen voi kestää todella kauan – se kesti vähintään 5 kuukautta useimmat Samsung Galaxy S6 -käyttäjät saavat korjaustiedoston.

GraphicsFuzz auttaa GPU-valmistajia löytämään vaikeasti havaittavia virheitä, kuten käännösvirheitä, jotka aiheuttavat väärän koodin luomisen ja suorittamisen GPU: ssa. Heidän automaattisen testauskehyksensä avulla he voivat löytää virheitä, kuten tässä artikkelissa esitellyt. "Haitallisen" verkkosivun aiheuttaman pitkään jatkuneen silmukan on osoitettu aiheuttavan ongelmia myös muissa laitteissa, kuten HTC One M7 ja viime aikoina Samsung Galaxy S9. GraphicsFuzz testaa lippulaivaälypuhelimia ja julkaisee a tulostaulukko joka luokittelee nämä laitteet niiden suorituskyvyn perusteella testien osajoukossa. Satoja kaatumisia ja renderöintivirheitä on löydetty testauksen aikana, mutta useimpia niistä ei tutkita sen selvittämiseksi, aiheuttavatko ne turvallisuusuhan. Kuitenkin, kuten tämä hyväksikäyttö osoittaa, väärin toimiva grafiikkasuoritin on turvallisuusriski, ja on mahdollista, että yksi tai useampi kriittinen tietoturvahaavoittuvuus odottaa löytämistään. GraphicsFuzz toivoo, että GPU-toimittajat asettavat ajurien laadun parantamisen etusijalle tulevaisuudessa.

Näytönohjainten vertaileva luotettavuus, lajiteltuna ongelmien kokonaismäärän mukaan. Lähde: GraphicsFuzz.

Ilmoituksen aikajana

  • Joulukuussa 2016 GraphicsFuzz ilmoitti virheestä Google Chromium -virheenseuranta koska se oli oikeutettu Chrome Reward -ohjelmaan. Kun GraphicsFuzz toimitti virheen Google Chromium -virheenseurantaohjelmaan, Google hyväksyi virheen ja välitti sen ARM: lle ja Samsungille korjattavaksi.
  • Google välitti raportin ARM: n ja Samsungin yhteystietoihin.
  • Samsung korjasi virheen hiljaa ja otti korjauksen käyttöön Android 7.0 Nougat -päivityksessä, joka julkaistiin maalis-kesäkuussa 2017. Vaikka Samsung, Google tai ARM ei luonut CVE: tä, eivätkä Samsung tai ARM ole julkaisseet tietoja korjaustiedostosta, huomaa, että GraphicsFuzz ei ilmoittanut virheestä -palvelun kautta oikea prosessi.
  • Myöhemmin, GraphicsFuzz pystyi vahvistamaan, että sekä Samsung että ARM olivat nähneet raportin ja että ARM pystyi korjaamaan ongelman raportin ansiosta.
  • Elokuussa 2017 GraphicsFuzz Google palkitsi 2 000 dollaria virheraportista.
  • Marraskuussa 2017 vikaraportti julkaistiin.