О том, что китайцы начали блокировать ESNI-соединения, сообщили специалисты Мэрилендского университета, а также организаций, которые отслеживают ситуацию с цензурой в Китае: iYouPort и Great Firewall Report. Причины блокировки — в глобальном росте трафика с использованием TLS 1.3+ESNI и эффективности этих методов шифрования.
Что такое ESNI
Протокол TLS скрывает содержимое сообщений пользователя, но не всегда скрывает, с кем общается пользователь. Для «рукопожатия» TLS использует расширение SNI (Server Name Indication). Это расширение используют клиенты (браузеры), чтобы сообщить серверу имя хоста, к которому хотят подключиться; по-другому — имя домена, к которому отправляет запрос пользователь. Основная проблема SNI в том, что имя хоста/домена/веб-сайта, передаваемое в этом поле, не шифруется. Оно доступно провайдеру или «человеку посередине» — например, DPI-системе.
Основной способ блокировки, который используется регуляторами в странах с цензурой, — использовать поле SNI, чтобы заблокировать доступ пользователей к определенным адресам в интернете. Китайский фаервол работает по этому же принципу.
В 2018 году для протокола TLS 1.3 было разработано расширение Encrypted SNI (ESNI). В этом расширении имя запрашиваемого хоста зашифровано с помощью публичного ключа сайта, который берется из системы имен DNS. В таком случае провайдер или DPI-система может считывать только IP-адрес. Но поскольку на одном IP-адресе могут размещаться несколько сотен доменов, ESNI не показывает, на какой именно домен заходил пользователь.
На момент релиза ESNI считался настолько эффективной технологией шифрования, что некоторые сторонники свободного интернета с воодушевлением заговорили о «закате эпохи DPI».
Первым браузером, который внедрил поддержку стандарта ESNI, стал Mozilla Firefox (в 2018-м). В сентябре 2019-го о включении ESNI сообщили владельцы торрент-агрегатора Rutracker.
Почему Китай активизировался
Сейчас происходит глобальный рост HTTPS-трафика с поддержкой TLS 1.3 и ESNI:
Властям Китая все сложнее отслеживать и фильтровать HTTPS-трафик, то есть контролировать контент, который может быть доступен китайским пользователям. Однако пока «Великий фаервол» еще не умеет отслеживать домены, к которым подключается пользователь с помощью ESNI. Такой HTTPS-трафик просто блокируется.
Трафик, который использует предыдущие версии TLS, или TLS 1.3 без ESNI, фаервол не «заворачивает», поскольку подобные соединения уже контролируются.
Как организована блокировка
Сетевые пакеты с ESNI блокируются на «пограничных» маршрутизаторах, которые работают в обоих направлениях — из Китая во внешний интернет и наоборот.
Фаервол отбрасывает пакеты с ESNI, которые направляются серверу. То есть это просто отбрасывание, без замены на пакеты с RST-флагом, как это происходит в случае с блокировкой по Server Name Indication.
После блокировки ESNI-пакета в течении 2-3 минут блокируются и остальные пакеты, которые соответствуют исходному и конечному IP, а также номеру порта. При этом блокировка может произойти на любых портах от 1 до 65535.
Откуда это известно
Чтобы в подробностях изучить механизм блокировки, исследователи Geneva создали утилиту на Python, которая завершала «рукопожатие SSL/TLS» и отправляла серверу сообщение ClientHello с ESNI- расширением. При этом отпечаток ClientHello — такой же, как и отпечаток браузера Firefox 79.0 с поддержкой TLS 1.3.
Утилита в течение недели отправляла сообщения от клиента к серверу и обратно, чтобы можно было проанализировать трафик в обоих направлениях. Серверы, на которые отправлялись ClientHello, завершали рукопожатие на уровне TCP, но не отправляли пакеты обратно клиенту и не закрывали соединение первыми.
Помимо того, что фаервол не делал RST-инъекций для цензуры ESNI-трафика, выяснилось, что он отбрасывает трафик от сервера к клиенту, чтобы заблокировать серверы Tor и Shadowsocks. Однако при блокировке ESNI фаервол отбрасывает только пакеты типа «клиент-сервер».
Также специалисты Geneva отметили, что «Золотой щит» не анализирует флаги пакетов TCP при их отбрасывании. Это отличает китайский фаервол от некоторых систем цензуры в Иране, которые не блокируют пакеты с флагами RST или FIN.
Варианты обхода
Специалисты предлагают несколько вариантов обхода блокировки на клиентской и серверной сторонах. Например — использование идентификатора ESNI, который пока китайские власти не блокируют, — 0xff02. Сейчас блокируются только пакеты с 0xffce.
Еще один способ — использовать нетипичный алгоритм согласования соединения. Так, блокировка не работает при подстановке пакета RST с неправильной контрольной суммой или когда отправляется SYN-пакет с ошибочным номером последовательности. Эти функции обхода уже поддерживаются плагином Geneva, который выложен на Github.
Прогноз
Как отмечают исследователи из университета Мэриленда, все предлагаемые меры обхода уже скоро станут неактуальными:
«Эти способы [обхода блокировки] — временное решение. Рано или поздно возможности цензурирования “Великого файрвола” скорее всего будут расширяться».
Можно предположить, что независимые производители DPI-систем тоже не будут сидеть без дела. Спрос на ПО для фильтрации пакетов с поддержкой TLS 1.3 и ESNI будет расти вместе с ростом зашифрованного HTTPS-трафика — особенно в странах, где интернет активно регулируется.