Как стать автором
Обновить

Защита личных данных на Android-телефоне

Время на прочтение 26 мин
Количество просмотров 117K
Мобильных компьютеров уже давно больше, чем стационарных. И наших личных данных на них так же значительно больше, чем на стационарных. При этом текущий дизайн OS мобильных устройств создаёт впечатление, что одна из их основных задач — как можно сильнее упростить доступ третьим лицам (в основном — корпорациям и государству, но и мелким разработчикам мобильных приложений тоже обламывается от этого пирога) к вашим личным данным.

Частичная открытость Android немного улучшает ситуацию, но полноценного решения проблемы утечки приватных данных пока не существует. Основная проблема в том, что пока на устройстве используются блобы нет никаких гарантий, что в них нет закладок (вроде обнаруженных в прошивках Samsung Galaxy). Аналогичная проблема с проприетарными приложениями без открытых исходников (вроде всего пакета GApps, начиная с самого Google Play Маркет). По сути всё как раз наоборот — крайне высока вероятность, что закладки там есть. Нередко их даже не пытаются скрывать, выдавая за удобные «фичи» для синхронизации и/или бэкапа ваших данных, обеспечивания вас полезной рекламой, и «защиту» от вредоносного софта или на случай утери устройства. Один из самых надёжных способов защиты своих данных описан в статье Mission Impossible: Hardening Android for Security and Privacy, но там речь не о телефоне, а о планшете, причём с поддержкой только WiFi (мобильных чипов без блобов по-моему вообще пока ещё нет, для мобильного инета вместе с этим планшетом предлагается использовать отдельный 3G-модем, блобы в котором никому не навредят т.к. на этом модеме личных данных просто нет), и, на всякий случай, физически отрезанным микрофоном. Но, несмотря на невозможность полноценно защитить личные данные на телефоне, я считаю что стоит сделать максимум возможного: прикрыть столько каналов утечек, сколько получится — ведь мало кто может позволить себе не использовать мобильный телефон или не держать на нём личные данные (хотя бы контакты и историю звонков).

Сразу уточню, что об анонимности речь вообще идти не будет. Это отдельная большая и сложная тема, которая, в частности, потребует использования Tor, полного отказа от GSM и перевода всей телефонии на шифрованный VoIP, etc. На эту тему стоит почитать предыдущую ссылку и воспользоваться приложениями от The Guardian Project. Но делать всё это может иметь смысл только при условии, что ваши данные не утекут прямо с телефона, т.е. после решения описанных в этой статье задач. Описанные ниже приёмы защиты от идентификации/отслеживания не дают анонимности, они просто прикрывают некоторые дополнительные каналы утечки личных данных (к которым относится и то, где и когда вы бываете).

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


Ингредиенты


Безопасность формируется разными элементами, и пренебрежение любым из них может свести на нет все усилия:

  • 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.apkGoogleBackupTransport.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). Если их ещё нет - возможно, сейчас самое время ими обзавестись.

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 на компьютер. Чтобы никакое приложение не успело украсть контакты сразу после экспорта настоящий параноик может попробовать следующий подход:

  1. экспортировать текущие настройки XPrivacy
  2. через XPrivacy заблокировать всем приложениям доступ к SD card
  3. перезагрузить телефон
  4. экспортировать Контакты (разрешив только им доступ к SD card)
  5. перенести .vcf-файл с контактами с SD card на компьютер
  6. импортировать предыдущие настройки XPrivacy
  7. перезагрузить телефон

Резюмируя


  • Если телефон ещё не рутован, прошивка и recovery родные, и через  recovery бэкап сделать нельзя, то придётся использовать:
    1. adb backup -apk -all -shared
  • Перед сменой прошивки или опасными экспериментами, чтобы иметь  возможность вернуть телефон в текущее состояние:
    1. сделать Nandroid Backup всех разделов из recovery
    2. если есть вероятность повредить данные на SD card, то дополнительно  сделать adb pull /sdcard sdcard
  • После ручного изменения отдельных файлов в /system:
    1. скопировать изменённые файлы на SD card или через adb pull
  • Регулярно и автоматически:
    1. делать и заливать в облако зашифрованные бэкапы всех приложений и их  данных через Titanium Backup, настроив в нём расписания заданий (это  позволит при необходимости восстанавливать отдельные приложения и/или  их данные, причём можно хранить несколько последних бэкапов каждого  приложения)
    2. если нужно регулярно бэкапить какие-то файлы с SD card — настроить это  отдельно через какие-нибудь приложения
      • в частности, это имеет смысл для настроек XPrivacy (которые перед  этим необходимо экспортировать, например через Tasker)
  • Периодически вручную:
    1. экспортировать на SD card:
      • настройки XPrivacy
      • Контакты
    2. бэкапить полностью 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  будет накладывать не те ограничения на системные приложения.

Обновление Xposed framework и его модулей (включая XPrivacy)


  • Обновление Xposed framework:
    1. установить новую версию поверх старой
    2. Фреймворк → Установить/Обновить
    3. перезагрузить телефон
  • Обновление модулей Xposed:
    1. установить новую версию поверх старой
      • если модуль обновлялся не через интерфейс Xposed а как обычное  приложение — дождаться пока Xposed обнаружит новую версию
    2. попробовать один раз запустить модуль (это нужно не всем модулям)
    3. перезагрузить телефон
    4. если обновлялся XPrivacy, то подождать пока XPrivacy update service  завершит работу (покажет 100%)

Защита данных на телефоне на случай потери/кражи


Чтобы посторонний человек, получивший физический доступ к телефону, не добрался до ваших личных данных, необходимо:

  • включить шифрование /data
    • желательно использовать для этого сложный пароль (по умолчанию этот же  пароль будет использоваться на экране блокировки, что как правило  слишком неудобно, но это легко решить и для экрана блокировки  использовать другой пароль/пин)
  • использовать пароль или достаточно сложный пин-код на экране блокировки
    • чтобы его не приходилось постоянно вводить дома можно использовать  Tasker для его автоматического отключения когда вы дома и включения  когда вы выходите из дома
  • отключать ADB (и права root для ADB) когда он не используется
    • это не так актуально начиная с Android 4.3

К сожалению, пока что ни ClockworkMod ни TWRP не поддерживают защиту паролем. А без этого человек временно получивший доступ к вашему телефону может перегрузиться в recovery, установить дополнительный пакет с трояном в /system, после чего вернуть телефон вам. Как только вы загрузите OS и введёте пароль шифрования к /data этот троян сможет запуститься с правами root и получить полный доступ ко всем вашим личным данным. Если бы recovery поддерживали защиту паролем, то для того, чтобы это проделать, пришлось бы прошить recovery заново, что привело бы к сбросу пароля, и дало бы возможность отследить факт вмешательства как только вам вернут телефон.

Анти-вор


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

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

Что касается возможности определить местоположение телефона — для этого на нём должен быть интернет, а т.к. вор не имеет доступа к OS телефона, то он не сможет настроить подключение к своему домашнему Wi-Fi и вряд ли он поставит в «бесполезный телефон» свою сим-карту. А вероятность того, что он не выкинет сразу же вашу сим-карту или пронесёт включенный телефон мимо уже известной телефону точки доступа Wi-Fi… на мой взгляд не настолько велика, чтобы в расчёте на это непрерывно сливать данные о своём местоположении компании разработавшей это приложение.

А на случай если телефон просто потерялся, и кто-то его нашёл и хочет вернуть владельцу — достаточно вывести на экране блокировки свою контактную информацию (например, email) или просто на него позвонить.

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

Настройка XPrivacy


По большому счёту — это самое сложное из всего описанного в этой статье. XPrivacy позволяет контролировать громадное количество операций и данных, при этом у всех приложений разные потребности и для многих приложений приходится подстраивать ограничения индивидуально. При этом пользователю, который не является разработчиком под Android, большая часть этих операций непонятна: насколько они критичны, к каким данным они дают доступ, действительно ли эти операции нужны для работы данного приложения.

Я могу дать только рекомендации общего плана:

  • По моим наблюдениям, использовать сервис краудсорсинга для  автоматического получения настроек XPrivacy для приложений — не лучшая  идея. Настройка XPrivacy сложна, поэтому большинство пользователей с ней  не очень хорошо справляются, но с удовольствием отправляют свои  настройки в этот сервис. Выкачивая усреднённые чужие настройки вы  заблокируете примерно 10-20% того, что можно (и нужно) заблокировать.
  • Всё, что умеет блокировать/подделывать XPrivacy — имеет непосредственное  отношение к вашим личным данным. Поэтому блокировать стоит, по  возможности, практически всё.
  • Стоит сразу включить режим «эксперта» и разрешить блокирование системных  приложений.
  • Подготовьте максимально ограничивающий шаблон «по умолчанию» — включите  блокирование и запрос ограничений практически для всех категорий и  операций (включая небезопасные), за исключением:
    • Датчики — можно разрешить небезопасные операции (нужно практически  всем приложениям).
    • Идентификация устройства — блокировать всё, но стоит отключить запрос  ограничений для тех пунктов, которые вы в любом случае не собираетесь  разрешать.
    • Интернет — стоит разрешить все небезопасные операции кроме inet_*  (нужно практически всем приложениям, и кроме того доступ в интернет  будет контролироваться файрволом).
    • Система (установленные приложения) — можно полностью разрешить (нужно  практически всем приложениям).
    • Учётные записи (Google, Facebook, …) — можно полностью разрешить (если  вы заведёте для телефона «его личные» отдельные аккаунты специально  для использования приложениями, то нет смысла ограничивать приложения  в доступе к этих аккаунтам).
    • Хранилище (медиа, карта памяти) — стоит полностью разрешить все  open* (нужно практически всем приложениям), а доступ к sdcard  блокировать только если вы собираетесь контролировать к каким файлам  обращаются приложения и составлять для них белые списки разрешённых  файлов/каталогов.
  • Примените шаблон «по умолчанию» ко всем уже установленным приложениям  (включая системные, особенно GApps!), а потом пройдитесь по ним и  отключите часть ограничений исходя из задач приложения.
    • Для Камеры/Диктофона/etc. имеет смысл оставить запрос ограничений для  *.permission в Медиа, чтобы каждый раз когда эти приложения будут  пытаться получить доступ к камере или микрофону вы получали об этом  уведомление.
    • Приложение «Графический интерфейс системы, Экран блокировки»  используется для управления всеми возможностями телефона, включая  обычно заблокированные операции вроде NFC или Record.Audio (нужен для  управления громкостью), плюс его интерфейс нередко закрывает доступ к  диалогу запроса ограничений XPrivacy, так что большую часть  ограничений придётся отключить.
    • Приложение «Внешний накопитель» используется для диалога выбора файла  многими системными приложениями.
  • Если какое-то приложение не работает — посмотрите отчёт «Использование»  в XPrivacy чтобы увидеть что он кому недавно блокировал.
  • Не забывайте, что изменения ограничений вступают в силу через 15 сек.
    • После изменения прав на Интернет или Хранилище нужно убить и  перезапустить приложение.
  • Перед ограничением системных приложений лучше сделать бэкап из recovery.

В CyanogenMod есть свой аналог XPrivacy (Настройки → Конфиденциальность → Защищённый режим), но он позволяет контролировать слишком незначительную часть того, что можно заблокировать через XPrivacy. Одновременное использование Защищённого режима и XPrivacy не рекомендуется.

Установка и настройка защищённой системы


Первым делом сделайте максимально полный бэкап текущей системы:

  • Экспортируйте список контактов в .vcf. Если есть другие приложения,  которыми вы активно пользуетесь, и у которых есть встроенная возможность  экспорта/бэкапа данных — не пренебрегайте ей тоже.
  • Если телефон не рутованный и нет нормального recovery — сделайте бэкап  через adb, потом получите root и установите Titanium Backup с нормальным  recovery.
  • Сделайте бэкапы всех приложений через Titanium Backup (большинство из  них можно будет восстановить на новой прошивке) и бэкапы всех разделов  через recovery (чтобы можно было вернуть текущую систему если что-то  пойдёт не так).
  • Дополнительно может иметь смысл сделать скриншоты того, что скорее всего  просто «восстановить из бэкапа» на новой прошивке не получится.  Например, расширенные настройки Контактов которые в .vcf не  экспортируются (группы) и содержимое рабочих столов.
  • Опционально можете скопировать SD card на компьютер, на всякий случай.

Установите CyanogenMod. Если хотите, можете сразу прошить и GApps, но я рекомендую сделать это немного позднее.

При первой загрузке:

  • пропустите подключение Wi-Fi
  • откажитесь от создания аккаунта CyanogenMod (и Google, если вы уже  прошили GApps)
  • отключите определение местоположения
  • включите «режим полёта»

Тут нас ждёт неприятный сюрприз: телефон уже успел вылезти в мобильный интернет и что-то слить, плюс проверить обновления CyanogenMod! К сожалению, мне не удалось найти способ это предотвратить: включить «режим полёта» в процессе первой загрузки не получается т.к. ещё нет файла где эта настройка хранится, а если подключиться через adb и включить «режим полёта» вручную на этапе выбора языка — это происходит всё-равно слишком поздно и телефон успевает что-то отправить через мобильный интернет. 


  • проверьте, и при необходимости повторно отключите Wi-Fi, мобильный  интернет и определение местоположения
  • активируйте ADB:
    • Настройки → О телефоне → 7 тапов по Номер сборки
    • Настройки → Для разработчиков → [✓] Отладка по сети & USB
    • Настройки → Для разработчиков → Режим суперпользователя → Для  приложений и ADB
  • если у вас раздел /data не был зашифрован или вы его переформатировали  в процессе прошивки CyanogenMod — зашифруйте его (если это делать так, а  не через интерфейс, то можно задать пароль шифрования отличающийся от  пароля/пин-кода экрана блокировки):
    1. adb root
    2. adb shell vdc cryptfs enablecrypto inplace <пароль>
    3. подождите пока система зашифрует /data и снова загрузится
  • Настройки → Безопасность → [✓] Неизвестные источники
  • Скачайте на компьютер и установите через adb install (чтобы пока не  установлены XPrivacy и AFWall+ не включать на телефоне интернет)  Xposed  framework.
    1. Фреймворк → Установить/Обновить
    2. перезагрузите телефон
    3. скачайте скрипт  90-xposed.sh,  который будет сохранять Xposed framework при OTA-обновлениях  CyanogenMod, и установите его:
      1. adb root
      2. adb shell mount -o remount,rw /system
      3. adb push 90-xposed.sh /system/addon.d/
      4. adb shell chmod 0755 /system/addon.d/90-xposed.sh
      5. adb shell mount -o remount,ro /system
  • Скачайте на компьютер и установите через adb install  XPrivacy.
    1. установите его лицензию залив /sdcard/XPrivacy_license.txt
      • если это делается при активном XPrivacy — перезагрузите телефон
    2. активируйте модуль XPrivacy в Xposed framework
    3. запустите один раз XPrivacy
    4. перезагрузите телефон
    5. Меню → Параметры → [✓] Режим эксперта
    6. Меню → Параметры → Режим эксперта → [✓] Запрет системных компонентов
    7. Меню → Параметры → Режим эксперта → [✓] Режим AOSP
    8. перезагрузите телефон
    9. настройте XPrivacy максимально ограничив доступ всем приложениям  включая системные (рекомендации по настройке описаны выше)
  • В зависимости от используемой вами прошивки может потребоваться  установить BusyBox (в  CyanogenMod 11 он уже есть).
  • Скачайте на компьютер и установите через adb install  AFWall+.
    1. Меню → Настройки → [✓] Активные правила
    2. Меню → Настройки → [✓] Управление VPN
    3. Меню → Настройки → [✓] Поддержка IPv6 (пользоваться им не  обязательно, но файрволить нужно, иначе приложения которым закрыт  доступ файрволом через IPv4 без проблем выйдут в интернет через IPv6)
    4. Меню → Настройки → [✓] Администратор устройства
    5. Меню → Настройки → Экспериментальные: [✓] Исправить утечку данных  при запуске. Это установит скрипт /system/etc/init.d/afwallstart  блокирующий доступ в интернет пока OS загружается и AFWall+ ещё не  запустился.
    6. Меню → Включить брандмауэр
      • режим Белый список (разрешить выбранные), а поскольку выбранных пока  нет — всем приложениями доступ пока что закрыт
  • Нам нужно позаботится, чтобы /system/etc/init.d/afwallstart не был  удалён при OTA-обновлении OS. Для этого создадим свой скрипт  /system/addon.d/99-local.sh, в который будем добавлять имена файлов на  разделе /system, которые нужно сохранить при OTA-обновлении:
    1. adb root
    2. adb shell mount -o remount,rw /system
    3. adb shell cp /system/addon.d/50-cm.sh /system/addon.d/99-local.sh
    4. отредактируйте /system/addon.d/99-local.sh, заменив в функции  list_files() файл etc/hosts на etc/init.d/afwallstart
    5. adb shell mount -o remount,ro /system

Если вы ещё не прошили GApps — сделайте это сейчас. После загрузки настройте ограничения XPrivacy для приложений GApps.

Настраиваем систему:

  • Настройки Google → Безопасность → [ ] Удалённая блокировка и сброс
  • Настройки Google → Безопасность → [ ] Борьба с вредоносными  приложениями
  • Настройки → Беспроводные сети: Передача данных → Меню → [ ]  Автосинхронизация данных
  • Настройки → Беспроводные сети: Ещё… → [ ] Режим полёта
    • отключаем временно, только для того чтобы переключить следующий пункт
  • Настройки → Беспроводные сети: Ещё… → [ ] NFC
  • Настройки → Беспроводные сети: Ещё… → [✓] Режим полёта
  • Настройки → Экран блокировки → Безопасность экрана → Блокировка экрана
    • установить надёжный пароль или пин-код
  • Настройки → Местоположение (выкл.)
  • Настройки → Безопасность → Администраторы устройства → [ ] Удалённое  управление Android
  • Настройки → Безопасность → Администраторы устройства → [✓] XPrivacy
  • Настройки → Безопасность → Администраторы устройства → [✓] AFWall+
  • Настройки → Конфиденциальность → Отправка статистики → [ ] Включить  отправку отчётов
  • Настройки → Язык и ввод → Проверка правописания (настройки) → Проверка  правописания Android (настройки) → [ ] Поиск контактов
  • Настройки → Язык и ввод → Клавиатура Android (настройки) → Расширенные  настройки → [ ] Подсказывать имена
  • Если вы ставили не минимальный вариант GApps, то где-то рядом должна  быть аналогичная настройка для Google Voice — её тоже выключить.
  • Настройки → Восстановление и сброс → [✓] Резервирование данных
    • включаем временно, только для того чтобы переключить следующий пункт
  • Настройки → Восстановление и сброс → [ ] Автовосстановление
  • Настройки → Восстановление и сброс → [ ] Резервирование данных
  • Настройки → Для разработчиков → Сетевое имя устройства → localhost
  • Телефон → Меню → Настройки → [ ] Прямой поиск
  • Телефон → Меню → Настройки → [ ] Поиск контактов
  • Телефон → Меню → Настройки → [ ] Обратный поиск

Подключаем интернет:

  • Перед открытием доступа к интернет стоит заблокировать некоторые  приложения, в частности:
    • Настройки → Приложения → Все → Синхронизация Контактов Google →  Отключить
    • Настройки → Приложения → Все → Google Резервное копирование →  Отключить
  • Скачайте на компьютер и установите через adb install:
  • Разрешите в AFWall+ доступ к Wi-Fi только для одного приложения:
    • OpenVPN for Android
  • Разрешите в AFWall+ доступ к VPN для:
    • (NTP) — опционально
    • AdAway
    • F-Droid
    • Google Play Маркет
    • Xposed Installer
    • Загрузки, Хранилище мультимедиа, Диспетчер загрузки
    • Обновление CyanogenMod
  • Для первой активации аккаунта Google нужно дать доступ к VPN для:
    • Аккаунты Google, Сервисы Google Play, Google Резервное копирование,  Google Services Framework, Синхронизация Контактов Google
  • Включите Wi-Fi или мобильный интернет.
  • Активируйте VPN.
  • Создайте или подключите существующий аккаунт Google (чтобы инициировать  добавление аккаунта можно например запустить Play Маркет).
  • Настройки → Аккаунты → Google → ваш аккаунт → выключить всю  синхронизацию
  • Настройки Google: отключить всё, кроме:
    • Подключенные приложения
    • Play Игры

Теперь можно отключить доступ к VPN для «Аккаунты Google, Сервисы Google Play, Google Резервное копирование, Google Services Framework, Синхронизация Контактов Google». Этот набор приложений — один из основных каналов утечки личных данных. Доступ в интернет ему нужен для:

  • обновления просроченного токена доступа к гугл-аккаунту
  • поддержки GCM (Google Cloud Messaging — пуш-уведомлений Android)
  • активного сливания всех ваших личных данных, до которых он дотянется

Для обновление токена нужно открывать ему доступ крайне редко и ненадолго. Что касается GCM, то, с одной стороны, пуш-уведомления нужны для работы многих приложений, так что вы можете захотеть оставить ему доступ к VPN. С другой стороны, если вы дадите какому-то приложению хоть раз ненадолго доступ в интернет, то оно может зарегистрироваться в GCM и после этого будет получать пуш-уведомления (через этот набор приложений гугла) даже если вы ему доступ в интернет заблокируете. Хорошо это или плохо — решайте сами. Лично мне не нравится идея, что отключенное от интернета приложение продолжает получать из интернета данные, но хотя бы оно не сможет ничего отправлять.

Для защиты от фоновой установки программ на ваш телефон по желанию гугла, доступ в интернет для «Google Play Маркет» нужно разрешать только непосредственно тогда, когда вы им пользуетесь.

Для того, чтобы видеть полную информацию по запрашиваемым правам доступа для устанавливаемых из Play Маркет приложений нужно установить модуль для Xposed framework PlayPermissionsExposed и перезагрузить телефон.

Установить из Play Маркет:


Сейчас самое время перегрузиться в recovery и сделать полный бэкап новой системы!

Восстановить из бэкапов Titanium Backup все нужные приложения. Запустить из меню Titanium Backup «Маркет доктор» для восстановления связей этих приложений с Play Маркет.

Теперь можно отключить ADB и запретить для него права root.

Поздравляю! У вас в руках Android-телефон, защищённый от утечек личных данных настолько, насколько это вообще возможно без отказа от доступа к Play Маркет и GSM-связи.

______________________
Текст конвертирован используя habrahabr backend для AsciiDoc.
Теги:
Хабы:
+31
Комментарии 56
Комментарии Комментарии 56

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн