Содержание статьи
«Защищенный смартфон от разработчиков анонимизирующего ПО» — звучит странно, не правда ли? Но не спеши с выводами. В отличие от того же BlackBerry Priv, «Tor-смартфон» основан на открытом ПО от нескольких компаний и независимых разработчиков, сам смартфон — это Nexus 6P. Его даже не собираются продавать, а вместо этого поставляют специальную прошивку.
Прошивка, естественно, основана на Android, но не на том Android, который ты привык видеть в своем смартфоне, а на его модификации под названием CopperheadOS. Ее создали security-специалисты из канадской компании Copperhead. Больше они, в общем-то, ничем не известны, но, судя по тем функциям, которые уже внедрены в прошивку, эти ребята явно знают, что делают.
CopperheadOS
Главная особенность CopperheadOS — существенно расширенные средства предотвращения взлома. Прошивка включает в себя модернизированную реализацию аллокатора памяти (malloc) из OpenBSD (подробнее о нем можно прочитать здесь), который рандомизирует выделяемые приложению страницы и заполняет мусором возвращаемые страницы памяти. Это делает атаки класса use-after-free более сложными в реализации. OpenBSD malloc также размещает метки в конце выделяемых областей памяти, которые проверяются при ее освобождении. Это позволяет бороться с атаками типа heap overflow.
При сборке CopperheadOS используются средства компилятора для предотвращения срыва стека. В частности, механизмы _FORTIFY_SOURCE
в GCC (Android < 7.0), -fsanitize=bounds
, -fsanitize=object-size
в Clang (Android 7.0), механизм -fsanitize=integer
для защиты от целочисленного переполнения (integer overflow). Эти средства использует Google в AOSP, но разработчики CopperheadOS расширили их применение для гораздо большего количества функций стандартной библиотеки языка си (и, что немаловажно, закоммитили в апстрим).
Для защиты от модификации кода CopperheadOS использует механизм доверенной загрузки, впервые появившийся в Android 4.4, и, кроме того, не полагается на заблаговременно оптимизированный код приложений из каталога /data/dalvik-cache. Последний нужен для быстрого запуска приложений и генерируется во время первой загрузки смартфона (сообщение «Оптимизация приложений...»). Однако он же может быть использован для внедрения в систему зловредного кода: нет смысла подменять само приложение в разделе /system — механизм доверенной загрузки откажется загружать смартфон после модификации системного раздела, а вот оптимизированный код в /data/dalvik/cache ни у кого подозрений не вызовет.
Ядро CopperheadOS собрано с патчем PaX, включающим в себя несколько механизмов предотвращения атак:
PAX_RANDMMAP
— более продвинутая, в сравнении с применяемой в стандартном ядре Android, реализация механизма рандомизации адресного пространства (ASLR), затрудняющая атаки, направленные на переполнение буфера и хипа;PAX_PAGEEXEC
— механизм защиты страниц данных от исполнения, который убивает приложение, как только оно попытается исполнить код в области данных (в ядре Android есть такой механизм, но он действует более мягко);PAX_MPROTECT
— препятствует модификации кода приложения во время исполнения;PAX_MEMORY_SANITIZE
— обнуляет страницу памяти при ее освобождении (только для пространства ядра);PAX_REFCOUNT
— система автоматического освобождения неиспользуемых объектов в памяти, позволяет предотвратить атаки типа use-after-free (только для пространства ядра);PAX_USERCOPY
— защита от переполнения буфера путем сверки размера объекта (только для пространства ядра);PAX_KERNEXEC
— защита страниц памяти от исполнения (только для пространства ядра).
В CopperheadOS более строгие правила SELinux — системы разграничения прав доступа к файлам, системным вызовам и железу. К примеру, здесь нельзя выполнить код из временных каталогов (подключенных с помощью псевдоФС tmpfs), нельзя получить доступ к важной системной информации и информации о других процессах с помощью чтения файлов каталога /proc.
CopperheadOS включает в себя множество других ограничений. По умолчанию стандартное приложение камеры не указывает в метаданных снимка местоположение съемки, а экран не показывает уведомления, которые могут раскрыть конфиденциальную информацию (Android и iOS разрешают показ таких уведомлений, с возможностью отключения). Работающие в фоне приложения не могут получить доступ к буферу обмена (что ломает работоспособность нескольких полезных приложений из маркета). MAC-адрес всех сетевых интерфейсов по умолчанию рандомизируется. Компонент WebView, отвечающий за отрисовку веб-страниц в сторонних приложениях (и многих браузерах), использует функцию isolatedProcess, позволяющую запереть каждый инстанс WebView в собственную песочницу.
Сам Chromium, на котором базируется WebView, включает в себя ряд ограничений и настроек, направленных на защиту от утечек данных: отключены коррекция ошибок в адресной строке, предзагрузка страниц, контекстный поиск, метрики и аудит гиперссылок. В качестве поисковой системы используется не отслеживающий пользователя DuckDuckGo.
Плюшки от Tor
CopperheadOS — лишь базовая часть прошивки. Поверх него работают еще несколько компонентов: Orbot, orWall, F-Droid, My App List и Google Play, включенный в базовую поставку не столько по причине доступа к магазину приложений (его функции здесь выполняет F-Droid), сколько по причине Signal. Последний использует сервисы Google для получения push-уведомлений.
Два главных компонента здесь — это, конечно же, Orbot и orWall. Первый — сборка Tor для Android, способная работать либо как локальный SOCKS-прокси, перенаправляющий трафик в Tor, либо в режиме root, когда весь трафик заворачивается в Tor брандмауэром iptables, что позволяет избежать любых утечек.
Однако по умолчанию прошивка не использует ни тот, ни другой метод, а полагается на orWall, своего рода обертку для брандмауэра, которая позволяет заворачивать трафик в Orbot выборочно, для каждого отдельно взятого приложения. С его помощью можно тонко контролировать, кто будет ходить в сеть через Tor, кто напрямую, а кому доступ в интернет будет запрещен вовсе.
OrWall полностью блокирует любые интернет-соединения до тех пор, пока прошивка не будет полностью загружена. Это позволяет избежать любых утечек данных в том случае, если ты намерен выходить в интернет исключительно через Tor или полностью заблокировать доступ в интернет не вызывающему доверия софту.
My App List — еще одно интересное приложение в комплекте прошивки. Изначально создано как удобный способ сохранить список установленных через магазин F-Droid приложений, но разработчики Tor задействовали ее для быстрой установки рекомендуемых приложений: они заранее подготовили список софта, который может пригодиться среднестатистическому юзеру, и загрузили его в My App List.
В списке есть:
- менеджер файлов Amaze;
- XMPP-клиенты Сonversations и Xabber;
- книгочиталка Cool Reader;
- VoIP-клиенты CSipSimple и Linphone;
- браузер Firefox;
- почтовый клиент K-9 Mail;
- Twitter-клиент Twidere;
- онлайн-карты OsmAnd~ (OpenStreetMap);
- медиапроигрыватель VLC.
Установка
В данный момент прошивка доступна для Nexus 5X и Nexus 6P, однако ее установка существенно отличается от установки того же CyanogenMod или любого другого кастома. На самом деле это просто набор скриптов для Linux, который выкачивает последнюю версию CopperheadOS с официального сайта, скачивает дополнительное ПО, интегрирует его в прошивку, подписывает ее и устанавливает на устройство с помощью утилиты fastboot.
По этой причине для установки прошивки тебе понадобятся:
- дистрибутив Linux;
- установленные fastboot и ADB;
- Java JDK;
- утилиты Git, cpio, GCC, g++;
- OpenSSL.
В Ubuntu все это можно установить так:
$ sudo apt-get install android-tools-adb android-tools-fastboot
$ sudo apt-get install openjdk-7-jdk
$ sudo apt-get install build-essential git
$ sudo apt-get install libssl-dev
Далее активируем отладку по USB на смартфоне: Settings -> About Phone, пять тапов по Build Number, далее: Settings -> Developer Options -> Allow USB Debugging, а также Enable OEM unlock.
Подключаем смартфон по USB и выполняем следующую команду:
$ sudo adb devices
В ответ смартфон должен вывести диалоговое окно с вопросом о доверии ПК, с ним следует согласиться.
Осталось только скачать скрипты и запустить процесс прошивки:
$ git clone https://github.com/mikeperry-tor/mission-improbable/
$ cd mission-improbable
$ ./run_all.sh
Скрипт проведет тебя через все этапы установки. Естественно, данные с устройства будут стерты.
Вместо выводов
Прошивка от разработчиков Tor, безусловно, интересный проект. Используя ее правильно, можно получить практически не отслеживаемый через интернет смартфон. Однако стоит иметь в виду, что устройство останется не защищенным от отслеживания с помощью мобильных сетей и side channel атак, например возможности перехватить пароли с помощью анализа изменений в сигнале Wi-Fi.