Содержание статьи
Краткий курс конспирологии
Когда дело касается обычного домашнего компа, вопрос анонимности решается просто. Свежая версия операционки с открытыми исходниками, open source браузер с отключенным JavaScript, Tor, смена MAC-адресов, DuckDuckGo вместо Google и Yandex, замена Dropbox на личный Rsync-сервер, отказ от любых сервисов, требующих подтверждения личности, — вот, собственно, и все, что требуется для сокрытия самого себя от глаз интернета.
Ситуация со смартфонами намного сложнее. Эти устройства как будто бы созданы для того, чтобы следить за нами, и делают это постоянно, независимо от того, пользуемся мы ими активно или просто звоним. Современный смартфон сливает данные по нескольким фронтам одновременно:
- Синхронизация данных с серверами производителя смартфона и/или операционной системы. Тот же Android по умолчанию сливает на серверы Google наши контакты, информацию о местоположении, данные кредитной карты, намеченные события в календаре, фотографии, документы, созданные в Google Docs. Стоковые прошивки многих смартфонов остаются на связи с серверами производителя, а во многих случаях принуждают пользователя создать на их серверах аккаунт.
- Открытые Wi-Fi-сети в Макдаках и прочих Сабвеях не предлагают никаких средств защиты трафика, так что он может быть легко перехвачен третьей стороной (да хоть самим админом).
- Многие сторонние приложения не шифруют трафик и отправляют на удаленные серверы информацию о девайсе и его владельце, даже не спрашивая последнего.
- Сети стандарта GSM не обеспечивают средств аутентификации абонентов, позволяя любому желающему перехватить трафик с помощью базовой станции, приобретенной за 1000 долларов. А если тобой заинтересовались серьезные организации, то метод триангуляции позволит узнать твое местоположение с точностью до ста метров.
- Внутри любого смартфона работает встроенная миниатюрная RTOS с закрытыми исходниками, о возможностях которой знает только производитель мобильного чипа и спецслужбы. Нетрудно предположить, что такая ОС может легко выдать твое местоположение и отправить личную инфу кому надо.
В целом смартфон — это просто решето, через которое течет все и всегда. К счастью, многие из его дыр мы таки можем заварить.
Смартфон под управлением Android и CyanogenMod
Очевидно, что бороться с утечками в смартфонах, основанных на проприетарных операционных системах, — занятие глупое. Нет исходников — нет доказательств отсутствия бэкдоров. Чтобы получить хоть сколько‑нибудь анонимизированный смартфон, нам понадобится гуглофон. И не просто гуглофон, а тот, для которого есть официальная версия последней прошивки CyanogenMod и открытые исходники ядра (стоковая прошивка или ядро Android-смартфона также могут содержать бэкдоры).
Когда эти требования будут выполнены, берем смартфон в руки, получаем root (как это сделать, мы писали много раз), регистрируемся в Google Play, устанавливаем приложение ROM Installer и прошиваем с его помощью CyanogenMod. Обязательно отказываемся от установки Google Apps. Их придется принести в жертву богу конфиденциальности.
После первой загрузки CyanogenMod предложит зарегистрировать или подключить аккаунт CM, а также включить отправку анонимной статистики. От выполнения этих процедур, естественно, следует отказаться. Далее приступаем к первичной настройке прошивки. Идем в настройки и отмечаем следующие пункты:
- Беспроводные сети → Еще → NFC → Отключить.
- Безопасность → Блокировка экрана → PIN-код.
- Безопасность → Неизвестные источники.
Ничего необычного, стандартные опции. Далее нам следует обезопасить себя от утечек данных из предустановленных приложений и софта, который будет установлен позже. В CyanogenMod для этого есть механизм Privacy Guard, который занимается обфускацией личных данных пользователя, подсовывая вместо них рандомные данные: случайно сгенерированное имя юзера вместо реального, случайные координаты и прочее. Чтобы его активировать, идем в «Настройки → Конфиденциальность → Защищенный режим» и включаем опцию «Защищенный режим по умолчанию». Теперь он будет активироваться для всех устанавливаемых приложений.
Чтобы активировать Privacy Guard для стоковых приложений, нажимаем кнопку настроек сверху (три точки), отмечаем опцию «Системные приложения» и выбираем все приложения, кроме Trebuchet (это рабочий стол). По умолчанию Privacy Guard настроен таким образом, чтобы спрашивать юзера каждый раз, когда приложение пытается получить доступ к личным данным (это видно на скриншоте). Разрешать это действие стоит только в том случае, если такие данные ему реально нужны (например, телефон пытается прочитать адресную книгу).
Последний шаг — включение шифрования памяти смартфона. Это действие не относится к утечкам данных в Сеть, но оно поможет в случае кражи смартфона. Чтобы это сделать, запускаем терминал и набираем две команды:
$ su
vdc cryptfs enablecrypto inplace ПАРОЛЬ
Смартфон уйдет в перезагрузку и зашифрует данные приложений. После этого при каждом включении смартфона придется вводить пароль для их расшифровки. Ту же операцию, кстати, можно сделать и через настройки, но в этом случае пароль расшифровки будет совпадать с ненадежным четырехзначным PIN-кодом экрана блокировки.
Хакер #187. Обходим Blizzard Warden
CyanogenMod и SELinux
Еще одно преимущество CyanogenMod перед стоковой прошивкой — это SELinux, активированный по умолчанию. SELinux представляет собой систему принудительного контроля доступа к функциональности ядра ОС, которая работает ниже Android и не распространяется на стандартные пользовательские приложения. Это своего рода аналог Privacy Guard для различных низкоуровневых сервисов.
SELinux строго ограничивает возможности таких сервисов, не позволяя им совершить действия, для которых они не предназначены. Другими словами, если вирус вызовет переполнение буфера в adbd, rild или любом другом нативном сервисе, чтобы повысить свои права в системе, SELinux пресечет такую попытку. Второй важный плюс SELinux — блокировка бэкдоров, которые могут быть вшиты в проприетарные библиотеки и сервисы, не имеющие открытых аналогов (практически любая сборка CyanogenMod включает в себя проприетарные компоненты от производителя смартфона или мобильного чипа).
F-Droid, Tor и брандмауэр
Следующий шаг — установка F-Droid, Tor и настройка брандмауэра. Первый нам нужен по причине отсутствия Google Play, а также любой его замены, которой мы могли бы доверять. В отличие от них, F-Droid содержит только открытый софт, что фактически дает гарантию безопасности софта. Приложений в репозитории F-Droid немногим больше 1100, но среди них есть практически все, что нужно, включая браузеры, твиттер‑клиенты, рабочие столы, виджеты погоды и даже Telegram.
Tor (в Android он носит имя Orbot), в свою очередь, позволит нам оставаться анонимными при использовании Сети. Брандмауэр позволит заблокировать входящие соединения и перенаправить трафик всех установленных приложений в Orbot.
Сначала устанавливаем F-Droid. Для этого достаточно открыть сайт f-droid.org со смартфона и скачать последнюю версию клиента. Запускаем его, находим приложение Orbot и устанавливаем. Далее переходим на страницу DroidWall со смартфона, скачиваем APK-пакет и устанавливаем. Теперь нам нужно создать набор правил iptables для DroidWall (по умолчанию он умеет только включать/отключать доступ приложений к Сети). Можно было бы сделать это вручную, но ребята из проекта Tor уже все сделали за нас. Достаточно только скачать ZIP-архив, распаковать, подключить смартфон с помощью USB-кабеля и запустить инсталляционный скрипт:
$ ./install-firewall.sh
Работает скрипт только в Linux и требует, чтобы на компе был установлен Android SDK, а на смартфоне активирован режим отладки («Настройки → О телефоне → Семь тапов по пункту Номер сборки», далее «Настройки → Для разработчиков → Отладка по USB»). Делает скрипт следующее:
- Добавляет инициализационный скрипт, который блокирует все входящие и исходящие подключения во время загрузки системы (во избежание утечек).
- Устанавливает скрипт для DroidWall, позволяющий перенаправить все подключения в Tor (с применением нескольких воркараундов для известных багов Tor).
- Блокирует все подключения извне.
- Устанавливает три опциональных скрипта, открывающих доступ к Сети в обход Tor для стандартного браузера, ADB и LinPhone. Первый может понадобиться, если есть необходимость войти в captive portal в открытых Wi-Fi-сетях, второй — для возможности удаленной отладки, третий нужен приложению LinPhone, реализующему SIP-клиент с зашифрованным каналом связи.
Когда скрипты будут установлены, запускаем DroidWall, переходим в «Меню → Еще → Установить сценарий» и вводим в первом открывшемся поле строку «. /data/local/firewall-torify-all.sh», нажимаем кнопку «ОК». Возвращаемся на главный экран и отмечаем галочками приложения, которые должны получить доступ к Сети (Orbot можно не отмечать, он и так получит доступ благодаря скрипту). Вновь открываем меню и выбираем пункт «Брандмауэр отключен», чтобы активировать файрвол.
Теперь запускаем Orbot и следуем инструкциям, но ни в коем случае не включаем поддержку root; чтобы прописанные в скрипте правила работали правильно, Orbot должен работать в пространстве пользователя в режиме прокси. В конце нажимаем на кнопку в центре экрана, чтобы включить Tor. В статусной строке появится иконка Tor, а это значит, что теперь все данные пойдут через него.
Почему не использовать root-режим Orbot
Orbot поддерживает работу в режиме root, что позволяет ему прозрачно проксировать через себя любые Android-приложения. Может показаться, что такой вариант предпочтительнее, чем связка DroidWall и скриптов, но это не так. Во‑первых, работая в режиме root, Orbot будет конфликтовать с DroidWall, а последний нам необходим для возможности ограничения приложений в доступе к Сети.
Во‑вторых, Orbot имеет свойство сбрасывать настройки прозрачного проксирования при переключении между сетями (Wi-Fi — Wi-Fi или Wi-Fi — 3G), из‑за чего может произойти утечка данных. Брандмауэр Linux (который используется в скрипте) такой проблемы не имеет. Ну и последнее: можно не беспокоиться, что Orbot упадет или будет скомпрометирован.
Что мы не учли
Описанная выше конфигурация позволяет исключить практически все «традиционные» утечки данных. После включения смартфон будет отрезан от Сети ровно до того момента, пока не произойдет автозапуск DroidWall и Orbot. DroidWall, в свою очередь, отрежет от Сети любые приложения, которые мы не отметили галочками, а остальные завернет в Tor.
На смартфоне нет ни одного приложения Google или скрытого в прошивке бэкдора, который смог бы отправить конфиденциальные данные на удаленные серверы. Если такое приложение и будет установлено в систему, оно попадет под действие системы Privacy Guard, которая исключит любые утечки даже в том случае, когда в стандартной ситуации они бы имели место. Если каким‑то образом в системе заведется малварь, она будет ограничена сразу по трем фронтам: SELinux отрежет возможность скрытого получения root, Privacy Guard не позволит слить конфиденциальные данные, DroidWall не позволит получить доступ к Сети до тех пор, пока ты сам этого не захочешь.
Остается открытым только один вопрос: как быть с бэкдорами в проприетарных компонентах и GSM-сетями. К сожалению, полностью защититься от этой угрозы пока нельзя: даже несмотря на наличие SELinux, бэкдор, зашитый в firmware, вполне может добыть доступ к данным в обход Android, получая команды от злоумышленника/ФСБ посредством GSM-команд. Впрочем, трафик, проходящий по сотовым сетям, таки будет защищен.
Вместо заключения
Был такой фильм, «Джонни‑мнемоник», рассказывающий о людях с имплантатами, которые могли переносить важные данные. За ними охотились не то что спецслужбы, а просто все, каждый хотел тот кусочек информации, который хранился в имплантате мнемоника. Их убивали, рвали на части и разрезали лесками только для того, чтобы добыть секретные данные. Сказка. Абсурд. Но почему‑то такой знакомый.
В общем, береги себя и свои личные данные. Сегодня это становится все сложнее.