A root hozzáférés elrejtése a Magisk-ben a közelmúltban a SafetyNet hardveres tanúsítványt hozó változásának köszönhetően sokkal nehezebbé válik.
Márciusban néhány felhasználó telepítette a Magisket megjegyezte hogy eszközeik nem felelnek meg a SafetyNet tanúsítványnak. Ez a hír nyugtalanította az XDA közösségét, mert azt jelenti, hogy sok fontos banki/pénzügyi alkalmazás és olyan népszerű játék, mint a Pokémon Go és a Fate/Grand Order megtagadta a rootolt eszközökön való futtatást. Egy ideig úgy tűnt, hogy a SafetyNet szigorított korlátozásait visszavonták, hogy aztán az elmúlt hetekben újra bevezessék néhány felhasználót. A Google azonban május elején csendesen megerősítette, hogy tesztelik a hardverrel támogatott tanúsítványt A SafetyNet válaszai, ami miatt a Magisk nem tudta elrejteni a rendszerbetöltő feloldási állapotát Március. Ha ez a változás széles körben elterjed, az azt jelenti, hogy a felhasználóknak választaniuk kell a root/egyedi ROM-ok/kernelek/stb. vagy a preferált banki alkalmazásokat és játékokat. Hamarosan eltűnhet az Android egyik legnagyobb vonzereje a felhasználók számára.
Az eseménysorozat összefoglalásához először magáról a SafetyNetről kell beszélnünk. A SafetyNet a Google Play Services API-k készlete. A SafetyNet Attestation API az egyik ilyen API, amelyet harmadik féltől származó alkalmazások hívhatnak meg annak ellenőrzésére, hogy az eszköz szoftverkörnyezetét nem módosították-e bármilyen módon. Az API ellenőrzi a különféle dolgokat, például a szuperfelhasználói binárisok jeleit, a rendszerbetöltő feloldási állapotát és még sok mást. Amikor rootol egy eszközt a Magisk segítségével, az „[létrehoz] egy elszigetelt „biztonságos környezetet” a [SafetyNet] észlelési folyamatához, és a Google API-ján keresztül létrehoz egy legális A SafetyNet eredménye, amely nem tükrözi az eszköz valós állapotát” – mondta az XDA Senior Recognised Developer topjohnwu. Ez lehetővé teszi a felhasználó számára, hogy rootolni tudja a telefonját, miközben biztosítja, hogy az API mindig "false"-t ad vissza a rendszerbetöltő feloldó ellenőrzésekor. Ez a módszer a SafetyNet rendszerbetöltő feloldási észlelésének megkerülésére a Magisk számára az elmúlt néhány évben bevált. éve, de ez csak azért van így, mert a Google visszatartotta a rendszerindító lemezkép integritásának hardver segítségével történő ellenőrzését tanúsítvány. Márciusban úgy tűnt, hogy a Google végre elkezdte alkalmazni a hardveres tanúsítványt a SafetyNetben a boot image, de soha nem kaptunk hivatalos nyilatkozatot a Google-tól, amely megerősítette volna a változást, és csak néhány felhasználó volt érintett. Ahogy azt az XDA Senior Tag is észrevette Displax, azonban a Google 2020. május 5-én megerősítette, hogy egyes eszközöktől származó SafetyNet Attestation API-válaszok már hardveres ellenőrzéseket is tartalmaznak.
A „SafetyNet API-kliensek” Google-csoportban a Google bemutatta az Attestation API új funkcióját: assessmentType. Egyes eszközök JSON Web Signature (JWS) válaszában lesz egy „evaluationType” nevű mező, amely „betekintést nyújt a fejlesztőknek a jelek/mérések típusaiba, amelyek hozzájárultak az egyes SafetyNet Attestation API válaszokhoz." Az egyik támogatott token ebben a mezőben a „HARDWARE_BACKED”, ami azt jelzi, hogy az API „[használta] a távoli eszköz hardverrel támogatott biztonsági funkcióit (például. hardverrel támogatott kulcs tanúsítvány), hogy befolyásolják [a] értékelését." A Google azt mondja, hogy „jelenleg értékelik és módosítják az alkalmassági feltételeket azokra az eszközökre, amelyeknél hardverrel támogatott biztonsági funkciókat." Ez azt jelenti, hogy egyes eszközökön a Google Play Services most hardveresen támogatott tanúsítványt használ annak észlelésére, hogy az eszköz szoftverét nem manipulálva. A Google hivatalosan nem dokumentálta ezt a változást a Google-csoportban közzétett bejelentésen kívül, így egyes fejlesztők, akik a SafetyNetet használják nincs tudatában ennek a változásnak (és ezért még nem ellenőrzi a „HARDWARE_BACKED” mezőt a JWS-válaszokban.) Azonban azoknál az alkalmazásoknál, amelyek keresik ezt a mezőt, most már nincs lehetőség elrejteni előlük a root hozzáférést, feltéve, hogy az eszköz része a Google által futás.
Topjohnwu szerint a hardverrel támogatott tanúsítás azt jelenti, hogy a Google Play Services mostantól „[küld] egy módosítatlan kulcstároló tanúsítványt a SafetyNet szervereinek, [ellenőrzi] annak legitimitását, és [ellenőrzi] a tanúsítványkiterjesztés adatait, hogy megtudja, hogy az eszközön [van-e] ellenőrzött rendszerindítás (bootloader állapot).” Mivel a privát kulcsok, amelyekből a kulcstároló tanúsítványok származnak amelyek mögött a telefon elszigetelt biztonságos környezete áll modul (HSM). Ha valaki valahogy kiszivárogtatna egy privát kulcsot, a a kulcsokat gyorsan visszavonják amint a Google rájött. A Google több százezer dolláros jutalmat kínál a Pixel telefonok TEE-jét érintő kritikus biztonsági résekért, ami csak azt mutatja, hogy hihetetlenül valószínűtlen, hogy ez egy lehetséges út a rendszerbetöltő feloldás észlelésének megkerülésére egyébként.
Egy másik lehetséges módja annak, hogy a Magisk továbbra is meghamisíthassa a rendszerbetöltő feloldási állapotát, ha módosítja a SafetyNet kliensoldali kódját, hogy mindig a BASIC kiértékelést használja. Mint topjohnwu megjegyziehhez azonban egyéni kódot kell beilleszteni a Google Play Szolgáltatásokba olyan hooking-keretrendszeren keresztül, mint az Xposed Framework. Ezt nem csak azért nehéz megtenni, mert a Google Play Services nagyon homályos, de nem is lehet elrejteni, mivel „egyes memóriaterület-elemzések nagyon feltárják a kódmanipulációt. Ez is csak akkor működne, ha a Google szerverei továbbra is elfogadják a BASIC kiértékeléseket, és ha a HARDWARE_BACKED kiértékeléseket nem kényszerítik ki a támogató eszközökön őket. (A SafetyNet válaszai „[érkeznek] a Google szervereiről, és a Google privát kulcsával vannak aláírva”, a topjohnwu szerint, így a tényleges válaszokat nem lehet meghamisítani.)
Az Android 7 Nougat óta a Google megköveteli, hogy minden eszköznek legyen elszigetelt biztonságos környezete, Ez azt jelenti, hogy a SafetyNet rendszerbetöltő feloldásának ellenőrzési módjának ez a változása hatással lesz a legtöbb kieső eszközre ott. Mivel a régebbi, elszigetelt biztonságos környezet nélküli eszközök nyilvánvalóan nem tudnak hardverrel támogatott tanúsítást végrehajtani, a Magisk továbbra is el tudja rejteni a root hozzáférést ezeken az eszközökön. De ha ez a változás széles körben elterjed, mindenki másnak nehéz döntést kell hoznia a root hozzáférés és a banki alkalmazások között.
Sajnos valószínűleg sok olyan alkalmazás létezik, amely akkor használja a SafetyNet-ellenőrzést, amikor valójában nincs rá szükség. A topjohnwu által említett egyik példa a hivatalos McDonald's alkalmazás, amely látszólag nem hajlandó futni rendszerbetöltővel feloldott eszközön. A Twitteren a topjohnwu az API-t túlzottan használó alkalmazásokat ellenséges környezet létrehozásaként hívja fel a hatékony felhasználók számára. XDA elismert fejlesztő Quinny899 csatlakozik egy anekdotához arról, hogyan gondolta csapata a SafetyNet használatát az eszköz biztonsági állapotának ellenőrzésére. Végül úgy döntöttek, hogy nem folytatják ezt, mivel csapata alkalmazása titkosítja az összes érzékeny adatot, amellyel dolgozik. Érvelése szerint a SafetyNet-et nem szabad a megfelelő biztonsági és adatkezelési gyakorlat helyett használni, különösen, ha figyelembe vesszük a szuperfelhasználói kihasználások lehetősége.
Ha többet szeretne megtudni arról, hogy az új SafetyNet változás hogyan érinti a Magisket, tekintse meg a topjohnwu oldalát kiváló GYIK a Twitteren. Ha csak azt szeretné ellenőrizni, hogy eszköze része-e a Google új SafetyNet tesztjének, akkor kövesse ezt az útmutatót XDA Senior Member Displax által, vagy töltse le a Magisk Manager legújabb kiadását.
Ezt a cikket 2020. június 30-án 10:46-kor (EST) frissítettük annak javítása érdekében, hogy a Google csak a Pixel telefonokban talált TEE-sebezhetőségekért fizet jutalmat. Ezenkívül a Magisk Manager legújabb kiadásával kapcsolatos részletek is hozzáadásra kerültek, amely most a beépített SafetyNet-ellenőrzőben az assessmentType mezőt mutatja.