Magisk може вече да не може да скрие отключването на буутлоудъра от приложенията

click fraud protection

Разработчикът на Magisk е открил, че Google може да е започнал да използва хардуерни проверки, за да определи дали дадено устройство е отключил буутлоудъра.

XDA признат разработчик topjohnwuПроектът "Magisk" на практика стана синоним на "root" в общността на Android. Една от основните причини да е толкова популярен е, че може да скрие факта, че потребителят е модифицирал устройството си. Въпреки това, Google може да се справи със способността на Magisk да скрие състоянието на отключване на буутлоудъра от приложенията.

За да руутнете телефона си, обикновено трябва да отключите буутлоудъра, който ви позволява да флашвате модифицирани изображения за зареждане. Това е необходимо, защото Magisk променя изображението за зареждане, за да подмени състоянието на зареждащия механизъм и/или проверките за потвърдено състояние на зареждане. SafetyNet Attestation API на Google, който е част от услугите на Google Play, се използва, за да каже на дадено приложение дали работи на подправено устройство; ако API на SafetyNet открие, че буутлоудърът е бил отключен, тогава той ще върне състояние на грешка за проверката на „Основна цялостност“. Устройствата, които не преминат тази проверка, могат след това да бъдат заключени от приложения, които използват SafetyNet API за определяне на целостта на устройството; такива приложения обикновено включват приложения за банкиране, приложения за плащане (като Google Pay) и много онлайн игри (като Pokémon Go). Въпреки това, тъй като API на SafetyNet досега е използвал само софтуерни проверки, за да определи дали устройството е било манипулирано, Magisk може просто да подмени bootloader и/или Verified Boot status, тъй като е инсталиран на по-ниско ниво и с по-високи привилегии от Google Play Services и друго потребителско пространство приложения. Както обяснява topjohnwu, MagiskHide „[създава] изолирана „безопасна среда“ за процеса на откриване и преминава през API на Google, за да създаде

законен Резултат от SafetyNet, който не отразява реалното състояние на устройството."

Напоследък обаче потребителите забелязаха, че техните устройства с отключен буутлоудър не успяват да преминат основната проверка на целостта на SafetyNet, въпреки че са използвали Magisk за корекция на изображението за зареждане. Според topjohnwu това е така, защото Google може да е внедрил атестация на ключове на хардуерно ниво, за да провери дали изображението за зареждане не е било манипулирано. По-конкретно това означава, че услугите на Google Play „[изпращат] немодифициран сертификат за хранилище на ключове до сървърите на SafetyNet, потвърждават легитимността му и проверяват данни за разширението на сертификата, за да знаете дали вашето устройство [има] потвърдено активирано зареждане (състояние на зареждащия модул)." Това означава, че може вече да не е възможно е да скриете факта, че буутлоудърът е отключен, което ще доведе до неработещи приложения като Google Pay и Pokémon Go нормално.

Както отбеляза topjohnwu, тази промяна в начина, по който SafetyNet проверява състоянието на отключване на буутлоудъра, идва чрез актуализация от страна на сървъра на SafetyNet API, съдържащ се в Google Play Services. Въпреки това, не всеки потребител се проваля с тези актуализирани проверки на SafetyNet, така че новата атестация на ключа на хардуерно ниво може все още да не се прилага широко.

Виждали сме как topjohnwu преодолява технически препятствия отново и отново. Google често пуска нови проверки в SafetyNet, които topjohnwu след това открива и заобикаля в Magisk. Всяка нова версия на Android внася промени в структурата на дяла или изображението за зареждане, което изисква от topjohnwu да проучи промените и след това да приложи нов метод за корекция. Въпреки това, дори topjohnwu може да се затрудни да намери байпас този път.

Това е така, защото заобиколното решение този път ще включва хакване на фърмуера на Trusted Execution Environment (TEE) на устройства, за да се извлече личният ключ. Това обаче е невероятно трудно да се направи, тъй като изисква намиране на уязвимост във фърмуера, който е проектиран да бъде невероятно сигурен. Всъщност много компании предлагат плащания в стотици хиляди долари, ако бъде открита такава уязвимост. Google, например, плаща $250 000 за уязвимости при дистанционно изпълнение на код в Trusted Execution Environment на Pixel и до $1 000 000 за уязвимости в Титан М защитен чип. Дори частният ключ по някакъв начин да бъде изтекъл, малко вероятно е той да е от голяма полза, тъй като Google може дистанционно да отмени ключа така че не може да се използва за проверка на целостта на устройствата.

След като атестирането на ключове на ниво хардуер бъде широко наложено за SafetyNet, повечето устройства с отключени буутлоудъри, работещи с Android 8.0 Oreo или по-нова версия, няма да успеят да преминат основната проверка за интегритет на SafetyNet. Това е така, защото всички устройства, стартирани с Android 8.0 Oreo или по-нова версия, трябва да имат хардуерно хранилище за ключове, внедрено в TEE. Някои устройства в наши дни дори имат специални хардуерни модули за сигурност (HSM), които правят експлоатацията още по-трудна, като преместват TEE далеч от главния процесор; Titan M в Pixel 4 и Новият защитен чип на Samsung в Galaxy S20 има примери за това.

Топджонву също обяснява че други потенциални заобиколни решения са или невъзможни, или много предизвикателни. Използването на Xposed Framework за модифициране на API за удостоверяване на SafetyNet в услугите на Google Play вероятно няма да работи, тъй като „правилните проверки на SafetyNet ще проверят резултатите на отдалечен сървър, а не на [the] устройство, което може да бъде манипулирано от рамки за инжектиране на код." Освен това услугите на Google Play са силно замаяни, което прави създаването на такъв Xposed модул невероятно предизвикателство в началото място. Подправянето на резултат от теста на SafetyNet също няма да бъде възможно, тъй като отговорите на SafetyNet „идват от сървърите на Google и са подписани с частния ключ на Google“.

От няколко години Google има способността да засили проверките на SafetyNet, използвайки хардуерно обезпечено удостоверяване на ключове. Фактът, че те се въздържаха да направят това в продължение на 3 години, позволи на потребителите да се насладят на root и Magisk модули, без да жертват възможността да използват банкови приложения. Изглежда обаче, че способността на Magisk ефективно да скрие състоянието на отключване на буутлоудъра скоро ще приключи. Това е промяна, която очаквахме от години, но сме тъжни да я видим най-накрая да влезе в сила. Надяваме се, че Google актуализира API за удостоверяване на SafetyNet, за да върне дали проверката на състоянието е използвана хардуерно атестация, тъй като това ще позволи на разработчиците на приложения да решат дали искат да блокират всички потребители, които са отключили буутлоудър.


Благодарение на Daniel Micay (@Даниел Микай) за неговия принос по този въпрос!