Resumen
El fingerprinting TLS identifica clientes mediante los parámetros que envían durante el handshake TLS (mensaje ClientHello). Diferentes navegadores y sistemas operativos usan diferentes configuraciones TLS.
Fingerprint JA3
JA3 es un hash computado a partir del ClientHello TLS:
JA3 = MD5(Ciphers + Extensions + EllipticCurves + EllipticCurvePointFormats)
Donde cada campo se concatena:
ciphers: 49199,49196,52393,... (lista de IDs de suites de cifrado)
extensions: 0,23,65281,... (lista de IDs de tipos de extensión)
curves: 29,23,24,... (lista de grupos soportados)
formats: 0 (formatos de punto EC)
Ejemplos de Hashes JA3
| Navegador | JA3 |
|---|---|
| Chrome 120 (Windows 11) | 6734f37431670b3ab4292b8f60f29984 |
| Firefox 121 (Windows 11) | d1b8d7e1c7c8b0a6b1a2c3d4e5f6a7b8 |
| Safari 17 (macOS 14) | 9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d |
| Chrome 120 (Android 14) | b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6 |
Fingerprint JA4 (Siguiente Generación)
JA4 extiende JA3 analizando también:
- Versión TLS
- Presencia de SNI
- Protocolos ALPN
- Configuraciones HTTP/2
Formato: tls_version.ciphers.extensions.sni.alpn
Fingerprinting HTTP/2
Las conexiones HTTP/2 revelan fingerprints adicionales mediante:
- Parámetros de la trama SETTINGS (MAX_CONCURRENT_STREAMS, INITIAL_WINDOW_SIZE, etc.)
- Tiempo de WINDOW_UPDATE
- Comportamiento de PING
- Estructura de trama Priority
Falsificación del Fingerprint TLS
Herramientas como TLSMask y utls pueden modificar el ClientHello para imitar otro navegador:
ClientHello real [Falsificador TLS] ClientHello imitado Servidor
Enfoque
- Capturar un ClientHello real del navegador/SO objetivo
- Almacenar como plantilla
- Modificar el ClientHello saliente para que coincida con los parámetros de la plantilla
- Reenviar al destino
Implicaciones para Obscura:
- La falsificación TLS puede hacerse a nivel de proxy, a diferencia de Canvas/WebGL/audio
- Go tiene la librería
utls(fork decrypto/tlscon personalización de ClientHello) - Rust tiene
tls-parser+ implementación TLS personalizada - El proxy debe terminar TLS de todos modos para MITM, así que el fingerprint TLS visto por el servidor será la implementación TLS Go/Rust del proxy a menos que se falsifique conscientemente
Conclusiones
- El fingerprinting TLS (JA3/JA4) es abordable a nivel de proxy
- La librería
utlsde Go proporciona manipulación directa de ClientHello - Debe ser una funcionalidad principal de Obscura
- Sin falsificación TLS, la propia librería TLS del proxy filtraría que hay un proxy en uso