JustPaste.it

Хакер - Имеешь право! Все, что нужно знать о root в новых версиях Android

nopaywall

https://t.me/nopaywall

Мы систематизировали самые распространенные способы получить права суперпользователя в актуальных версиях Android; разобрались в различиях между SuperSU, phh SuperUser, Magisk, KingRoot и Kingo Root; протестировали различные способы скрыть root; изучили систему безопасности Android 7 и узнали, чем может грозить получение root на новых версиях Android. Ну а потом закрылись в комнате без окон и произвели на свет этот текст.
 

Немного истории

Обладатели ранних версий Android обычно получали права root с использованием какой-либо уязвимости в системе безопасности Android или одного из системных приложений, установленных производителем. Использование уязвимостей позволяло приложению «вырваться» из песочницы и получить права системного процесса через эскалацию привилегий.

Чтобы не повторять процесс каждый раз и чтобы предоставить возможность и другим приложениям использовать права суперпользователя, в системный раздел помещали файл su (как правило, в каталоге /system/xbin/) и приложение для обработки запросов прав root (в /system/app/). Чтобы получить права root, приложение запускало su, в этот момент срабатывал менеджер обработки запросов и запрашивал у пользователя подтверждение.

 

Окно запроса прав и история запросов Окно запроса прав и история запросов
Окно запроса прав и история запросов

Такая схема прекрасно работала во всех версиях Android вплоть до пятой, а добытый с ее помощью root-доступ чаще всего не мешал получать обновления прошивок и даже иногда сохранялся после таких обновлений. Популярностью пользовались многочисленные приложения, эксплуатировавшие одну или несколько уязвимостей (например, Towelroot). Со временем большую аудиторию набрали китайские приложения KingRoot и Kingo Root, включавшие в себя большие коллекции эксплоитов, которые скачивались непосредственно в момент запуска с китайских серверов. В случае успешной эскалации привилегий эти приложения прописывали в системный раздел много интересного; удалить их можно было либо вместе с root-доступом, либо с помощью специального «чистильщика», сделанного разработчиком SuperSU Chainfire.

В Android 5.0 была введена новая система обновлений. Теперь в файле OTA изменения прописывались не на файловом, а на блочном уровне; чтобы не повредить файловую систему, инсталлятор обновления подсчитывал контрольную сумму системного раздела. Естественно, записанный в раздел /system файл su изменял контрольную сумму раздела, и обновление не устанавливалось (а в тех случаях, когда оно все-таки ставилось, был высокий шанс получить на выходе «кирпич»).

Шестая версия Android принесла и обновленную систему безопасности, которая (временно) сделала невозможным получение прав суперпользователя простой записью приложения в системный раздел. В результате появился обходной путь — так называемый systemless root, внедряющий su в ramdisk вместо модификации системного раздела. На некоторых устройствах с «бессистемным» root-доступом даже получалось устанавливать OTA-обновления; впрочем, гарантии тут никакой.

 

Как был получен root на HTC Dream G1

Впервые root был получен на первом в мире Android-устройстве HTC Dream G1, выпущенном в далеком 2008 году. На устройстве был запущен сервис Telnet с правами root и без аутентификации. Для получения временного root-доступа было достаточно подключиться к смартфону по Telnet, для постоянного — залить в системный раздел бинарный файл su.

 

Root в Android 7

Особняком стоят устройства, выпущенные с Android 7 на борту (впрочем, то, о чем мы сейчас будем писать, относится и ко многим устройствам, которые получают Android 7 в качестве обновления).

Как ты, наверное, знаешь, механизм безопасной загрузки (Verified Boot) был реализован в Android давным-давно, еще в версии 4.4 KitKat. Его цель — защитить пользователя от атак, направленных на модификацию системы и внедрение в нее кода еще до начала загрузки системы. Для этого он использует скрытый в модуле TEE ключ, чтобы сверить цифровую подпись загрузчика, далее загрузчик сверяет цифровую подпись раздела boot, а он, в свою очередь, проверяет целостность системного раздела с помощью механизма dm-verity (Device Mapper verity).

Такая цепочка проверок (называемая root of trust) позволяет удостовериться в целостности и отсутствии модификаций в любом компоненте загрузки, начиная от загрузчика и заканчивая самой ОС. Но если большинство устройств под управлением Android 4.4–6.0 (за редкими исключениями вроде смартфонов BlackBerry и Samsung с активированным Knox) в случае неуспешной проверки просто выводили предупреждение, но продолжали загрузку, то в Android 7.0 ситуация изменилась и новая-старая функция проверки целостности системы стала обязательной.

Verified Boot позволяет загрузить модифицированный boot-образ в случае, если загрузчик разблокирован (слева), но откажет в загрузке, если он был модифицирован при залоченном загрузчике Verified Boot позволяет загрузить модифицированный boot-образ в случае, если загрузчик разблокирован (слева), но откажет в загрузке, если он был модифицирован при залоченном загрузчике
Verified Boot позволяет загрузить модифицированный boot-образ в случае, если загрузчик разблокирован (слева), но откажет в загрузке, если он был модифицирован при залоченном загрузчике

Чем это грозит? Тем, что старый метод получения root через эскалацию привилегий в Android 7 просто не работает. Даже если приложения класса KingRoot, Kingo Root и им подобные смогут рутануть девайс (а в данный момент они не могут), устройство после этого просто не загрузится.

Как это обойти? Разблокировать загрузчик штатными средствами и установить SuperSU или Magisk. В этом случае загрузчик просто отключит механизм Verified Boot. Однако не стоит даже пытаться взломать загрузчик на устройствах, не предполагающих такую возможность. Даже если это удастся сделать, взломанный загрузчик не пройдет проверку цифровой подписи — и смартфон превратится в кирпич.

А что с Android O? Последняя версия Magisk поддерживает текущую «бету». Разумеется, только для устройств с разблокированным загрузчиком — впрочем, Android O на другие пока и не ставится.

Что ж, об истории мы поговорили. Посмотрим теперь на разные способы получения root. Начнем с самого популярного способа — SuperSU.

 

SuperSU от Chainfire

SuperSU — далеко не первое приложение для получения прав суперпользователя. Само название SuperSU — акроним от Super Superuser; оно пришло на смену приложению Superuser в 2013 году.

SuperSU SuperSU
SuperSU

А дальше стали происходить интересные вещи. Разработчик Chainfire, который занимался (и занимается) поддержкой SuperSU, продал проект невероятно мутной компании Coding Code Mobile Technology LLC (CCMT), о которой известно чуть больше, чем ничего.

Компания, которой принадлежит SuperSU, является «зарегистрированным агентом» в американском штате Делавэр — его часто выбирают иностранные компании для регистрации некоего подобия офшора (запись о регистрации компании в реестре штата).

Корни компании уходят в Китай; точный адрес, корпоративная структура, владельцы и их цели — неизвестны. Учитывая, что исходные коды SuperSU не публикуются, некоторые продвинутые пользователи опасаются устанавливать последние версии приложения (2.80+).

В то же время SuperSU — самый распространенный и самый совместимый способ получения прав суперпользователя. Существуют приложения, которые корректно работают с SuperSU, но лишь ограниченно совместимы с другими менеджерами прав суперпользователя (к примеру, Magisk). Так, приложение LeanDroid при работе через SuperSU способно автоматически включать и выключать передачу данных по мобильной сети и корректно активировать и деактивировать спутниковый модуль GPS (не трогая «энергосберегающий» режим определения координат), а с Magisk — нет (ну, или через permissive-статус SELinux). Грешны и некоторые популярные сборки Viper4Android; впрочем, в случае с Viper давно доступен бессистемный модуль для Magisk — а это, как ни крути, гораздо более «чистый» и удобный способ его установки.

 

Установка SuperSU

Установить SuperSU можно несколькими способами. Самый правильный и корректный способ установки — прошить скачанный с официального сайта архив с помощью кастомного рекавери (TWRP или CWM). Разумеется, для этого необходим разблокированный (или хотя бы частично разблокированный) загрузчик.

Скрипт установки самостоятельно определит версию Android и способ установки (в системный раздел или systemless). Для свежих версий Android будет автоматически пропатчен раздел boot.img и модифицирован ramdisk. Если для твоего устройства есть TWRP, а загрузчик разблокирован — никакие другие способы (а тем более приложения класса KingRoot и им подобные) рассматривать даже не нужно.

Иногда SuperSU включают в готовые прошивки, чаще всего в неофициальные сборки. В таком случае ничего дополнительно делать не требуется.

Наконец, SuperSU может быть внедрен (иначе не скажешь) в систему с помощью того или иного способа: скрипта, приложения, с использованием аппаратного программатора или сервисного режима — да-да, есть и такое! И если в том же Android 6.0 корректная работа su без разблокировки загрузчика в общем случае невозможна, то разнообразные альтернативные способы установки часто могут обойти эти ограничения.

Стоит ли пользоваться SuperSU сегодня? Решать тебе. Для некоторых устройств просто нет выбора, но в целом, похоже, будущее — за другими решениями. А именно — Magisk.

 

phh Superuser

Прежде чем перейти к Magisk, скажем пару слов о phh SuperUser. Это решение — форк оригинального Koush’s Superuser, того самого, с которого когда-то все началось и на смену которому в свое время пришел SuperSU.

phh SuperUser — опенсорсное решение, исходные коды которого доступны сообществу разработчиков. Представлен phh SuperUser был именно в качестве открытой альтернативы SuperSU после того, как последний был куплен неустановленной группой лиц.

На сегодня phh SuperUser как самостоятельное приложение — уже история. Устанавливать его отдельно совершенно не нужно. Он вошел в состав Magisk, о котором ниже.

 

Magisk

Что интересного можно написать про Magisk после статьи, опубликованной в майском номере? Пожалуй, совсем немного.

Magisk — это фреймворк, объединяющий в себе функциональность SuperSU (в форме phh SuperUser) и средства для низкоуровневой модификации системы. Magisk — полностью открытый проект с доступными исходными кодами. Механизм получения root — systemless, не вносящий изменений в system и позволяющий без проблем обновлять прошивку.

Одна из ключевых функций Magisk — возможность скрывать права суперпользователя как от отдельных приложений, так и от проверки SafetyNet. И если скрытие root-доступа способно включить банковские приложения и некоторые игры (например, Pokémon Go), то успешное прохождение проверок SafetyNet позволяет воспользоваться системой бесконтактной оплаты (Android Pay, Samsung Pay и подобными).

С помощью Magisk можно подключать модули, модифицирующие прошивку на низком уровне (от простейших модификаций файла build.prop до таких сложных, как Viper4Android). Они также устанавливаются в режиме systemless и спокойно переживают обновления прошивки (чтобы вернуть все модули и настройки обратно, достаточно повторно установить Magisk).

Magisk Magisk
Magisk

Есть у Magisk и недостатки. Так, не все приложения способны корректно работать с root, полученным с помощью Magisk, но вполне совместимы с SuperSU. Причина — те настройки SELinux, над которыми долго бился разработчик Chainfire и которые позволяют приложениям с правами суперпользователя производить запись в системный раздел (а это не только модификация собственно системных файлов, но и запись переменных в некоторые системные настройки).

В целом, как нам кажется, будущее — за Magisk. Проект доступен в исходных кодах и быстро развивается, у него большое и активное сообщество разработчиков. Наконец, Magisk реализует логичный и правильный подход к получению root-прав и управлению ими без чрезмерного использования хаков и костылей.

Как установить рут с использованием Magisk? Просто скачай последнюю версию из ветки на XDA и прошей ее через TWRP. Разумеется, загрузчик устройства должен быть предварительно разблокирован.

 

LineageOS

В LineageOS 13 и 14 root-доступ по умолчанию заблокирован. Для получения прав суперпользователя необходимо скачать и установить через TWRP дополнительный модуль su.

Наверное, это самый корректный способ получения прав суперпользователя из всех рассмотренных. Модуль, как и остальные части прошивки, доступен в исходниках; никаких сюрпризов не будет, отключение SELinux не требуется. Правда, спрятать его от SafetyNet тоже не получится, и это — следствие политики Lineage.

Интерфейс управления правами root в LineageOS Интерфейс управления правами root в LineageOS
Интерфейс управления правами root в LineageOS

К сожалению, модуль работает далеко не на каждой сборке LineageOS. На свежих официальных сборках, скачанных с сайта проекта, — да. А на многочисленных неофициальных — тут как повезет. Может сработать, а может оказаться, что root-доступ есть только у ADB. В таких случаях, увы, приходится прошивать SuperSU или Magisk.

 

Что делать, если загрузчик заблокирован

Что делать, если на твоем устройстве заблокирован загрузчик, а разблокировать его невозможно? Правильный ответ — ничего. Root тебе не нужен, тебе его просто хочется; и, пожалуйста, не путай свои «хотелки» с необходимостью — необходимости в root-доступе у тебя нет, а если бы она была, ты просто купил бы устройство с загрузчиком, поддающимся разблокировке, благо в 2017 году никаких проблем с этим не возникает.

Если же в тебе живет дух экспериментатора, если перспектива лишиться гарантии тебя не смущает, потенциальный риск «кирпича» не останавливает, отсутствие обновлений «по воздуху» не пугает, а продавать устройство в будущем ты не собираешься (подкладывать такую свинью, как рутованный заблокированный смартфон, потенциальному покупателю — по меньшей мере непорядочно); если, наконец, ты эксперт-криминалист и тебе нужно извлечь из устройства данные, то читай дальше.

Если твой смартфон работает на Android 7.х — тебе не повезло. Как уже было сказано, начиная с Android 7.0 root на смартфонах, официально одобренных Google (то есть на любых смартфонах с официальной поддержкой Google Play), можно получить одним-разъединственным способом: через разблокированный загрузчик и кастомное рекавери. А уж какой именно менеджер суперпользователя ты выберешь — SuperSU, Magisk или что-то еще, — зависит только от тебя и твоих требований.

На Android 6 с регулярными патчами безопасности root тоже, как правило, не получить. А вот если патч безопасности старый, то возможны варианты. Результат будет сильно зависеть от модели, версии и подверсии устройства, от производителя, от прошивки, от версии патча безопасности, от региона и даже от того, для какого сотового оператора предназначено устройство (это камень в огород любителей заказать из США заметно более дешевую модель для Sprint или Verizon, а потом писать панические постинги на форумах).

Даже на Android 5.0–5.1.1 не все очевидно. Просто для примера: на древнем Moto G 2014 года с Android 5.1.1 и патчем безопасности полуторагодичной давности за все время так никому и не удалось получить root без разблокирования загрузчика (а разблокировать можно не для всех моделей и не для всех операторов. Для AT&T можно, а для Verizon — нет, и тут без вариантов).

Если версия Android еще ниже, то есть неиллюзорная вероятность получить root с помощью инструментов наподобие KingRoot и Kingo Root.

 

KingRoot, Kingo Root

KingRoot и Kingo Root — два совершенно разных продукта с похожими названиями, позволяющие получить root на некоторых устройствах. Их возможности ограничиваются версиями Android 4.x–5.1.1. KingRoot устанавливается только на сам телефон в виде .apk-файла, а для Kingo Root есть как приложение для смартфонов, так и программа для Windows, работающая через ADB. По утверждению разработчиков, Windows-версия продукта срабатывает в большем числе случаев в сравнении с .apk.

Как это работает? KingRoot — китайское приложение, которое после установки на смартфон скачивает с китайского сервера код эксплоитов, и с их помощью программа пытается эксплуатировать известные ей уязвимости CVE с целью эскалации привилегий.

При этом у KingRoot есть ряд значительных недостатков, о которых просто необходимо знать перед тем, как пытаться взломать устройство с его помощью:

  1. Полностью закрытое приложение, никаких исходных кодов.
  2. Классический root «старой школы» через использование уязвимостей.
  3. Никаких гарантий: устройство может превратиться в кирпич, и довольно легко.
  4. У тебя нет возможности проконтролировать, какой именно код будет исполняться на твоем устройстве: код будет скачан с китайского сервера непосредственно в момент взлома.
  5. KingRoot устанавливает свой, очень цепкий менеджер root-доступа — King User. Избавиться от него штатным образом можно только вместе с полным удалением root-доступа.
  6. Заменить KingRoot на SuperSU возможно, но не очень просто. На XDA этому посвящена целая ветка.

В целом root по-китайски — мероприятие весьма рискованное. В некоторых случаях можно получить бутлуп, безвозвратно сломать работу OTA-обновлений, обнаружить в системном разделе много интересного с неизвестной функциональностью.

 

Другие классические способы получения root

Разумеется, KingRoot и Kingo Root — далеко не единственные способы получить root через использование уязвимости. Framaroot, Towelroot, iRoot, One Click Root и многие другие приложения основаны на похожем механизме работы. Разница в том, что в большинстве таких приложений исполняемый код находится непосредственно в самом приложении (.apk или программе для Windows), в то время как KingRoot скачивает код для взлома телефона с китайского сервера.

 

Игра в кошки-мышки: прячем root от SafetyNet

Допустим, права суперпользователя ты получил. И вдруг неожиданно у тебя отваливается Android Pay или Samsung Pay, банковские приложения переходят в режим ограниченной функциональности, а любимая игрушка Pokémon Go делает ручкой. Все это — последствия того, что рутованный телефон (а в некоторых случаях и просто устройство с разблокированным загрузчиком) справедливо считается менее безопасным в сравнении с устройством, загрузчик которого заблокирован, а root-доступа нет.

За проверку безопасности отвечает облачная функция SafetyNet, которая тестирует множество аспектов работы устройства, чтобы определить, соответствует ли оно всем требованиям IT-санитарии. Обрати внимание: реальная безопасность устройства имеет весьма опосредованное отношение к результату проверки SafetyNet в случае как положительного, так и отрицательного вердикта.

Root Checker Pro: root есть, но проверка SafetyNet не пройдена Root Checker Pro: root есть, но проверка SafetyNet не пройдена
Root Checker Pro: root есть, но проверка SafetyNet не пройдена

Легче и надежнее всего скрыть root-доступ и факт разблокировки загрузчика с помощью root, встроенного в Magisk 13.3 (версия 13.2, увы, проверку уже не проходит). Для этого достаточно активировать соответствующий модуль в Magisk и попытаться пройти проверку SafetyNet с помощью встроенного в Magisk теста.

Magisk и тест SafetyNet Magisk и тест SafetyNet
Magisk и тест SafetyNet

Да, удается это не всегда с первого раза, и да, Google становится все умнее и хитрее. Универсального рецепта здесь нет: кому-то помогает прошивка другого ядра, кому-то — отключение режима отладки в меню разработчика, кому-то — переключение SELinux сначала в Permissive, а потом обратно в Enforcing. Попадались и пользователи, которым помогало отключение BusyBox и Systemless hosts в меню Magisk (требуется перезагрузка). Наконец, во многих случаях срабатывает переключение Magisk в режим Core modules only; к сожалению, это половинчатое решение, так как оно отключает сторонние расширения — а от них отказываться совсем не хотелось бы.

До недавнего времени относительно неплохо работало скрытие root и для SuperSU с помощью suhide.zip. К сожалению, этот метод слабо развивается, он не всегда работает так, как нам хочется. В некоторых случаях его не получается даже установить (телефон просто перестает загружаться). Наконец, актуальный метод проверки SafetyNet (по состоянию на июль 2017-го) suhide не проходит. Это не значит, что ситуация не изменится в будущем, но здесь и сейчас Magisk прячет root эффективнее.

 

Что такое S-OFF и для чего он нужен

Если ты пользователь HTC, то, вероятно, знаком с термином S-OFF. Если же нет, то, скорее всего, ты с ним не сталкивался. Что это такое и с чем его едят?

Существуют устройства (к ним относятся некоторые телефоны Samsung и большинство флагманов и субфлагманов HTC), у которых разблокированный загрузчик все равно не дает доступа к критичным областям памяти. Поэтому нужно выполнить еще один дополнительный шаг уже после разблокирования загрузчика. Он и получил название S-OFF.

Получить S-OFF заметно сложнее, чем код для разблокирования загрузчика с сайта HTC. Разблокирование через S-OFF, по сути, хак, эксплуатирующий найденные уязвимости. Для многих моделей S-OFF и вовсе доступен только за деньги. Есть ли в нем смысл? S-OFF разрешит тебе доступ практически к любым системным областям устройства. В частности, для некоторых устройств становится возможным изменить прописанную на заводе региональную или операторскую привязку, получать обновления OTA из другого источника и даже разблокировать недостающие частоты LTE модема (а вот это, кстати, уже лицензии).

 

Заключение

Традиционно в качестве заключения мы подводим итоги и выводим мораль всей истории. Здесь же никакой морали нет, а итог очень простой. Загрузчик нельзя разблокировать официально? Лучше не связывайся, но если очень хочется, то можно — на твой страх и риск. Загрузчик разблокирован или может быть разблокирован? У тебя есть выбор из хорошего и еще лучшего, SuperSU и Magisk. Привык к SuperSU или пользуешься приложениями, которые корректно работают только с ним? Тоже вариант, но помни, что исходный код продукта закрыт, а новые владельцы скрываются за ширмой делавэрской компании-агента.

Читайте ещё больше платных статей бесплатно: https://t.me/nopaywall