Мир знает множество попыток создать защищенный смартфон. Это и Blackphone с функцией шифрования всех коммуникаций, и сомнительный BlackBerry Priv, и даже GATCA Elite, создатели которого вообще не стали ничего придумывать и выдали за эксклюзивные стандартные возможности Android. Совсем недавно о создании рабочего прототипа защищенного смартфона объявили разработчики Tor, а мимо такой новости точно нельзя проходить.

«Защищенный смартфон от разработчиков анонимизирующего ПО» — звучит странно, не правда ли? Но не спеши с выводами. В отличие от того же 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, что позволяет избежать любых утечек.

Orbot
Orbot

Однако по умолчанию прошивка не использует ни тот, ни другой метод, а полагается на orWall, своего рода обертку для брандмауэра, которая позволяет заворачивать трафик в Orbot выборочно, для каждого отдельно взятого приложения. С его помощью можно тонко контролировать, кто будет ходить в сеть через Tor, кто напрямую, а кому доступ в интернет будет запрещен вовсе.

OrWall полностью блокирует любые интернет-соединения до тех пор, пока прошивка не будет полностью загружена. Это позволяет избежать любых утечек данных в том случае, если ты намерен выходить в интернет исключительно через Tor или полностью заблокировать доступ в интернет не вызывающему доверия софту.

OrWall: выбор проксируемых через 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.
Магазин свободного софта F-Droid
Магазин свободного софта F-Droid
 

Установка

В данный момент прошивка доступна для 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.

Евгений Зобнин

Евгений Зобнин

Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.

Check Also

У малвари GravityRAT появились версии для Android и macOS

Шпионский вредонос GravityRAT, который используется для проведения целевых атак как миниму…

6 комментариев

  1. Аватар

    friam

    22.02.2017 в 08:22

    жаль что только на Нексус ставится…..

  2. Аватар

    Jlenin

    24.03.2017 в 04:12

    эм.. А можно подробнее описать установку ?
    т.е. В Ubuntu все это можно установить так — как вы устанавливали Убунту саму в Nexus

  3. Аватар

    Jlenin

    30.03.2017 в 08:15

  4. Аватар

    beck

    26.02.2020 в 12:41

    OpenBSD? Безопасность? Спасибо, но нет.

Оставить мнение