Aperçu
L'empreinte TLS identifie les clients par les paramètres qu'ils envoient lors de la poignée de main TLS (message ClientHello). Différents navigateurs et systèmes d'exploitation utilisent différentes configurations TLS.
Empreinte JA3
JA3 est un hachage calculé à partir du ClientHello TLS :
JA3 = MD5(Chiffrements + Extensions + CourbesElliptiques + FormatsDePointsCourbesElliptiques)
Où chaque champ est concaténé :
chiffrements : 49199,49196,52393,... (liste des IDs de suites de chiffrement)
extensions : 0,23,65281,... (liste des IDs de types d'extension)
courbes : 29,23,24,... (liste des groupes supportés)
formats : 0 (formats de points EC)
Exemples de Hachages JA3
| Navigateur | JA3 |
|---|---|
| Chrome 120 (Windows 11) | 6734f37431670b3ab4292b8f60f29984 |
| Firefox 121 (Windows 11) | d1b8d7e1c7c8b0a6b1a2c3d4e5f6a7b8 |
| Safari 17 (macOS 14) | 9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d |
| Chrome 120 (Android 14) | b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6 |
Empreinte JA4 (Nouvelle Génération)
JA4 étend JA3 en analysant également :
- Version TLS
- Présence SNI
- Protocoles ALPN
- Paramètres HTTP/2
Format : tls_version.ciphers.extensions.sni.alpn
Empreinte HTTP/2
Les connexions HTTP/2 révèlent des empreintes supplémentaires via :
- Paramètres de trame SETTINGS (MAX_CONCURRENT_STREAMS, INITIAL_WINDOW_SIZE, etc.)
- Synchronisation WINDOW_UPDATE
- Comportement des trames PING
- Structure des trames PRIORITY
Usurpation d'Empreinte TLS
Des outils comme TLSMask et utls peuvent modifier le ClientHello pour imiter un autre navigateur :
ClientHello Réel [Usurpateur TLS] ClientHello Imité Serveur
Approche
- Capturer un vrai ClientHello du navigateur/OS cible
- Stocker comme modèle
- Modifier le ClientHello sortant pour correspondre aux paramètres du modèle
- Transmettre à la destination
Implications pour Obscura :
- L'usurpation TLS peut être faite au niveau proxy, contrairement à Canvas/WebGL/audio
- Go a la bibliothèque
utls(fork decrypto/tlsavec personnalisation ClientHello) - Rust a
tls-parser+ implémentation TLS personnalisée - Le proxy doit de toute façon terminer TLS pour le MITM, donc l'empreinte TLS vue par le serveur sera celle de l'implémentation TLS Go/Rust du proxy sauf si elle est délibérément usurpée
Conclusions
- L'empreinte TLS (JA3/JA4) est traitable au niveau proxy
- La bibliothèque Go
utlsfournit une manipulation directe du ClientHello - Doit être une fonctionnalité centrale d'Obscura
- Sans usurpation TLS, la propre bibliothèque TLS du proxy révélerait qu'un proxy est utilisé