Что рассмотрено в статье
Ингредиенты
GApps
Замена прошивки и аккаунты
Разделы
Backup
IMEI
Типы бэкапов
Что и как бэкапить
Резюмируя
Upgrade
OTA-обновления OS
Обновление Xposed framework и его модулей (включая XPrivacy)
Защита данных на телефоне на случай потери/кражи
Анти-вор
Настройка XPrivacy
Установка и настройка защищённой системы
Ингредиенты
Безопасность формируется разными элементами, и пренебрежение любым из них может свести на нет все усилия:
- OS и ключевые приложения (работающие с вашими личными данными) должны быть open source, иначе ни о каком доверии к ним речи быть не может в принципе.
- У вас должен быть root-доступ (как говорится, если вы не root на своём компьютере — значит на нём root кто-то другой… да и некоторые из описанных ниже приложений требуют root-доступ).
- OS и приложения необходимо регулярно обновлять, чтобы уменьшить шанс что их взломают.
- Вместо «синхронизации» личных данных нужно использовать обычные бэкапы, причём обязательно надёжно зашифрованные.
- Доступ всех приложений к личным данным должен быть ограничен реально необходимым минимумом, доступ к камере/микрофону так же должен контролироваться.
- Доступ всех приложений в интернет должен быть ограничен реально необходимым минимумом.
- Передача данных «по воздуху» должна осуществляться безопасным образом:
- всё, что передаётся «по воздуху» должно быть зашифровано (вам потребуется доступ к VPN);
- подключение к Wi-Fi требует дополнительных предосторожностей, чтобы гарантировать что мы подключаемся к нужной точке доступа;
- работа с Wi-Fi требует дополнительной защиты от утечки данных, позволяющих вас отслеживать.
- Защита данных на телефоне на случай потери/кражи.
Требование к открытости исходников OS сразу исключают iOS и Windows Phone, да и из вариантов на базе Android подойдут далеко не все. Я буду использовать CyanogenMod, но это не единственный вариант (если ваш телефон поддерживается Replicant то он может быть предпочтительнее, плюс есть ещё Firefox OS, Ubuntu Touch, Tizen).
Что касается использования самых последних версий OS — к сожалению, мне пришлось поставить CyanogenMod 11 на базе Android 4.4.4 (KitKat). Причин две: во-первых CyanogenMod на Android 5.x для моего телефона просто ещё нет, и во-вторых ещё нет стабильной версии Xposed framework для Android 5.x.
Для надёжного шифрования бэкапов понадобится
платная версия Titanium Backup.
Для полноценного контроля доступа приложений к личным данным понадобится
платная версия XPrivacy. В принципе, можно обойтись и бесплатной, но это будет значительно сложнее (информация о параметрах функций и чёрные/белые списки позволяют более тонко управлять доступом, да и пакетные операции экономят много времени). Я лично не проверял, но вроде бы «платную» версию можно получить и бесплатно (форма в конце страницы на сайте платной версии).
GApps
Что касается GApps. В идеале, конечно, лучше бы его вообще не устанавливать — если вам хватает приложений из F-Droid. Можно попробовать обойтись
NOGAPPS a.k.a. µg Project, но на практике полноценной замены Google Play Маркет просто нет (а доступ к нему через NOGAPPS может в любой момент привести к бану и потере купленных приложений т.к. нарушает правила гугла). В этом случае стоит установить минималистский
вариант GApps, и при необходимости остальные приложения GApps установить через Play Маркет (если вы переживаете, что в этом случае они будут занимать дополнительное место, то во-первых это всё-равно случится при первом же их обновлении, а во-вторых есть утилиты — включая Titanium Backup — которые умеют переносить приложения в /system, решая эту проблему).
Вообще надо отметить, что разработчики выкладывавшие урезанные сборки GApps как-то все повально начали отказываться от дальнейшей поддержки этих сборок, у всех резко образовались семейные дела, причём они зачем-то через некоторое время после отказа от поддержки ещё и удалили с файловых хостингов выложенные ими ранее сборки и ветки на форумах в которых эти сборки обсуждались. Тем не менее, пару вариантов найти ещё возможно: минималистская
сборка от jajb (я бы из неё ещё убрал GoogleContactsSyncAdapter.apk, GoogleBackupTransport.apk и GoogleFeedback.apk, но не уверен что без них ничего не сломается) и невероятно гибкий и настраиваемый, но уже не поддерживаемый
PA Gapps от TKruzze.
Как вариант ещё можно просто удалить «лишние» приложения из уже установленного GApps, для определения списка лишних файлов проще всего сравнить минимальный и максимальный варианты вышеупомянутого PA Gapps.
Замена прошивки и аккаунты
Если только вы уже не приняли все необходимые меры предосторожности с самого начала использования своего телефона, то ваши личные данные уже давно «протекли» и доступны множеству чужих людей. В этом случае я бы рекомендовал сначала просто установить описанные приложения и поэкспериментировать с ними, а когда почувствуете себя с ними достаточно уверенно — удалить с телефона абсолютно все данные (включая содержимое внутренней/внешней SD card) и установить всё с нуля — это не заберёт ваши данные обратно, но хотя бы разорвёт связь между этими данными и вашим телефоном.
Что касается аккаунтов, то в идеале после замены прошивки нужно специально для телефона создать отдельные аккаунты в гугле, фейсбуке, etc. Это обычно не мешает вам использовать свои обычные аккаунты в нужных приложениях, а для всех остальных это сильно ограничит объём доступных им данных (например, «моим» фейсбуком пользуются только несколько игр, которым я дал к нему доступ ради каких-то бонусов).
ВНИМАНИЕ: Если вы покупали приложения в Play Маркет, то если после замены прошивки вы будете использовать тот же самый гугл-аккаунт связь между уже протёкшими данными и вашим телефоном сохранится (по крайней мере для гугла), а если аккаунт будет новый — вы потеряете ранее купленные приложения.
Если для вас замена прошивки и/или создание отдельных аккаунтов для телефона это перебор, то ничего страшного — как я уже писал в начале, способа полноценной и надёжной защиты личных данных на телефоне пока не существует, речь идёт исключительно о том, чтобы прикрыть столько каналов утечки данных, сколько получится. И в вашем случае будет просто прикрыто чуть меньше каналов, чем возможно на данный момент.
Дальше я буду исходить из того, что вы решили заменить текущую прошивку - если это не так, просто пропустите некоторые из описанных операций.
Разделы
Для понимания описанных далее операций необходимо минимальное представление об основных разделах Android. Вкратце, основные разделы это:
- /system
- содержит основную систему/прошивку (напр. CyanogenMod) плюс опционально дополнительные пакеты (вроде GApps) прошитые через recovery после основной прошивки
- по умолчанию доступен только на чтение, не изменяется в процессе работы — т.е. его содержимое всегда соответствует установленной прошивке
- имея root-доступ его можно изменять
- /data
- содержит приложения установленные пользователем и данные всех приложений (в т.ч. системных приложений из /system)
- именно этот раздел шифруется если активировать шифрование системы
- если в телефоне есть «встроенная» SD card, то она может быть реализована не как отдельный раздел, а как каталог /data/media или /data/media/0 (в этом случае wipe или factory reset раздела /data из recovery это не полноценное форматирование раздела, а просто удаление всех файлов кроме /data/media)
- SD card
- содержит файлы пользователя (закачки, музыка, видео, etc.)
- содержит часть данных приложений, которые либо не помещаются в /data, либо должны быть доступны всем приложениям (раздел /data отформатирован в ext4, полноценно поддерживает права файлов, поэтому обычно к файлам в /data имеют доступ только их собственные приложения, а SD card либо отформатирован в FAT либо на нём через fuse эмулируется почти полное отсутствие ограничений прав доступа)
- их может быть несколько, как встроенных так и внешних, доступных через разные каталоги (дальше в примерах я буду использовать каталог /sdcard), и находящихся физически на отдельных разделах или внутри /data
Backup
Перед тем, как приступать к смене прошивки, нужно сделать бэкап. (Вообще, я рекомендую в процессе настройки периодически делать полный бэкап.) Поскольку мы не будем использовать «синхронизацию» личных данных, то крайне желательно настроить регулярное автоматическое создание зашифрованных бэкапов и заливание их куда-нибудь. Из-за особенностей архитектуры Android понять что и как нужно бэкапить довольно непросто.
Некоторые из описанных операций можно сделать только если у вас есть root или нормальный recovery (обычно ClockworkMod или TWRP). Если их ещё нет - возможно, сейчас самое время ими обзавестись.
[DOUBLEPOST=1432384429,1432384349][/DOUBLEPOST]
IMEI
Судя по всему, в некоторых случаях при перепрошивке есть небольшая вероятность что будет повреждён другой раздел. Один из этих разделов используется для хранения, в частности, IMEI телефона. Потеряв, его будет довольно сложно восстановить, поэтому крайне рекомендуется перед первой прошивкой сохранить (куда-то вне телефона) раздел с IMEI. Для некоторых телефонов это специфичная процедура с использованием утилит производителя, для других достаточно сохранить утилитой dd нужные разделы в файлы (впрочем, скорее всего и в остальных случаях можно воспользоваться dd вместо утилит производителя).
Если не уверены — проще всего сохранить все разделы кроме /system, /data и /cache. Обычно они все достаточно небольшого размера. Посмотреть список и размеры доступных разделов можно в /proc/partitions или через parted, пример (подключаемся через adb как root, не важно загружена обычная система или recovery):
# cat /proc/partitions
major minor #blocks name
179 0 15388672 mmcblk0
179 1 4096 mmcblk0p1
179 2 4096 mmcblk0p2
179 3 20480 mmcblk0p3
179 4 4096 mmcblk0p4
179 5 4096 mmcblk0p5
179 6 4096 mmcblk0p6
179 7 8192 mmcblk0p7
179 8 8192 mmcblk0p8
179 9 8192 mmcblk0p9
179 10 90112 mmcblk0p10
179 11 262144 mmcblk0p11
179 12 1048576 mmcblk0p12
179 13 1572864 mmcblk0p13
179 14 573440 mmcblk0p14
179 15 8192 mmcblk0p15
259 0 11759616 mmcblk0p16
# parted /dev/block/mmcblk0
(parted) p
Model: MMC MAG2GC (sd/mmc)
Disk /dev/block/mmcblk0: 15.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name
1 4194kB 8389kB 4194kB BOTA0
2 8389kB 12.6MB 4194kB BOTA1
3 12.6MB 33.6MB 21.0MB ext4 EFS
4 33.6MB 37.7MB 4194kB m9kefs1
5 37.7MB 41.9MB 4194kB m9kefs2
6 41.9MB 46.1MB 4194kB m9kefs3
7 46.1MB 54.5MB 8389kB PARAM
8 54.5MB 62.9MB 8389kB BOOT
9 62.9MB 71.3MB 8389kB RECOVERY
10 71.3MB 164MB 92.3MB fat16 RADIO
11 164MB 432MB 268MB ext4 TOMBSTONES
12 432MB 1506MB 1074MB ext4 CACHE
13 1506MB 3116MB 1611MB ext4 SYSTEM
14 3116MB 3704MB 587MB ext4 HIDDEN
15 3704MB 3712MB 8389kB OTA
16 3712MB 15.8GB 12.0GB ext4 USERDATA
Например, для Nexus 4 достаточно сохранить /dev/block/mmcblk0p{8,9}:
# dd if=/dev/block/mmcblk0p8 of=/sdcard/mmcblk0p8.img
# dd if=/dev/block/mmcblk0p9 of=/sdcard/mmcblk0p9.img
Типы бэкапов
- Android Backup: файлы .ab (по сути немного модифицированный tar-архив), зашифрованные если это задано в настройках телефона, обычно делаются через adb backup.
- Единственное достоинство — эти бэкапы можно делать без root.
- Nandroid Backup: файлы .img и .tar*, обычные полные образы разделов или tar-архивы (по сути тоже полные образы, только компактнее), не зашифрованные, обычно делаются через recovery.
- Теоретически TWRP умеет делать шифрованный Nandroid Backup, но во-первых только для /data, и во-вторых у меня эта фича не заработала.
- Titanium Backup: свой формат, поддержка шифрования в платной версии, сохраняет приложения, их данные и общесистемные настройки.
ВНИМАНИЕ: Поскольку Nandroid Backup не зашифрованы и сохраняются на доступную всем приложениям SD card, то я рекомендую после создания сразу (не перегружаясь из recovery в основную систему) переносить их с телефона на компьютер через adb pull, а на телефоне удалять. Если их понадобится восстановить, то сначала загрузить recovery, а потом залить их обратно через adb push и удалить после восстановления бэкапа.
Что и как бэкапить
Как вы видели выше, разделов в системе очень много. Но большинство из них либо никогда не меняются, либо меняются только при прошивке новой системы или recovery, так что бэкапить их смысла нет.
Возможное исключение — раздел /system. Обычно он меняется только при обновлении прошивки, но имея root вы можете его изменять (делать приложения «системными» через Titanium Backup чтобы сэкономить место на /data, устанавливать новые системные приложения вроде BusyBox, модифицировать загрузочные скрипты, etc.) — в этом случае его тоже может иметь смысл бэкапить.
Таким образом, бэкапить обычно нужно только раздел /data и внутренние/внешние SD card.
Поскольку бэкап нужно куда-то сохранять, и обычно это SD card, то содержимое самой(их) SD card в бэкапы как правило не входит. Titanium Backup умеет частично включать в бэкапы данные приложений находящиеся на SD card, но только файлы из /sdcard/Android/data/*/ (если приложение хранит свои файлы в других каталогах то в бэкап они не попадут).
Итак, ваши данные, которые может потребоваться бэкапить, это:
- описанные выше возможные изменения /system
- включаются в Nandroid Backup /system
- если это несколько известных файлов, то их можно скопировать вручную через adb pull
- установленные вами дополнительные приложения
- .apk-файлы, находятся в /data
- бэкапить не обязательно, их обычно можно повторно скачать
- может иметь смысл бэкапить чтобы можно было их установить не выкачивая заново, либо если нужно иметь возможность установить старую версию приложения из Play Маркет
- включаются в Android Backup через adb backup -apk -all -nosystem
- включаются в Nandroid Backup /data
- включаются в бэкапы Titanium Backup (опционально)
- данные практически всех приложений
- находятся в /data, иногда частично на SD card
- это самое важное, что стоит бэкапить
- включаются в Android Backup через adb backup -all (кроме тех данных, которые на SD card)
- включаются в Nandroid Backup /data (кроме тех данных, которые на SD card)
- включаются в бэкапы Titanium Backup (опционально, данные на SD card при некоторых условиях тоже включаются)
- данные некоторых особых приложений
- XPrivacy держит свои данные в /system, поэтому для бэкапа приходится «экспортировать» их на SD card (это можно автоматизировать)
- Контакты желательно периодически экспортировать на SD card, т.к. это единственный способ сохранить их в портабельном формате .vcf, который можно загрузить куда угодно (включая приложение Контакты другой прошивки)
- ваши файлы и данные приложений сохранённые вне стандартных мест
- находятся на SD card
- можно просто скопировать их вручную любым способом (например через adb pull /sdcard sdcard)
ВНИМАНИЕ: После экспорта контактов любое приложение может получить к ним доступ, поэтому желательно сразу их перенести с SD card на компьютер. Чтобы никакое приложение не успело украсть контакты сразу после экспорта настоящий параноик может попробовать следующий подход:
- экспортировать текущие настройки XPrivacy
- через XPrivacy заблокировать всем приложениям доступ к SD card
- перезагрузить телефон
- экспортировать Контакты (разрешив только им доступ к SD card)
- перенести .vcf-файл с контактами с SD card на компьютер
- импортировать предыдущие настройки XPrivacy
- перезагрузить телефон
Резюмируя
- Если телефон ещё не рутован, прошивка и recovery родные, и через recovery бэкап сделать нельзя, то придётся использовать:
- adb backup -apk -all -shared
- Перед сменой прошивки или опасными экспериментами, чтобы иметь возможность вернуть телефон в текущее состояние:
- сделать Nandroid Backup всех разделов из recovery
- если есть вероятность повредить данные на SD card, то дополнительно сделать adb pull /sdcard sdcard
- После ручного изменения отдельных файлов в /system:
- скопировать изменённые файлы на SD card или через adb pull
- Регулярно и автоматически:
- делать и заливать в облако зашифрованные бэкапы всех приложений и их данных через Titanium Backup, настроив в нём расписания заданий (это позволит при необходимости восстанавливать отдельные приложения и/или их данные, причём можно хранить несколько последних бэкапов каждого приложения)
- если нужно регулярно бэкапить какие-то файлы с SD card — настроить это отдельно через какие-нибудь приложения
- в частности, это имеет смысл для настроек XPrivacy (которые перед этим необходимо экспортировать, например через Tasker)
- Периодически вручную:
- экспортировать на SD card:
- настройки XPrivacy
- Контакты
- бэкапить полностью SD card через adb pull /sdcard sdcard
Upgrade
Регулярное обновление OS и приложений тоже имеет свои особенности.
- Обновления для OS:
- проверяются автоматически
- устанавливать нужно вручную
- при необходимости не сложно откатиться на предыдущую версию
- перед установкой новой версии необходимо предпринять дополнительные действия, описанные ниже
- Обновления для приложений установленных из F-Droid:
- проверяются автоматически
- устанавливать нужно вручную
- при необходимости не сложно откатиться на предыдущую версию
- Обновления для приложений установленных из Play Маркет:
- Play Маркет предпочитает не только проверять обновления автоматически, но и (если не отключить) автоматически обновлять приложения. Для среднего пользователя это скорее плюс, но если вы всерьёз планируете применить описанное в этой статье — вам скорее всего захочется автоматические обновления отключить и контролировать что и когда обновлять вручную.
- Себя самого Play Маркет обновляет автоматически в любом случае.
- Поскольку через Play Маркет гугл может в любом момент по своему желанию незаметно установить или удалить у вас любое приложение, что является серьёзнейшей проблемой в плане безопасности, рекомендуется блокировать для Play Маркет доступ к интернету в то время, когда вы им не пользуетесь.
- проверяются вручную (из-за заблокированного доступа к интернету)
- устанавливать можно автоматически или вручную
- при необходимости откатиться можно только используя бэкапы старой версии сделанные Titanium Backup (если настроено автоматическое обновление, то для этого приложения его нужно будет отключить), поскольку Play Маркет не даёт выбрать какую версию приложения устанавливать
- Обновления для приложений, установленных из других источников:
- проверяются вручную (уникальным для каждого приложения способом)
- устанавливать надо вручную
- Обновления для Xposed framework и его модулей (включая XPrivacy) можно проверять и устанавливать через сам Xposed.
- при обновлении необходимо предпринять дополнительные действия, описанные ниже
OTA-обновления OS
При обновлении OS необходимо учитывать следующее:
- Если раздел /system был модифицирован (а в нашем случае это будет именно так), то необходимо побеспокоиться о том, чтобы эти изменения сохранились перед прошивкой новой версии OS в /system и автоматически восстановились после этого, до первой загрузки новой версии OS.
- Для этого необходимо заранее создать соответствующие скрипты в /system/addon.d (они будут автоматически запущены до и после прошивки).
- Если этого не сделать, то после обновления OS, в частности, перестанет работать XPrivacy, и все приложения получат доступ к вашим контактам и прочим личным данным.
- В данный момент существуют уязвимости Android, которые дают возможность обычным приложениям не санкционировано повысить свои привилегии в процессе обновления OS.
- Чтобы от этого защититься необходимо установить и перед каждым обновлением OS проверять установленные приложения через Secure Update Scanner.
- Поскольку XPrivacy накладывает ограничения на приложения по их UID, а UID системных приложений может измениться при обновлении OS, то рекомендуется включать «режим полёта», экспортировать и сбрасывать настройки XPrivacy, обновлять прошивку, после чего импортировать настройки XPrivacy (при импорте приложения определяются по имени, а не UID) и выключать «режим полёта».
- Этот вариант не идеален, т.к. «режим полёта» помешает приложениям немедленно отправить по сети ваши личные данные, но не помешает их получить (между сбросом и импортом настроек XPrivacy), сохранить в файлы и отправить по сети позднее.
- С другой стороны, если этого не сделать, то есть небольшая вероятность что система не сможет корректно загрузиться из-за того, что XPrivacy будет накладывать не те ограничения на системные приложения.