Статьи и сравнения

JA3 и JA4: как TLS-рукопожатие выдает клиента

Еще до первого HTTP-заголовка браузер начинает TLS-рукопожатие сообщением ClientHello. В нем перечислены версии TLS, наборы шифров и расширения, которые поддерживает клиент, и разные программы составляют его по-разному. JA3 и JA4 превращают его в короткий отпечаток, который говорит, что за клиент подключается.

Проверьте свой браузер прямо сейчас

Проверяю браузер…

Что есть в ClientHello

ClientHello объявляет версии TLS, которые принимает клиент, его наборы шифров в порядке приоритета, список расширений (имя сервера, поддерживаемые группы, алгоритмы подписи, ALPN для HTTP/2 и другие) и их параметры. Chrome, Firefox, Safari, curl, библиотеки Python и программы на Go дают разные комбинации, потому что используют разные TLS-библиотеки и настройки.

JA3

JA3 опубликовали исследователи Salesforce в 2017 году. Он склеивает версию TLS, наборы шифров, расширения, эллиптические кривые и форматы точек из ClientHello и хеширует результат MD5. Одна и та же программа дает один и тот же хеш, поэтому JA3 стал распространенным способом узнавать вредоносные программы, сканеры и скрипты независимо от того, каким User-Agent они представляются.

Почему JA3 перестал быть стабильным

JA3 сохраняет расширения в том порядке, в котором они идут в сообщении. В 2023 году Chrome начал перемешивать порядок TLS-расширений в каждом соединении, за ним последовали другие браузеры. Теперь один и тот же браузер дает много разных хешей JA3, и для браузеров JA3 стал гораздо менее полезным.

JA4

JA4, который FoxIO выпустил в 2023 году, исправляет это: перед хешированием наборы шифров и расширения сортируются, поэтому перемешанный порядок уже не важен. Первая часть JA4 читается человеком: протокол (TLS или QUIC), версия TLS, было ли отправлено имя сервера, число шифров и расширений и первое значение ALPN. JA4 входит в более широкое семейство, которое охватывает также HTTP-запросы и ответы сервера.

Как сайты используют TLS-отпечатки

Ценность в сравнении. Если заголовок User-Agent говорит Chrome на Windows, а TLS-рукопожатие похоже на библиотеку Python или программу на Go, запрос почти наверняка не от этого браузера. Антибот-системы CDN и крупных сайтов проверяют это еще до загрузки страницы. Настройки HTTP/2 и порядок заголовков дают похожий отпечаток уровнем выше.

TLS-отпечаток говорит, какая программа создала соединение, а не кто пользователь. У многих людей одна и та же версия браузера, а значит и один и тот же JA4. Лучше всего он работает вместе с сигналами браузера, данными сети и поведением.

Проверяет ли это SpoofLens?

Пока нет. TLS-отпечаток нужно снимать там, где заканчивается TLS-соединение, а наш текущий хостинг этого не дает. Это запланировано в следующей версии на собственных серверах. Сегодня проверка SpoofLens сравнивает то, что браузер сообщает в HTTP-заголовках и в JavaScript; если вам нужен ваш JA3 или JA4 уже сейчас, в BrowserLeaks есть отдельный тест TLS-клиента.

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

Мой JA4 уникален?
Нет. Он идентифицирует программу-клиент и ее настройки TLS. У всех с той же версией браузера на той же платформе он обычно одинаковый.
Меняет ли VPN мой TLS-отпечаток?
Нет. VPN туннелирует соединение, но не меняет ClientHello, который отправляет ваш браузер.
Почему ботов ловят по TLS-отпечатку?
Потому что многие скрипты используют HTTP-библиотеки, чье рукопожатие совсем не похоже на браузерное, хотя представляются браузерным User-Agent. Одно с другим не сходится.

Читайте также