Блог Элкомсофт

«…Восстановление паролей, расшифровка данных,
мобильная и облачная криминалистика… »


Android: сторонние прошивки, их безопасность и извлечение данных

Март 20th, 2017 by Oleg Afonin
  • 12
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
    12
    Shares

В наших статьях и в книге мы много писали об основах безопасности Android, методах аутентификации и извлечения данных. Однако всё, что мы писали ранее, относилось исключительно к устройствам, работающим под управлением оригинального программного обеспечения – прошивки, – разработанной непосредственно производителем устройства. Порядка 98% устройств работают именно на прошивках от производителя тех или иных версий.

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

Возможность установки сторонней прошивки

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

Блокировка загрузчика может быть политикой компании в целом или по отношению к конкретному устройству (так, компания LG блокирует загрузчик у смартфона LG G Flex 2, но разрешает пользователям снять блокировку у некоторых моделей LG G4).

Блокировка загрузчика может быть и требованием оператора: большинство американских операторов требует от производителей блокировать загрузчики устройств, которые будут продаваться через операторскую розницу. Эти требования могут быть более или менее жёсткими; так, для модели Motorola Moto G первого поколения официальная разблокировка загрузчика доступна для всех моделей, кроме тех, которые продавал оператор Verizon.

В то же время многие устройства, которые продаются в виде разблокированных и «международных» версий, позволяют пользователям разблокировать загрузчик и устанавливать сторонние прошивки. Особенно это касается устройств, которые пользователи заказывают из Китая: все эти OnePlus, Xiaomi, Oppo, UMI, Elephone, Vernee, LeEco, ZUK и десятки, если не сотни других поставляются или с уже разблокированными загрузчиками, или позволяют их разблокировать с той или иной степенью сложности.

По сути, для установки сторонней прошивки не нужно ничего, кроме разблокированного загрузчика и наличия для устройства сторонней recovery – например, TWRP. Сторонние прошивки вполне возможны даже без исходных кодов, которые производители, по идее, должны бы публиковать по лицензии GPL. Об этом – ниже.

Типы сторонних прошивок

Для многих популярных моделей у пользователя-энтузиаста будет выбор: оставаться на прошивке от производителя или установить ту или иную стороннюю сборку. Чем отличаются разные типы прошивок? Попробуем разобраться.

  1. Всегда и у всех устройств, даже у тех, которые приходят из Китая, будет в наличии какая-то прошивка от производителя. Как правило, даже не одна: разные версии (по номерам), версии для разных регионов, иногда – версии для разных аппаратных версий устройства. Иногда бывают прошивки для внутреннего китайского рынка (без сертификации Google) и прошивки для других рынков (Индия, Россия, международные) с сертификацией, которая, в частности, часто привносит обязательное шифрование раздела данных. Эти прошивки могут сильно отличаться между собой вплоть до того, что установка неправильной версии выводит устройство из строя. Это – так называемый «сток» (stock ROM), «стоковая прошивка».
    • Вариацией «стоковой» прошивки являются так называемые «shop ROM», или прошивки, которые устанавливают китайские магазины. В процессе установки магазины добавляют сервисы Google (но – не сертификацию), активируют дополнительные языки. Очень часто в «магазинных» прошивках присутствует и зловредное программное обеспечение – шпионские и рекламные модули. Никаких обновлений для таких прошивок не предусмотрено по определению; попытка установить OTA приводит к ошибке или и вовсе выводит устройство из строя (личный опыт). Несмотря на это, «магазинными» прошивками пользуется значительный процент покупателей устройств из Китая.
  2. Если говорить о китайских прошивках на устройствах, поставляемых на внешние рынки, в них, как правило, будет много лишнего, но не будет жизненно важного ПО (например, нет Google Play Services). Соответственно, первая тип сторонних прошивок – обычная модификация прошивки от производителя: удаление лишнего, добавление нужного. Поскольку понятия о «лишнем» и «нужном» у всех разные, то на каждую версию прошивки производителя существует несколько модифицированных. Это – так называемые «моды» (mod), модифицированные прошивки от производителя. Ничего глобального, как правило, в таких прошивках не меняется, пользовательский интерфейс и средства безопасности чаще всего остаются без изменений.Если же речь идёт о прошивках для сертифицированных Google устройств (Nexus, Motorola и т.п.), то в качестве модифицированных часто предлагаются прошивки, в которых отключается обязательное шифрование раздела данных.
  3. Более глубокая модификация прошивки от производителя подразумевает глобальную замену функционала и интерфейса прошивки на базе стока. При этом остаются все системные драйверы и какая-то часть системных приложений, но могут меняться некоторые элементы framework и UI, а также многие системные приложения (номеронабиратель, контакты, камера и т.п.) Этим достигается радикально другой внешний вид и UX, но функционирует это всё на базе тех же драйверов, что и прошивка от производителя. Как правило, такие прошивки обеспечивают достаточно хорошую совместимость с аппаратной частью устройства (т.к. основаны на тех же драйверах). Это – так называемые патч-ром (patchrom). Например, для многих устройств семейство прошивок MIUI делается именно таким образом.
  4. Третья стадия разработки – это уже независимая прошивка (Cyanogen, Lineage и множество других), которая компилируется из исходных кодов. При этом ядро, в котором встроены все драйверы, а также часть системных библиотек и фреймворков берётся из стока. На данном этапе возможны (и часто случаются) самые разнообразные проблемы – с совместимостью, с поддержкой тех или иных аппаратных компонентов (чаще всего страдают камера и нестандартные датчики – например, встроенный инфракрасный порт с пультом ДУ), с перегревом, с неожиданным расходом аккумулятора и т.п. Собственного названия у этой категории прошивок нет, это уже полноценный custom ROM, для многих устройств на этом возможности разработчиков заканчиваются (в частности, для многих моделей на процессорах MediaTek, для которых исходные коды часто недоступны).
  5. Наконец, последняя, самая интересная стадия – прошивки, собранные из исходных кодов после того, как производитель опубликует исходные коды ядра. В ядро включены все необходимые драйверы, они доступны в виде блобов (BLOB — Binary Large OBject). На основе исходных кодов ядра команда разработчиков (часто – единственный разработчик, maintainer) формирует так называемое «дерево устройства» (device tree), в которое вынесено всё, что относится не к Android в целом, а к конкретному устройству. Такие прошивки наиболее интересны, так как могут радикальным образом менять поведение и функционирование устройства. В таких прошивках разработчики могут добавлять возможности на уровне ядра (например – управление профилями цветности экрана, поддержку файловых систем exFAT, NTFS для карт памяти, поддержку сетевых файловых систем и т.п.). В таких прошивках можно собирать собственное ядро с тем, что нужно именно для данной прошивки, и работает всё (точнее – должно работать) должным образом. В таких прошивках всё ещё используются некоторые проприетарные компоненты (драйверы, поставляемые производителем набора системной логики).
  6. Вишенка на торте – прошивки, собранные на основе драйверов с открытым исходным кодом. Например, драйверы некоторых моделей аудиотракта и графических ускорителей существуют в виде исходных кодов, которые можно пересобрать, оптимизировать и использовать в прошивке. На их основе можно пытаться заменить блобы от производителя на свои, сделанные на основе открытых исходников. Производители устройств (тот же Qualcomm) не обязаны давать исходные коды своих драйверов, ограничиваясь блобами. Но если такие коды находятся, то становится возможным, например, собрать прошивку на Android 7.1 для устройств, на которых данная версия Android официально не поддерживается. К сожалению, драйверы на основе открытых исходных кодов частенько хуже проприетарных (хуже качество звука, нет поддержки некоторых API, и так далее). В целом – это палка о двух концах.
  7. Особняком стоят прошивки, основанные на альтернативных операционных системах: Tizen, Ubuntu Touch, Sailfish. Их в этой статье мы рассматривать не будем.

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

Краткий обзор популярных сторонних прошивок

Говорить о широкой распространённости сторонних прошивок нельзя; они – удел энтузиастов, доля которых среди сообщества пользователей Android не превышает 1-2%. Но даже здесь нет единообразия; прошивки существуют на любой вкус и карман.

Какие сторонние прошивки самые популярные? Прошивки на основе «модов» – например, от команды Cuoco92. Patchrom – MIUI, FlyUI. Прошивки, собранные из исходных кодов – Cyanogen (в настоящее время – Lineage) и прошивки на его основе. На последнем остановимся подробнее.

До недавнего времени сторонние прошивки разработчиками собирались либо на базе AOSP (Android Open Source Project, тот самый полумифический «чистый» Android), либо на базе Cyanogen. В последнее время прошивок на основе AOSP становится всё меньше, а прошивок на основе Cyanogen (Lineage) – всё больше.

Единственная прошивка на основе AOSP, о которой получается вспомнить – Omni ROM. Чистый Android с немногочисленными, но очень полезными добавлениями (например, «ночной» режим, понижающий цветовую температуру экрана в вечернее и ночное время суток). Никакого буйства ненужных настроек нет и подавно; интерфейс выполнен в строгом стиле Android. Прошивка энергоэффективна и отлично оптимизирована. Встроенного root-доступа нет (но есть возможность установить его дополнительно), контекст SELinux – enforcing.

Самая популярная альтернатива – Cyanogen (в последнее время – Lineage OS, сборки доступны только для устройств под управлением Android 6.0 и 7.1). Внешний вид чистого Android, дополнительные возможности минимальны, но полезны. Оптимизация – отличная, энергоэффективность – тоже. Сообщество разработчиков Lineage старается по мере возможностей использовать драйверы на основе открытых исходных кодов, часто – в ущерб производительности и функционалу. Root-доступ в прошивках Cyanogen был доступен штатным образом через меню Developer Options, в прошивках Lineage – требуется скачать и установить через recovery дополнительный модуль (что более правильно с точки зрения общей безопасности системы).

Именно на основе исходных кодов Lineage сегодня собирается большая часть альтернативных прошивок. Рассмотрим вкратце особенности некоторых из них.

  • Resurrection Remix – популярная среди энтузиастов прошивка с максимальным (для многих – избыточным) количеством настроек. Относится к «тяжёлым» прошивкам. Энергоэффективность на наших тестовых устройствах низкая, производительность – высокая. Встроенный root-доступ через Developer Options, контекст SELinux – permissive. Цветной анимированный логотип, множество настроек, общее отношение к безопасности классифицируют этот проект в раздел «хакерских» прошивок.
  • AOKP – можно рассматривать как некий спин-офф или продолжение Resurrection Remix. Множество настроек, высокая производительность, большая по сравнению с RR энергоэффективность (отметим – это относится к нашим тестовым устройствам). Встроенный root-доступ через Developer Options, контекст SELinux – permissive. Пожалуй, ещё одна «хакерская» прошивка.
  • AICP также обладает множеством настроек, и встроенным в Developer Options root-доступом. Интересный момент – контекст SELinux можно переключать штатным образом в тех же Developer Options. Ещё один интересный момент – root-доступ встроен, а для управления используется приложение Magisk, с помощью которого можно как контролировать назначение привилегий, так и скрывать сам факт наличия root-доступа от выбранных приложений (например, банковских программ, которые часто отказываются работать на устройствах с root). Цветные анимации, детские рисунки на стандартных экранах (например, картинка, возникающая на экране мультизадачности после очистки всех приложений), встроенный root-доступ и возможность его скрыть, а также достаточно вольный лексикон (типичные названия пунктов меню: Panel porn, Other shit) позволяют нам уверенно классифицировать прошивку как «хакерскую».
  • Mokee – популярный проект, на сей раз от китайских разработчиков. Встроенного root-доступа нет, контекст SELinux – enforcing, строгое оформление, отсутствие миллиона настроек и вылизанная до совершенства работоспособность имеющихся ставят Mokee в один ряд с прошивками Lineage OS, на исходных кодах которой она и основана. Энергоэффективность и производительность высокие. Интересна интегрированным в систему приложением Aegis, которое позволяет пользователю выборочно отключать службы и wakelock-и приложений, в том числе системных.
  • crDroid – ещё один проект, основанный на исходных кодах Cyanogen/Lineage. Прошивка мало отличается от Lineage как таковой и основана на тех же базовых принципах: максимально чистый Android, минимум настроек с максимальной их работоспособностью, высокая энергоэффективность и производительность. Контекст SELinux – enforcing, встроенного root-доступа нет, доступен через прошивку дополнительного модуля.
  • Dirty Unicorn – ещё один интересный и популярный проект. Опыта использования этой прошивки у нас нет, но не упомянуть её нельзя.

Разумеется, существуют и другие сторонние прошивки: OctaOS, XenonHD, DarkNess-reDefined, Validus OS и многие, многие другие. Рассмотреть их все не представляется возможным.

Root-доступ в сторонних прошивках

Из краткого обзора сторонних прошивок можно сделать только один вывод: отношение к root-доступу во всех прошивках реализовано по-разному. Где-то его нет совсем (но можно прошить SuperSU через TWRP), где-то доступен прошивкой дополнительного модуля (Lineage), где-то используется встроенный в прошивку механизм управления root-доступом, а где-то используются решения (Magisk), позволяющие как управлять root-доступом, так и скрывать факт его наличия от некоторых приложений.

В целях извлечения пользовательских данных при наличии сторонней recovery (TWRP) root-доступ, как правило, не нужен. Он может пригодиться, например, для того, чтобы извлечь полный образ раздела данных вместе с незанятыми блоками. В TWRP такая возможность есть только для системного раздела, но не для раздела данных. Это может дать возможность восстановить удалённые файлы.

Безопасность сторонних прошивок и методы извлечения данных

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

В целом все сторонние прошивки вне зависимости от включенных в них возможностей и настроек объединяет одно: сертификации Google у них нет. Соответственно, шифрование раздела данных в этих прошивках по умолчанию не включается – ни на Android 6, ни на Android 7.

Шифрование раздела данных на сторонних прошивках по умолчанию не включено, а для их установки требуется стороннее recovery (TWRP). В большинстве случаев извлечение данных – тривиально. Если раздел данных не зашифрован, то через TWRP можно за несколько секунд снять любую блокировку экрана. Если зашифрован – во многих случаях TWRP автоматически расшифрует его с помощью депонированных ключей.

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


  • 12
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
    12
    Shares

Tags: , , ,

Подписаться на рассылку о новостях и новинках компании ElcomSoft

3 комментария to “Android: сторонние прошивки, их безопасность и извлечение данных”

  1. Нечто:

    Можно за считанные секунды снять инфу и с заводской (с заблокированным закрузчиком) прошивкой, плюс гугл ведёт себя неадекватно… Много пиара а защиты ноль, практически нет новых разработок… Его защита для первокласников на андроидах))) Кастомы иной раз по безопасности и оптимизированной работе могут дать фору некоторым производителям )) (оффициальные разработчики, не ромоделы)

  2. Алексей:

    Мне, кстати, очень интересно.
    У меня на Xiaomi Redmi 3 Pro стоит LineageOS 14.1 с прошитыми OpenGApps. И тем не менее, в настройках Play Market написано «Сертифицировано»

  3. Серый:

    Да. защита от чайников на андроидах))) , как и замки..
    Ломать — не строить ))
    А слабо ковырнуть Sharp Aquos P1 (x) ??? И что то другое прикрутить ?
    «Чайники» на 4пда страдают ((. Исходники вроде есть на офф.Тайваньском , рут загручика тоже вроде, и ступор .