
Привет, Хабр! Последние несколько лет мы наблюдаем за захватывающей, но тревожной гонкой вооружений между разработчиками средств обхода блокировок и инженерами цензуры (ТСПУ в РФ, GFW в Китае). Ситуация накаляется: после участившихся сбоев в работе Telegram, риск полной блокировки мессенджера в России перестал казаться «страшилкой» и перешел в разряд рабочих сценариев. Уже сейчас иногда умудряются блокировать даже VLESS. Если завтра подобные инструменты «выключат» полностью, нам понадобится что-то принципиально иное.
Сразу оговорюсь: это не «серебряная пуля» и не коммерческий продукт. Это концепт для обсуждения инженерами, обладающими критическим мышлением. Мы будем говорить не о том, как смотреть YouTube в 4K, а о том, как создать сверхнадежный «канал последней надежды» для условий цифрового ГУЛАГа.
Краткая история борьбы щита и меча
Эволюция обхода блокировок прошла классический путь от простого к сложному:
Эпоха шифрования: Классические VPN (L2TP, OpenVPN). Убиты через блокировку портов и детектирование сигнатур протоколов.
Эпоха маскировки: Shadowsocks и его последователи. Пытались выглядеть как «просто случайный шум», но пали жертвой активного прощупывания (Active Probing) и более тщательного поиска отличий протокола от реального TLS соединения.
Эпоха имитации (VLESS-Reality): На текущий момент — вершина развития. Протоколы имитируют идеальный TLS-хендшейк.
Но и здесь меч начал догонять щит. Современные системы DPI на базе ИИ научились «ловить» и VLESS. Им больше не нужно искать изъяны в хендшейке. Они смотрят на поведенческий анализ: характерные всплески трафика, соотношение входящих и исходящих пакетов, их размеры и, главное, тайминги. Если сессия длится три часа и по структуре не похожа ни на типичный браузинг, ни на видеозвонок — она летит в бан.
Концепция: Статистический морфинг под трафик пользователя
Идея в том, чтобы перестать имитировать «усредненный легитимный трафик» и начать имитировать конкретного пользователя.
Как это может работать технически:
Фаза обучения: Приложение в фоновом режиме анализирует ваш обычный трафик в течение нескольких часов. Оно не лезет внутрь пакетов, а снимает статистику использования интернета именно вами: с какими задержками вы открываете страницы, какой объем данных потребляете при чтении текста, какие паттерны энтропии характерны для вашего браузинга.
Генерация паттерна: На основе анализа строится легковесная модель легитимного трафика.
Инкапсуляция с морфингом: Когда вам нужно выйти в сеть через VPN, трафик не только упаковывается в валидный TLS 1.3, но и передается строго в рамках изученного паттерна (или нескольких — это ещё надёжнее).
И всё это — поверх всех техник, уже применяющихся в VLESS+Reality для полноценной имитации TLS и защиты от Active Probing.
Если ваш частый паттерн — скачать 10 Кб, подождать 5 секунд, а потом отправить 2 Кб — VPN будет работать именно так. Он будет «нарезать» ваши данные и вставлять искусственные задержки (padding & timing obfuscation), чтобы для внешнего ИИ-наблюдателя картинка была идентична вашему поведению без VPN.
Жертвуем скоростью ради неубиваемости
Да, это медленно. Попытка прогнать 100 Мбит видеопотока через паттерн «чтение новостей» мгновенно создаст заметную для DPI с ИИ аномалию. Но мы здесь не за развлечениями. Если мы ограничим скорость до условных 64–128 Кбит/с, то получим канал, который практически невозможно статистически отличить от фоновой активности смартфона или неспешного чтения лонгрида. Этого достаточно для текстовой связи в безопасном мессенджере, передачи ключей шифрования или списка IP пока-не-заблокированных ВПН серверов.
Кроме того, существуют и вполне легитимные паттерны передачи больших объемов: скачивание обновлений ОС или образов дистрибутивов. Да хоть просмотр фильмов для взрослых — вот уж где куча трафика на всякие странные айпи!
В качестве серверной части можно использовать распределенный пул VPS с валидными доменами и защитой от Active Probing (в стиле того же Reality, где при проверке цензор видит реальный сайт-«донор»). Можно поддерживать добровольцами, можно поискать коммерческие модели. При этом автоматизация должна быть такого уровня, чтобы добавить или убрать хост было на пару порядков проще, чем обновить списки блокировки.
А если не VPN, а сразу мессенджер?
Эту же логику можно применить и к мессенджеру. Если сделать его изначально ориентированным только на текстовое общение (максмум с картинками, но точно никаких звонков и видео), скорость проблемой не будет.
Добавим сюда mesh-маршрутизацию между устройствами по Wi-Fi/Bluetooth — и получится инструмент, позволяющий узлам внутри заблокированного сегмента общаться между собой и передавать сообщения «наружу» через те редкие подключения, где еще работает наш статистически незаметный протокол и 1-2 условных Скайлинка на весь регион. Для защиты от DDoS-ботов в такой децентрализованной среде можно использовать Proof-of-Work (PoW) для каждого сообщения, как у anubis — телефон отправителя должен потратить пару секунд на вычисления, что сделает массовый спам и атаки государственного масштаба слишком дорогими.
Критика и обсуждение
Разумеется, есть и подводные камни:
Энергопотребление: Анализ тафика (во время обучения) и обфускация на лету будут есть батарейку. Решается через эффективный сетевой стек и отказ от тяжелых нейронок для анализа трафика на клиенте в пользу простых статистических моделей.
Whitelisting: Если цензура полностью перейдет к модели «запрещено всё, что не разрешено», любая мимикрия под случайные хосты умрет. Останется только инкапсулироваться в отправленные через Max «шифрованные zip архивы».
Цензор умён: Даже если мы защитимся от тех средств блокировки, что доступны сегодня, завтра появятся новые. Как и идеи для их обхода :)
В последний момент перед публикацией поступило ещё одно резонное возражение: могут бороться, отделяя скрытый трафик по отличной от настоящего реакции на задержки и потери пакетов. Неприятно, но решаемо: 1) работаем по UDP (Hysteria-like) 2) не пытаемся бороться за качество связи, а ведём себя как браузер на едва живом GPRS, имитируя не только трафик, но и реакцию на ошибки 3) определяем добавление искусственных помех, и тут же меняем способ морфинга (можно запоминать и использовать несколько разных пользовательских паттернов, можно в случайные моменты времени менять их)
PS: Технические детали. Чтобы «слушать» трафик пользователя для постоения статистической модели, например, на Андроиде, можно написать фальшивый VpnService, собирающий статистику и отправляющий трафик дальше без всяких инкапсуляций (разумеется, пользователь должен быть предупрежден, что происходит и зачем, а статистика не должна покидать устойство). Для прототипа можно было бы использовать реализацию VpnService из AndIodine, чтобы не писать это всё с нуля.
Что думаете? Имеет ли смысл попробовать сделать прототип такой статистической имитации, или будущее всё же за попытками найти дыры в алгоритмах ТСПУ или ещё какими-то способами обхода? Жду ваших мнений в комментариях!