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. Одне з іншим не сходиться.