Ответы на самые часто задаваемые вопросы.
Полный список требований к устройствам для их поддержки в GrapheneOS можно найти на официальном сайте. Мы выделим лишь некоторые моменты:
По иронии судьбы только устройства от Google официально предоставляют пользователю право устанавливать операционную систему по своему желанию, а именно возможность штатной разблокировки загрузчика и использования всех аппаратных функций безопасности в альтернативной ОС. В смартфонах Google Pixel используются защищенные чипы (secure element) Titan M или Titan M2 (в новых моделях).
Кроме того, устройства Pixel являются эталонными Android-смартфонами, используемыми для разработки. Аппаратное обеспечение, прошивка и программное обеспечение, специфическое для устройств, например драйверы, играют огромную роль в общей безопасности устройства. Ни один другой производитель устройств на данный момент не соответствует и не превосходит качество аппаратного и программного обеспечения/прошивок, предлагаемых Google.
В GrapheneOS используется расширенная версия современной реализации шифрования диска на основе файловой системы из проекта AOSP. Официально поддерживаемые устройства имеют существенную аппаратную поддержку для повышения безопасности реализации шифрования. GrapheneOS полностью поддерживает аппаратные средства шифрования, как и другие аппаратные средства безопасности.
Полное шифрование диска реализуется с помощью шифрования на основе файловой системы с шифрованием метаданных. Все данные, имена файлов и другие метаданные всегда хранятся в зашифрованном виде. Это часто называют шифрованием на основе файлов, но более логично называть его шифрованием на основе файловой системы. Оно реализовано в ядре Linux как часть реализации ext4 / f2fs, а не как слой шифрования на основе блоков. Преимущество шифрования на основе файловой системы заключается в возможности использовать индивидуальные ключи, а не один глобальный ключ, который всегда находится в памяти после загрузки устройства.
Ключи шифрования диска генерируются случайным образом с помощью высококачественного CSPRNG и хранятся в зашифрованном виде вместе с основным ключом шифрования. Ключи шифрования генерируются во время выполнения программы и нигде не хранятся.
Чувствительные данные хранятся в профилях пользователей. У каждого профиля пользователя есть свой уникальный, случайно сгенерированный ключ шифрования диска. Профиль владельца является особым и используется для хранения конфиденциальных общесистемных данных операционной системы. Именно поэтому после перезагрузки необходимо войти в профиль владельца, прежде чем можно будет использовать другие профили пользователей. Профиль владельца не имеет доступа к данным в других профилях. Шифрование на основе файловой системы разработано таким образом, что файлы можно удалять, не имея ключей для их данных и имен файлов, что позволяет профилю владельца удалять другие профили.
В GrapheneOS реализована поддержка завершения сеансов вторичных профилей пользователей после входа в них. Добавлена кнопка завершения сеанса на экран блокировки и в глобальное меню действий, доступ к которому можно получить, удерживая кнопку питания. Это полностью удаляет ключи шифрования и возвращает профили в состояние покоя. Для профиля владельца это невозможно сделать без перезагрузки, поскольку в нем зашифрованы важные общесистемные данные операционной системы.
Данные файлов шифруются с помощью AES-256-XTS, а имена файлов - с помощью AES-256-CTS. Уникальный ключ создается с помощью HKDF-SHA512 для каждого обычного файла, каталога и символической ссылки из ключей шифрования для каждого профиля или глобального ключа шифрования для нечувствительных данных, хранящихся вне профилей. Ключ каталога используется для шифрования имен файлов. GrapheneOS увеличивает размер шифрования имен файлов с 16 до 32 байт. AES-256-XTS с глобальным ключом шифрования также используется для шифрования метаданных файловой системы в целом, помимо более тонкого шифрования имен файлов.
ОС извлекает токен пароля из учетных данных метода блокировки профиля с помощью scrypt. Он используется как основной вход для получения ключа.
ОС хранит на защищенном элементе (Titan M) случайное значение с высокой энтропией в качестве токена Weaver и использует его как еще один вход для получения ключа. Токен Weaver хранится вместе с ключом Weaver, полученным ОС из токена пароля. Чтобы получить токен Weaver, защищенному элементу требуется правильный ключ Weaver. Для реализации аппаратных задержек при каждой попытке получения ключа используется защищенный внутренний таймер. Он быстро увеличивается до 1 дня задержки перед следующей попыткой. Weaver также обеспечивает надежное стирание данных, поскольку защищенный элемент может надежно стереть слот Weaver. Удаление профиля приведет к стиранию соответствующего слота Weaver, а сброс устройства на заводские настройки - к стиранию всех слотов Weaver. Защищенный элемент также обеспечивает защиту от атак инсайдеров, предотвращая обновление прошивки до аутентификации с помощью профиля владельца.
Стандартные задержки для получения ключа шифрования, обеспечиваемые защищенным элементом:
GrapheneOS официально поддерживает только устройства с Weaver.
Многие приложения также используют аппаратное хранилище ключей в собственных реализациях для обеспечения дополнительного уровня шифрования.
Начиная с Android 10, только выбранная вами клавиатура и приложение, на котором в данный момент находится фокус, могут читать содержимое буфера обмена. Приложения без фокуса не могут читать буфер обмена.
Записывать данные в буфер обмена могут как фоновые, так и активные приложения.
Ранее GrapheneOS ограничивала доступ к буферу обмена в фоновом режиме, что было чуть менее строгой реализацией этой функции. В ней был предусмотрен переключатель, позволяющий пользователям вносить менеджеры буфера обмена в белый список, который теперь не нужен, поскольку клавиатуры должны предоставлять такую возможность.
Начиная с Android 12, пользователь получает уведомление, когда приложение считывает содержимое буфера обмена, заданное другим приложением. Это уведомление включено по умолчанию и может быть отключено в разделе “Настройки” ➔ Конфиденциальность ➔ Уведомления о доступе к буферу обмена.
Начиная с Android 10, приложения не могут получить разрешение на доступ к несбрасываемым аппаратным идентификаторам, таким как серийный номер, MAC-адреса, IMEI/MEID, серийные номера SIM-карт и идентификаторы абонентов. Только привилегированные приложения, включенные в базовую систему с белым списком READ_PRIVILEGED_PHONE_STATE, могут получить доступ к этим аппаратным идентификаторам. Приложения, ориентированные на Android 10, получат SecurityException, а более старые приложения получат пустое значение для совместимости.
С тех пор как эти ограничения стали стандартными, GrapheneOS вносит лишь небольшое изменение, чтобы удалить устаревшую форму доступа к серийному номеру для старых приложений, которая все еще существовала для совместимости. Раньше требовались более масштабные изменения, такие как запрет доступа к серийному номеру, но теперь эти ограничения стали стандартными.
Приложения могут определять модель устройства (например, Pixel 5) напрямую или косвенно через свойства аппаратного и программного обеспечения. Избежать этого невозможно, если только ОС не поддерживает запуск приложений в виртуальной машине с ограниченной функциональностью и аппаратным ускорением. Скрытие модели CPU/SoC потребовало бы отказа от использования даже базовой поддержки аппаратной виртуализации, и эти вещи, вероятно, все равно можно было бы обнаружить с помощью измерений производительности.
Помимо того, что у приложений нет возможности идентифицировать аппаратное обеспечение, они не могут напрямую определить установленную ОС на аппаратное обеспечение. Приложениям доступна лишь небольшая часть конфигурации ОС, и владельцы устройств не могут изменить многое, что могло бы идентифицировать их установку. Приложения могут определить, что они запущены на GrapheneOS, с помощью функций конфиденциальности и безопасности, накладывающих на них дополнительные ограничения и защищающих их от дальнейшей эксплуатации. Приложения могут идентифицировать свою собственную установку через данные приложения и могут напрямую (пока это не будет устранено) или косвенно идентифицировать профиль. Профили следует использовать, когда требуется отдельная личность. Профили можно использовать в качестве временных эфемерных идентификаторов, создавая их для определенных нужд и затем удаляя. Используйте профили в качестве идентификаторов, не связанных друг с другом по своей природе.
GrapheneOS всегда рассматривает сети как враждебные и не доверяет им. В ней отсутствуют различные приложения для операторов, входящие в состав стоковой ОС, предоставляющие операторам различные уровни административного доступа, выходящие за рамки стандартной конфигурации оператора. GrapheneOS также избегает доверия к сотовой сети другими способами, включая обеспечение безопасного обновления времени вместо того, чтобы доверять это сотовой сети. Время очень чувствительно и может быть использовано для обхода проверок безопасности в зависимости от срока действия сертификата/ключа.
Сотовые сети используют изначально небезопасные протоколы и имеют множество доверенных сторон. Даже если перехват соединения или другая атака “человек посередине” в сети в данный момент не происходит, сеть все равно не заслуживает доверия, и информацию не следует отправлять в незашифрованном виде.
Аутентифицированное транспортное шифрование, такое как HTTPS для веб-сайтов, позволяет не доверять сотовой сети. Конечные зашифрованные протоколы, такие как протокол обмена сообщениями Signal, также позволяют не доверять серверам.
Следует избегать традиционных звонков и SMS, поскольку они небезопасны и доверяют оператору / сети, а также имеют слабую защиту от других сторон. Пытаться обнаружить некоторые формы перехвата, вместо того чтобы разобраться с корнем проблемы (незашифрованные коммуникации / передача данных), было бы глупо и обречено на провал.
GrapheneOS не добавляет ухищрений без надлежащей модели угроз и обоснования. Мы не будем включать несовершенную эвристику, чтобы угадать, когда следует доверять сотовой сети. Подобные функции создают ложное ощущение безопасности и поощряют необоснованное доверие к сотовым протоколам и сетям операторов по умолчанию. Они также вызывают ложные срабатывания, вызывающие ненужное беспокойство и панику. Правильный подход заключается в том, чтобы не доверять сети, как объяснялось выше.
Подключение к сети вашего оператора по своей сути зависит от того, идентифицируете ли вы себя для него и всех, кто может получить административный доступ. Активация авиарежима полностью отключает возможности передачи и приема сигнала сотовой связи, что предотвращает доступ к вашему телефону из сотовой сети и не позволяет вашему оператору (и любому, кто выдает себя за него) отслеживать устройство через сотовую сеть. Wi-Fi и GPS находятся в отдельных песочницах и не зависит друг от друга. Включение авиарежима отключает сотовую связь, но Wi-Fi можно снова включить и использовать без повторной активации сотовой сети. Это позволяет использовать устройство только с Wi-Fi.
Режим LTE-only, добавленный GrapheneOS, предназначен исключительно для уменьшения поверхности атаки. Его не следует воспринимать как способ превратить сотовую сеть в нечто, чему можно доверять.
Получение “тихих” SMS не является показателем того, что вы стали объектом преследования сотового оператора, полиции или правительства, поскольку их может отправлять любой пользователь сотовой сети, включая вас самих. Сотовая триангуляция будет происходить независимо от того, отправляются или принимаются SMS-сообщения на телефон. Отправка SMS или других данных не требуется и не особенно полезна для отслеживания подключенных к сети устройств противником, имеющим соответствующий доступ.
Режим полета - единственный способ избежать слежки сотовой сети за вашим устройством, и он корректно работает на устройствах, которые мы поддерживаем.
По умолчанию GrapheneOS выполняет только удаленные соединения со службами GrapheneOS и DNS, предоставляемыми сетью. В GrapheneOS нет никакой аналитики/телеметрии. Единственная информация, передаваемая серверам GrapheneOS, - это общая модель устройства (например, Pixel 5) и версия ОС, которые необходимы для получения обновлений. Соединения по умолчанию обеспечивают обновление ОС и приложений, устанавливают системные часы, проверяют каждое сетевое соединение на подключение к Интернету, загружают глобальную базу данных (не меняющуюся в зависимости от местоположения) с прогнозируемыми местоположениями спутников при использовании функции Location и получают ключи подписи цепочки аттестации для аппаратного хранилища ключей, необходимые для функции аттестации на основе аппаратного обеспечения.
VPN можно настроить в разделе “Настройки” ➔ Сеть и интернет ➔ VPN. Поддерживаются следующие протоколы: IKEv2/IPSec MSCHAPv2, IKEv2/IPSec PSK и IKEv2/IPSec RSA. Приложения также могут обеспечивать реализацию VPN в пользовательском пространстве, поэтому рекомендуется использовать следующие приложения с открытым исходным кодом: WireGuard, RethinkDNS (WireGuard с опциями локальной фильтрации), Orbot (Tor) и OpenVPN для Android.
Конфигурации VPN, созданные с помощью встроенной службы, можно установить в качестве постоянно включенного VPN. В этом случае VPN будет работать, переподключаясь по мере необходимости, и все соединения будут проходить через него. Приложение, предоставляющее услугу VPN, также можно установить в качестве постоянно включенного в меню настроек VPN. Для приложений, использующих VPN, есть дополнительный переключатель “Блокировать соединения без VPN”, который необходим для предотвращения утечек, когда VPN-сервис приложения не работает.
Если вы используете VPN, мы не рекомендуем настраивать частный DNS-сервер. Если вы хотите фильтровать трафик при использовании VPN, используйте приложение VPN-сервиса, способное делать и то, и другое, например RethinkDNS. Частный DNS также странно взаимодействует с несколькими профилями, поскольку каждый профиль имеет свою собственную конфигурацию VPN, а частный DNS - глобальную. Либо оставьте частный DNS в автоматическом режиме по умолчанию, либо отключите его при использовании VPN.
Да, GrapheneOS унаследовала глубоко интегрированный межсетевой экран от проекта AOSP, который используется для реализации части модели безопасности и различных других функций.
В GrapheneOS есть переключатель разрешения Network, который позволяет запретить прямой и косвенный доступ приложений к сети. Прямой доступ запрещается путем блокирования низкоуровневого доступа к сетевым сокетам. Кроме того, GrapheneOS делает вид, что сеть отключена для большинства API. Это означает, что приложения не будут пытаться получить доступ к интернету и разряжать батарею, потому что они будут относиться к этому так же, как и в случае, когда доступ к интернету действительно недоступен.
Рекомендуемый подход к общесистемной блокировке рекламы - это настройка блокировки рекламы на основе доменов в рамках DNS. Для этого можно выбрать частный DNS-сервер (DNS-over-TLS) с поддержкой блокировки рекламных доменов. В качестве примера можно привести AdGuard DNS, указав в качестве частного DNS-домена dns.adguard-dns.com через “Настройки” > Сеть и интернет > Частный DNS-сервер.
Приложения и веб-сайты могут обнаружить, что используется блокировка рекламы, и определить, что именно блокируется. Это может быть использовано для создания отпечатков пользователя. Использование такого широко распространенного сервиса, как AdGuard, со стандартным списком блокировки - гораздо меньшая проблема, чем создание собственного набора подписок/правил, но все же она выделяется по сравнению с тем, что по умолчанию не делается.
Поддерживаются ли приложения для блокировки рекламы?
Приложения для фильтрации контента полностью совместимы с GrapheneOS, но у них есть серьезные недостатки, поэтому не рекомендуется использовать приложения, выполняющие больше, чем фильтрация на основе DNS. Эти приложения используют функцию VPN-сервиса, чтобы направлять трафик через себя для выполнения фильтрации.
Подход к перехвату трафика по своей сути несовместим с шифрованием от клиента к серверу. Приложение AdGuard обходит шифрование, поддерживая выборочный перехват HTTPS, заставляя пользователя доверять локальному центру сертификации, что представляет собой риск для безопасности и ослабляет безопасность HTTPS, даже если их реализация безупречна (что они открыто признают в своей документации, хотя и преуменьшают риски).
RethinkDNS сочетает в себе локальную фильтрацию через DNS с возможностью прямого использования WireGuard VPN без другого приложения. В нем есть и другие функции, например мониторинг соединения. Это гораздо лучший подход, чем большинство приложений в этой области, которые заставляют выбирать между ними и VPN, рекомендуют сомнительный перехват TLS (AdGuard) и т.д.
Да, уведомления в GrapheneOS работают корректно. Портативные приложения, не имеющие жесткой зависимости своей функциональности от сервисов Google Play, имеют полностью работающие уведомления в GrapheneOS. Приложения, которые не полностью адаптированы для работы в разных версиях Android, часто не поддерживают фоновые уведомления, потому что их поддержка реализована только через сервисы Google Play.
Большинство приложений, способных работать без сервисов Google Play, будут иметь работающие уведомления, когда они находятся на переднем плане. К сожалению, во многих приложениях не реализована служба для продолжения получения событий от своего сервера в фоновом режиме. На стоковой ОС они полагаются на получение событий через серверы Google посредством Firebase Cloud Messaging (FCM) в фоновом режиме, а иногда и на переднем плане, хотя это не отличается хорошей надежностью/откликом.
Файлы можно перенести на другое устройство с помощью внешнего накопителя, передачи файлов через USB по протоколу MTP / PTP или с помощью приложения.
Чтобы использовать внешний накопитель, подключите его к телефону и используйте системный файловый менеджер для копирования файлов на него и с него. Единственное отличие в GrapheneOS - периферийные устройства USB, такие как флэш-накопители, будут игнорироваться, если они не подключены при загрузке или разблокировке устройства. Это можно настроить в разделе “Настройки” ➔ Безопасность ➔ USB-peripherals.
Передача файлов на подключенный компьютер осуществляется с помощью MTP / PTP. Пользователям компьютеров Mac потребуется установить Android File Transfer, чтобы иметь возможность передавать файлы между macOS и Android. После подключения телефона к компьютеру появится уведомление, показывающее текущий режим USB, по умолчанию - зарядка. Нажатие на уведомление служит ярлыком для перехода в “Настройки” > Подключенные устройства > USB. В этом меню можно включить передачу файлов (MTP) или PTP. Это обеспечит доступ на чтение/запись ко всей домашней директории профиля, то есть директории верхнего уровня с именем устройства в системном файловом менеджере, которая не включает данные внутренних приложений. Из-за необходимости доверять компьютеру грубый доступ, мы рекомендуем передавать файлы с помощью флешки или отправлять их себе через приложение для обмена сообщениями со сквозным шифрованием, например Element (Matrix).
Нет, поскольку это исключительно функция сдерживания кражи, а не функция безопасности, и стандартная реализация зависит от привязки устройства к учетной записи на каком-либо онлайн-сервисе, например система защиты от сброса настроек Google привязывает устройства к аккаунту Google.
В большинстве случаев у предустановленных приложений в ОС есть недостатки и мало преимуществ. Пользователям имеет смысл устанавливать любимые приложения от разработчиков самостоятельно из Play Store (через изолированный Google Play или Aurora Store), F-Droid, Amazon Appstore или других источников. Пользователи имеют уникальные потребности и предпочтения, и должна быть очень веская причина для того, чтобы поставлять дополнительные приложения в комплекте с ОС. Например, полезно иметь приложение Auditor перед подключением к Интернету (см. раздел “Первичная настройка и аттестация”).
Включение дополнительных приложений в состав ОС может увеличить площадь атаки, если только пользователи не отключат неиспользуемые приложения. Включение приложения в базовую ОС также болезненно, поскольку удаление приложения без применения механизма миграции приведет к потере пользовательских данных, хранящихся в приложении. Кроме того, некоторые пользователи будут возражать против выбора, сделанного проектом, или захотят внести предложения по включению большего количества приложений. Каждое приложение в комплекте также увеличивает размер базовой ОС, а доставка обновлений приложений вместе с обновлениями ОС требует увеличения общей пропускной способности Интернет-канала.
GrapheneOS нацелена на значительные улучшения в области конфиденциальности и безопасности, и включение в ОС различных приложений не только обычно не соответствует этой цели, но и часто противоречит ей.
Да, код GrapheneOS постоянно проверяется внешними исследователями безопасности, компаниями и организациями. Это главное преимущество GrapheneOS как проекта с открытым исходным кодом, активно используемого другими организациями. Мы много работаем над тем, чтобы наш код был хорошо документирован и легко просматривался. Аудит и анализ кода не могут быть выполнены однократно, они должны проводиться постоянно, по мере изменения кода. Большинство результатов рецензирования и аудита кода GrapheneOS можно увидеть из публичных запросов на исправление и трекеров ошибок. Например, французская организация ANSSI использует многие из наших наработок и дает нам предложения, а также сообщает о проблемах. Мы наладили отношения с исследователями безопасности и организациями, заинтересованными в GrapheneOS или ее использовании, что приводит к большому количеству подобных совместных работ. Это не разовое мероприятие, а происходит регулярно по мере развития кода, добавления функций и перехода на новый релиз. Преимущества группы, незнакомой с кодом, которая тратит короткое время на поверхностный обзор, сильно преувеличены в маркетинге. Вместо этого мы сосредоточились на том, чтобы люди, хорошо знакомые с областями кода, регулярно проверяли все наши изменения. Большое количество уязвимостей в системе безопасности Android, обнаруженных GrapheneOS, несмотря на то, что мы не занимались их активным поиском, говорит о результатах нашего анализа и тестирования.
Другие проекты ОС на базе AOSP, в том числе DivestOS и ProtonAOSP, использующие много нашего кода, получают дополнительную экспертизу за пределами нашего проекта. В результате такого сотрудничества было исправлено множество проблем совместимости приложений.
Наши собственные самостоятельные проекты, такие как Auditor и AttestationServer, также нацелены на то, чтобы код был очень прост для аудита/рецензирования. В этих проектах мы сами пишем весь код и выбираем зависимости, поэтому мы можем использовать минималистичный и простой для понимания подход к общей кодовой базе, а не только к нашим изменениям в ней.
GrapheneOS был основан как проект с открытым исходным кодом в 2014 году. Он неоднократно переименовывался и изначально не был известен как CopperheadOS. Существует новый продукт с закрытым исходным кодом, использующий наш старый бренд CopperheadOS и код, который не связан с оригинальным проектом.
Нет, GrapheneOS останется некоммерческим проектом/организацией с открытым исходным кодом. Он останется независимой организацией, не связанной с какой-либо конкретной компанией. Мы сотрудничаем с различными компаниями и другими организациями, и мы заинтересованы в большем количестве партнерств в будущем. Сохранение статуса некоммерческой организации позволяет избежать конфликта интересов, возникающего при использовании модели, основанной на получении прибыли. Это позволяет нам сосредоточиться на улучшении конфиденциальности/безопасности, не пытаясь построить жизнеспособную бизнес-модель, которая не противоречила бы успеху проекта с открытым исходным кодом.
Более подробный FAQ доступен на официальном сайте GrapheneOS в соответствующем разделе.