Kā Samsung Galaxy S6 grafikas draivera kļūda noplūda Google Chrome cilnes datus

Vai esat kādreiz domājuši, kā tiek atrastas drošības ievainojamības? Apvienotajā Karalistē bāzētais uzņēmums GraphicsFuzz paskaidro, kā viņi saskārās ar Samsung Galaxy S6 grafikas draivera kļūdu, ko viņi varēja izmantot, lai skatītu datus no Google Chrome atvērtajām cilnēm.

Marta beigās Apvienotajā Karalistē dibināts jaunizveidots uzņēmums, kas specializējas GPU uzticamības pārbaudē, vērsās pie mums ar Viņi atklāja GPU kļūdu kas izraisa Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ lai atsāknētu, apmeklējot tīmekļa lapu. Firma, zvanīja GraphicsFuzz, sadarbojās ar mums, lai ziņotu par problēmu Qualcomm un Samsung. Daži no mūsu lasītājiem bija ieinteresēti uzzināt, kā uzņēmumam patīk GraphicsFuzz spēj atrast šīs ievainojamības, tāpēc mēs sadarbojāmies ar uzņēmumu, lai parādītu, kā viņi atklāja vecāku GPU ievainojamību. Šī jau izlabotā ievainojamība ļāva uzbrucējam attālināti “spiegot” vietnes saturu Google Chrome pārlūkprogrammas cilnes Samsung Galaxy S6.

Šis lietotājs apskatīja savas bankas vietni pirms ļaunprātīgās tīmekļa lapas apmeklēšanas. Saturs tika uzņemts un augšupielādēts attālā serverī. Avots:

GraphicsFuzz.

Kā GraphicsFuzz atrod GPU kļūdas

Grafikas draiveris darbojas, izmantojot ēnotāju programmu un nosūtot to uz GPU, lai tas tiktu izpildīts un tādējādi renderētu attēlu. Pirms ēnotāja nosūtīšanas uz GPU, grafikas draiveris to pārvērš GPU saprotamā formā; kļūdains tulkojums var izraisīt renderēšanas kļūmi, programmas vai ierīces avārijas, nepareizus attēlus un pat drošības problēmas. GraphicsFuzz ir automatizēts testēšanas komplekts kas ļauj viņiem atrast šīs kļūdas, pamatojoties uz atsauces ēnotāju kopu. Kad lietotājs izpilda savu testu, visiem iegūtajiem attēliem ir jāizskatās vienādi. Jebkurš attēls, kas izskatās savādāk, nozīmē, ka ir bijusi kļūda.

Vairāku populāru ierīču rezultāti, kurās darbojas GraphicsFuzz testa komplekts. Samsung Galaxy S6, Samsung Galaxy S7 un Samsung Galaxy S8 ir iekļauti šajās diagrammās. Avots: GraphicsFuzz.

Samsung Galaxy S6, GraphicsFuzz atklāja, ka attēli vienā no rindām rāda attēlus, kuriem vajadzēja būt citā tabulā. Tas nozīmē, ka attēli no agrākajiem testiem tika noplūduši vēlākos testos. Pēc tam komanda atkārtoti palaida testa komplektu pārlūkā Google Chrome un atklāja, ka attēlā ir redzamas tīmekļa lapas daļas. Turklāt viņi atklāja, ka, atverot citu cilni, attēlā tika parādītas citu cilņu daļas. Būtībā šī kļūda ļāva vienai Google Chrome cilnei nopludināt informāciju par citu Chrome cilni! Komanda aiz muguras GraphicsFuzz apzināti nemeklēja drošības kļūdas, taču testēšanas rezultātā viņi to atrada. (Jāatzīmē, ka komanda atveidoja kļūdu Samsung Galaxy S6 standarta pārlūkprogrammā, kā arī Mozilla Firefox.)

Kā darbojas kļūda

Attēls tika izmantots, lai aktivizētu Samsung Galaxy S6 ilgstošo kļūdu. Avots: GraphicsFuzz.

"Ļaunprātīgā" tīmekļa lapa, ko izveidoja GraphicsFuzz izmanto WebGL, lai mēģinātu uzzīmēt kosmosa ainu audeklā, kā parādīts iepriekš. Katra pikseļa krāsu nosaka fragmentu ēnotājs, programma, ko nodrošina tīmekļa lapa, lai izpildītu GPU. The GraphicsFuzz framework modificēja fragmentu ēnotāju, kas lika tam darboties ļoti ilgu laiku. Ja ēnotājs darbojas pārāk ilgi, pārlūkprogramma vai operētājsistēma parasti pārtrauc renderēšanu. Tomēr, lai gan GPU pārtrauca renderēšanu pēc dažu pikseļu zīmēšanas, GPU draiveris par to neziņoja pārlūkam Google Chrome. (Ja paskatās uz attēlu raksta augšpusē, kurā redzama atkritumu video atmiņa, jūs faktiski varat redzēt kosmosa ainas daļas augšpusē pa kreisi.) Tas nozīmē, ka pikseļi, kas tika renderēti pirms pārtraukšanas, tiek atstāti neskarti, kas nozīmē, ka galīgais renderētais attēls lielākoties ir atkritumu video. atmiņa. Tā kā video atmiņa tiek nepārtraukti izmantota citu tīmekļa lapu renderēšanai, "atkritumu" dati faktiski satur citu tīmekļa lapu iepriekšējo renderēšanu. Tādējādi citas tīmekļa lapas tiek parādītas "ļaunprātīgajā" tīmekļa lapā. Būtiski, ka WebGL ļauj tīmekļa lapai tvert visu renderējamā satura saturu; pēc tam šis attēls tiek augšupielādēts attālajā serverī.

Diagramma, kas izskaidro ilgstošu GPU kļūdu, kas izraisa Chrome cilnes datu noplūdi. Avots: GraphicsFuzz.

Pārlūkā Google Chrome tiek izmantoti vairāki procesi, tāpēc dažādas cilnes bieži tiek izolētas, tāpēc šī izmantošana šķiet neiespējama. Tomēr Chrome mijiedarbojas ar GPU, izmantojot vienu "GPU procesu", kas nozīmē, ka visām cilnēm ir viena un tā pati GPU atmiņa, tādējādi ļaujot šai darbībai darboties. Iepriekš redzamā diagramma to parāda sīkāk.

Kļūda ir parādīta šajā video pirmajās 22 sekundēs. Tiek parādītas arī citas GraphicsFuzz atrastās drošības problēmas.

Mācības, kas jāapgūst

Nepareizi funkcionējošs GPU var apiet visus Google Chrome un Android drošības pasākumus, jo WebGL ļauj jebkurai ļaunprātīgai tīmekļa lapai nosūtīt kodu GPU izpildei. Google nevar novērst GPU kļūdas jo uzņēmums nekontrolē aparatūru un draiverus. Šajā gadījumā GPU pārdevējam (šajā gadījumā ARM) ir jāizlabo kļūda un OEM, kura ierīces tiek ietekmētas (šajā gadījumā Samsung), ir jāintegrē labojums atjauninājumā. Pievienojiet maisījumam nesējus, un ir viegli saprast, kā šādas kļūdas novēršana var aizņemt ļoti ilgu laiku — tas prasīja vismaz 5 mēneši lai lielākā daļa Samsung Galaxy S6 lietotāju varētu saņemt ielāpu.

GraphicsFuzz palīdz GPU pārdevējiem atrast grūti atklājamas kļūdas, piemēram, nepareizas kompilācijas kļūdas, kuru dēļ GPU tiek ģenerēts un izpildīts nepareizs kods. Viņu automatizētā testēšanas sistēma ļauj viņiem atrast kļūdas, piemēram, šajā rakstā parādītās. Ir pierādīts, ka "ļaunprātīgās" tīmekļa lapas izraisītā ilgstoša cilpa rada problēmas arī citās ierīcēs, piemēram, HTC One M7 un pavisam nesen Samsung Galaxy S9. GraphicsFuzz testē vadošos viedtālruņus un publicē a rezultātu tabula kas ierindo šīs ierīces, pamatojoties uz to veiktspēju testu apakškopā. Simtiem avāriju un renderēšanas kļūdu ir atrasti to testēšanas laikā, taču lielākā daļa netiek izmeklēti, lai noskaidrotu, vai tie nerada draudus drošībai. Tomēr, kā liecina šī izmantošana, nepareizi funkcionējošs GPU ir drošības risks, un ir iespējams, ka viena vai vairākas kritiskas drošības ievainojamības gaida atklāšanu. GraphicsFuzz cer, ka GPU pārdevēji par prioritāti nākotnē piešķirs draivera kvalitātes uzlabošanu.

Grafikas draiveru salīdzinošā uzticamība, kas sakārtota pēc kopējo problēmu skaita. Avots: GraphicsFuzz.

Izpaušanas laika skala

  • 2016. gada decembrī, GraphicsFuzz ziņoja par kļūdu Google Chromium kļūdu izsekotājs jo tas bija piemērots Chrome atlīdzības programmai. Pēc tam, kad GraphicsFuzz iesniedza kļūdu Google Chromium kļūdu izsekotājam, Google pieņēma kļūdu un pārsūtīja to ARM un Samsung, lai veiktu labošanu.
  • Google pārsūtīja ziņojumu uz ARM un Samsung kontaktpersonām.
  • Samsung klusi izlaboja kļūdu un ieviesa labojumu Android 7.0 Nougat atjauninājumā, kas tika izlaists no 2017. gada marta līdz jūnijam. Lai gan Samsung, Google vai ARM nebija izveidojis CVE un ne Samsung, ne ARM neizdeva nekādu informāciju par ielāpu, ņemiet vērā, ka GraphicsFuzz neziņoja par kļūdu, izmantojot pareizu procesu.
  • Vēlāk, GraphicsFuzz varēja apstiprināt, ka gan Samsung, gan ARM ir redzējuši ziņojumu un ka ARM varēja novērst problēmu ziņojuma dēļ.
  • 2017. gada augustā, GraphicsFuzz Google atalgoja 2000 USD par kļūdu ziņojumu.
  • 2017. gada novembrī, kļūdas ziņojums tika publiskots.