Ste se kdaj vprašali, kako se najdejo varnostne ranljivosti? Podjetje GraphicsFuzz s sedežem v Združenem kraljestvu pojasnjuje, kako so naleteli na napako grafičnega gonilnika na Samsung Galaxy S6, ki so jo lahko izkoristili za ogled podatkov z odprtih zavihkov v brskalniku Google Chrome.
Konec marca se je novoustanovljeno podjetje s sedežem v Združenem kraljestvu, specializirano za testiranje zanesljivosti GPE, obrnilo na nas z GPU napaka, ki so jo odkrili ki povzroča Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ za ponovni zagon ob obisku spletne strani. Podjetje, imenovano GraphicsFuzz, je sodeloval z nami pri poročanju o težavi Qualcomm in Samsung. Nekatere naše bralce je zanimalo, kakšno je podjetje GraphicsFuzz lahko najde te ranljivosti, zato smo sodelovali s podjetjem, da bi predstavili, kako so odkrili starejšo ranljivost GPU. Ta že popravljena ranljivost je napadalcu omogočila, da na daljavo "vohuni" za vsebino Google Chrome zavihki brskalnika na Samsung Galaxy S6.
Ta uporabnik si je ogledoval spletno mesto svoje banke, preden je obiskal zlonamerno spletno stran. Vsebina je bila zajeta in naložena na oddaljeni strežnik. Vir: GraphicsFuzz.
Kako GraphicsFuzz najde hrošče GPE
Grafični gonilnik deluje tako, da vzame program za senčenje in ga pošlje GPE-ju, da se izvede in tako upodablja sliko. Preden pošlje shader v GPE, ga grafični gonilnik prevede v obliko, ki jo GPE lahko razume; napačen prevod lahko povzroči napako pri upodabljanju, zrušitve programa ali naprave, napačne slike in celo varnostne težave. GraphicsFuzz ima zbirko za avtomatizirano testiranje ki jim omogoča, da te hrošče najdejo na podlagi niza referenčnih senčil. Ko uporabnik izvede njihov test, naj bi bile vse nastale slike videti enako. Vsaka slika, ki je videti drugače, pomeni, da je prišlo do napake.
Rezultati več priljubljenih naprav, ki izvajajo testni paket GraphicsFuzz. Samsung Galaxy S6, Samsung Galaxy S7 in Samsung Galaxy S8 so vključeni v te lestvice. Vir: GraphicsFuzz.
Za Samsung Galaxy S6, GraphicsFuzz odkrili, da slike v eni od vrstic prikazujejo slike, ki naj bi bile v drugi tabeli. To pomeni, da so slike iz prejšnjih testov uhajale v kasnejše teste. Skupina je nato ponovno zagnala testno zbirko v brskalniku Google Chrome in odkrila, da se deli spletne strani pojavljajo na sliki. Poleg tega so ugotovili, da je odpiranje drugega zavihka povzročilo, da slika prikazuje dele drugih zavihkov. V bistvu je ta napaka omogočila, da so iz enega zavihka Google Chrome odtekle informacije o drugem zavihku Chrome! Ekipa zadaj GraphicsFuzz ni namenoma iskal varnostnih hroščev, vendar so enega na koncu našli kot rezultat testiranja. (Opozoriti je treba, da je ekipa napako ponovila v standardnem brskalniku Samsung na Galaxy S6 in Mozilla Firefox.)
Kako deluje hrošč
Slika, uporabljena za sprožitev dolgoletne napake na Samsung Galaxy S6. Vir: GraphicsFuzz.
"Zlonamerna" spletna stran, ki jo je ustvaril GraphicsFuzz uporablja WebGL za poskus risanja vesoljske scene znotraj platna, kot je prikazano zgoraj. Barvo vsake slikovne pike določa senčnik fragmentov, program, ki ga spletna stran ponuja za izvajanje na GPE. The GraphicsFuzz Framework je spremenil senčnik fragmentov, zaradi česar je deloval zelo dolgo. Ko senčnik deluje predolgo, brskalnik ali operacijski sistem običajno prekine upodabljanje. Medtem ko je GPE prekinil upodabljanje po risanju nekaj slikovnih pik, gonilnik GPE tega ni prijavil Google Chromu. (Če pogledate sliko na vrhu članka, ki prikazuje odpadni video pomnilnik, lahko dejansko vidite dele vesoljske scene na vrhu levo.) To pomeni, da slikovne pike, ki so bile upodobljene pred prekinitvijo, ostanejo nedotaknjene, kar pomeni, da je končna upodobljena slika večinoma odpadni video spomin. Ker se video pomnilnik nenehno uporablja za upodabljanje drugih spletnih strani, podatki o "smeti" dejansko vsebujejo prejšnje upodobitve drugih spletnih strani. Tako se druge spletne strani na koncu prikažejo na »zlonamerni« spletni strani. Bistveno je, da WebGL omogoča spletni strani, da zajame vsebino vsega, kar se upodablja; ta slika se nato naloži na oddaljeni strežnik.
Diagram, ki pojasnjuje dolgotrajno napako GPE, ki povzroča "puščanje" podatkov zavihka Chrome. Vir: GraphicsFuzz.
Google Chrome uporablja več procesov, zato so različni zavihki pogosto izolirani, zaradi česar se to izkoriščanje na prvi pogled zdi nemogoče. Vendar pa Chrome komunicira z grafično procesorsko enoto z enim samim »procesom grafične procesorske enote«, kar pomeni, da si vsi zavihki delijo isti pomnilnik grafičnega procesorja, kar omogoča, da ta izkoriščanje deluje. Zgornji diagram to podrobneje prikazuje.
Napaka je prikazana v tem videu v prvih 22 sekundah. Predstavljene so tudi druge varnostne težave, ki jih je odkril GraphicsFuzz.
Lekcije, ki se jih je treba naučiti
GPE, ki ne deluje pravilno, lahko zaobide vse varnostne ukrepe Google Chroma in Androida, saj WebGL dovoljuje, da katera koli zlonamerna spletna stran pošlje kodo v GPE za izvedbo. Google ne more popraviti napak GPU ker podjetje ne nadzoruje strojne opreme in gonilnikov. V tem primeru mora prodajalec GPE (v tem primeru ARM) popraviti napako, proizvajalec originalne opreme, katerega naprave so prizadete (v tem primeru Samsung), pa mora popravek vključiti v posodobitev. Mešanici dodajte operaterje in preprosto boste ugotovili, kako lahko odpravljanje takšne napake traja zelo dolgo – trajalo je vsaj 5 mesecev za večino uporabnikov Samsung Galaxy S6, da prejme popravek.
GraphicsFuzz prodajalcem grafičnih procesorjev pomaga najti hrošče, ki jih je težko zaznati, kot so napake pri napačnem prevajanju, ki povzročajo generiranje in izvajanje napačne kode na grafičnem procesorju. Njihov okvir za samodejno testiranje jim omogoča, da najdejo napake, kot je tista, predstavljena v tem članku. Izkazalo se je, da dolgotrajna zanka, ki jo povzroča "zlonamerna" spletna stran, povzroča težave tudi na drugih napravah, kot je HTC One M7 in v zadnjem času Samsung Galaxy S9. GraphicsFuzz preizkuša vodilne pametne telefone in objavlja a tabela rezultatov ki razvršča te naprave na podlagi njihove uspešnosti v podmnožici njihovih testov. Na stotine zrušitev in napak pri upodabljanju so bili odkriti med njihovim testiranjem, vendar jih večina ni raziskana, da bi ugotovili, ali predstavljajo varnostno grožnjo. Vendar, kot je razvidno iz tega izkoriščanja, GPE, ki se ne obnaša pravilno, predstavlja varnostno tveganje in možno je, da ena ali več kritičnih varnostnih ranljivosti čaka na odkritje. GraphicsFuzz upa, da bodo prodajalci grafičnih procesorjev v prihodnosti dali prednost izboljšanju kakovosti gonilnikov.
Primerjalna zanesljivost grafičnih gonilnikov, razvrščena po skupnem številu težav. Vir: GraphicsFuzz.
Časovnica razkritja
- decembra 2016 GraphicsFuzz poročal o napaki Sledilnik hroščev Google Chromium ker je bil primeren za Chromov program nagrajevanja. Potem ko je GraphicsFuzz predložil napako sledilniku napak Google Chromium, je Google sprejel napako in jo posredoval družbama ARM in Samsung za popravek.
- Google posredoval poročilo stikom pri ARM in Samsung.
- Samsung je tiho popravil napako in uvedel popravek v posodobitvi za Android 7.0 Nougat, ki je bila izdana med marcem in junijem 2017. Čeprav Samsung, Google ali ARM ni ustvaril CVE in niti Samsung niti ARM nista objavila nobenih informacij o popravku, upoštevajte, da GraphicsFuzz napake ni prijavil prek ustrezen postopek.
- kasneje, GraphicsFuzz je lahko potrdil, da sta tako Samsung kot ARM videla poročilo in da je ARM lahko popravil težavo zaradi poročila.
- Avgusta 2017, GraphicsFuzz Google ga je nagradil z 2000 $ za poročilo o napaki.
- novembra 2017 poročilo o napaki je bilo javno objavljeno.