Skip to content

Безопасность ​

Что сделано ​

УгрозаЗащита
Приложения ищут локальный SOCKS/HTTP-прокси на 127.0.0.1 и узнают через него IP сервераТрафик идёт через встроенный TUN-вход ядра Xray (дескриптор передаётся прямо в ядро). Слушающих портов нет — проверено по /proc/net/tcp
API и метрики Xray (api, metrics) на локальном портуСекции вырезаются даже из JSON-конфигураций провайдера; правила для служебных входов удаляются, SOCKS/HTTP-входы провайдера заменяются на TUN
Подписка заблокирована и нужна загрузка через туннельОтдельный экземпляр ядра поднимает SOCKS только на время запроса, на случайном порту, со случайными логином и паролем
Утечки DNSDNS из туннеля перехватывается ядром: зарубежные ресурсы разрешаются через DoH по туннелю, российские — напрямую через Domestic DNS профиля
Утечки IPv6IPv6 всегда маршрутизируется в туннель (по умолчанию в DNS запрашиваются только IPv4-адреса)
Трафик уходит мимо VPN при сбоеKill switch: при ошибке интерфейс VPN не снимается, и трафик блокируется. Плюс поддержка системных «Постоянная VPN» и «Блокировать соединения без VPN»
Сигнатуры VPN-клиентовАдрес туннеля — случайная подсеть /30 в 10.0.0.0/8, а не «фирменные» 26.26.26.1 или 172.19.0.1. MTU по умолчанию 8500 — как у самых массовых клиентов, RVC среди них не выделяется; 1500 можно выбрать в настройках (дороже для батареи, см. Производительность)
Банковские приложения проверяют, идёт ли их трафик через VPNРаздельное туннелирование: исключённые приложения работают в обычной сети, их активная сеть — не VPN
Чтение данных с устройства или из резервной копииПодписки, ключи серверов, профили и выбранный сервер зашифрованы AES-256-GCM ключом из Android Keystore; резервное копирование отключено
Утечка адресов и доменов в журналыВ release-сборке ядро Xray не пишет журнал, вызовы Log вырезаются R8
Подмена DNS провайдером интернетаserver-address-resolve-*: адрес сервера разрешается через DoH до подключения
Вредоносные deep linksПодтверждение импорта и отключения; служебная Activity виджета и ярлыков не экспортирована
TapjackingКасания сквозь чужие оверлеи не принимаются
Опасные ссылки из подпискиОткрываются только https, http, tg, mailto
«Бомба» в логотипе провайдераОграничение размера файла и картинки, декодирование с уменьшением
Утечка списка серверов через внешние картинкиФлаги стран встроены в APK, логотип провайдера — единственная загружаемая картинка, и только по https
Перехват трафика подпискиTLS на rustls с корневыми сертификатами Mozilla; HWID не уходит на чужой домен при перенаправлении

Режим прокси

В режиме прокси RVC сознательно открывает порт: по умолчанию только на 127.0.0.1 и с паролем (логин rvc, случайный пароль из SecureRandom). Всё сказанное выше про отсутствие портов относится к режиму VPN.

Чего на стороне клиента скрыть нельзя ​

  • Приложения, которые идут через VPN, видят сеть с типом TRANSPORT_VPN — так устроен Android.
  • Список сетевых интерфейсов (с tun0) Android показывает всем приложениям, в том числе исключённым из туннеля. Исключение из туннеля убирает VPN из их активной сети, но не прячет сам факт, что VPN включён.
  • Журнал движка AmneziaWG (amneziawg-go) может содержать адреса серверов; читать его могут только системные процессы и adb.

Аудит проводился по OWASP MASVS (хранение, криптография, сеть, платформа и IPC, устойчивость).