Что это за рубрика
В рубрике «Разбор Теплицы» мы в режиме реального времени разбираемся в определённой проблеме, новостях интернет-цензуры и рассказываем:
- что происходит;
- как это устроено;
- как с этим можно бороться.
Материал обновляется
Что случилось
Заблокированные Роскомнадзором ресурсы (WhatsApp, Telegram, Instagram, X, зарубежные СМИ) временно становятся доступными без использования VPN. Об этом пишут наши читатели. Об этом недавно писали и мы.
А теперь чуть подробнее
С момента внедрения закона о «суверенном интернете» (90-ФЗ), ключевым инструментом цензуры в РФ стали Технические средства противодействия угрозам (ТСПУ). В исследуемых сетях их работа проявляется как вмешательство в прохождение трафика на стороне операторской инфраструктуры, хотя по внешним измерениям нельзя надежно определить физическую топологию и конкретную точку включения фильтрующего компонента.
ТСПУ функционируют на базе технологий Deep Packet Inspection (DPI). Фильтрация осуществляется на нескольких уровнях: DNS-перехват, блокировка по IP (IP Blackholing), сброс соединений по SNI-сигнатурам (DPI RST Injection). и сигнатурам протоколов (например, блокировка протоколов VPN: WireGuard, Shadowsocks).
Когда сервисы «оживают», обычные пользователи, как правило, просто радуются техническому сбою. Но для исследователей и разработчиков средств обхода блокировок ценность представляет не сам факт доступности, а понимание того, как именно на сетевом уровне (DNS, L4 TCP, L7 TLS/SNI) происходит отказ системы фильтрации.
Мы попытались понять техническую природу «отвалов» ТСПУ и на основе сетевого зондирования (Network Probing) заглянуть под капот ТСПУ и разобрать, из каких слоев состоит блокировка, и почему в этой стене регулярно появляются дыры.
Как мы исследовали
Для тестирования мы написали Bash-скрипт, эмулирующий поведение пользовательского клиента. Замеры проводились одновременно с контрольного узла без цензуры (прямой доступ из ЕС) и подцензурного узла в РФ (домашний провайдер, Санкт-Петербург).
Чтобы получить широкую картину, мы разбили цели на группы: мессенджеры (WhatsApp, Signal, Telegram), СМИ (Meduza, «Би-би-си», «Новая Газета Европа»), сайты VPN-сервисов и проектов противостоящих цензуре, а также контрольную группа компаний, чьи ресурсы сейчас не заблокированы (Nvidia и Microsoft) и компаний, чьи ресурсы формально открыты, но «замедляются», либо в «тестовом» режиме блокируются у отдельных операторов (YouTube и Apple).
Доступность мы проверяли по 4 векторам:
- DNS Resolution: Запрос через Google DNS и Yandex DNS для выявления подмен (DNS Spoofing). Параллельно брали реальный IP через DoH CloudFlare (DNS over HTTPS).
- L4 TCP Handshake: Проверка установки соединения по порту 443 к реальному IP-адресу.
- L7 CURL Test: Отправка HTTPS-запроса с привязкой к IP (в обход локального DNS-кэша).
- L7 Cross-SNI Test (Киллер-фича): Мы отправляли запрос на заведомо чистый и незаблокированный IP (1.1.1.1), но в заголовке SNI (Client Hello) указывали заблокированный домен (например, web.whatsapp.com).
- Как это работает: Если сеть свободная, сервер 1.1.1.1 просто вернет SSL-ошибку (так как у него нет сертификата WhatsApp). Но если на линии стоит ТСПУ, он прочитает SNI, триггернется на запрещенное слово и молча дропнет пакет (мы получим Timeout). Это позволяет с большой долей вероятности считать действие фильтрации DPI, независимо от того, куда идет трафик.
Как это все (не) работает
Как устроены ТСПУ
Анализ логов показал, что ТСПУ не блокирует «просто сайт». Он использует многослойную систему, которая отличается от сервиса к сервису.
- Слой 1. Полная IP-блокировка (L4 Blackholing). Пример: Telegram. В случае с web.telegram.org DNS выдает корректные адреса (149.154.167.99) на всех узлах. Но из Петербурга попытка установить TCP-соединение отваливается по таймауту, а трассировка обрывается на 5-м хопе. Это жесткая блокировка на уровне маршрутизации. Сервер полностью недоступен по IP на сетевом уровне.
- Слой 2. Хиругический дроп по SNI (L7 DPI). Пример: WhatsApp и ProtonVPN. С web.whatsapp.com и protonvpn.com ситуация интереснее. TCP-соединение с их IP-адресами проходит успешно (хендшейк есть). Но как только клиент отправляет пакет Client Hello с указанием этих доменов, соединение «зависает» (тайм-аут больше 10 секунд). Наш Cross-SNI тест на адрес 1.1.1.1 подтвердил: ТСПУ читает заголовки и убивает сессию исключительно по сигнатуре домена, оставляя сам IP-адрес доступным.
- Слой 3. Грязный DNS (DNS Spoofing). Пример: Meduza, Новая Газета и Теплица. Для независимых СМИ и даже нашего проекта применяется самый агрессивный микс. Провайдерский и даже открытые DNS (8.8.8.8, перехваченные по UDP/53) вместо реальных адресов Cloudflare выдают IP-адреса вида 8.47.69.6 или 8.6.112.6. Это известные «заглушки– Роскомнадзора. Если же клиент использует DoH и узнает реальный IP, его все равно добьет фильтр по SNI (Слой 2).
Цепочка принятия решений ТСПУ (Пайплайн)
Анализ трафика ТСПУ — последовательный конвейер: DNS-запрос ➔ TCP-рукопожатие (SYN) ➔ TLS ClientHello (SNI) ➔ HTTP-трафик.
Логи показывают, что разные сервисы «умирают» на разных этапах этого конвейера:
- Telegram: Умирает на этапе TCP. DPI даже не включается в работу, так как маршрут к серверу сброшен.
- WhatsApp / ProtonVPN: Проходят TCP, но умирают на этапе TLS ClientHello.
- Signal: В наших логах мы видим парадоксальную картину — подмена DNS работает, но если мы используем реальный IP (через DoH), то TCP проходит, TLS проходит, и мы получаем HTTP 200. Это доказывает, что модули подмены DNS и DPI-анализатора работают независимо друг от друга.
Почему заблокированные сервисы то работают, то нет
Конкретные механизмы нам пока неизвестны. На основе увиденного мы можем пока построить гипотезы.
- Гипотеза 1: Десинхронизация слоев и режим Fail-Open. Блокировка держится на костылях из DNS и SNI. Если приложение (например, мобильный Signal или WhatsApp) использует собственный зашифрованный DoH, оно легко обходит Слой 3 (подмену DNS). Дальше в дело вступает DPI. Однако оборудование ТСПУ периодически испытывает перегрузки или уходит в перезагрузку при обновлении сигнатур. Чтобы не положить весь интернет провайдера, ТСПУ переходит в режим пропуска трафика без инспекции (Fail-Open). В наших логах мы четко зафиксировали такой момент: для signal.org в Санкт-Петербурге запрос через curl завершился успехом (HTTP 200), хотя наш тест явно показывал наличие указания на блокировку. Оборудование пропустило пакет.
- Гипотеза 2: Ротация IP-адресов на CDN. Многие ресурсы (тот же «Би-Би-си») используют динамические балансировщики глобальных CDN (Fastly, Cloudflare). Их IP-адреса меняются постоянно. Если ТСПУ пытается использовать IP-блокировку как подстраховку для DPI, он банально не поспевает за ротацией адресов. Какое-то время трафик начинает ходить свободно, пока его не догонит фильтр по SNI.
- Гипотеза 3: Асинхронное обновление баз (Eventual Consistency). ТСПУ — это распределенная система из тысяч узлов по всей стране. Обновить их мгновенно невозможно. Данные в нашем логе показывают, что разные DNS-резолверы (Google и «Яндекс») отдают разные ответы для одного и того же заблокированного домена: один отдает заглушку, второй реальный IP. Значит, региональные узлы ТСПУ обновляют свои черные списки несинхронно. Пока один узел блокирует трафик, соседний может пропускать его еще несколько часов.
- Гипотеза 4: Асимметричный роутинг (BGP). В интернете трафик не обязан возвращаться тем же маршрутом, каким ушел. ТСПУ же — система, которая хранит информацию о предыдущих взаимодействиях (сеансах) с пользователем. Каждый новый запрос опирается на данные из прошлых сессий. Системе нужно видеть и запрос, и ответ, чтобы собрать сессию. Если из-за динамического изменения маршрутов по протоколу BGP запрос уходит через узел с ТСПУ, а ответ от сервера возвращается через другой линк, без фильтрации, DPI пропускает трафик. Для пользователя это выглядит как «WhatsApp внезапно заработал».
Как обходить ТСПУ
Для пользователей
Наши тесты наглядно показывают: если вы не используете VPN, ваш трафик постоянно подвергается манипуляциям. Перехват DNS-запросов (Слой 3) работает даже при использовании «надежных» DNS серверов вроде Google DNS (8.8.8.8), поскольку обычные запросы идут в открытом виде.
В качестве базовой сетевой гигиены мы настоятельно рекомендуем настроить протокол DoH (DNS over HTTPS) или DoT (DNS over TLS). Лучше всего это сделать на уровне вашего домашнего роутера (большинство современных прошивок, например Keenetic, поддерживают это из коробки) или в настройках браузера.
Рекомендуемые надежные провайдеры:
- Cloudflare: 1.1.1.1
- Quad9 (Швейцария): 9.9.9.9 (отличный выбор с фокусом на приватность).
Настройка DoH не спасет от блокировок по IP или SNI, но она исключит возможность подмены адресов (DNS Spoofing) вашим провайдером и скроет историю ваших посещений от локальных систем слежения.
Для разработчиков
Понимание механизмов DPI также позволяет разработчикам создавать специфические методы обхода: например, зная, что ТСПУ ищет домен в пакете ClientHello (Слой 2), такие утилиты как GoodbyeDPI фрагментируют этот пакет на части, делая его «невидимым» для цензора.
Важно оговориться: мы еще не проводили масштабных тестов этих инструментов на наших стендах, однако на уровне сетевой теории борьба с DPI строится на следующих уязвимостях:
- Атака на сборку пакетов (TCP Segmentation): Поскольку ТСПУ необходимо прочитать имя домена в пакете ClientHello, логичным шагом является фрагментация этого пакета на уровне TCP (например, разбиение строки web.whatsapp.com на разные сегменты). Исторически DPI-системы избегали сборки пакетов (reassembly) из-за колоссальной нагрузки на оперативную память при магистральных скоростях, предпочитая пропускать такой трафик. На этом принципе построены популярные утилиты вроде GoodbyeDPI или Zapret, хотя разработчики ТСПУ постоянно адаптируют алгоритмы для противодействия им.
- Слепота к топологии (TTL Spoofing): Метод десинхронизации, при котором отправляется фейковый пакет с запрещенным SNI, но с искусственно заниженным временем жизни (TTL). Идея в том, чтобы пакет умер сразу после прохождения ТСПУ (на 3-4 хопе), не дойдя до реального сервера. Следом отправляется подлинный пакет, который DPI может проигнорировать, считая сессию уже обработанной.
- Шифрование метаданных (ECH — Encrypted Client Hello): Если Слой 2 опирается на открытый SNI, решением становится его шифрование. Стандарт TLS 1.3 с расширением ECH скрывает конечный домен (заменяя его на нейтральный, например cloudflare-ech.com). В теории это полностью нейтрализует DPI. На практике же это превратилось в классическую игру в кошки-мышки, регулятор адаптируется и периодически прибегает к сбросу любых соединений, в которых обнаруживается сам факт наличия ECH-расширения.
ТСПУ это не монолитная бетонная стена, а скорее многослойное сито. Доступность сервиса без VPN — это, как правило, результат временной программной рассинхронизации этих слоев, перегрузки DPI или удачной ротации адресов на стороне CDN, а не признак смягчения цензуры.