Можливо, Magisk більше не зможе приховати розблокування завантажувача від програм

Розробник Magisk виявив, що Google, можливо, почав використовувати апаратні перевірки, щоб визначити, чи було розблоковано завантажувач пристрою.

Визнаний розробник XDA topjohnwuПроект «Magisk» став фактично синонімом «root» у спільноті Android. Однією з головних причин його такої популярності є те, що він може приховати той факт, що користувач змінив свій пристрій. Однак Google, можливо, припиняє здатність Magisk приховувати статус розблокування завантажувача від програм.

Щоб рутувати свій телефон, зазвичай потрібно розблокувати завантажувач, який дозволяє перепрошивати змінені завантажувальні образи. Це необхідно, тому що Magisk змінює завантажувальний образ, щоб підробити стан завантажувача та/або перевірити стан перевіреного завантаження. API атестації Google SafetyNet, який є частиною Google Play Services, використовується, щоб повідомити програмі, чи вона працює на підробленому пристрої; якщо API SafetyNet виявить, що завантажувач розблоковано, він поверне статус помилки для перевірки «Базової цілісності». Пристрої, які не пройшли цю перевірку, можуть бути заблоковані для програм, які використовують API SafetyNet для визначення цілісності пристрою; такі програми зазвичай включають банківські програми, платіжні програми (наприклад, Google Pay) і багато онлайн-ігор (наприклад, Pokémon Go). Однак, оскільки API SafetyNet наразі використовував лише перевірки програмного забезпечення, щоб визначити, чи було пристрій підроблено, Magisk може просто підробити завантажувач і/або статус перевіреного завантаження, оскільки його встановлено на нижчому рівні та з вищими привілеями, ніж служби Google Play та інший простір користувача програми. Як пояснює topjohnwu, MagiskHide «[створює] ізольоване «безпечне середовище» для процесу виявлення, яке проходить через API Google для створення

законний Результат SafetyNet, який не відображає реальний стан пристрою».

Однак нещодавно користувачі помітили, що їхні пристрої з розблокованим завантажувачем не проходять базову перевірку цілісності SafetyNet, навіть якщо вони використовували Magisk для виправлення завантажувального образу. За словами topjohnwu, це пов’язано з тим, що Google, можливо, запровадив атестацію ключа на апаратному рівні, щоб переконатися, що завантажувальний образ не було підроблено. Зокрема, це означає, що служби Google Play «[надсилають] немодифікований сертифікат сховища ключів на сервери SafetyNet, перевіряють його законність і перевіряють дані розширення сертифіката, щоб знати, чи [має] ваш пристрій перевірене завантаження (статус завантажувача)." Це означає, що він може більше не бути можна приховати той факт, що завантажувач було розблоковано, що призведе до збою роботи таких програм, як Google Pay і Pokémon Go нормально.

Як зазначив topjohnwu, ця зміна в тому, як SafetyNet перевіряє стан розблокування завантажувача, відбувається через серверне оновлення API SafetyNet, що міститься в Google Play Services. Однак не кожен користувач не проходить ці оновлені перевірки SafetyNet, тому нова атестація ключів на апаратному рівні може ще не застосовуватися широко.

Ми бачили, як topjohnwu знову і знову долав технічні перешкоди. Google часто розгортає нові перевірки в SafetyNet, які topjohnwu потім виявляє та обходить у Magisk. Кожна нова версія Android вносить зміни в структуру розділів або образ завантаження, вимагаючи від topjohnwu вивчення змін і впровадження нового методу виправлення. Однак цього разу навіть topjohnwu може важко знайти обхід.

Це тому, що обхідний шлях цього разу включатиме злам мікропрограми довіреного середовища виконання (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 перевірятимуть результати на віддаленому сервері, а не на [на] пристрій, яким можна маніпулювати за допомогою фреймворків впровадження коду". Крім того, сервіси Google Play дуже заплутані, що робить створення такого модуля Xposed неймовірно складним у першу чергу місце. Підробити результати тесту SafetyNet також неможливо, оскільки відповіді SafetyNet «надходять із серверів Google і підписуються закритим ключем Google».

Уже кілька років Google має можливість посилити перевірки SafetyNet за допомогою апаратної атестації ключів. Той факт, що вони утримувались від цього протягом 3 років, дозволив користувачам користуватися root-правами та модулями Magisk, не жертвуючи можливістю використання банківських програм. Однак, схоже, здатність Magisk ефективно приховувати стан розблокування завантажувача скоро закінчиться. Це зміна, яку ми очікували роками, але нам сумно бачити, що вона нарешті почала діяти. Ми сподіваємося, що Google оновить API атестації SafetyNet, щоб дізнатися, чи перевірка статусу використовувалася апаратно атестацію, оскільки це дозволить розробникам програм вирішити, чи хочуть вони заблокувати всіх користувачів, які розблокували завантажувач.


Дякую Деніелу Мікею (@Даніель Мікай) за його внесок у це питання!