惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

E
Exploit-DB.com RSS Feed
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园_首页
博客园 - 【当耐特】
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
云风的 BLOG
云风的 BLOG
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
Jina AI
Jina AI
GbyAI
GbyAI
V
Visual Studio Blog
C
Check Point Blog
美团技术团队
P
Proofpoint News Feed
U
Unit 42
Last Week in AI
Last Week in AI
AI
AI
A
About on SuperTechFans
S
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
MyScale Blog
MyScale Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
V2EX - 技术
K
Kaspersky official blog
H
Hacker News: Front Page
Recorded Future
Recorded Future
罗磊的独立博客
T
Threatpost
L
LINUX DO - 热门话题
量子位
NISL@THU
NISL@THU
Microsoft Security Blog
Microsoft Security Blog
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
T
Tor Project blog
爱范儿
爱范儿
S
Securelist
Cisco Talos Blog
Cisco Talos Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
V
Vulnerabilities – Threatpost
T
Tenable Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Заморозка по fingerprint: как ТСПУ в июне 2026 ломает соединения по поведению, а не по протоколу
darkisdark · 2026-06-15 · via Все публикации подряд на Хабре

Полгода назад я написал здесь разбор «почему VLESS работает» — он собрал 169 тысяч просмотров и под тысячу закладок. Я тогда уверенно заявил: REALITY не отличить от обычного HTTPS, поэтому он держится там, где всё остальное давно отвалилось. Прошло полгода — и оказалось, что я был прав ровно наполовину.

В феврале ТСПУ перешёл на поведенческий анализ, а в июне — на то, что в чатах называют «заморозкой по fingerprint». И тут разом перестали подключаться мои собственные конфиги — и конфиги тысяч других людей. Приложение бодро рапортует «connected», а трафика нет. А привычный совет «обнови клиент» вдруг превратился в пустой звук.

Вот я и вернулся — посмотреть, что осталось от моих же выводов. Это разбор со стороны клиентского устройства — угла, который обычно недозанят. Что на самом деле творится в телефоне, когда «всё зелёное, а интернета нет». Как устроена новая детекция. И как измерить её самому, чтобы не потерять доступ к легальным сервисам, которые попали под ложные срабатывания.

Пара слов о том, чему верить. Тема скользкая, источников мало, и я не хочу делать вид, что у меня на руках спецификация системы. Поэтому дальше честно помечаю, где у меня твёрдый пруф, а где — реконструкция по одному источнику. Самое важное сразу: ядро всей новой схемы (разделы 2–4) собрано по одному структурированному первоисточнику — посту в Obsidian/Zapret, где автор разбирает поведение через инструмент dpi-ch. Это не выписка из документа РКН и не консенсус исследователей ТСПУ. Академические работы (ensafi/IMC 2022, gfw.report) такой схемы вообще не описывают — как и кодового имени, под которым она ходит в обсуждениях. Так что всё про конкретные пороги — «>3 хендшейка», «350–400 мс», «120/600 с» — это инженерная реконструкция чёрного ящика по одному наблюдению, а не доказанное устройство системы. Числа читайте как рабочие гипотезы.

1. Что случилось в июне: от сигнатур к поведению

Июньский сдвиг готовился не один месяц, так что сначала пройдёмся по волнам — иначе будет непонятно, откуда всё выросло.

До 2024. ТСПУ работала по сигнатурам: фиксированные байтовые паттерны в начале потока, SNI-списки, IP-блоклисты. OpenVPN ловился по характерному хендшейку, WireGuard — по детерминированной структуре handshake-сообщений (Handshake Initiation 148 байт, Handshake Response 92 байта — это свойства самого протокола, привожу для контекста, не как параметр ТСПУ). Дёшево по CPU и тупо в лоб.

Ноябрь — декабрь 2025. Пошли первые региональные волны по VLESS: в ноябре Татарстан, Удмуртия, Нижегородская область; в декабре докатилось до Свердловской. Тогда же ТСПУ получила обновление и начала использовать косвенные признаки вместо прямых сигнатур — в зону активного детектирования попали SOCKS5, VLESS, L2TP [факт, digirpt.com, multihop.ru].

17 февраля 2026. Массовая блокировка связки VLESS+Reality поверх голого TCP на проводных операторах (Dom.ru, Skynet, Ростелеком). Паттерн характерный: первые ~16 KB проходят нормально, дальше — заморозка (это февральское наблюдение Habr 1000694; отдельный, более поздний замер net4people #490 даёт порог ~15–20 KB / ~25 пакетов — это другое событие и другой замер, см. раздел 5, путать не надо). SSH через порт 22 живёт, VLESS на 443 — нет. На том же устройстве мобильный LTE (Билайн, МТС) ещё работает [факт, Habr 1000694, digirpt.com]. Важная оговорка из комментариев на Habr: один пользователь зафиксировал полный отказ VLESS только с 18 марта — то есть 17 февраля это начало волны, а не единый глобальный рубильник.

21–22 мая 2026. Первые тестовые прогоны нового поведенческого модуля. В обсуждениях он ходит под прозвищем «Siberian», с отсылкой к посту исследователя П. Осетрова. Подчеркну отдельно: и имя, и атрибуция, и параметры схемы — из одного источника (Zapret/Obsidian). Другие документы тот же эффект описывают, но модуль так не зовут и автора не упоминают. Зондирующие окна — 21:00–00:00 и 11:00–12:00 на следующий день, география ограниченная. Полигоном стали Москва и Сибирь [один источник по схеме; факт тестовых окон — mentoday.ru]. Главное отличие схемы — срабатывает она не по содержимому пакетов, а по пересечению нескольких поведенческих сигналов одновременно.

25 мая 2026. Развёртывание по Сибири и Москве. Новосибирская обл. — 13% жалоб, Томск и Кемерово — по 9%, Омск — 6%, Иркутск — 5%. Под раздачу попали VLESS, Xray, MTProto, WireGuard, gRPC. SSH не тронули [факт, mentoday.ru, Techora].

5 июня 2026. Третья и самая крупная волна. Около 07:00 МСК (на Дальнем Востоке наблюдатели фиксируют уже с 00:00 МСК) одновременно посыпалось всё: массовый сбой сайтов на Beget, TimeWeb, Selectel, SpaceWeb, AdminVPS, Reg.ru — тысячи сайтов частично недоступны, сисадмины теряют SSH/RDP к своим серверам; блокировка MTProto-прокси Telegram (у Билайна и МегаФона связь восстанавливалась на 1–2 часа, потом отваливалась через 20–30 минут); просадка трафика облачных сервисов. Особенно показателен кейс Delta Chat: ТСПУ заблокировала TLS-соединения с JA3-отпечатком Rust-библиотеки ring и сломала почту на Beget и Timeweb. 6 июня разработчики выкатили PR, заменив ring на aws-lc-rs, а 7 июня Timeweb признал проблему [факт, eByeBots, allslava.com, techora.ru].

2 июня 2026 — и тут же отдельный инфраструктурный фактор, к ТСПУ вообще не относящийся: европейский ДЦ nLighten без предупреждения обесточил стойки. О нём подробно в разделе 7, и сразу подчеркну: смешивать его с «заморозкой по fingerprint» — методологическая ошибка.

Почему «обнови клиент» перестало помогать. Раньше, при сигнатурной фильтрации, подмена JA3-отпечатка через uTLS решала всё: поменял подпись — проскочил. Теперь подпись — лишь один сигнал из нескольких. Хуже того: смена fingerprint, когда заморозка уже наступила, по тому же единственному источнику не просто не помогает, а раздувает штраф со 120 до 600 секунд [один источник, Habr 1044396]. Система перестала заглядывать внутрь пакета. Теперь она считает снаружи.

2. Сигналы решения ТСПУ при TLS-handshake

Это ядро всего разбора — и здесь оговорка из шапки работает на полную. Всё, что ниже, — реконструкция по одному источнику (Habr 1044396 на основе наблюдений через dpi-ch), а не официальная спецификация. По этой реконструкции заморозка срабатывает только при одновременном выполнении нескольких условий — логическое AND. И это принципиально: каждый сигнал по отдельности встречается и у честного трафика, мишенью предположительно служит именно их совпадение.

Сигнал 1: AS/подсеть сервера

ТСПУ смотрит на destination IP того TCP-соединения, которое вы инициируете, и сверяет его с базой «подозрительных» CIDR/ASN.

  • зарубежные ДЦ (Hetzner, DigitalOcean, OVH) — давно;

  • ряд российских облачных провайдеров — с конца мая / начала июня 2026. Вот отсюда и растёт коллатеральный ущерб для российских проектов: туда же хостятся реальные прокси-серверы, ТСПУ их не разграничивает, и весь трафик к подсети уходит на поведенческую проверку.

А вот про имена — осторожно. В обсуждениях в «подозрительный» список заносят Selectel, Yandex.Cloud, Cloud.ru. К этим именам я отношусь с холодком: «совпадение нескольких источников» здесь — это перепечатывающие друг друга телеграм-каналы (digirpt, multihop, mentoday), а не независимые tcpdump-замеры. Yandex.Cloud — системообразующий провайдер, за которым стоит изрядная доля рунета; его попадание в список поведенческой заморозки — заявление экстраординарное, и пруф ему нужен уровня пакетного дампа, которого в открытом доступе попросту нет. Итого: коллатеральный ущерб для российских облаков виден [факт по симптому, eByeBots], но конкретный поимённый состав списка — [один источник / непроверено]. Я и сам прогнал 12-часовой замер с RU-машины (Ростелеком, AS34168, 72 цикла, 14 июня) к GitHub/PyPI/Fastly: ни одной заморозки, медиана TLS-хендшейка ~135 мс, доступность 99–100%. Это вполне согласуется с выборочностью списка — на одном операторе в эти часы всё проходило чисто. А значит, поимённый состав «подозрительных» ASN тем более требует дампа, а не перепечаток.

Один этот критерий заморозку не вызывает — нужна комбинация. Крупные CDN (Cloudflare, Akamai, Google) в «подозрительный» список целиком не входят: иначе легла бы половина легального рунета [анализ]. Отсюда, кстати, и живучесть CDN-индирекции как архитектурного приёма. Блокировки подсетей Cloudflare в этот период случались, но это отдельный вектор (история с ECH тянется ещё с ноября 2024), а не описываемая схема.

Чего точно не знаю: как устроена сама база и как она обновляется — централизованно из ЦМУ ССОП или локально на операторском железе. По архитектуре ТСПУ (Habr 1027012) управление централизованное, а реализация размазана по операторским DPI-узлам — это и объясняет, почему в разных регионах всё работает по-разному.

Сигнал 2: TLS-fingerprint клиента (JA3/JA4)

Первым незашифрованным сообщением при TLS-соединении летит ClientHello — на нём и происходит фингерпринтинг.

JA3 (исторический стандарт): MD5-хэш от конкатенации пяти полей ClientHello — SSLVersion,Cipher,SSLExtension,EllipticCurve,EllipticCurvePointFormat (так они названы в оригинальной спецификации Salesforce). Тут важна точность насчёт GREASE: в каноническом JA3 GREASE-значения (0x?A?A) попадали в хэш и были источником нестабильности; их исключение появилось позже — в JA3N/JA4, а не в JA3 «вообще». Отдельная боль JA3: начиная с Chrome 110 и Firefox 114 браузеры рандомизируют порядок TLS-расширений, и одна и та же версия Chrome выдаёт разные JA3 при каждом соединении [факт]. Для опознания конкретной версии браузера JA3 стал бесполезен, но для грубого «это вообще не браузер» по-прежнему годится: нестандартный TLS-стек видно независимо от рандомизации.

JA4 (FoxIO, 2023): сортирует cipher suites и extensions перед хэшированием — тем самым гасит рандомизацию порядка; GREASE по спеке исключается. В формат входят версия TLS, ALPN, число расширений. Разберём пример t13d1516h2_8daaf6152771_b0da82dd1658t — транспорт TCP, 13 — TLS 1.3, d — SNI присутствует (domain), 15 — 15 cipher suites, 16 — 16 extensions, h2 — ALPN h2; дальше два усечённых SHA256-хэша (от отсортированных cipher suites и от extensions+signature algorithms). А вот signature algorithms намеренно НЕ сортируются — их порядок несёт информацию о библиотеке [факт, FoxIO JA4 spec].

Почему fingerprint, имитирующий Chrome/Safari/iOS, оказался «подозрительным». Сами браузеры, очевидно, легитимны. Проблема в том, что подделанный fingerprint не бьётся с поведением и контекстом:

  1. Стандартная Go-библиотека crypto/tls имеет статичный предсказуемый профиль: нет GREASE, фиксированный порядок extensions, отсутствуют ALPS/brotli/ECH. Это резко не браузер. Прокси-операторы массово маскировали это через uTLS с шаблоном Chrome — и Chrome-fingerprint стал самым частым среди клиентов в «подозрительных» подсетях. ТСПУ, по реконструкции, оценивает метку контекстно: Chrome-профиль на Hetzner — подозрительно; Chrome на google.com — норма [один источник по механике, анализ по интерпретации].

  2. uTLS-имитация устаревшей версии (скажем, Chrome 105 при актуальной 124) даёт несоответствие порядка cipher suite/extension и GREASE-паттерна реальному Chrome [Habr 1009542].

  3. Реальный браузер после хендшейка генерирует специфичные паттерны — API-запросы, тайминги, ALPN. А туннель — это непрерывный двунаправленный поток без характерных пауз и смены размеров пакетов.

Отдельно про post-quantum key_share (X25519MLKEM768). Иногда его отсутствие предлагают как маркер «не-браузер». Это слабый дискриминатор, и подаю я его именно так: PQ key_share в 2026 не шлёт огромная доля совершенно легитимного трафика — старые Android, не-Chromium браузеры, мобильные и корпоративные TLS-стеки. Детектор «нет PQ → прокси» гарантированно выдал бы вал ложных срабатываний — ровно тот коллатеральный ущерб, на который жалуется раздел 3. Так что отсутствие PQ — в лучшем случае слабый довесок к контексту, а не самостоятельный признак [анализ].

«Лояльные» fingerprints, по наблюдениям пользователей в июне 2026: Firefox, Edge, Android-стек (Conscrypt/BoringSSL), 360 Browser, QQ Browser — они реже встречаются в прокси-конфигах. Это наблюдаемый эффект; а вот сам механизм whitelist и конкретный список — гипотеза из практики, а не задокументированный РКН-перечень. Не читайте это как «установленный белый список».

И ещё про точность формулировок: «Chrome/Safari подозрительны» означает конкретный fingerprint, имитирующий эти браузеры через uTLS из «подозрительной» подсети, а не сами браузеры в живой пользовательской сессии.

Сигнал 3: Частота параллельных хендшейков

Реконструированный порог: больше 3 параллельных TLS-соединений к одному SNI с малой задержкой между ними → заморозка ~120 с. И тут сама фактура сама себе противоречит: в одном источнике временное окно описано как залп < ~350–400 мс, в другом — как окно 60 секунд. Фиксирую оба варианта и не выбираю между ними [один источник Zapret/Obsidian + Habr 1044396; инженерное наблюдение, не официальная константа].

Почему это прокси-специфичный паттерн. VLESS-клиенты (Happ, v2rayTun, Hiddify) по умолчанию используют мультиплексирование (XMUX/Mux) или connection pooling — на старте туннеля открывают сразу несколько параллельных TCP/TLS ради снижения latency. Браузер тоже открывает параллельные соединения, но к разным хостам (подресурсы страницы), а не 4–8 одновременных хендшейков к одному SNI/IP подряд. Обычный пользователь, открывая условный сайт, делает 1–2 соединения к CDN-IP, а не 6 к одному узлу.

Что происходит, когда совпали все условия (по реконструкции):

  • Трафик к узлу замораживается на ~120 секунд.

  • Это не RST и не FIN, а packet drop / blackholing. Клиент шлёт пакеты, ответ дропается на стороне ТСПУ. Аналогичный по сути механизм задокументирован для GFW (Китай), но не для ТСПУ: после триггера GFW дропает все пакеты с тем же (client IP, server IP, server port) на 120–180 секунд [факт, GFW USENIX 2023]. Подчеркну отдельно: число «120–180 с» — китайское, по GFW; близость российской ~120 с — наблюдательное совпадение по одному источнику, а не перенос китайской константы на ТСПУ как доказанной.

  • Выглядит это как «плохой интернет», а не как явная блокировка: растёт RTT, падает throughput.

  • Попытка быстро сменить fingerprint под нагрузкой, по реконструкции, добавляет расширенный бан на 600 секунд на все TLS к этому узлу — независимо от fingerprint и SNI [один источник].

3. Сопутствующий ущерб: почему лёг легитимный рунет

Поведенческий фильтр, в отличие от сигнатурного, не знает, что именно передаётся, и реагирует на совокупность признаков. А каждый из этих признаков по отдельности водится и у честного трафика:

  • Сервер в «подозрительном» ASN. Если российский ДЦ угодил в список (см. оговорку в Сигнале 1), весь трафик к нему проходит поведенческую проверку.

  • Параллельные хендшейки. Тяжёлый сайт на Next.js/React при первой загрузке открывает десятки параллельных TLS-соединений. А legacy-эндпоинты на HTTP/1.1 до сих пор открывают по одному TCP на каждый запрос.

  • Fingerprint клиента. Chrome — самый популярный браузер, и его профиль ровно тот, что массово имитировали прокси.

И вот пользователь Chrome открывает легальный корпоративный сайт, который живёт в облаке из «подозрительного» диапазона, условия совпадают — и на 120 секунд наступает заморозка. Сайт «лагает» или вовсе недоступен [анализ, согласуется с наблюдениями eByeBots].

Про банковские приложения нужна честность, а не нагнетание. Расхожий тезис «банки триггерят, потому что Go-подобный профиль через OkHttp» технически некорректен: OkHttp — это Java/Kotlin-клиент на Android, он использует Conscrypt/BoringSSL, и его fingerprint никакой не «Go-подобный», у него свой собственный профиль. А перечисление страшных слов (certificate pinning, QUIC 0-RTT, HTTP/2 prefetch, connection prewarming) без единого конкретного JA3 или замера — это спекуляция, а не анализ. Обоснованно сказать можно вот что: банковские приложения хостят API в облаках, агрессивно открывают несколько соединений при старте сессии и используют нестандартные (не-браузерные) TLS-стеки — то есть теоретически могут задевать те же сигналы. Но без конкретных замеров это гипотеза, а не установленный факт [гипотеза, замеров нет].

А вот кейс Delta Chat (раздел 1) — наоборот, документированная иллюстрация: TLS-отпечаток Rust-библиотеки ringсовпал с «нестандартным», и почта легла, хотя никакого прокси там и в помине нет.

Разница принципиальная. При сигнатурном подходе ложноположительный отсекается по точному байт-паттерну. При поведенческом исключать приходится по поведению, а статическое правило «>3 параллельных TLS к одному SNI» контекста не имеет — оно не отличает прокси от честного браузера. Снизить ложные срабатывания, не теряя чувствительности к настоящим целям, — задача тяжёлая. Зато для владельца легитимного сайта решение простое: включить HTTP/2 и свести весь трафик к одному мультиплексированному TLS-соединению [Habr 1045684].

4. Взгляд со стороны устройства: что происходит в телефоне при «заморозке»

Вот он, тот самый недозанятый клиентский угол. Пользователь видит «зелёный» статус клиента — сервер доступен, TCP-хендшейк прошёл, — а данные не идут. Потому что заморозка (по реконструкции) случается после завершения TCP handshake — в момент TLS handshake или сразу за ним.

Если разложить по шагам:

  1. TCP SYN → SYN-ACK → ACK — проходит. Клиент считает соединение установленным (ТСПУ stateful и in-path [факт, TSPU IMC 2022, ensa.fi], TCP-уровень пропускается).

  2. Клиент шлёт ClientHello (PSH+ACK) — пакет проходит, ТСПУ фиксирует fingerprint и счётчик параллельных соединений.

  3. Сервер отвечает ServerHello + Certificate — ответ доходит.

  4. Клиент шлёт Finished (ChangeCipherSpec + Finished) — и здесь, либо сразу после, начинается дроппинг.

  5. Клиент ждёт Application Data. Сервер шлёт — пакеты дропаются на ТСПУ.

  6. Sliding window заполняется, отправитель встаёт в ожидании Window Update, которого не будет. Keepalive уходят без ответа на уровне данных.

  7. Через ~120 с TCP-стек вызывает таймаут (или исчерпывает retransmit-лимит). Таймаут TLS-handshake в мобильных стеках — 10–30 с; post-handshake read() висит дольше.

  8. Клиент переподключается — и если fingerprint и счётчик те же, цикл повторяется.

В логах клиента (Xray/sing-box) это выглядит как цикл без внятной ошибки:

[INFO] connecting to server:443
[INFO] TLS handshake started
[ERROR] read tcp: i/o timeout (after ~30s)
[INFO] reconnecting...
[INFO] TLS handshake started
[ERROR] read tcp: i/o timeout (after ~30s)

Возможны варианты: failed to read client hello на стороне сервера, connection reset by peer если ТСПУ активно инжектирует RST, либо просто таймаут без явной ошибки при чистом packet drop. Нет connection refused, нет ICMP unreachable — и отличить это от реально плохого канала клиент не может в принципе.

Ретраи только усугубляют. Агрессивный retry-логик плодит новые параллельные хендшейки, счётчик снова перебирает порог в пределах окна, начинается новый цикл. Клиент влетает в retry storm и сам продлевает себе заморозку, а смена fingerprint в этот момент, по реконструкции, добавляет 600-секундный штраф. Состояние блокировки привязано к (src_IP, dst_SNI), так что новое соединение с того же IP к тому же SNI мгновенно попадает под ту же блокировку.

А SSH при этом работает (порт 22 или нестандартный): другой fingerprint (SSH handshake), другой порт, никакой browser-имитации, никакого залпа параллельных хендшейков к одному SNI.

5. Воспроизводимая методика измерения заморозки

Цель — зафиксировать факт паузы ~120 с и тип блокировки. Это методика наблюдения за поведением сети, а не маскировки трафика.

Что понадобится: Wireshark 4.4+ / tcpdump, tshark для CLI, curl с verbose TLS, машина в российской сети (или VPS в российском ДЦ). Опционально — dpi-ch (упомянут в Habr 1044396) и curl-impersonate для воспроизведения браузерных fingerprint.

Шаг 1. Baseline handshake timing.

curl --connect-timeout 35 --max-time 35 -o /dev/null -s \
  -w "connect:%{time_connect} tlshs:%{time_appconnect} total:%{time_total}\n" \
  https://TARGET_IP:443/

В норме time_appconnect (до завершения TLS) — 50–200 мс. При заморозке mid-handshake он улетит в --connect-timeout.

Шаг 2. Захват в Wireshark. Фильтр: tcp.port == 443 && ip.dst == TARGET_IP. Запускаем залп из 5 параллельных соединений (имитируем браузер с вкладками):

for i in {1..5}; do curl -sk --connect-timeout 5 https://TARGET:443/ & done; wait

В дампе увидим: SYN → SYN-ACK (TCP проходит), ClientHello → тишина (нет ServerHello), через ~30 с RST или таймаут без RST.

Шаг 3. Идентификация паузы. Statistics → TCP Stream Graphs → Time/Sequence: при заморозке — горизонтальная линия (нет новых seq) длиной ~120 с, затем ретрансмиссии. Фильтр аномальных пауз:

tcp.time_delta > 5 && tcp.port == 443

Длительность penalty = дельта между началом заморозки и моментом, когда следующий одиночный curl вернёт time_appconnect в норму. И заранее не закладывайтесь ровно на 120 с — измерьте; именно это число в фактуре держится на одном источнике, и ваш собственный замер ценнее его.

Шаг 4. Проверка порога по объёму. net4people/bbs #490 фиксирует freeze после ~25 пакетов / ~15–20 KB payload (это отдельный замер, отличный от февральского ~16 KB по Habr — не считайте их одним порогом). Statistics → Conversations → TCP → нужный поток → Bytes/Packets A→B / B→A. Сопоставьте, при каком суммарном payload наступает freeze в вашем случае.

Шаг 5. Тип блокировки.

Наблюдение в Wireshark

Интерпретация

SYN без SYN-ACK

IP-блокировка

SYN-ACK есть, ClientHello уходит, ServerHello нет

Freeze mid-handshake (ТСПУ)

Handshake завершён, RST после ~N КБ

packet-count / volume threshold

Всё проходит, но +задержка на каждом пакете

throttling (деградация, не блокировка)

Если RST есть, но TTL отличается от серверного — это инжектированный RST промежуточного узла (он не выставляет TTL под hop-count реального сервера). Если RST нет, просто тишина — blackholing.

Шаг 6. Чувствительность к fingerprint и параллельности. Сравните time_appconnect при разных ClientHello (curl-impersonate с профилем Chrome/Firefox) к одному серверу в одной подсети. Параллельность: tls.handshake.type == 1 — если при 4+ соединениях в коротком окне все freezeят, а одиночное проходит, гипотеза о пороге параллельности получает локальное подтверждение.

6. Поведенческая разница транспортов

Почему под удар попал именно VLESS+REALITY-over-TCP, а xHTTP/gRPC/Hysteria2 «пока» проходят. И ключевое слово тут — «пока»: по состоянию на 5 июня 2026 xHTTP и gRPC уже попадали под частичные блокировки в Сибири [Techora]. Устойчивость здесь относительная, не абсолютная.

REALITY: в чём была сила и где трещина

REALITY устраняет классическую слабость TLS-прокси — фиктивные сертификаты. Сервер не терминирует TLS сам: он проксирует ClientHello к реальному upstream (например, microsoft.com), получает настоящий ServerHello и сертификат, а в поток вставляет криптографический «маяк» на основе X25519-ключей. Авторизованный клиент видит маяк и разворачивает туннель; неавторизованный probe получает настоящий upstream-сайт — подлинный сертификат, легитимное поведение [факт, XTLS/Xray DeepWiki]. Именно это закрывает active probing. Но от поведенческого анализа снаружи — не защищает никак.

TLS-in-TLS: фундаментальная проблема

Исследование USENIX Security 2024 (Xue, Kallitsis, Houmansadr, Ensafi) «Fingerprinting Obfuscated Proxy Traffic with Encapsulated TLS Handshakes» показало вот что: когда внутри туннеля приложение устанавливает собственное TLS-соединение, во внешнем зашифрованном потоке проступает характерный burst, соответствующий вложенному ClientHello, — по размеру первого бурста, временному паттерну и числу round-trip до начала потока данных. Заявленная точность — >70% TPR на Shadowsocks, VMess, VLESS, Trojan, obfs4, REALITY в стандартных конфигах; метод развёрнут у mid-size ISP с 1M+ пользователей [факт]. И тут две существенные оговорки. Первая: TPR без FPR — это половина метрики. «>70% true positive» сам по себе ни о чём не говорит, потому что не указывает, какой ценой в ложных срабатываниях он достигнут. Для статьи, вся вторая половина которой про ложные срабатывания, это критично: без FPR/precision цифра — не приговор транспорту, а лишь верхняя оценка обнаружимости при неизвестном пороге ложных. Вторая: тестировали в ISP-среде, не в ТСПУ; российская реализация может крутить другие пороги.

xtls-rprx-vision частично противодействует: при обнаружении TLS 1.3 внутри туннеля переключается на splice (прямую передачу без двойного оборачивания) и добавляет padding к handshake-сообщениям. Детектируемость по TLS-in-TLS это снижает, но при пассивном timing-анализе — не устраняет [анализ на основе USENIX 2024].

Поведенческие профили транспортов

VLESS+REALITY+TCP (Vision) — под ударом:

  • одно TCP-соединение = один логический поток (без mux); несколько вкладок = несколько TCP+TLS к одному SNI/IP — прямой триггер Сигнала 3;

  • почти симметричный двунаправленный поток (туннель 1:2–1:3 против реального веба 1:10–1:50 [FOCI 2024]);

  • отсутствие idle-пауз — непрерывный поток под нагрузкой;

  • равномерные размеры пакетов при MTU-padding (1400–1500 байт) против вариативного HTTPS.

VLESS+gRPC+REALITY — устойчивее:

  • один долгоживущий HTTP/2-over-TLS канал с мультиплексированием до ~100 streams → нет залпа параллельных хендшейков, снаружи похоже на видеостриминг/WebSocket push;

  • HPACK маскирует метаданные заголовков; ALPN h2;

  • блокировка gRPC = высокий коллатеральный ущерб (Google Cloud и пр.);

  • про active probing нужна точность: поскольку gRPC идёт поверх REALITY, стандартный gRPC-probe упрётся в проксируемый настоящий upstream-сайт, а не в gRPC-эндпоинт — то есть REALITY закрывает и этот вектор. Реальная уязвимость gRPC не в active probing, а в том, что 25 мая он частично попал под блокировки в Сибири (по поведенческим/иным признакам, а не по отклику на probe).

VLESS+xHTTP — устойчивее:

  • разделяет upstream и downstream на отдельные HTTP-транзакции, связанные UUID в path; upstream — короткие POST с непредсказуемым padding, downstream — chunked/одиночный response;

  • нет постоянного двунаправленного TCP-потока; выглядит как scatter-API (много POST + длинный GET); совместим с обычным nginx/CDN;

  • уязвимость: если DPI научится детектировать «один долгий GET + много коротких POST к одному path» как аномалию — попадёт под удар [XTLS #4113].

Hysteria2 / QUIC — наиболее устойчив в моменте, но с оговоркой про обфускацию:

  • UDP-based — TCP-специфичный механизм «>3 хендшейка» к нему напрямую не применяется;

  • маскируется под HTTP/3: при unauthorized-запросе отдаёт настоящий HTTP/3-ответ; аутентификация через POST к /auth;

  • Salamander: каждый QUIC-пакет XOR-обфусцируется ключевым потоком из BLAKE2b-256 от (random 8-byte salt + PSK). И вот тут важно не переоценить механизм. Salamander — это именно обфускация, а не шифрование payload (он и так зашифрован QUIC/TLS): она убирает узнаваемую QUIC-структуру в заголовке, мешая сигнатурному «это QUIC». Но размеры и тайминги пакетов она не прячет — то есть против поведенческого/timing-анализа, на котором по логике статьи и держится «заморозка по fingerprint», Salamander сам по себе не помогает. Это защита от сигнатуры, не от поведения;

  • блокировка QUIC/UDP на 443 = блокировка HTTP/3 для всего рунета (YouTube, Google, Cloudflare) — РКН этого избегает;

  • но: алгоритм Brutal (наращивает скорость при потерях) создаёт аномальный трафик-профиль, потенциально детектируемый; UDP/QUIC периодически блокируется у части операторов [Habr 1008554, multihop.ru]. Цифра «~40% detection rate в Китае» для ТСПУ не верифицирована — GFW и ТСПУ всё-таки разные системы.

Транспорт

Видимых сессий

ALPN

Timing

Устойчивость к поведенческой схеме

VLESS+REALITY+TCP

N (по потокам)

h1/h2

Burst N handshakes

Низкая (Сигнал 3)

VLESS+gRPC+REALITY

1 долгоживущий

h2

Stream-like

Выше (probing закрыт REALITY)

VLESS+xHTTP

1 / мало

h1/h2

POST-like API

Выше

Hysteria2+Salamander

UDP, не TLS

h3

Random UDP

Другой детектор; обфускация ≠ timing-защита

VLESS+TCP+mux

1 долгоживущий

h1

Единый поток

Выше

Отдельно — MTProto-прокси (легли 5 июня): детектируются по JA3 Fake-TLS, однородному распределению размеров пакетов, симметрии upload/download и регулярности keep-alive [Habr 1041486]. Плюс новый корреляционный маркер 2026: множество клиентов с разных IP к одному серверу с идентичным JA3 — у реальных пользователей браузеры и версии разные, для легитимного сервиса такой паттерн нехарактерен.

7. Европейский след: FIOD и nLighten

Два события совпали по времени с июньскими блокировками, но к ТСПУ прямого отношения не имеют, и сваливать их в один нарратив о «заморозке по fingerprint» — ошибка.

18 либо 22 мая 2026 (источники расходятся: KrebsOnSecurity и BleepingComputer датируют рейд 22 мая и изъятие ~800 серверов, аналитические разборы — 18 мая; единой даты в фактуре нет) нидерландская FIOD провела обыски в Энсхеде, Алмере и двух ДЦ (Дронтен, Схипхол-Рейк), изъяла 800+ серверов и задержала двоих: директора 57 лет и провайдера/брокера connectivity 39 лет. Компания — Stark Industries Solutions, действовавшая через WorkTitans B.V. / THE.Hosting; инфраструктуру использовала группа NoName057(16) для DDoS на нидерландские госресурсы. Основание — нарушение санкционного режима ЕС. Цепочка: Stark Industries → MIRhosting → PQHosting (санкции ЕС, май 2025) → WorkTitans/THE.Hosting [факт, KrebsOnSecurity, BleepingComputer].

2 июня 2026 nLighten без предупреждения отключил серверные стойки с оборудованием MIRhosting (физический хостинг ~800 серверов в Almere). Пострадали VDSina, McHost, THE.Hosting, UFO.Hosting, GEO.Hosting — доступ потеряли больше 15 000 сайтов. Это самостоятельное действие нидерландского ДЦ, не РКН [факт, mentoday.ru].

Как это наложилось. Часть провайдеров, обслуживавших российских пользователей, держала exit-ноды именно в nLighten-экосистеме. Их одновременный отвал плюс поведенческая блокировка ТСПУ внутри России дали конечному пользователю один и тот же симптом — «не работает», — и разобрать причинно-следственную связь в реальном времени было почти нереально. Но это два независимых процесса. Сбои Selectel/Beget/Timeweb 5–6 июня вызваны обновлением конфигурации ТСПУ, а не делом Stark Industries.

8. Архитектурный вывод: решает не протокол, а адаптивность

Сразу о жанре раздела: исторический ряд OpenVPN → WireGuard → Shadowsocks → VLESS → REALITY — это иллюстрация, а не доказательство. «Любой фиксированный протокол рано или поздно описывается сигнатурой» — общее место, и за открытие я его не выдаю. Полезен он только тем, что задаёт правильную рамку постановки задачи, поэтому держу его коротко.

Стратегия цензора структурно проще стратегии протокола: набрать статистику, обучить классификатор, выкатить правило. У цензора масштаб и время, у протокола — инерция обновления у пользователей. Поэтому «искать необнаруживаемый протокол» — это неверная постановка задачи.

Правильная рамка следует прямо из логики AND-схемы (с поправкой, что сама схема — реконструкция по одному источнику): если детекция требует одновременного выполнения нескольких условий, достаточно нейтрализовать одно, чтобы соединение не попало под триггер. Отсюда три принципа устойчивости — на уровне механики, без готовых конфигов:

  1. Снижение числа видимых соединений (multiplexing). Вместо N параллельных TCP+TLS к узлу — одно долгоживущее соединение с мультиплексированием логических потоков внутри. DPI видит один поток, похожий на стриминг, а не залп. Это воздействует на Сигнал 3 (mux/xmux в Xray, smux в sing-box, нативный мультиплекс QUIC в Hysteria2 — с разными trade-off по head-of-line blocking).

  2. Правдоподобный fingerprint. Профиль должен соответствовать реальному браузеру с актуальными расширениями. Шаблон Firefox или Edge в 2026 менее скомпрометирован, чем Chrome, просто потому что реже встречается в прокси-конфигах. Режим "randomized" опасен: синтетическая генерация может создать физически невозможную комбинацию extensions — а это само по себе fingerprint. Но fingerprint — лишь один из сигналов: идеальный Firefox-профиль на «подозрительной» подсети с 6 параллельными соединениями всё равно попадёт под триггер.

  3. Разрыв между адресом узла и «подозрительной» подсетью (CDN-индирекция). Если реальный IP скрыт за CDN, Сигнал 1 не срабатывает — CDN-IP не в списке. Это единственный рычаг, воздействующий именно на Сигнал 1; mux и fingerprint здесь не помогут. Ограничение: CDN поддерживают не все транспорты — gRPC и WebSocket да, VLESS+TCP напрямую нет.

Общий принцип: устойчивость в 2026 — это не «магический протокол», а минимизация числа одновременно выполненных детекционных условий плюс способность транспортного слоя адаптироваться к смене ситуации.

9. Дисклеймер, ограничения метода и где это оставляет пользователя

Закончу тем, с чего начал. Полгода назад я написал, что REALITY неблокируем — и был прав ровно наполовину. Маскировка рукопожатия действительно держится: её по-прежнему не вскрывают. Ошибся я в другом — думал, что маскировки достаточно. А фильтр просто перестал смотреть на рукопожатие и начал смотреть на поведение туннеля после него — и тут «неотличимый снаружи» VLESS выдаёт себя ровностью потока. Так что свой вывод годичной давности перепишу одной строкой: побеждает не протокол, который выглядит как HTTPS, а сервис, который меняет поведение быстрее, чем фильтр учится его описывать. Это единственное, что пережило последние полгода без поправок.

Нейтральный дисклеймер. Материал носит образовательный и исследовательский характер: он описывает, как устроена поведенческая детекция трафика, и даёт методику её измерения — для понимания происходящего и для диагностики сбоев у легитимных сервисов, попавших под ложные срабатывания. Применяйте описанное в рамках действующего законодательства вашей юрисдикции.

Ограничения разбора (повторю прямо, потому что это определяет статус всей статьи):

  • Ядро описания поведенческой схемы (разделы 2–4) — реконструкция чёрного ящика по одному структурированному источнику (Zapret/Obsidian, атрибуция П. Осетрову, наблюдения через dpi-ch). Кодовое имя модуля — фольклор обсуждений, не номенклатура; академические работы по ТСПУ его не используют. Пороги (350–400 мс / 60 с, ~120 с, penalty 600 с, «>3 хендшейка») кросс-проверкой независимыми измерениями не подтверждены — это рабочие гипотезы, правдоподобные и согласующиеся с симптомами, но не верифицированные константы. Поимённый состав «подозрительных» российских ASN (Selectel/Yandex.Cloud/Cloud.ru) — из перепечатывающих друг друга телеграм-источников, без пакетных дампов.

  • Число «120–180 с» packet-drop — это измерение GFW (Китай) из USENIX 2023, а не российский замер; близость к нему российской ~120 с по одному источнику — совпадение, а не доказанный перенос.

  • «>70% TPR» из USENIX 2024 приведено без FPR/precision в самой работе в удобном для цитирования виде — поэтому это оценка обнаружимости, а не вердикт о применимости детектора.

  • ТСПУ децентрализована: оборудование (EcoFilter и др.) стоит у каждого оператора по-своему, параметры различаются у МТС, Ростелекома, Билайна. Что работает у одного — может не работать у другого. Исследования (TSPU IMC 2022, ensa.fi) фиксируют >650 AS за ТСПУ-устройствами при неоднородных конфигурациях.

  • Тезис «ТСПУ использует нейросети/ML» не подтверждён: комментаторы со ссылкой на утечки утверждают, что EcoFilter не имеет ресурсов даже на анализ QUIC. Заявления РКН есть, данных о реальном продакшен-развёртывании ML-детектора — нет.

  • «92%» — это KPI эффективности ограничения доступа к средствам обхода за счёт сигнатурного анализа к 2030 году (документ № 25-66883-01845-R от 13.01.2025), а не «92 заблокированных сервиса». Реальное число — 469 сервисов на февраль 2026 (динамика: 167 в 2021 → 197 в окт. 2024 → 258 в 2025 → 469). Цель по охвату трафика — 98% (до 831 Тбит/с, пересмотрено до 954 Тбит/с в марте 2026), бюджет ~20 млрд руб. на 2026 и столько же на 2027–2028 [факт, Habr 1031242, Xakep, Коммерсант].

  • «Пока проходит» по xHTTP/gRPC/Hysteria2 — временная характеристика, уже опровергаемая отдельными регионами.

Где это оставляет рядового пользователя. Большинство не будет руками настраивать uTLS-шаблоны и mux-параметры. Практическая точка выбора для них — оценивать сервис не по обещаниям, а по тому, насколько его инфраструктура соответствует архитектурным принципам из раздела 8: не держит ли ноды в «подозрительных» подсетях, применяет ли CDN-прослойку, обновляет ли fingerprint-шаблоны вслед за сменой ситуации. По этим же критериям стоит оценивать и MegaV, и любой другой подобный сервис — рамка одна, и она техническая, а не маркетинговая.


Источники: Habr 1009542, 1044396, 1009560, 992232, 1027012, 1000694, 1041486, 1045684, 1008554, 1031242; net4people/bbs #490, #546; USENIX Security 2023 (gfw.report) и 2024 (Xue et al.); TSPU IMC 2022 (ensa.fi); FoxIO JA4 spec; XTLS/Xray DeepWiki и discussion #4113; Hysteria2 Protocol Spec; FOCI 2024; Techora, Meduza, vc.ru/РБК, 3dnews, mentoday.ru, eByeBots, allslava.com, digirpt.com; KrebsOnSecurity, BleepingComputer; kod.ru, lenizdat.ru, Xakep, Коммерсант. Статусы [факт]/[один источник]/[гипотеза]/[анализ] проставлены по тексту. Ядро разделов 2–4 — реконструкция по одному источнику, не верифицированное описание системы.