В новой рубрике «Разбор Теплицы» мы в режиме реального времени разбираемся в определенной проблеме и рассказываем о новостях интернет-цензуры и рассказываем:
- что происходит;
- как это устроено;
- как с этим можно бороться.
В первом разборе изучаем требование минцифры РФ закрыть пользователям с VPN доступ к крупнейшим российским интернет-платформам. Министерство уже разослало ресурсам инструкции по ограничениям.
Цель публикации — дать рекомендации для разработчиков, как можно обойти «методичку Минцифры».
Источники
«Методичка Минцифры», канал Профсоюз работников IT.
Материал RKS Global с анализом 30 приложений и исходниками исследования.
По опубликованным исходникам исследования RKS Global видно, что Android‑часть методички уже реализована приложениями частично и фрагментарно. Судя по данным исследования — полностью всю Android‑методику (GeoIP + прямые + косвенные признаки по матрице решений) не реализует ни одно из 30 приложений, но значимая их часть использует отдельные части (особенно прямые признаки и отправку статуса VPN на сервер).
Короткие выводы сравнения данных исследования и методички
- Выявлено в рамках исследования RKS Global реализация (см. Методичку):
- TRANSPORT_VPN
- системный Proxy
- Tor/proxy‑детект
- проверка интерфейсов tun/tap/wg/ppp
- чтение /proc/net/tcp*
- отправка статуса VPN/Proxy на сервер
- Частично реализовано:
- характерные proxy‑порты
- локальные proxy / localhost‑признаки
- GeoIP‑этап (вероятно, приложения реализуют проверку на уровне сервера).
Разработчикам, для создания помех проверке по методичке важно бить именно по тем признакам, которые уже массово используются в Android‑приложениях: TRANSPORT_VPN, интерфейсы tun0/…, чтение /proc/net/tcp*, системный Proxy и отправка статуса на сервер. Ниже – рекомендации именно для разработчиков VPN/анонимайзеров (и других приложений обхода), чтобы усложнить проверку.
1. Уводить туннель с клиентского устройства
1.1. VPN на роутере / точке доступа
Поднимать VPN на домашнем/офисном роутере, чтобы на Android‑устройстве не было TRANSPORT_VPN, tun0, изменённых маршрутов и DNS.
- Примеры: Практически все крупные сервисы (Proton, Mullvad, IVPN, NordVPN и др.) публикуют официальные гайды для OpenWrt, AsusWRT и других роутеров (OpenVPN/WireGuard на роутере).
1.2. VPN / Proxy внутри VM или контейнера
Запускать обход внутри виртуальной машины / контейнера, а приложения снаружи, в «чистой» сети.
- Примеры: Многие провайдеры дают конфиги WireGuard/OpenVPN для установки в VM (WSL2, VirtualBox, VMware), а в сообществах OpenWrt/WSL2 описаны паттерны «VPN в отдельной VM, хост — без tunneling для некоторых приложений».
2. На Android: минимизировать системные признаки
2.1. Не поднимать системный VPN для всех приложений
Вместо глобального VpnService использовать либо in‑app proxy (прокси в самом приложении), либо split tunneling, чтобы чувствительные приложения не видели VPN.
- Примеры:
- Ряд «браузерных VPN» и прокси‑браузеров реализует обход только внутри своего приложения, вообще без системного профиля.
- Многие коммерческие VPN используют app‑based split tunneling (раздельное туннелирование на уровне отдельных приложений) — приложения, исключённые из туннеля, работают с обычной сетью и не видят TRANSPORT_VPN.
2.2. Split tunneling с исключением банков/гос‑приложений
Суть рекомендации: дать пользователю простой способ исключить конкретные приложения из туннеля, чтобы они не светили VPN‑флаги.
- Примеры:
- ProtonVPN, NordVPN и др. — при split tunneling есть режим «exclude apps» (исключения приложений), с примерами именно про банки/стриминги, которые не любят VPN.
- Tailscale позволяет реализовать split tunneling по приложениям.
3. Интерфейсы, маршруты, DNS
3.1. Имена интерфейсов
Избегать стандартных tun0, wg0, ppp0 и т.п., которые методичка предлагает использовать как косвенный признак.
- Примеры: Некоторый софт (особенно кастомные WireGuard‑обвязки и корпоративные решения) уже использует нестандартные имена интерфейсов; это видно в документации и некоторых конфигах.
3.2. Маршрутизация и MTU
Не выделяться по MTU и маршрутам — использовать значения, максимально схожие с обычными мобильными/домашними сетями, избегать лишних специальных маршрутов.
- Примеры: У ряда провайдеров есть статьи «почему у нас MTU такой‑то, и как его менять», где обсуждаются проблемы с фрагментацией; некоторые уже рекомендуют конфигурации, минимально отличающиеся от стандартных именно ради стабильности.
3.3. DNS
Не ставить системный DNS на 127.0.0.1, если это не необходимо; держать DNS максимально «обычным» (например, нейтральный публичный) и шифровать его в туннеле на своей стороне.
- Примеры: Много VPN‑клиентов реализуют DoH/DoT внутри туннеля при сохранении на устройстве «нормального» DNS; это отмечается в описаниях как «DNS leak protection, без изменения ваших системных настроек DNS».
4. Минимизация видимости через /proc
4.1. Локальные порты и /proc/net/*
Не держать очевидные локальные слушатели на стандартных Tor/VPN‑портах и не плодить соединения к 127.0.0.1.
- Пример: Часть коммерческих VPN уже ушла от модели «локальный SOCKS на 127.0.0.1:1080» к более интегрированным решениям.
4.2. Имена пакетов и процессов
Не использовать в именах пакетов очевидные слова vpn, proxy, tor, xray, если продукт ориентирован на обход ограничений.
- Пример: видно по ряду мобильных приложений, которые не содержат vpn в package‑ID, хотя в маркетинговом названии это слово есть. Иногда и в маркетинговых названиях можно встретить VPS (вместо VPN), что технически, конечно, не одно и то же.
5. Профили split tunneling и исключения (как превентивная защита от клиентских детекторов)
5.1. Профили «безопасных приложений»
Заранее предлагать пользовательские профили в приложении, где типичные «пехотинцы Минцифры» (банки, гос‑сервисы, крупные маркетплейсы) находятся в списке исключений из VPN.
- Пример: некоторые мобильные клиенты в инструкциях прямо приводят список типов приложений, которые имеет смысл исключать.
5.2. Перехват/подмена действий приложений по по методичке
Как отдельный «щит» для продвинутых — использовать техники подмены ответов ConnectivityManager, /proc и др. в конкретных приложениях.
- Пример: Существующий проект «Android VPN detection bypass» на Frida показывает, что такая модель работоспособна: он именно перехватывает и подменяет вызовы.
6. UX и режимы работы
6.1. Чётко объяснять режимы
В UI VPN‑клиента явно разносить режимы «полный туннель», «split tunneling», «только выбранные приложения» и отдельно подсвечивать режимы, совместимые с «чувствительными» приложениями.
- Примеры: некоторые VPN-клиенты уже имеют UI для настроек split tunneling, иногда в мануалах это объясняется без связи с обходом определения VPN, а называется «режим совместимости с банковскими и государственными приложениями», можно использовать именно такие формулировки.
7. Явные «дыры» методички, на которые уже опираются разработчики
- VPN/Proxy на роутере массово рекомендовано провайдерами, и методичка сама признаёт, что на уровне клиента это почти не ловится.
- VPN/Proxy внутри VM/контейнера активно используется технически продвинутыми пользователями и в корпоративных решениях.
- App‑based split tunneling (Tailscale, крупные VPN) позволяет реализовать ровно то, чего методичка боится: сценарий, где «опасные» приложения видят чистую сеть, а остальное нет.
Кстати, рассылку сложнее заблокировать. Так что каждую неделю мы рассказываем о самом важном в области технологий и безопасности: как уберечь свои данные, финансы и себя в условиях блокировок, шатдаунов и финансовых ограничений. Подпишитесь!