Разработчик Magisk обнаружил, что Google, возможно, начал использовать аппаратные проверки, чтобы определить, разблокирован ли загрузчик устройства.
Признанный разработчик XDA топджонвуПроект Magisk по сути стал синонимом слова «root» в сообществе Android. Одна из основных причин его популярности заключается в том, что он может скрыть тот факт, что пользователь модифицировал свое устройство. Однако Google может бороться с возможностью Magisk скрывать статус разблокировки загрузчика от приложений.
Чтобы получить root права на телефоне, вам обычно необходимо разблокировать загрузчик, который позволяет прошивать модифицированные загрузочные образы. Это необходимо, поскольку Magisk изменяет загрузочный образ, чтобы подделать статус загрузчика и/или проверить статус проверенной загрузки. API аттестации SafetyNet Google, который является частью сервисов Google Play, используется для того, чтобы сообщить приложению, работает ли оно на взломанном устройстве; если API SafetyNet обнаружит, что загрузчик разблокирован, он вернет статус сбоя для проверки «Базовой целостности». Устройства, не прошедшие эту проверку, могут быть заблокированы для приложений, использующих API SafetyNet для определения целостности устройства; такие приложения обычно включают банковские приложения, платежные приложения (например, Google Pay) и многие онлайн-игры (например, Pokémon Go). Однако, поскольку API SafetyNet до сих пор использовал только программные проверки для определения того, было ли устройство взломано, Magisk может просто подделать статус загрузчика и/или проверенной загрузки, поскольку он установлен на более низком уровне и с более высокими привилегиями, чем Сервисы Google Play и другое пользовательское пространство. Приложения. Как объясняет топджонву, MagiskHide «[создает] изолированную «безопасную среду» для процесса обнаружения и проходит через API Google для создания
законный Результат SafetyNet, который не отражает реальное состояние устройства».Однако недавно пользователи заметили, что их устройства с разблокированным загрузчиком не проходят базовую проверку целостности SafetyNet, хотя они использовали Magisk для исправления загрузочного образа. По словам topjohnwu, это связано с тем, что Google, возможно, внедрил аттестацию ключей на аппаратном уровне, чтобы убедиться, что загрузочный образ не был подделан. В частности, это означает, что Сервисы Google Play «[отправляют] немодифицированный сертификат хранилища ключей на серверы SafetyNet, проверяют его легитимность и проверяют данные расширения сертификата, чтобы узнать, [проверено ли] ваше устройство, включена ли загрузка (состояние загрузчика)». Это означает, что оно больше не может быть можно скрыть тот факт, что загрузчик разблокирован, что приведет к сбою работы таких приложений, как Google Pay и Pokémon Go. обычно.
Как отметил топджонву, это изменение в способе проверки SafetyNet статуса разблокировки загрузчика происходит благодаря серверному обновлению API SafetyNet, содержащегося в сервисах Google Play. Однако не каждый пользователь не проходит эти обновленные проверки SafetyNet, поэтому новая аттестация ключей на аппаратном уровне, возможно, еще не получила широкого применения.
Мы снова и снова видели, как topjohnwu преодолевает технические препятствия. Google часто внедряет новые проверки в SafetyNet, которые topjohnwu затем обнаруживает и обходит в Magisk. Каждая новая версия Android вносит изменения в структуру разделов или загрузочный образ, требуя от topjohnwu изучить изменения, а затем внедрить новый метод исправления. Однако на этот раз даже topjohnwu может быть сложно найти обходной путь.
Это связано с тем, что на этот раз обходной путь будет включать взлом прошивки устройств Trusted Execution Environment (TEE) для получения закрытого ключа. Однако это невероятно сложно сделать, поскольку для этого необходимо найти уязвимость в прошивке, которая спроектирована так, чтобы быть невероятно безопасной. Фактически, многие компании предлагают выплаты в сотни тысяч долларов, если такая уязвимость будет обнаружена. Google, например, платит 250 000 долларов за уязвимости удаленного выполнения кода в доверенной среде выполнения 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 сильно запутаны, что делает создание такого модуля Xpose невероятно сложной задачей место. Подделать результат теста SafetyNet также невозможно, поскольку ответы SafetyNet «поступают с серверов Google и подписываются закрытым ключом Google».
Уже несколько лет Google имеет возможность ужесточить проверки SafetyNet с помощью аппаратной аттестации ключей. Тот факт, что они воздерживались от этого в течение 3 лет, позволил пользователям пользоваться root-правами и модулями Magisk, не жертвуя возможностью использовать банковские приложения. Однако похоже, что способность Magisk эффективно скрывать статус разблокировки загрузчика скоро подходит к концу. Это изменение, которого мы ожидали годами, но нам грустно видеть, что оно наконец вступило в силу. Мы надеемся, что Google обновит API аттестации SafetyNet, чтобы узнать, использовалась ли проверка статуса на аппаратном уровне. аттестацию, поскольку это позволит разработчикам приложений решить, хотят ли они заблокировать всех пользователей, которые разблокировали загрузчик.
Спасибо Дэниелу Микею (@ДэниелМикай) за его вклад в этот вопрос!