Android mobile system apps

Как работает Android, часть 1

В этой серии статей я расскажу о внутреннем устройстве Android — о процессе загрузки, о содержимом файловой системы, о Binder и Android Runtime, о том, из чего состоят, как устанавливаются, запускаются, работают и взаимодействуют между собой приложения, об Android Framework, и о том, как в Android обеспечивается безопасность.

Немного фактов

Android — самая популярная операционная система и платформа для приложений, насчитывающая больше двух миллиардов активных пользователей. На ней работают совершенно разные устройства, от «интернета вещей» и умных часов до телевизоров, ноутбуков и автомобилей, но чаще всего Android используют на смартфонах и планшетах.

Android — свободный и открытый проект. Большинство исходного кода (который можно найти на https://source.android.com) распространяется под свободной лицензией Apache 2.0.

Компания Android Inc. была основана в 2003 году и в 2005 году куплена Google. Публичная бета Android вышла в 2007 году, а первая стабильная версия — в 2008, с тех пор мажорные релизы выходят примерно раз в год. Последняя на момент написания стабильная версия Android — 7.1.2 Nougat.

Android is Linux

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

Среди исходной команды разработчиков Android был Robert Love, один из самых известных разработчиков ядра Linux, да и сейчас компания Google остаётся одним из самых активных контрибьюторов в ядро, поэтому неудивительно, что Android построен на основе Linux.

Как и в других Linux-системах, ядро Linux обеспечивает такие низкоуровневые вещи, как управление памятью, защиту данных, поддержку мультипроцессности и многопоточности. Но — за несколькими исключениями — вы не найдёте в Android других привычных компонентов GNU/Linux-систем: здесь нет ничего от проекта GNU, не используется X.Org, ни даже systemd. Все эти компоненты заменены аналогами, более приспособленными для использования в условиях ограниченной памяти, низкой скорости процессора и минимального потребления энергии — таким образом, Android больше похож на встраиваемую (embedded) Linux-систему, чем на GNU/Linux.

Другая причина того, что в Android не используется софт от GNU — известная политика «no GPL in userspace»:

We are sometimes asked why Apache Software License 2.0 is the preferred license for Android. For userspace (that is, non-kernel) software, we do in fact prefer ASL 2.0 (and similar licenses like BSD, MIT, etc.) over other licenses such as LGPL.

Android is about freedom and choice. The purpose of Android is promote openness in the mobile world, and we don’t believe it’s possible to predict or dictate all the uses to which people will want to put our software. So, while we encourage everyone to make devices that are open and modifiable, we don’t believe it is our place to force them to do so. Using LGPL libraries would often force them to do just that.

Само ядро Linux в Android тоже немного модифицировано: было добавлено несколько небольших компонентов, в том числе ashmem (anonymous shared memory), Binder driver (часть большого и важного фреймворка Binder, о котором я расскажу ниже), wakelocks (управление спящим режимом) и low memory killer. Исходно они представляли собой патчи к ядру, но их код был довольно быстро добавлен назад в upstream-ядро. Тем не менее, вы не найдёте их в «обычном линуксе»: большинство других дистрибутивов отключают эти компоненты при сборке.

В качестве libc (стандартной библиотеки языка C) в Android используется не GNU C library (glibc), а собственная минималистичная реализация под названием bionic, оптимизированная для встраиваемых (embedded) систем — она значительно быстрее, меньше и менее требовательна к памяти, чем glibc, которая обросла множеством слоёв совместимости.

В Android есть оболочка командной строки (shell) и множество стандартных для Unix-подобных систем команд/программ. Во встраиваемых системах для этого обычно используется пакет Busybox, реализующий функциональность многих команд в одном исполняемом файле; в Android используется его аналог под названием Toybox. Как и в «обычных» дистрибутивах Linux (и в отличие от встраиваемых систем), основным способом взаимодействия с системой является графический интерфейс, а не командная строка. Тем не менее, «добраться» до командной строки очень просто — достаточно запустить приложение-эмулятор терминала. По умолчанию он обычно не установлен, но его легко, например, скачать из Play Store (Terminal Emulator for Android, Material Terminal, Termux). Во многих «продвинутых» дистрибутивах Android — таких, как LineageOS (бывший CyanogenMod) — эмулятор терминала предустановлен.

Второй вариант — подключиться к Android-устройству с компьютера через Android Debug Bridge (adb). Это очень похоже на подключение через SSH:

Из других знакомых компонентов в Android используются библиотека FreeType (для отображения текста), графические API OpenGL ES, EGL и Vulkan, а также легковесная СУБД SQLite.

Кроме того, раньше для реализации WebView использовался браузерный движок WebKit, но начиная с версии 7.0 вместо этого используется установленное приложение Chrome (или другое; список приложений, которым разрешено выступать в качестве WebView provider, конфигурируется на этапе компиляции системы). Внутри себя Chrome тоже использует основанный на WebKit движок Blink, но в отличие от системной библиотеки, Chrome обновляется через Play Store — таким образом, все приложения, использующие WebView, автоматически получают последние улучшения и исправления уязвимостей.

It’s all about apps

Как легко заметить, использование Android принципиально отличается от использования «обычного Linux» — вам не нужно открывать и закрывать приложения, вы просто переключаетесь между ними, как будто все приложения запущены всегда. Действительно, одна из уникальных особенностей Android — в том, что приложения не контролируют напрямую процесс, в котором они запущены. Давайте поговорим об этом подробнее.

Основная единица в Unix-подобных системах — процесс. И низкоуровневые системные сервисы, и отдельные команды в shell’е, и графические приложения — это процессы. В большинстве случаев процесс представляет собой чёрный ящик для остальной системы — другие компоненты системы не знают и не заботятся о его состоянии. Процесс начинает выполняться с вызова функции main() (на самом деле _start ), и дальше реализует какую-то свою логику, взаимодействуя с остальной системой через системные вызовы и простейшее межпроцессное общение (IPC).

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

У приложений Android нет функции main() , нет одной точки входа. Вообще, Android максимально абстрагирует понятие приложение запущено как от пользователя, так и от разработчика. Конечно, процесс приложения нужно запускать и останавливать, но Android делает это автоматически (подробнее я расскажу об этом в следующих статьях). Разработчику предлагается реализовать несколько отдельных компонентов, каждый из которых обладает своим собственным жизненным циклом.

In Android, however, we explicitly decided we were not going to have a main() function, because we needed to give the platform more control over how an app runs. In particular, we wanted to build a system where the user never needed to think about starting and stopping apps, but rather the system took care of this for them… so the system had to have some more information about what is going on inside of each app, and be able to launch apps in various well-defined ways whenever it is needed even if it currently isn’t running.

Для реализации такой системы нужно, чтобы приложения имели возможность общатся друг с другом и с системными сервисами — другими словами, нужен очень продвинутый и быстрый механизм IPC.

Этот механизм — Binder.

Binder

Binder — это платформа для быстрого, удобного и объектно-ориентированного межпроцессного взаимодействия.

Разработка Binder началась в Be Inc. (для BeOS), затем он был портирован на Linux и открыт. Основной разработчик Binder, Dianne Hackborn, была и остаётся одним из основных разработчиков Android. За время разработки Android Binder был полностью переписан.

Binder работает не поверх System V IPC (которое даже не поддерживается в bionic), а использует свой небольшой модуль ядра, взаимодействие с которым из userspace происходит через системные вызовы (в основном ioctl ) на «виртуальном устройстве» /dev/binder . Со стороны userspace низкоуровневая работа с Binder, в том числе взаимодействие с /dev/binder и marshalling/unmarshalling данных, реализована в библиотеке libbinder.

Низкоуровневые части Binder оперируют в терминах объектов, которые могут пересылаться между процессами. При этом используется подсчёт ссылок (reference-counting) для автоматического освобождения неиспользуемых общих ресурсов и уведомление о завершении удалённого процесса (link-to-death) для освобождения ресурсов внутри процесса.

Высокоуровневые части Binder работают в терминах интерфейсов, сервисов и прокси-объектов. Описание интерфейса, предоставляемого программой другим программам, записывается на специальном языке AIDL (Android Interface Definition Language), внешне очень похожем на объявление интерфейсов в Java. По этому описанию автоматически генерируется настоящий Java-интерфейс, который потом может использоваться и клиентами, и самим сервисом. Кроме того, по .aidl -файлу автоматически генерируются два специальных класса: Proxy (для использования со стороны клиента) и Stub (со стороны сервиса), реализующие этот интерфейс.

Для Java-кода в процессе-клиенте прокси-объект выглядит как обычный Java-объект, который реализует наш интерфейс, и этот код может просто вызывать его методы. При этом сгенерированная реализация прокси-объекта автоматически сериализует переданные аргументы, общается с процессом-сервисом через libbinder, десериализует переданный назад результат вызова и возвращает его из Java-метода.

Читайте также:  Андроид resident evil 4 с кэшем

Stub работает наоборот: он принимает входящие вызовы через libbinder, десериализует аргументы, вызывает абстрактную реализацию метода, сериализует возвращаемое значение и передаёт его процессу-клиенту. Соответственно, для реализации сервиса программисту достаточно реализовать абстрактные методы в унаследованном от Stub классе.

Такая реализация Binder на уровне Java позволяет большинству кода использовать прокси-объект, вообще не задумываясь о том, что его функциональность реализована в другом процессе. Для обеспечения полной прозрачности Binder поддерживает вложенные и рекурсивные межпроцессные вызовы. Более того, использование Binder со стороны клиента выглядит совершенно одинаково, независимо от того, расположена ли реализация используемого сервиса в том же или в отдельном процессе.

Для того, чтобы разные процессы могли «найти» сервисы друг друга, в Android есть специальный сервис ServiceManager, который хранит, регистрирует и выдаёт токены всех остальных сервисов.

Binder широко используется в Android для реализации системных сервисов (например, пакетного менеджера и буфера обмена), но детали этого скрыты от разработчика приложений высокоуровневыми классами в Android Framework, такими как Activity, Intent и Context. Приложения могут также использовать Binder для предоставления друг другу собственных сервисов — например, приложение Google Play Services вообще не имеет собственного графического интерфейса для пользователя, но предоставляет разработчикам других приложений возможность пользоваться сервисами Google Play.

Подробнее про Binder можно узнать по этим ссылкам:

В следующей статье я расскажу о некоторых идеях, на которых построены высокоуровневые части Android, о нескольких его предшественниках и о базовых механизмах обеспечения безопасности.

Источник

Обзор свободного ПО для Android

Не так давно у меня появилось желание написать целую серию статей о безопасности, приватности и анонимности в интернете. Я не хочу тратить время читателей, в очередной раз описывая весьма плачевную ситуацию со сбором персональных данных, все это и так уже было сделано до меня, поэтому давайте сразу перейдём к делу.

И так, можно ли пользоваться мобильным устройством без серьёзного ущерба для приватности?

Ответ — да, можно, но для этого необходимо избавиться от ПО и сервисов, бесконтрольно собирающих данные. Для этого понадобится желание что-то изменить и любое устройство на которое можно установить кастомную систему Android (iOS по понятным причинам не рассматривается, а из альтернатив только SailfishOS и GNU/Linux, но эти системы можно установить на очень ограниченное число моделей). Всех кто заинтересовался я приглашаю под кат.

AOSP и LineageOS

Система Android (AOSP ) сама по себе является открытой по лицензии Apache 2.0, но большинство смартфонов и планшетов поступают в продажу с закрытыми Google Play Services, и удалить без рута их нельзя (кроме как на Android One). Также нередко производители устанавливают собственное проприетарное ПО сомнительного качества и функционала. Стоит понимать, что любое приложение, получившие разрешения (а при сборке прошивки можно дать приложению любые разрешения), может собрать огромные массивы информации, поэтому более адекватной альтернативой (для человека, заботящегося о своей приватности) являются сборки основанные на AOSP (Omnirom, NitrogenOS и т.д.) или LineageOS (CrDroid, XenonHD и др.). Код подобных систем обычно полностью открыт (если не считать бинарные блобы, необходимые для компиляции) и поддерживается сообществом.

DotOS 3.0 *скриншоты кликабельны

LineageOS это форк и продолжатель идей старого-доброго CyanogenMod. LineageOS так же как и циан предлагает уникальные фичи, отсутствующие в AOSP:

  • Custom Button Placement – позволяет переназначать сенсорные кнопки, а также вывести на дисплей дополнительные кнопки.
  • System Profiles – даёт возможность активировать различные профили как вручную, так и по программируемому триггеру.
  • Expanded Desktop – позволяет открывать в полноэкранном режиме приложения не поддерживающие ”immersive mode”.
  • LiveDisplay — меняет температуру цвета дисплея в зависимости от времени суток.
  • Trust – интерфейс позволяющий просмотреть настройки приватности и безопасности системы, а также узнать как исправить возможные проблемы (с версии 15.1).
  • Protected Apps – скрывает приложения из лаунчера, можно создать специальные безопасные папки для быстрого доступа, на которые можно поставить графический пароль.
  • PIN scramble – перемешивает расположение цифр на экране ввода пин-кода, что затрудняет возможность подглядеть код или попытки вычислить цифры кода по отпечаткам пальцев на экране.
  • Custom pattern sizes – добавляет возможность использовать поля 4×4, 5×5 и 6×6 для графического пароля.
  • Styles – светлый и тёмный стиль для системы, может работать автоматически в зависимости от обоев или времени суток.
  • Call recorder – записывает аудиозвонки (может быть недоступно в некоторых странах).

Основное отличие официальных сборок от неофициальных в том, что их компилируют из подписанных исходников, но не всегда всё так просто, к примеру в проекте LineageOS только собранные на специальном build-сервере ROM’ы подписываются секретным ключём и получают статус «official» (помимо этого у Lineage ещё есть календарь релизов и вполне полноценная поддержка). У некоторых других проектов все немного проще и можно собрать официальный билд на собственном ПК.

О F-Droid

Каталог F-Droid содержит только свободное и открытое ПО (FLOSS ), все приложения собираются и публикуются командой F-Droid. Если в каталоге нет вашего любимого открытого приложения, то вы можете отправить предложение сюда, или самостоятельно написать метадату, но учтите, что при сборке используются только open-source компоненты и библиотеки.

Клиент F-Droid

Каталог приложений с возможностью подключать сторонние репозитории (или свой собственный). Есть также альтернативные клиенты — m-Droid и G-Droid, но они пока что сыроваты для использования.

  • Автообновления с настраиваемой частотой
  • Возможность выбора соединения (Wi-Fi или mobile data) для закачки
  • Привилегированное приложение для автоматической установки/обновления приложений без рута (для установки нужно прошить архив через TWRP)
  • Приложения с анти-фичами легко заметить

Минусы:

  • Списки приложений обновляются не очень быстро, не всегда подгружаются значки приложений и скриншоты (в m-Droid эта проблема была решена, там загружается не .XML-файл, а JSON сжатый в .gzip)
  • Нет рейтингов приложений

Безопасность в F-Droid

  • Сборка приложения происходит на изолированной виртуальной машине, которая по окончанию процесса удаляется. Метадата подписывается на отдельной виртуальной машине, подпись состоит из хеша приложения (SHA-256) и ключа (подпись поддерживает временные метки и expiry).
  • Публичный ключ для проверки сигнатуры встроен в клиент F-Droid.
  • Вся связь между клиентом и сервером происходит по https, но возможно также переключиться на Tor (через Orbot).

Тем не менее команда F-Droid не может гарантировать вам 100% безопасность, поэтому рекомендуется проверять разрешения и обращать внимание на новости о взломах.

Приложения

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

1. Т.к. в каталоге F-Droid более 2,5 тысяч приложений, то подробно рассматривать я буду только более-менее неизвестные программы с интересным функционалом, но при этом из категории необходимых пользователю большую часть времени. Все остальные (общеизвестные, или те в которых нет каких-то интересных фишек, или с какими-то критическими, на мой взгляд, недостатками), я буду упоминать с небольшими комментариями.

2. Я буду присваивать приложениям от 1-ой до 3-х звёздочек за удобство использования, это моё субъективное мнение, так что на него можно не обращать внимания.

3. У некоторых приложений нет/неполная/кривая русификация, поэтому я решила не плодить визуальный хаос, и сделать скриншоты на английском (возможно это была неудачная мысль, но я надеюсь, что вы мне это простите).

Yalp и Aurora

Я понимаю, что полный отказ от несвободного ПО невозможен для многих людей. Но, по крайней мере, от Google Play Services на смартфоне вполне можно избавиться не потеряв доступ к магазину Google Play. Приложения Yalp и Aurora позволяют скачивать .apk напрямую c серверов Google, технически оба приложения весьма схожи т. к. Aurora это форк Yalp’a, использующий material design, по стабильности и функционалу особой разницы нет:

  • Можно использовать анонимный аккаунт (в обоих приложениях периодически отваливается)
  • Возможность скачивать только дельту обновлений
  • Списки трекеров в приложениях, предоставленные проектом Exodus Privacy
  • Отметки о зависимости от Google Service Framework (то что приложение зависит от GSF не означает, что оно не будет работать без, но может не работать какой-то функционал)

Есть и некоторые различия:

  • У Aurora есть привилегированное расширение, но нельзя использовать Tor (Orbot) в качестве прокси
  • В Yalp спартанский дизайн и меньшее потребление ресурсов

Yalp Store
Исходники: GitHub
Лицензия: GPLv2
Скачать в F-Droid Рейтинг:
Aurora Store
Исходники: GitLab
Лицензия: GPLv2
Скачать в F-Droid Рейтинг:

Браузеры

Первое, что бросается в глаза это отсутствие знакомых брендов типа Mozilla Firefox или Chromium, но на самом деле не все так плохо, по крайней мере браузер Firefox в каталоге присутствует, хоть и под другим именем, а вот сборка мобильного хромиума, судя по всему, все ещё зависит от Google Play Services, поэтому в каталоге есть только даунлоадеры, которые скачивают .apk со стороннего ресурса. Эта же проблема относится и к браузерам сделанным на основе Chromium, так что в F-Droid представлены в основном надстройки для AndroidSystemWebView и браузеры на движке Gecko.

IceCatMobile

GNU IceCat — форк браузера Firefox ESR (Extended Support Release), изначально ответвился от GNU IceWeasel, но в отличие от дебиановского проекта, сосредоточенного на ребрендинге, в IceCat вносились и изменения кода. Мобильную версию поддерживает отдельная команда, которая вернулась к лицензии MPL 2.0. Из новинок, внесённых сообществом выделяется кот с огромным хвостищем на логотипе следующее:

  • Отсутствие систем DRM: Encrypted Media Extensions и гугловский Widevine Content Decryption были удалены
  • Сторонние куки не принимаются по умолчанию
  • WebRTC сконфигурировано с флагом media.peerconnection.ice.default_address_only = true, что фиксит утечку LAN IP при использовании прокси и VPN
  • Телеметрия удалена
  • Включён Fingerprinting countermeasures затрудняющий детект по отпечатку браузера
  • Аддоны Tor Button, HTTPS Everywhere, Hidden HTML (показывает скрытый HTML код), GNU LibreJS, Searxes Third-party Request Blocker

Касательно GNU LibreJS (блокирует все не open-source скрипты) и Searxes Third-party Request Blocker (блокировка сторонних ресурсов), я советую их удалить т. к. пользоваться ими неудобно — так для того, чтобы добавить сайт в белый список LibreJS нужно либо копировать адрес сайта, либо вводить вручную (разрешены будут все скрипты сразу), а в аддоне TPRB невозможно добавить домен второго уровня целиком к примеру в виде *.wikipedia.org. Вместо этих дополнений можно поставить uBlock Origin, uMatrix или NoScript на выбор. Hidden HTML тоже стоит отключить, т. к. этот аддон будет мешать постоянными запросами. Кстати говоря, страница дополнений была переделана, теперь она ведёт сюда, там уже можно найти ссылку на список рекомендованных расширений, но некоторые ссылки (к примеру на NoScript) сломаны, поэтому я лично пользуюсь обычным сайтом аддонов Firefox.

  • Безопасный браузер на Gecko, основанный на актуальной версии Firefox ESR
  • Некоторые фичи повышающие уровень приватности браузера включены по умолчанию
  • Полноценные аддоны
Читайте также:  Android recovery run locale test

Минусы:

  • Предустановленными аддонами неудобно пользоваться
  • Запутанная страница дополнений
  • Оптимизация хуже чем в браузерах использующих Blink/WebKit
  • Дополнительные патчи безопасности, к примеру из Tor Project, включаются в проект от случая к случаю (это не недостаток, просто учитывайте, что если нужна повышенная безопасность используйте Tor Browser)

Исходники: GNU
Лицензия: MPL 2.0
Скачать в F-Droid Рейтинг:

DuckDuckGo Privacy Browser

Браузер от команды разработчиков поисковика DuckDuckGo, сервиса, который позиционируется как альтернатива уважающая приватность пользователей (при этом учтите, что код самого поисковика не открыт). Для рендеринга страниц использует AndroidSystemWebView.
Некоторые особенности браузера довольно интересны:

  • Система оценок приватности сайтов (рейтинг от A до D и F в адресной строке, где A лучшая оценка, а F худшая)
  • Расширение Privacy Protection блокирует рекламные сети и трекеры, а Increase Encryption Protection перенаправляет соединения через https
  • Fire Button – удаляет все пользовательские данные в 2 клика
  • Вкладки и хранилище очищаются при закрытии (можно настроить)

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

  • Довольно простой и удобный браузер
  • Блокировка рекламы и трекеров

Минусы:

  • Мало настроек
  • Реклама блокируется не полностью, возможности подключить списки нет
  • Нет истории

Privacy Browser

Надстройка над AndroidSystemWebView с фокусом на приватность, правда одна особенность вызвала у меня вопросы: браузер передаёт user agent с параметром PrivacyBrowser/v1.0. Можно представить сколько людей пользуется браузером с таким агентом, а если учесть, что ОС можно легко вычислить по специфичному стеку TCP/IP, то подобное вообще теряет смысл (а ведь есть еще спуфинг по JavaScript, детекция тапов и т.д.), впрочем в настройках можно выставить другой агент. Из особенностей:

  • Дополнительные списки для блокировщика рекламы (EasyPrivacy, Fanboy’s annoyance list, UltraPrivacy)
  • Кнопка быстрого переключения JavaScript
  • Возможность заблокировать все запросы к сторонним ресурсам
  • Поддержка Orbot
  • Автоматическая очистка при закрытие приложения (можно настроить)

Плюсы:

  • Разнообразные настройки
  • Потенциально угрозы приватности (Dom Storage, сторонние куки и т. д.) отключены по умолчанию, но их можно легко включить

Минусы:

  • Некоторые настройки скорее снижают анонимность, чем повышают
  • Нет вкладок и истории

Исходники: stoutner.com
Лицензия: GPLv3
Скачать в F-Droid Рейтинг:

Bromite

Форк браузера Сhromium, изменения направлены на повышение приватности и блокировку рекламы. В Bromite были включены патчи из таких проектов как Iridium, Brave, Ungoogled Chromium и Inox patchset.
Особенности:

  • Блокировщик рекламы (EasyList, PrivacyList и т.д.)
  • Поддержка DNS-over-Https
  • Переключатель между постоянным режимом инкогнито/обычным режимом
  • Удалены компоненты Google
  • Защита от fingerprinting (canvas, audio, client rects, WebGL и sensor APIs)
  • Воспроизведение видео/аудио в фоне
  • Импорт/экспорт закладок

Чтобы скачать Bromite необходимо добавить репозиторий.

  • Хорошая оптимизация
  • Расширенный функционал
  • Дополнительные фичи безопасности и приватности
  • Легко перейти с Хрома

Минусы:

  • Есть закрытые компоненты (видеокодеки)

Ещё варианты (вне рейтинга)

Tor Browser – сборка предоставленная The Guardian Project (необходимо включить репозиторий в настройках). До недавнего времени Tor Project не занимался поддержкой Tor Browser под Android, а приложения позволявшие выйти в сеть Tor – Orfox и Orbot, разрабатывались командой проекта Guardian. В сентябре 2018 года участники проекта Tor объявили о выпуске альфа-версии для системы Android, правда собственного репозитория F-Droid у них до сих пор нет.

Fennec F-Droid – по-сути это FOSS -версия Firefox. Мне так и не удалось найти полный список проприетарных компонентов используемых в актуальных версиях мобильного Firefox, поэтому сложно сказать, что было вырезано помимо трекеров аналитики (AdJust и LeanPlam) и DRM. К примеру в вики написано, что был удален модуль Health Report (телеметрия), но в текущей версии он есть и работает после запуска. Но в любом случае никаких несвободных зависимостей в Fennec нет (иначе его бы не смогли собрать).

FOSS Browser – ещё одна надстройка, в принципе неплохое приложение, но на некоторых прошивках передаёт модель смартфона в агенте (WebView 66-версии, но во многих надстройках это было исправлено). Присутствует блокировщик рекламы, а адресная строка была перенесена вниз.

Firefox Klar – он же Firefox Focus (разница в том, что телеметрия в Klar отключена по умолчанию), приватный браузер разработанный Mozilla, использует GeckoView, есть блокировка трекеров.

Интересное в Play Store:

Brave Browser – основан на хромиум, имеется встроенный блокировщик рекламы с локальными списками, HTTPS Everywhere и защита от снятия фингерпринта.

Команда Brave придумала довольно интересный способ монетизации контента: любой пользователь Brave может внести пожертвование, которое затем будет переведено в криптовалюту и распределено между посещаемыми сайтами или блогами зарегистрированными в программе Brave Reward, но в мобильной версии эта фича пока недоступна.

Waterfox – форк XUL-версий (до 57-ой) браузера Firefox, телеметрия и несвободные компоненты удалены.

Мессенджеры

Само собой в каталоге F-Droid вы не найдёте популярные приложения WhatsApp, Viber или Skype, зато там есть клиент Telegram. Но учтите, что в мессенджерах из F-Ddroid не работают push-нотификации, т. к. в Android они завязаны на проприетарный сервис Google’s Firebase Cloud Messaging.

Pix-Art Messenger

Pix-Art это форк Сonversations, мобильного клиента использующего протокол XMPP для связи. В F-Droid есть также Conversations Legacy, сохранивший функционал версий 1.23+ (OTR и кастомные имена для идентификации клиента, но без новинок из версий 2+). Pix-Art Messenger опирается на ветку 2+, но при этом есть интегрированный OTR, а также ежедневные бэкапы, список серверов для регистрации и переработанное меню.
Особенности приложения:

  • End-to-end шифрование OTR, Omemo и PGP (через OpenKeychain)
  • Синхронизация с десктопными клиентами
  • Интеграция с контактами (разрешение можно не давать)
  • Аватарки, передача картинок, файлов, видео, аудио и местоположения (в Conversations Legacy последние 2 реализованы с помощью плагинов)
  • Конференции (или группы)
  • Можно настроить удаление сообщений (через 1 день, неделю, месяц или полгода)
  • Проверка hostname сервера через DNSSEC
  • Поддержка соединения через Tor (Orbot)

Во всех версиях/форках Conversations есть возможность оставить активную службу после закрытия клиента, что по идее не должно дать системе закрыть соединение клиента с сервером, но во многих кастомных сборках настроены жёсткие политики энергосбережения, так что Conversations необходимо добавить в исключения (таким образом реализована замена push-нотификаций).

  • Удобный интeрфейс
  • End-to-end шифрование
  • Поддержка стандартов XEP (исправление сообщений, проверка доставки и т. д.)
  • Дополнительные инструменты для обеспечения безопасности и приватности
  • Богатые возможности кастомизации

Минусы:

  • Новичкам может быть непонятно как регистрироваться, делать бэкапы и т. д. (в Pix-Art это реализовано немного проще)

Rocket.Сhat

Корпоративный мессенджер с возможностью использовать собственный сервер (FOSS версия поддерживает до 1000 пользователей). Если вас чем-то не устраивает XMPP (к примеру отсутствие единообразного клиента на всех платформах или 2FA ), то Rocket.Chat не такой уж и плохой выбор:

  • Поддержка комнат и приватных групп
  • Публичные каналы
  • Аватарки и прочие эмодзи (главное, что их можно отключить)
  • Удаление и редактирование сообщений
  • Загрузка и передача файлов
  • Двухфакторная аутентификация (поддержка LDAP и Active Directory)

Приложение не очень подойдёт простым пользователям, всё-таки оно ориентировано на команды с профессиональным админом.

  • Интеграция с десктопными клиентами (если вас не смущает React Native на ПК, Android-версия написана на Kotlin)
  • Установить и настроить сервер довольно легко
  • Довольно удобные чаты

Минусы:

Исходники: GitHub
Лицензия: MIT
Скачать в F-Droid Рейтинг:

Riot.im

Командный мессенджер, аналог Slack’a, использует протокол Matrix. Есть сервера поддерживаемые сообществом. Программные сервера в протоколе Matrix делятся на два типа HomeServer (хранит всю переписку и данные аккаунтов) и Identify Server (маппинг email к Matrix User ID, этот сервер используется только если вы привязали почту к аккаунту или прислали инвайт другому пользователю по email). Существуют различные реализации серверов: Synapse (HomeServer на Python/Twisted), Dendrite (HomeServer на Go), Sydent (Identify Server) и mxisd (Identify Server с упором на приватность). Клиент Riot написан на React Native, так что если у вас аллергия на JavaScript лучше воздержаться от употребления. Особенности Riot.im:

  • E2E шифрование Olm
  • Аудио/Видео звонки
  • Синхронизация истории и нотификаций с другими клиентами и браузерной версией
  • Комнаты (Rooms)
  • Пермалинки на сообщения
  • Поиск по истории чатов
  • Передача файлов (можно расшарить на комнату)

Плюсы:

  • Хорошая масштабируемость (подойдет как для дружеской переписки 1 на 1, так и для тысяч человек в сотнях комнат)
  • Приятный дизайн, чатами довольно удобно пользоваться.
  • Так же как и у Pix-Art есть активная служба в уведомлениях, так что соединение не обрывается
  • Не требует телефона или почты для регистрации (но их можно добавить)

Минусы:

  • Зависит от несвободного Identify-сервера Vector.im, причём можно очистить поле ввода Identify Server, но всё равно будет использоваться Vector.im, а вот если поднять свой сервер mxisd, то всё работает нормально (но не работает с Sydent, такие дела).

Ещё варианты (вне рейтинга)

Telegram – весьма популярный мессенджер, приложение в F-Droid обновляется с задержкой т. к. это по сути форк с вырезанными компонентами. Telegram использует закрытые сервера, на которых хранится история переписки из «несекретных чатов», аккаунт привязывается к номеру мобильного телефона, да и вообще у проекта какая-то странная политика приватности (и я так понимаю, что из-за отсутствия Push, список серверов не сможет обновляться автоматически).

Jami – сиречь VoIP-софтфон Ring, поддерживает сторонние сервисы SIP и IAX и шифрование TLS и ZRTP. Открыт по лицензии GPLv3.

Читайте также:  Life is strange android улучшение графики

TRIfA – использует протокол Tox, есть аудио/видео звонки, правда пользоваться ими невозможно (может если поднять Tox-ноду, то ситуация изменится), пока что связь обрывается, и клиент периодически падает. Сообщения тоже иногда не доходят.

Интересное в Play Store:

Signal – также как и в Telegram аккаунт привязывается к номеру телефона, для связи используется Signal Protocol, а вся переписка хранится на пользовательских устройствах.

Интересный факт: ранее существовала свободная реализация LibreSignal (с удалёнными компонентами Google), но moxie0 был против использования серверов и названия Signal. Я не понимаю чем могли помешать 3,5 анонимуса, использующие LibreSignal, поэтому не буду высказывать своё мнение об этой ситуации.

Wire – ещё один мессенджер использующий Signal Protocol, поддерживает email для регистрации, а также групповые звонки до 10 человек, приложение открыто по лицензии GPLv3 (использует Google Firebase Analytics, Mixpanel, и HockeyApp).

Карты

Пожалуй главным недостатком open-source карт является отсутствие кроссплатформенных приложений, и интеграции этих приложений с онлайн-сервисами. К примеру, есть онлайн-карты на сайте www.openstreetmap.org, но вы не сможете перенести запланированный маршрут из браузера на ПК в свой смартфон (по крайней мере мне не удалось, при попытке экспортировать карту в .osm файл все маршруты пропадают). С другой стороны, если вас не волнует проблема синхронизации, то все не так уж и плохо. Стоит заметить, что навигация не будет работать без установленного UnifiedNLP или GmsCore из сервисов microG.

Оффлайн-карты. Форк приложения Maps.Me, принадлежащего сами знаете какой российской компании на «М». В оригинальном приложении, по данным проекта Exodus, работает 15 различных трекеров аналитики и есть реклама, но в Maps и то и другое было удалено. Несмотря на кажущуюся простоту, в приложении довольно много полезных функций:

  • Прокладка пути (на машине, пешком, транспорте и велосипеде)
  • Закладки
  • Значки различных объектов (достопримечательности с ссылкой на Википедию, отели с сcылкой на Booking, рестораны с часами работы и телефоном, парковки и остановки транспорта, а также больницы, магазины и аптеки)
  • Возможность вносить изменения в проект OSM
  • Есть функция поиска ближайших ресторанов и достопримечательностей
  • В целом карты довольно подробные, хоть и уступают OsmAnd
  • Хорошая оптимизация
  • При приближение к какой-нибудь области появляется предложение скачать карту
  • Небольшой вес карт

Минусы:

  • Описания объектов не очень подробные
  • Мало настроек, нет альтернативных карт

Исходники: GitLab
Лицензия: Apache 2.0
Скачать в F-Droid Рейтинг:

OsmAnd

Очень детально и качественно проработанное приложение, есть как подробные оффлайн-карты основанные на OpenStreetMaps так и онлайн-карты для навигации. OsmAnd предлагает большое количество интересных фичей:

  • Оффлайн навигация (с голосовым помощником, автоповоротами и построением маршрута в реальном времени)
  • Кастомные карты, к примеру карты топологий или Ski maps, на которых обозначаются подъёмники, спуски и лыжные маршруты
  • Также как и в Maps, есть объекты и возможность контрибьютить напрямую в проект OpenStreetMap
  • Аудио и видео заметки
  • Travel guides – плагин использующий оффлайн базы Wikivoyage (проект созданный Wikimedia для путешественников), можно вывести интересные точки на карту или просто почитать о городе в котором вы находитесь
  • Mapillary – обзорные фотографии
  • Транспортные и дорожные карты

Приложение открыто по лицензии GPLv3, но не все предлагаемые сервисы являются свободными.

  • Большое количество настроек и плагинов
  • Весьма разнообразный функционал
  • Объекты с подробным описанием (время работы, ссылки, фотографии и т. д.)
  • Можно отключить отображение ненужных объектов
  • Подробные карты дорог, вплоть до состояния покрытия

Минусы:

  • Работает медленнее чем Maps, карты занимают больший объем

Исходники: GitHub
Лицензия: GPLv3
Скачать в F-Droid Рейтинг:

Ещё варианты (вне рейтинга)

Open Map – онлайн-карты, правда в отличие от предыдущих неинтерактивная, и c обычными картинками в формате .jpeg, вместо векторного рендеринга.

PocketMaps – ещё одно приложение использующее OpenStreetMaps, но вот с размером карт разработчики явно перестарались, к примеру карта Японии весит 3,1 гб. Также как и в Open Map, сама карта неинтерактивная.

UnifiedNlp** — провайдер геолокации из пакета microG (интегрирован в GmsCore). Предоставляет 7 различных бэкэндов для геолокации. UnifiedNlp легко устанавливается на большинство современных Rom’ов, но на некоторых сборках придётся скопировать .apk в /system/priv-apps вручную.

Безопасность и анонимность

В каталоге F-Droid есть множество приложений помогающих защитить свои данные: от программ для шифрования до клиентов анонимных сетей, но не все ПО доступно по умолчанию. Так репозиторий The Guardian Project (проект направленный на создание лёгких в использовании безопасных приложений и открытых библиотек) по умолчанию отключён в настройках.

EDS Lite

Аналог программы VeraCrypt, позволяет создавать зашифрованные контейнеры с файловой системой Fat или exFat. Особенности приложения:

  • Контейнеры совместимые с TrueCrypt, Veracrypt, LUKS или EncFS на выбор
  • Шифрование AES-256, TwoFish и Serpent (но в отличие от VeraCrypt не поддерживается комбинированное шифрование)
  • Для контейнера LUKS также есть поддержка шифрования ГОСТ Р 34.10-2012
  • Поддерживает режим шифрования XTS (TrueCrypt, Veracrypt, LUKS)
  • Алгоритмы хеша SHA-512, RIPEMD-160 и Whirlpool
  • Не поддерживает key-файлы

В Play Store также есть платная версия этого приложения с расширенным функционалом сходным с VeraCrypt и LUKS, но EDS Full содержит проприетарные компоненты.

  • Надёжные алгоритмы шифрования
  • Совместимость с программами на ПК

Минусы:

  • Некоторые функции безопасности вырезаны из open-source версии
  • Интерфейс не очень интуитивно понятен

Исходники: GitHub
Лицензия: GPLv2
Скачать в F-Droid Рейтинг:

KeePass DX

Java-форк KeePass. Эксперты по компьютерной безопасности рекомендуют использовать разные пароли для каждого сервиса, понятно, что запомнить большое количество сложных паролей невозможно, да это и не нужно, проще использовать менеджер с рандомной генерацией пароля и шифрованием базы, так придётся запомнить всего один мастер-пароль (стандарт NIST рекомендует длинные парольные фразы вида ”SmokeontheWatertheFireintheSky”, которые легко запомнить и сложно подобрать), и то какой файл используется в качестве ключа.
Особенности KeePass DX:

  • Поддержка баз .kdb и .kdbx с шифрованием AES-256, TwoFish, ChaCha20 и Argon2
  • Совместимость с KeePass, KeePassX и KeePassXC
  • Быстрое копирование пароля и открытие URL
  • Возможность открыть базу с помощью отпечатка пальца (удобно, но не очень безопасно)
  • Автозаполнение полей и MagicKeyboard (позволяет быстро заполнять поля)

Разработчики KeePass DX не хотят усложнять код приложения добавлением облачной синхронизации (правда подумывают форкнуть какой-нибудь файл менеджер для упрощения доступа к удаленным ресурсам), вместо этого рекомендуется воспользоваться клиентом любого облачного сервиса (к примеру NextCloud со свободными клиентом/сервером), базу можно поместить в директорию с настроенной синхронизацией.

  • Сильные алгоритмы шифрования базы паролей
  • Множество настроек и приятный интерфейс
  • Настраиваемый генератор паролей (вплоть до 64 символов, поддержка специальных символов, ASCII и т. д.)
  • Есть несколько вариантов автоматизации заполнения форм
  • Полная совместимость с программами на ПК

Минусы:

  • Надоедливые подсказки (можно отключить в настройках)

Исходники: GitHub
Лицензия: GPLv3
Скачать в F-Droid Рейтинг:

andOTP

Помнится когда-то давно, во времена 4-го Android, я пользовалась приложением Google Authentificator для генерации OTP-кодов используемых в двухфакторной аутентификации. Однажды на мой смартфон прилетело обновление до 5-ой версии и угадайте что? Естественно все слетело к… Но это не важно, потому что в приложении andOTP есть возможность сделать бэкап (как тебе такое Илон Маск Google?) сохраняемый в JSON файл. Помимо этого есть и много других функций:

  • Возможность сделать зашифрованный backup
  • Дополнительные функции безопасности
  • Возможность тонкой настройки

Минусы:

  • Нет возможности выбрать облачный сервис для синхронизации

Исходники: GitHub
Лицензия: MIT
Скачать в F-Droid Рейтинг:

WireGuard

Конечно OpenVPN и IPSec по прежнему соответствуют стандартам безопасности, но надо понимать, что разрабатывались они для корпоративного использования, а не анонимизации действий в интернете. Поэтому при неправильной настройке клиента/сервера возможны различные утечки (DNS, локального IP, IPv6-адреса и т. д.) и другие проблемы приватности. WireGuard же создавался как простой в настройке и использовании VPN, с основным упором на производительность и безопасность. Особенности:

  • Использует алгоритм Curve25519 для обмена ключами, СhaCha20 и Poly1305 для имитозащиты и Blake2s для хеширования
  • Поддерживает IPv4 и IPv6
  • Кодовая база 4000 строк (против 400000 у OpenVPN и 600000 у IPSec), что облегчает поиск багов и поддержку кода
  • Может работать нативно в ядре Linux

Представители University of London провели аудит безопасности протокола WireGuard.

  • Быстрые современные алгоритмы шифрования
  • Относительно легко установить и настроить сервер
  • Высокая производительность

Минусы:

  • Есть определённый порог вхождения для настройки собственного сервера, да и маловероятно, что этот протокол быстро появится у провайдеров VPN

Ещё варианты (вне рейтинга):

Orbot – приложение использующие системное прокси для перенаправления трафика через сеть Tor.

PixelKnot – позволяет зашифровать сообщение в картинке с помощью алгоритма стеганографии F5.

I2P – клиент анонимной распределенной сети I2P, открытый по лицензии Apache 2.0.

OpenKeychain – реализация стандарта шифрования OpenPGP для системы Android открытая по лицензии GPLv3. Интегрирован во многие упомянутые в этой статье приложения (andOTP, Conversations, K-9 Mail и т.д.)

Ripple — тревожная кнопка (panic trigger), можно использовать в некоторых упомянутых выше приложениях. Исходники.

AFWall+** — фаерволл, надстройка над iptables. Позволяет создавать различные профили, экспортировать/импортировать списки, работает с VPN. Необходим рут.

Интересное в Play Store:

KeePass2Android – ещё одна реализация KeePass под Android, есть синхронизация с облачными сервисами.

Полезные приложения из F-Droid

NextCloud – клиент свободного и открытого по GPLv2 облака, есть возможность использовать собственный сервер или подключиться к стороннему провайдеру (есть бесплатные планы, предоставляющие от 2-х до 10-ти гб).
Особенности:

  • Сервер поддерживает шифрование AES
  • Можно делиться файлами
  • Синхронизация папок и фaйлов

Подведем итоги

По понятным причинам я не в состоянии охватить всё, или даже хоть сколько-нибудь значимую часть всего того, что можно назвать «мобильным open-source». Но всё же могу сказать, что за последние 2-3 года ситуация с открытым ПО под Android стала гораздо лучше, появилось много нового, а некоторые старые проекты значительно выросли в плане качества и функционала. На мой взгляд ребята проделали просто колоссальную работу, причем не требуя ничего взамен. Да есть проблемы и многое приходится настраивать вручную, но разве приватность не стоит небольших неудобств?

* — локализация неполная или отсутствует
** — добавлено по предложениям из комментариев

Источник

Оцените статью