„Magisk“ kūrėjas išsiaiškino, kad „Google“ galėjo pradėti naudoti aparatinės įrangos patikrinimus, kad nustatytų, ar įrenginys buvo atrakintas įkrovos įkroviklis.
XDA pripažintas kūrėjas topjohnwu„Magisk“ projektas „Android“ bendruomenėje iš esmės tapo „root“ sinonimu. Viena iš pagrindinių priežasčių, kodėl jis toks populiarus, yra tai, kad jis gali paslėpti faktą, kad naudotojas pakeitė savo įrenginį. Tačiau „Google“ gali susidoroti su „Magisk“ galimybe paslėpti įkrovos įkrovos atrakinimo būseną nuo programų.
Norėdami išjungti savo telefoną, paprastai turite atrakinti įkrovos įkroviklį, kuris leidžia suaktyvinti pakeistus įkrovos vaizdus. Tai reikalinga, nes „Magisk“ modifikuoja įkrovos vaizdą, kad būtų suklastota įkrovos įkrovos būsena ir (arba) patikrinta įkrovos būsena. „Google“ „SafetyNet Attestation“ API, kuri yra „Google Play“ paslaugų dalis, naudojama programai pranešti, ar ji veikia sugadintame įrenginyje; jei „SafetyNet“ API aptinka, kad įkrovos įkroviklis buvo atrakintas, „Pagrindinio vientisumo“ patikrinimui ji grąžins gedimo būseną. Įrenginiai, kuriems nepavyko atlikti šios patikros, gali būti užblokuoti iš programų, kurios naudoja „SafetyNet“ API įrenginio vientisumui nustatyti; tokios programėlės paprastai apima banko programas, mokėjimo programas (pvz., „Google Pay“) ir daugybę internetinių žaidimų (pvz., „Pokémon Go“). Tačiau, kadangi „SafetyNet“ API iki šiol naudojo tik programinės įrangos patikrinimus, kad nustatytų, ar įrenginys buvo sugadintas, „Magisk“ gali tiesiog apgauti įkrovos įkroviklis ir (arba) patvirtinta įkrovos būsena, nes ji įdiegta žemesniu lygiu ir su didesnėmis privilegijomis nei „Google Play“ paslaugos ir kitos naudotojų vietos programos. Kaip paaiškina topjohnwu, „MagiskHide“ [sukuria] izoliuotą „saugią aplinką“ aptikimo procesui ir eina per Google API, kad sukurtų
atitinkantys tikrove „SafetyNet“ rezultatas, kuris neatspindi tikrosios įrenginio būsenos.Tačiau pastaruoju metu vartotojai pastebėjo, kad jų įkrovos įkėlimo programa atrakinti įrenginiai neatitinka „SafetyNet“ pagrindinio vientisumo patikrinimo, nors jie naudojo „Magisk“ įkrovos atvaizdui pataisyti. Anot topjohnwu, taip yra todėl, kad „Google“ galėjo įdiegti aparatinės įrangos lygio rakto patvirtinimą, kad patikrintų, ar įkrovos vaizdas nebuvo sugadintas. Tiksliau, tai reiškia, kad „Google Play“ paslaugos „[siunčia] nepakeistą raktų saugyklos sertifikatą „SafetyNet“ serveriams, patikrina jo teisėtumą ir patikrina sertifikato plėtinio duomenis, kad sužinotumėte, ar jūsų įrenginyje [yra] patvirtinta įkrova (įkrovos įkroviklio būsena).“ Tai reiškia, kad jis gali nebebūti galima paslėpti faktą, kad įkrovos įkroviklis buvo atrakintas, todėl tokios programos kaip „Google Pay“ ir „Pokémon Go“ neveiks. normaliai.
Kaip pažymėjo topjohnwu, šis būdo, kuriuo „SafetyNet“ tikrina įkrovos įkrovos atrakinimo būseną, pakeitimas atsiranda dėl „Google Play“ paslaugose esančio „SafetyNet“ API serverio atnaujinimo. Tačiau ne kiekvienas vartotojas neatlieka šių atnaujintų „SafetyNet“ patikrų, todėl naujasis aparatinės įrangos lygio rakto patvirtinimas dar gali būti plačiai taikomas.
Mes matėme, kaip topjohnwu ne kartą įveikė technines kliūtis. „Google“ dažnai pateikia naujus „SafetyNet“ patikrinimus, kuriuos „topjohnwu“ tada atranda ir apeina „Magisk“. Kiekviena nauja „Android“ versija pakeičia skaidinio struktūrą arba įkrovos vaizdą, todėl „topjohnwu“ turi ištirti pakeitimus ir įdiegti naują pataisymo metodą. Tačiau šį kartą net topjohnwu gali sunkiai rasti aplinkkelį.
Taip yra todėl, kad norint gauti privatųjį raktą, šį kartą reikia įsilaužti į patikimos vykdymo aplinkos (TEE) programinę įrangą. Tačiau tai yra neįtikėtinai sunku padaryti, nes reikia rasti programinės aparatinės įrangos pažeidžiamumą, kuris yra sukurtas taip, kad būtų neįtikėtinai saugus. Tiesą sakant, daugelis įmonių siūlo mokėjimus šimtais tūkstančių dolerių, jei būtų rastas toks pažeidžiamumas. Pavyzdžiui, „Google“ sumoka 250 000 USD už nuotolinio kodo vykdymo spragas „Pixel“ patikimoje vykdymo aplinkoje ir iki 1 000 000 USD dėl pažeidžiamumų Titanas M saugumo lustas. Net jei privatus raktas būtų kaip nors nutekėjęs, mažai tikėtina, kad jis būtų labai naudingas, nes „Google“ gali nuotoliniu būdu atšaukti raktą todėl jo negalima naudoti įrenginių vientisumui patikrinti.
Kai „SafetyNet“ bus plačiai taikomas aparatinės įrangos lygio rakto patvirtinimas, dauguma įrenginių su atrakinta įkrovos įkrova, kurioje veikia „Android 8.0 Oreo“ arba naujesnė versija, neatlaikys „SafetyNet“ pagrindinio vientisumo patikrinimo. Taip yra todėl, kad visuose įrenginiuose, kurie paleisti naudojant „Android 8.0 Oreo“ ar naujesnę versiją, TEE turi būti įdiegta aparatinės įrangos raktų saugykla. Tam tikri įrenginiai šiais laikais netgi turi specialius techninės įrangos saugos modulius (HSM), kurie dar labiau apsunkina naudojimą, nes TEE nukeliauja nuo pagrindinio procesoriaus; „Titan M“ „Pixel 4“ ir „Samsung“ naujas saugos lustas „Galaxy S20“ yra to pavyzdžiai.
Topjohnwu taip pat paaiškina kad kiti galimi sprendimai yra neįmanomi arba labai sudėtingi. „Xposed Framework“ naudojimas „SafetyNet Attestation“ API modifikavimui „Google Play“ paslaugose greičiausiai neveiks, nes „tinkami SafetyNet patikrinimai patvirtins rezultatus nuotoliniame serveryje, o ne [[] įrenginys, kurį galima valdyti naudojant kodo įterpimo sistemas. vieta. Suklastoti „SafetyNet“ testo rezultato taip pat nebus įmanoma, nes „SafetyNet“ atsakymai „ateina iš „Google“ serverių ir yra pasirašyti naudojant „Google“ privatų raktą.
Jau kelerius metus „Google“ turi galimybę sugriežtinti „SafetyNet“ patikras naudodama aparatinės įrangos rakto patvirtinimą. Tai, kad jie to nedarė 3 metus, leido vartotojams mėgautis root ir Magisk moduliais neprarandant galimybės naudotis banko programomis. Tačiau panašu, kad „Magisk“ galimybė efektyviai slėpti įkrovos įkrovos atrakinimo būseną netrukus baigsis. Tai pokytis, kurio tikėjomės daugelį metų, tačiau liūdna, kad pagaliau jis įsigalioja. Tikimės, kad „Google“ atnaujins „SafetyNet Attestation“ API, kad pateiktų informaciją, ar tikrinant būseną buvo naudojama aparatinė įranga patvirtinimas, nes tai leistų programų kūrėjams nuspręsti, ar jie nori užblokuoti visus vartotojus, kurie atrakino įkrovos įkroviklis.
Ačiū Danieliui Micay (@Danielis Micay) už jo indėlį šiuo klausimu!