Džordžijos technologijos instituto, Mičigano universiteto ir Rūro universiteto mokslininkai sukūrė iLeakage atakos techniką, kuri leidžia išnaudoti Apple A ir M serijos ARM procesorių pažeidžiamumą, naršyklėje atidarant specialiai sukurtą puslapį. Tyrėjų parengti eksploatuoti prototipai leidžia naršyklėje paleidžiant JavaScript kodą, sužinoti kituose skirtukuose atidarytų svetainių turinį. Pavyzdžiui, jie pademonstravo galimybę nustatyti Gmail skirtuke atidaryto laiško tekstą, peržiūrėti YouTube istoriją ir susigrąžinti į prisijungimo formą LastPass slaptažodžių tvarkyklės įvestą slaptažodį.Instagram. Ataka taikoma „Safari“ naršyklei sistemose su „macOS“ ir bet kokiomis naršyklėmis „iOS“ platformoje („Apple“ taisyklės reikalauja, kad visos „iOS“ naršyklės naudotų tik „Safari“ bendrą „WebKit“ sistemos variklį).
Nors ataka taikoma tik „Apple“ produktams, ji siūlo įdomų būdą apeiti laikmačio skyros apribojimus „WebKit“ variklyje, kuris gali būti naudingas apeinant panašius apribojimus kitose naršyklėse. Apple M1 ir M2 lustuose nustatytas pažeidžiamumas primena klasikinį Spectre v1 pažeidžiamumą, taip pat lemia atminties turinio nutekėjimą atliekant operacijas spekuliaciniu režimu, kurį, neteisingai numatant, procesorius išmeta, tačiau jų vykdymo pėdsakai deponuojami procesoriaus talpykloje.
Taikant šį atakos metodą, spekuliatyvus vykdymas leido sukurti primityvą, skirtą savavališkų 64 bitų rodyklių skaitymui proceso, atsakingo už puslapių turinio pateikimą naršyklėje, adresų erdvėje. Norint gauti prieigą prie proceso, kurio metu atvaizduojama kažkieno svetainė, adresų erdvės, buvo panaudotas triukas, kad iššokančiajame lange atidarytas svetimas puslapis, tiriamas naudojant JavaScript window.open() metodą. Šiuo atveju svetainė buvo atidaryta ne atskiru procesu, o tuo pačiu procesu su užpuoliko kodu.
Saugumo sumetimais „WebKit“ variklis leidžia „JavaScript“ veikti tik su supakuotomis 35 bitų rodyklėmis. Siekdami suteikti prieigą prie visos proceso adresų erdvės ir apeiti 35 bitų ribą, tyrėjai panaudojo tipo painiavos techniką, kad priverstų JavaScript variklį apdoroti netinkamo tipo objektą. Apdorojant specialiai sukurtą „JavaScript“ objektą variklyje, sukuriamos sąlygos, kurios lemia spekuliatyvų instrukcijų, kurios pasiekia masyvą, vykdymą.
Kadangi objekto tipas nesutampa su apdorojamo masyvo tipu, normaliomis sąlygomis tokie veiksmai blokuojami, todėl Tipo painiavos atakos kodas dedamas į sąlyginį „jei“ bloką, kuris įprastomis sąlygomis neįjungiamas. , bet vykdomas spekuliaciniu režimu, jei procesorius neteisingai numato tolesnį išsišakojimą. Dėl to procesorius spekuliatyviai pasiekia sugeneruotą 64 bitų žymeklį, tačiau nustačius nesėkmingą prognozę, atšaukia būseną. Tokiu atveju spekuliacinio vykdymo pėdsakai yra deponuojami bendroje talpykloje ir gali būti atkurti naudojant talpyklos turinio nustatymo per šoninius kanalus metodus.
Norint išgauti duomenis iš procesoriaus L1 talpyklos, likusios po spekuliacinių operacijų, ataka naudoja pLRU (pseudo-neseniai naudoto) metodo modifikaciją, kurią anksčiau pasiūlė „Google“. Šiuo atveju originalus pLRU metodas yra pagrįstas duomenų prieigos vėlavimų matavimu, kurių skirtumas leidžia spręsti, ar procesoriaus talpykloje yra tam tikra seka, ar ne (jei duomenys talpinami, operacija atliekama greičiau, o jei ne, lėčiau). Siekiant apsisaugoti nuo procesoriaus talpyklos tikrinimo šiuolaikinėse naršyklėse, laikmačio tikslumas gerokai sumažintas iki tokio lygio, kuris neleidžia aptikti skirtumų.
Siekiant įveikti laikmačio tikslumo apribojimą iLeakage atakoje, siūloma technika, leidžianti nustatyti duomenų buvimą ar nebuvimą talpykloje, naudojant lenktynių sąlygas. Metodo esmė yra vienu metu paleisti dvi gijas - pagrindinę ir nuorodą. Referencinė gija apima instrukcijų seką, kurios vykdomos tam tikru atskaitos laiku. Pačioje atskaitos gijos vykdymo pradžioje kintamasis, bendrinamas su pagrindine gija, nustatomas į 1, o įvykdžius instrukcijas kintamasis nustatomas į nulį. Taigi bendras kintamasis turi reikšmę 1 tik tam tikrą trumpą laiką.
Pagrindinė gija inicijuoja duomenų nustatymo talpykloje ciklą naudojant pLRU metodą. Patikrintų duomenų buvimo ar nebuvimo talpykloje ženklas yra ne laiko matavimas pagal laikmatį, o jungtinio kintamojo būsena po patikrinimo. Jei kintamojo reikšmė yra 1, tai operacija, atlikta greičiau nei atskaitos kodas, buvo atlikta lygiagrečioje gijoje, t.y. duomenys buvo pateikti iš talpyklos. Jei kintamajame yra reikšmė 0, operacija užtruko gana ilgai, nes talpykloje trūko duomenų, o nuorodos kodas lygiagrečioje gijoje turėjo laiko būti visiškai apdorotas.

Siūlomo talpyklos turinio nustatymo metodo tikslumas svyruoja nuo 90% iki 99%, o duomenų nustatymo našumas yra nuo 23 iki 34 baitų per sekundę, priklausomai nuo procesoriaus ir įrenginio. Prieš pradedant ataką, reikia kalibruoti atskaitos kodą, kuris trunka maždaug penkias minutes. Baigus dabartinės sistemos kalibravimą, 64 simbolių eilutei išgauti prireikia maždaug 30 sekundžių.



Be to, galime pastebėti, kad buvo paskelbtas išnaudojimo prototipas, kuris naudoja Zenbleed pažeidžiamumą AMD procesoriuose, pagrįstuose Zen2 mikroarchitektūra, kad išgautų duomenis, apdorotus kituose procesuose atidarant puslapį su išnaudojimu naršyklėje Chrome. Be Zenbleed pažeidžiamumo (CVE-2023-20593), išnaudojimas taip pat apima CVE-2023-3079 pažeidžiamumą V8 variklyje, ištaisytą Chrome 115 versijoje.
Šaltinis: opennet.ru
