Ar kada nors susimąstėte, kaip randamos saugumo spragos? JK įsikūrusi įmonė „GraphicsFuzz“ paaiškina, kaip jie aptiko „Samsung Galaxy S6“ grafikos tvarkyklės klaidą, kurią galėjo išnaudoti norėdami peržiūrėti duomenis iš atidarytų „Google Chrome“ skirtukų.
Dar kovo pabaigoje JK įsikūrusi pradedančioji įmonė, besispecializuojanti GPU patikimumo tikrinimo srityje, kreipėsi į mus su GPU klaida, kurią jie atrado tai sukelia „Qualcomm Snapdragon 845“.Samsung Galaxy S9/S9+ paleisti iš naujo, kai lankotės tinklalapyje. Firma, paskambino GrafikaFuzz, dirbo su mumis, kad praneštų apie problemą Qualcomm ir Samsung. Kai kuriems mūsų skaitytojams buvo įdomu sužinoti, kaip patinka įmonei GrafikaFuzz gali rasti šiuos pažeidžiamumus, todėl bendradarbiavome su įmone norėdami parodyti, kaip jie atrado senesnį GPU pažeidžiamumą. Šis jau pataisytas pažeidžiamumas leido užpuolikui nuotoliniu būdu „šnipinėti“ turinį Google Chrome naršyklės skirtukai Samsung Galaxy S6.
Šis vartotojas peržiūrėjo savo banko svetainę prieš apsilankydamas kenkėjiškame tinklalapyje. Turinys buvo užfiksuotas ir įkeltas į nuotolinį serverį. Šaltinis: GrafikaFuzz.
Kaip „GraphicsFuzz“ randa GPU klaidas
Grafikos tvarkyklė veikia paimdama atspalvio programą ir nusiųsdama ją į GPU, kad ji būtų vykdoma ir taip atvaizduojamas vaizdas. Prieš siųsdama atspalvį į GPU, grafikos tvarkyklė paverčia jį GPU suprantama forma; klaidingas vertimas gali sukelti atvaizdavimo gedimą, programos ar įrenginio strigtis, neteisingus vaizdus ir net saugos problemas. GrafikaFuzz turi an automatinis testavimo rinkinys kuri leidžia jiems rasti šias klaidas remiantis etaloninių šešėlių rinkiniu. Kai vartotojas atlieka savo testą, visi gauti vaizdai turėtų atrodyti vienodai. Bet koks vaizdas, kuris atrodo kitaip, reiškia, kad buvo klaida.
Kelių populiarių įrenginių, kuriuose veikia „GraphicsFuzz“ bandymų rinkinys, rezultatai. „Samsung Galaxy S6“, „Samsung Galaxy S7“ ir „Samsung Galaxy S8“ yra įtraukti į šias diagramas. Šaltinis: GrafikaFuzz.
„Samsung Galaxy S6“ GrafikaFuzz atrado, kad vaizdai vienoje iš eilučių rodo vaizdus, kurie turėjo būti kitoje lentelėje. Tai reiškia, kad ankstesnių bandymų vaizdai nutekėjo į vėlesnius bandymus. Tada komanda iš naujo paleido bandomąjį rinkinį „Google Chrome“ ir nustatė, kad vaizde rodomos tinklalapio dalys. Be to, jie nustatė, kad atidarius kitą skirtuką vaizde buvo rodomos kitų skirtukų dalys. Iš esmės ši klaida leido vienam „Google Chrome“ skirtukui nutekėti informaciją apie kitą „Chrome“ skirtuką! Komanda už nugaros GrafikaFuzz tyčia neieškojo saugos klaidų, bet jie jas rado atlikę bandymus. (Pažymėtina, kad komanda atkūrė klaidą „Galaxy S6“ „Samsung“ naršyklėje, taip pat Mozilla Firefox.)
Kaip veikia klaida
Vaizdas, naudojamas ilgalaikei „Samsung Galaxy S6“ klaidai sukelti. Šaltinis: GrafikaFuzz.
„Kenkėjiškas“ tinklalapis, sukurtas GrafikaFuzz naudoja WebGL, kad bandytų nupiešti erdvės sceną drobėje, kaip parodyta aukščiau. Kiekvieno pikselio spalvą nustato fragmentų atspalvis, tinklalapio pateikta programa, skirta vykdyti GPU. The GrafikaFuzz framework modifikavo fragmentų atspalvį, dėl kurio jis veikė tikrai ilgą laiką. Kai atspalvis veikia per ilgai, naršyklė arba operacinė sistema paprastai nutraukia atvaizdavimą. Tačiau, nors GPU nutraukė pateikimą po kelių pikselių, GPU tvarkyklė apie tai nepranešė „Google Chrome“. (Jei pažvelgsite į paveikslėlį straipsnio viršuje, kuriame rodoma šiukšlių vaizdo atmintis, iš tikrųjų galite pamatyti kosmoso scenos dalis viršuje kairėje.) Tai reiškia, kad pikseliai, kurie buvo pateikti prieš nutraukimą, lieka nepaliesti, o tai reiškia, kad galutinis vaizdas dažniausiai yra šiukšlių vaizdo įrašas atmintis. Kadangi vaizdo atmintis nuolat naudojama kitiems tinklalapiams atvaizduoti, „šiukšlių“ duomenys iš tikrųjų apima ankstesnius kitų tinklalapių atvaizdavimus. Taigi „kenkėjiškame“ tinklalapyje gali būti rodomi kiti tinklalapiai. Svarbiausia, kad „WebGL“ tinklalapiui leidžia užfiksuoti bet kokio atvaizduojamo turinio turinį; tada šis vaizdas įkeliamas į nuotolinį serverį.
Diagrama, paaiškinanti ilgalaikę GPU klaidą, dėl kurios „nutekėjo“ „Chrome“ skirtuko duomenys. Šaltinis: GrafikaFuzz.
„Google Chrome“ naudoja kelis procesus, todėl skirtingi skirtukai dažnai yra atskirti, todėl šis išnaudojimas iš pirmo žvilgsnio atrodo neįmanomas. Tačiau „Chrome“ sąveikauja su GPU naudodama vieną „GPU procesą“, o tai reiškia, kad visi skirtukai turi tą pačią GPU atmintį, todėl šis išnaudojimas gali veikti. Aukščiau pateiktoje diagramoje tai parodyta išsamiau.
Klaida demonstruojama šiame vaizdo įraše per pirmas 22 sekundes. Taip pat parodomos kitos „GraphicsFuzz“ aptiktos saugos problemos.
Pamokos, kurias reikia išmokti
Netinkamai veikiantis GPU gali apeiti visas „Google Chrome“ ir „Android“ saugos priemones, nes „WebGL“ leidžia bet kuriam kenkėjiškam tinklalapiui siųsti kodą į GPU vykdyti. „Google“ negali ištaisyti GPU klaidų nes įmonė nekontroliuoja aparatinės įrangos ir tvarkyklių. Šiuo atveju GPU pardavėjas (šiuo atveju ARM) turi ištaisyti klaidą, o OĮG, kurio įrenginiai yra paveikti (šiuo atveju „Samsung“), integruoti pataisą į naujinimą. Pridėkite nešiklių prie mišinio ir nesunku suprasti, kaip tokiai klaidai ištaisyti gali prireikti tikrai daug laiko – tai užtruko mažiausiai 5 mėnesius kad dauguma Samsung Galaxy S6 vartotojų gautų pleistrą.
GrafikaFuzz padeda GPU pardavėjams rasti sunkiai aptinkamas klaidas, pvz., klaidingo kompiliavimo klaidas, dėl kurių GPU generuojamas ir vykdomas neteisingas kodas. Jų automatizuota testavimo sistema leidžia rasti klaidų, tokių, kaip parodyta šiame straipsnyje. Taip pat buvo įrodyta, kad ilgai trunkanti kilpa, kurią sukelia „kenkėjiškas“ tinklalapis, sukelia problemų kituose įrenginiuose, pvz. HTC One M7 o visai neseniai Samsung Galaxy S9. GrafikaFuzz išbando pavyzdinius išmaniuosius telefonus ir skelbia a rezultatų lentelė kuri klasifikuoja šiuos įrenginius pagal jų našumą atliekant testų pogrupį. Šimtai strigčių ir pateikimo klaidų buvo rasta jų bandymų metu, tačiau dauguma jų nėra tiriami siekiant išsiaiškinti, ar jie nekelia grėsmės saugumui. Tačiau, kaip rodo šis išnaudojimas, netinkamai veikiantis GPU kelia pavojų saugumui ir gali būti, kad vienas ar daugiau svarbių saugos spragų laukia, kol bus aptiktos. GrafikaFuzz tikisi, kad GPU pardavėjai ateityje pirmenybę teiks tvarkyklių kokybės gerinimui.
Palyginamasis grafikos tvarkyklių patikimumas, surūšiuotas pagal bendrą problemų skaičių. Šaltinis: GrafikaFuzz.
Atskleidimo laiko juosta
- 2016 m. gruodžio mėn. GrafikaFuzz pranešė apie klaidą „Google Chromium“ klaidų stebėjimo priemonė nes jis buvo tinkamas „Chrome“ apdovanojimų programai. Po to, kai „GraphicsFuzz“ pateikė klaidą „Google Chromium“ klaidų stebėjimo priemonei, „Google“ ją priėmė ir persiuntė ją ARM ir „Samsung“ pataisyti.
- Google perdavė ataskaitą ARM ir Samsung kontaktams.
- „Samsung“ tyliai pataisė klaidą ir išleido pataisą „Android 7.0 Nougat“ naujinime, kuris buvo išleistas 2017 m. kovo–birželio mėn. Nors „Samsung“, „Google“ ar ARM nesukūrė CVE ir nei „Samsung“, nei ARM nepaskelbė jokios informacijos apie pataisą, atkreipkite dėmesį, kad GrafikaFuzz nepranešė apie klaidą per tinkamas procesas.
- Vėliau GrafikaFuzz galėjo patvirtinti, kad „Samsung“ ir ARM matė ataskaitą ir kad ARM galėjo išspręsti problemą dėl ataskaitos.
- 2017 m. rugpjūčio mėn. GrafikaFuzz „Google“ atlygino 2 000 USD už pranešimą apie klaidą.
- 2017 m. lapkričio mėn. pranešimas apie klaidą buvo paviešintas.