Kas olete kunagi mõelnud, kuidas turvaauke leitakse? Ühendkuningriigis asuv ettevõte GraphicsFuzz selgitab, kuidas nad avastasid Samsung Galaxy S6 graafikadraiveri vea, mida nad said kasutada Google Chrome'i avatud vahekaartide andmete vaatamiseks.
Veel märtsi lõpus pöördus Ühendkuningriigis asuv GPU töökindluse testimisele spetsialiseerunud idufirma meie poole GPU vea nad avastasid mis põhjustab Qualcomm Snapdragon 845Samsung Galaxy S9/S9+ veebilehe külastamisel taaskäivitamiseks. Firma, helistas GraafikaFuzz, tegi meiega koostööd, et probleemist teatada Qualcomm ja Samsung. Mõned meie lugejad olid huvitatud sellest, kuidas ettevõttele meeldib GraafikaFuzz suudab need haavatavused leida, nii et tegime ettevõttega koostööd, et näidata, kuidas nad avastasid vanema GPU haavatavuse. See juba parandatud haavatavus võimaldas ründajal kaugjuhtimisega "luurada" selle sisu järele Google Chrome brauseri vahelehed Samsung Galaxy S6.
See kasutaja vaatas enne pahatahtliku veebilehe külastamist oma panga veebisaiti. Sisu jäädvustati ja laaditi üles kaugserverisse. Allikas: GraafikaFuzz.
Kuidas GraphicsFuzz GPU vigu leiab
Graafikadraiver töötab nii, et võtab varjutusprogrammi ja saadab selle GPU-le täitmiseks ja seega pildi renderdamiseks. Enne varjundi saatmist GPU-le tõlgib graafikadraiver selle GPU-le arusaadavasse vormi; vigane tõlge võib põhjustada renderdustõrkeid, programmi või seadme krahhi, valesid pilte ja isegi turvaprobleeme. GraafikaFuzz on automatiseeritud testimiskomplekt mis võimaldab neil neid vigu leida võrdlusvarjutajate komplekti põhjal. Kui kasutaja sooritab oma testi, peaksid kõik saadud pildid ühesugused välja nägema. Iga pilt, mis näeb välja teistsugune, tähendab, et tegemist on veaga.
Tulemused mitmest populaarsest seadmest, mis käitavad testikomplekti GraphicsFuzz. Samsung Galaxy S6, Samsung Galaxy S7 ja Samsung Galaxy S8 on kaasatud nendesse edetabelitesse. Allikas: GraafikaFuzz.
Samsung Galaxy S6 jaoks GraafikaFuzz avastas, et ühes reas olevad pildid näitavad pilte, mis pidid olema teises tabelis. See tähendab, et varasemate testide pildid lekkisid hilisematesse testidesse. Seejärel käivitas meeskond Google Chrome'is testkomplekti uuesti ja avastas, et pildil ilmusid veebilehe osad. Lisaks leidsid nad, et teise vahelehe avamine põhjustas pildil teiste vahekaartide osade kuvamise. Põhimõtteliselt võimaldas see viga ühel Google Chrome'i vahekaardil lekkida teavet teise Chrome'i vahekaardi kohta! Meeskond taga GraafikaFuzz ei otsinud tahtlikult turvavigu, kuid nad leidsid selle testimise tulemusel. (Tuleb märkida, et meeskond reprodutseeris vea nii Galaxy S6 Samsungi brauseris kui ka Mozilla Firefox.)
Kuidas viga töötab
Pilt, mida kasutati Samsung Galaxy S6 pikaajalise vea käivitamiseks. Allikas: GraafikaFuzz.
Kasutaja loodud "pahatahtlik" veebileht GraafikaFuzz kasutab WebGL-i, et proovida joonistada lõuendisse ruumistseeni, nagu ülal näidatud. Iga piksli värvi määrab fragmendivarjutaja – programm, mille veebileht GPU-s käivitab. The GraafikaFuzz raamistik muutis fragmentide varjutajat, mille tõttu see töötas väga pikka aega. Kui varjutaja töötab liiga kaua, katkestab brauser või operatsioonisüsteem tavaliselt renderdamise. Kuigi GPU katkestas renderdamise pärast mõne piksli joonistamist, ei teavitanud GPU draiver sellest Google Chrome'i. (Kui vaatate artikli ülaosas olevat pilti, mis näitab prügi videomälu, näete tegelikult osi kosmosestseeni ülaosas vasakule.) See tähendab, et pikslid, mis renderdati enne katkestamist, jäetakse puutumata, mis tähendab, et lõplik renderdatud pilt on enamasti prügivideo mälu. Kuna videomälu kasutatakse pidevalt muude veebilehtede renderdamiseks, sisaldavad "prügi" andmed tegelikult teiste veebilehtede varasemaid renderdusi. Seega kuvatakse "pahatahtlikul" veebilehel lõpuks ka teisi veebilehti. Oluline on see, et WebGL võimaldab veebilehel jäädvustada renderdatava sisu; see pilt laaditakse seejärel üles kaugserverisse.
Diagramm, mis selgitab pikaajalist GPU viga, mis põhjustab Chrome'i vahekaardi andmete "lekkimise". Allikas: GraafikaFuzz.
Google Chrome kasutab mitut protsessi, nii et erinevad vahelehed on sageli isoleeritud, mistõttu tundub see ärakasutamine pealtnäha võimatuna. Chrome suhtleb GPU-ga aga ühe "GPU protsessi" abil, mis tähendab, et kõik vahekaardid jagavad sama GPU-mälu, võimaldades seega sellel ärakasutamisel töötada. Ülaltoodud diagramm näitab seda üksikasjalikumalt.
Viga demonstreeritakse selles videos esimese 22 sekundi jooksul. Samuti on näidatud muud GraphicsFuzzi leitud turvaprobleemid.
Õppetunnid, mida tuleb õppida
Valesti käituv GPU võib mööda minna kõigist Google Chrome'i ja Androidi turvameetmetest, kuna WebGL lubab mis tahes pahatahtlikul veebilehel GPU-le täitmiseks koodi saata. Google ei saa GPU vigu parandada kuna ettevõte ei kontrolli riistvara ega draivereid. Sel juhul peab vea parandama GPU tarnija (antud juhul ARM) ja paranduse värskendusse integreerima OEM, kelle seadmeid see mõjutab (antud juhul Samsung). Lisage segule kandjaid ja on lihtne näha, kuidas sellise vea parandamine võib võtta väga kaua aega – see võttis vähemalt 5 kuud et enamik Samsung Galaxy S6 kasutajaid saaksid plaastri kätte.
GraafikaFuzz aitab GPU müüjatel leida raskesti tuvastatavaid vigu, näiteks kompileerimisvigu, mis põhjustavad GPU-s vale koodi genereerimise ja käivitamise. Nende automatiseeritud testimisraamistik võimaldab neil leida selliseid vigu nagu selles artiklis tutvustatud. On näidatud, et "pahatahtliku" veebilehe põhjustatud pikaajaline silmus põhjustab probleeme ka teistes seadmetes, näiteks HTC One M7 ja viimasel ajal ka Samsung Galaxy S9. GraafikaFuzz testib lipulaevad nutitelefonid ja avaldab a tulemuste tabel mis järjestab need seadmed nende toimivuse alusel nende testide alamhulga alusel. Sajad kokkujooksmised ja renderdusvead on nende testimise käigus leitud, kuid enamikku neist ei uurita, et näha, kas need kujutavad endast turvaohtu. Kuid nagu see ärakasutamine näitab, on valesti töötav GPU turvarisk ja on võimalik, et üks või mitu kriitilist turvanõrkust ootavad avastamist. GraafikaFuzz loodab, et GPU müüjad seavad tulevikus esikohale draiveri kvaliteedi parandamise.
Graafikadraiverite võrdlev töökindlus, sorteeritud probleemide koguarvu järgi. Allikas: GraafikaFuzz.
Avalikustamise ajakava
- 2016. aasta detsembris GraafikaFuzz teatas veast Google Chromiumi veajälgija sest see oli Chrome'i preemiaprogrammi jaoks sobilik. Pärast seda, kui GraphicsFuzz saatis vea Google Chromiumi veajälgijale, võttis Google selle vea vastu ja edastas selle parandamiseks ARM-ile ja Samsungile.
- Google edastas aruande ARM-i ja Samsungi kontaktidele.
- Samsung parandas vea vaikselt ja võttis paranduse kasutusele Android 7.0 Nougati värskenduses, mis anti välja 2017. aasta märtsist juunini. Ehkki Samsung, Google ega ARM ei loonud ühtegi CVE-d ning Samsung ega ARM ei avaldanud plaastri kohta teavet, pange tähele, et GraafikaFuzz ei teatanud veast läbi õige protsess.
- hiljem GraafikaFuzz suutis kinnitada, et nii Samsung kui ka ARM nägid aruannet ja et ARM suutis aruande tõttu probleemi lahendada.
- 2017. aasta augustis GraafikaFuzz sai Google'ilt veaaruande eest 2000 dollarit.
- 2017. aasta novembris veaaruanne avalikustati.