Source: WebDecoy (équipe sécurité). Dans ce guide technique, les auteurs expliquent pourquoi le fingerprinting TLS — en particulier JA4, successeur de JA3 — redevient central pour détecter les scrapers d’IA (Browser-as-a-Service, navigateurs LLM) capables de falsifier l’environnement JavaScript, les User-Agent et d’utiliser des proxys résidentiels, mais qui peinent à imiter finement la poignée de main TLS.
Le papier revient sur JA3 (concaténation des champs ClientHello et hachage MD5) et ses limites: GREASE qui introduit de la variabilité, sensibilité à l’ordre des extensions, changement de visibilité en TLS 1.3, et bibliothèques d’évasion (uTLS) permettant de forger des ClientHello arbitraires.
JA4 est présenté comme une suite de méthodes (JA4, JA4S, JA4H, JA4X, JA4T, JA4SSH) avec un format lisible. Il normalise les listes (tri, filtrage GREASE), expose un préfixe informatif (protocole, version TLS, SNI, nombre de chiffrements/extensions, ALPN) et combine plusieurs dimensions (TLS + HTTP via JA4H) pour rendre l’évasion plus difficile. Exemple: t13d1516h2_8daaf6152771_b0da82dd1658 indique TLS 1.3/TCP, SNI domaine, 15 suites, 16 extensions, ALPN h2, avec des hachés triés des suites/extensions.
Exemples concrets de fingerprints observés contre des outils de scraping et clients HTTP:
- Browserbase: JA4 t13d1517h2_8daaf6152771_02713d6af862 (17 extensions au lieu des 16 de Chrome 121 → signal d’écart), JA4H ge11nn060000_c48a6182b93a_c48a6182b93a_0000000000000000 (GET, 11 headers, pas de cookies/référer).
- Playwright/LLM browsers: JA4 t13d1516h2_8daaf6152771_e5627efa2ab1 (mêmes suites que Chromium, extensions modifiées).
- Python requests (TLS 1.2, HTTP/1.1): t12d1307h1_c16a28f6ef30_0000000000000000.
- curl 7.x: t12d1309h1_c35a2a7e3d2f_0000000000000000; wget: t12d0907h1_b8ea3a52c2bc_0000000000000000.
- Go 1.21: t13d1310h2_9dc936c68ed4_000000000000; Node 20 (undici): t13d1411h2_7b5a4dc2bc8e_d43e45c10a9f.
TTPs observées: spoofing des APIs JavaScript (navigator.webdriver, plugins, canvas), rotation de User-Agent et IP résidentielles, mimétisme comportemental, modification de la configuration TLS (extensions, suites) et uTLS pour forger des handshakes. IOCs/détecteurs fournis: chaînes JA4/JA4H ci-dessus et motifs d’ALPN/TLS/compte d’extensions (ex. HTTP/1.1 seul, peu d’extensions) servant de signaux. Le guide propose une architecture de collecte et détection: capture au reverse proxy/équilibreur (Nginx ssl_preread, HAProxy, AWS ALB, Cloudflare), inspection dédiée (Scapy), base de fingerprints (schéma SQL et entrées exemples), et logique de scoring (cohérence JA4/UA, anomalies de préfixe, JA4H) menant à des verdicts allow/flag/challenge/block. L’article est un guide pratique/référence technique visant la mise en place de détections multi-couches basées sur JA4/JA4H 🛡️.
🧠 TTPs et IOCs détectés
TTP
spoofing des APIs JavaScript (navigator.webdriver, plugins, canvas), rotation de User-Agent et IP résidentielles, mimétisme comportemental, modification de la configuration TLS (extensions, suites), utilisation de uTLS pour forger des handshakes
IOC
chaînes JA4/JA4H (ex: t13d1516h2_8daaf6152771_b0da82dd1658, t13d1517h2_8daaf6152771_02713d6af862), motifs d’ALPN/TLS/compte d’extensions (ex: HTTP/1.1 seul, peu d’extensions)
🔗 Source originale : https://webdecoy.com/blog/ja4-fingerprinting-ai-scrapers-practical-guide/