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. Одно с другим не сходится.
Читайте также
- Отпечаток браузера: что это такое и как он работает
- Как сайты обнаруживают ботов и автоматизированные браузеры
- Отпечатки canvas, WebGL и аудио: как они работают
- Утечка WebRTC: что это такое и как проверить свой браузер
- Часовой пояс против IP: почему сайты замечают ваш VPN
- Как сайты распознают антидетект-браузеры