Основы

Отпечатки TLS и SNI простыми словами

Каждое HTTPS-соединение начинается с разговора, который ведётся открыто. Две вещи, сказанные в нём, — имя нужного вам сайта и точная манера вашей программы здороваться — самые ценные признаки, какие только есть у системы фильтрации.

4 мин чтенияПоследняя проверка

Та часть HTTPS, которая не зашифрована

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

Всё, что идёт после рукопожатия, защищено. Всё, что происходит во время него, читаемо для любого на пути. Почти всю опознавательную ценность несут два его элемента.

Server Name Indication: имя хоста открытым текстом

Один IP-адрес обычно обслуживает тысячи сайтов. Сервер должен знать, какой сертификат предъявить, ещё до завершения рукопожатия, поэтому клиент называет нужное имя хоста в расширении Server Name Indication. Оно передаётся незашифрованным, в самом первом сообщении, любым распространённым клиентом.

Для системы фильтрации это почти идеал. Она получает искомый адрес назначения по имени, в фиксированном и предсказуемом месте, без необходимости следить за соединением дальше или сопоставлять его с DNS. Сверка со списком стоит почти ничего.

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

Encrypted Client Hello

Encrypted Client Hello — механизм, придуманный, чтобы закрыть этот пробел. Клиент получает открытый ключ сервера через DNS, шифрует чувствительную часть своего приветствия, включая настоящее имя хоста, и отправляет внешнее приветствие с обобщённым публичным именем. Наблюдатель видит только это публичное имя.

Механизм действительно работает и представляет собой существенное улучшение. Его ограничения скорее практические, чем теоретические: нужна поддержка с обеих сторон, он зависит от DNS-записи, которую враждебный резолвер может не отдать, а в сети, где им почти никто не пользуется, сам факт его использования отличает вас от остальных. Сеть может и просто отвергать рукопожатия, которые его несут.

Отпечатки TLS: опознают программу, а не сайт

Второй признак тоньше. Ничто в TLS не требует, чтобы все клиенты предлагали одно и то же в одном и том же порядке, и на практике так не делает никто. Chrome предлагает определённый набор шифронаборов в определённом порядке, с определённым набором расширений, включая намеренные обманки. Firefox отличается. Стандартная библиотека Go отличается резко от обоих. OpenSSL отличается снова, и различается между версиями.

Хеширование этого упорядоченного набора даёт короткий устойчивый идентификатор клиентской программы. JA3 был первой широко применявшейся схемой; JA4 — его преемник, спроектированный устойчивее к перетасовке, которую некоторые клиенты теперь выполняют намеренно. В любом случае результат один: наблюдатель может понять, какого рода программа открыла соединение, ничего не расшифровывая.

Что отпечаток сообщает наблюдателю, а что нет
ВопросОтвет
Какой браузер или библиотека установили это соединение?Обычно да, с точностью до диапазона версий.
Какой сайт был запрошен?Из отпечатка — нет, это работа SNI.
Что было отправлено или получено?Нет.
Соответствует ли клиент тому, чем себя объявляет?Да, и в этом весь смысл.

Именно последняя строка делает отпечатки важными для туннелирования. Соединение, чей SNI называет обычный сайт, но чей отпечаток принадлежит программе на Go, а не браузеру, противоречит само себе. Ни один из признаков по отдельности не подозрителен; подозрительно противоречие между ними.

Почему имитация сложнее, чем кажется

Очевидный ответ — заставить туннель выдавать отпечаток браузера. Библиотеки ровно для этого существуют, и они работают. Трудоёмким это делает то, что задача решается не один раз.

  • Браузеры регулярно меняют свои рукопожатия по мере вывода из обращения шифронаборов и внедрения постквантового обмена ключами. Отпечаток, совпадавший с Chrome год назад, теперь не совпадает ни с чем, а это хуже, чем не имитировать вовсе.
  • Некоторые браузеры намеренно рандомизируют порядок расширений, так что статичная имитация одного снимка сама по себе аномальна.
  • Отпечаток должен быть согласован со всем остальным: с согласованной версией, значением ALPN, размерами следующих записей, таймингом первого запроса.
  • Редкий отпечаток — уже признак, даже если он не опознан как туннельный. Достаточно быть необычным.

Общий принцип, который стоит отсюда вынести: прятаться — это не про зашифрованность и не про необычность. Это про согласованность: чтобы все слои рассказывали одну и ту же историю, и чтобы история эта была скучной.

Частые вопросы

Видит ли моя сеть, какие сайты я посещаю по HTTPS?

Почти во всех случаях она видит имя хоста, потому что оно передаётся открытым текстом в рукопожатии TLS. Она не видит конкретную страницу, содержимое или то, что вы отправляете. Encrypted Client Hello скрывает и имя хоста там, где его поддерживают обе стороны.

Что такое отпечаток JA3?

Это хеш упорядоченных полей, которые клиент предлагает в своём TLS Client Hello: версии, шифронаборов, расширений, кривых и форматов точек. Он опознаёт программу, а не пользователя, и широко применяется как в мониторинге безопасности, так и в фильтрации. JA4 — более новая схема с той же задачей.

Скрывает ли VPN значение SNI?

Он его перемещает. Рукопожатия сайтов, которые вы посещаете через туннель, проходят внутри зашифрованного канала, где локальная сеть их не прочтёт. Само соединение с туннелем — отдельная TLS-сессия со своим рукопожатием, и то, что оно кладёт в это поле, сеть и видит.

Как это применяет HushTunnel

HushTunnel использует VLESS вместе с REALITY и XTLS — те самые решения, которые описаны в этих руководствах, — и не хранит записей о посещаемых вами сайтах.

Все руководства