Skip to content

Huella JA3 vs JA4: guía de fingerprinting TLS de cliente

Qué es una huella JA3, en qué se diferencia JA4, por qué el orden aleatorio de extensiones de Chrome rompió JA3 y cómo usan los defensores estas huellas.

Publicado el 8 min de lectura

En resumen. Una huella de cliente TLS resume cómo construye un cliente su ClientHello: qué versiones, suites de cifrado, extensiones y parámetros ofrece. JA3 (2017) calcula el hash MD5 de cinco de esos campos, en el orden de envío. Cuando Chromium empezó a desordenar las extensiones a principios de 2023, el mismo navegador pasó a producir un JA3 distinto en casi cada conexión. JA4 (2023, FoxIO) ordena cifrados y extensiones antes del hash y conserva un prefijo legible, así que se mantiene estable y es más fácil de interpretar. Los defensores usan ambas para agrupar clientes, detectar herramientas que no encajan con el resto de un entorno y pivotar en threat intelligence. Una huella identifica una pila TLS, no un malware.

Por qué tomar la huella del TLS

En una captura, las cargas útiles TLS están cifradas. Lo que sigue siendo legible es el handshake, empezando por el ClientHello. Lleva el nombre del servidor (SNI), los protocolos de aplicación que quiere el cliente (ALPN) y una lista de opciones que dependen de la biblioteca TLS y de cómo la configuró la aplicación. Dos programas distintos con dos bibliotecas distintas rara vez generan ClientHello idénticos; el mismo programa en muchos equipos, normalmente sí.

Eso da a los defensores una forma de decir «estas 40 conexiones vienen del mismo tipo de cliente» sin descifrar nada.

JA3: cinco campos y un MD5

JA3, publicado por ingenieros de Salesforce en 2017, concatena cinco campos del ClientHello como valores decimales:

TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats

Los valores de un mismo campo se unen con guiones, los valores GREASE se ignoran y la cadena completa se pasa por MD5. Su equivalente del lado del servidor, JA3S, hace lo mismo con la versión, el cifrado elegido y las extensiones del ServerHello.

Este es el ClientHello de la captura de ejemplo ficticia de PCAP Parser, una sesión TLS 1.3 hacia g.api.mega.co.nz:

771,4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,
0-23-65281-10-11-35-16-5-13-18-51-45-43-27,29-23-24,0

JA3 = 7f805430de1e7d98b1de033adb58cf46

Destacan dos detalles. La versión es 771 (0x0303, TLS 1.2) aunque la sesión sea TLS 1.3: JA3 lee el campo de versión heredado, y TLS 1.3 negocia su versión real en la extensión supported_versions (43). Y la lista de extensiones se toma en el orden en que el cliente la envió, que es donde está la debilidad de JA3.

Por qué el orden aleatorio de extensiones rompió JA3

A principios de 2023, los navegadores Chromium empezaron a permutar el orden de las extensiones TLS en cada ClientHello. El objetivo era evitar que servidores y equipos intermedios dependieran de un orden fijo, algo que dificulta la evolución del ecosistema TLS. Fastly midió el efecto: con unas quince extensiones, el número de órdenes posibles es tan grande que prácticamente cada conexión obtiene un JA3 nuevo.

El navegador no cambió lo que ofrece, solo el orden. Pero como JA3 incluye el orden en el hash, la huella dejó de ser un identificador estable para Chrome, Edge y otros navegadores Chromium. La documentación de JA4 de FoxIO cita este cambio como una de las razones del nuevo diseño. Algunas herramientas lo sortean ordenando las extensiones antes de calcular JA3, pero así se obtiene un valor distinto del que figura en las fuentes de inteligencia existentes.

JA4: ordenado, truncado y legible

JA4 tiene tres partes unidas por guiones bajos, a_b_c:

ParteContenido
a (legible)protocolo (t TCP, q QUIC, d DTLS), versión TLS más alta, d si hay un dominio en el SNI o i si no, número de cifrados, número de extensiones, primer y último carácter del primer valor ALPN
bprimeros 12 caracteres hexadecimales del SHA-256 de la lista de cifrados, ordenada
cprimeros 12 caracteres hexadecimales del SHA-256 de la lista de extensiones, ordenada, sin SNI ni ALPN, seguida de los algoritmos de firma en el orden de envío

Los valores GREASE se ignoran en todo momento. La misma sesión de ejemplo da:

t13d1514h2_8daaf6152771_bc9a4605e104

Lee el prefijo: TLS sobre TCP, versión 1.3, SNI con dominio, 15 suites de cifrado, 14 extensiones, ALPN h2. Las otras dos sesiones del ejemplo, del mismo cliente, dan t13d1514h1_8daaf6152771_bc9a4605e104: solo cambia la parte ALPN (http/1.1 pasa a h1), y los dos hashes son idénticos. Esa es la ventaja práctica: puedes comparar la huella completa, solo b y c, o el prefijo, y ver de un vistazo por qué difieren dos valores.

Como las extensiones se ordenan, la permutación de Chromium no afecta a JA4. Y como la versión sale de supported_versions, TLS 1.3 aparece como 13 en lugar del 771 heredado.

Sobre la licencia: la huella de cliente TLS JA4 se publica bajo la licencia BSD 3-Clause, mientras que los demás métodos de la familia JA4+ usan la FoxIO License 1.1. Revisa el repositorio antes de integrar JA4+ en un producto comercial.

JA3 frente a JA4 de un vistazo

JA3JA4
Publicación2017, Salesforce2023, FoxIO
Camposversión, cifrados, extensiones, curvas, formatos de puntoprotocolo, versión, tipo de SNI, recuentos, ALPN, cifrados, extensiones, algoritmos de firma
Ordental como se envíacifrados y extensiones ordenados
HashMD5 de la cadena completaSHA-256 truncado en dos partes, prefijo legible
Versión en TLS 1.3campo heredado (771)supported_versions más alto (13)
Estable con extensiones desordenadasnosí
QUICno definidodefinido (prefijo q)

Cómo usan los defensores las huellas TLS

Agrupar los clientes de una captura

Agrupa las sesiones TLS por JA4 y cuenta los hosts por valor. En una red de oficina típica, la mayoría de las sesiones proceden de un puñado de pilas de navegador y sistema operativo. Una huella que solo aparece en un equipo, hacia destinos con los que nada más habla, merece una mirada más atenta.

Detectar incoherencias

Si el tráfico HTTP de un host dice ser un navegador en su user agent, pero sus sesiones TLS llevan una huella típica de una biblioteca de un lenguaje de scripting, hay algo distinto del navegador abriendo conexiones. El mismo razonamiento vale para un servidor que de repente inicia TLS con una pila nueva.

Pivotar con inteligencia, con cuidado

Las plataformas de threat intelligence y los informes de fabricantes publican huellas asociadas a herramientas concretas. Una coincidencia es una pista, no un veredicto. Combínala con el SNI, el JA3S del servidor, la reputación del destino, la cronología y las evidencias del host. Anota siempre qué variante de huella usa cada fuente (JA3 en bruto, JA3 ordenado, JA4).

Establecer una línea base de tu entorno

Elabora una lista de las huellas que se ven normalmente en tu red, por función de host. Así los valores nuevos destacan sin necesidad de ninguna lista externa.

Límites que conviene conocer

  • No son exclusivas del malware. Todo programa que use la misma biblioteca con la misma configuración tiene la misma huella. La pila TLS integrada de Windows, por ejemplo, la comparten muchas aplicaciones.
  • Se pueden imitar. Existen bibliotecas que reproducen el ClientHello de un navegador. Una huella de navegador no demuestra que sea un navegador.
  • Encrypted Client Hello. Con ECH (RFC 9849), el ClientHello real, incluido el nombre real del servidor, va cifrado dentro de un ClientHello externo con valores inocuos. Los observadores toman la huella del mensaje externo y ven un nombre público, no el destino real.
  • QUIC. HTTP/3 funciona sobre QUIC, donde el ClientHello viaja dentro de paquetes QUIC cifrados. JA4 define una variante q, pero una herramienta tiene que decodificar QUIC para calcularla; PCAP Parser todavía no decodifica QUIC.

Ver JA3 y JA4 en una captura

PCAP Parser calcula JA3 (cadena y MD5), JA4 y JA3S de cada sesión TLS que encuentra sobre TCP, y los muestra junto al SNI, el ALPN y las versiones ofrecida y negociada en su pestaña TLS. Filtra por una huella para listar todas las sesiones que la comparten y exporta la vista. El recorrido guiado muestra la vista TLS, y la comparativa de herramientas enumera otras herramientas que calculan estas huellas. Para la parte de resolución de nombres de la misma investigación, sigue con análisis DNS en un pcap.

FAQ

¿Qué diferencia hay entre JA3 y JA4?

JA3 es un hash MD5 de cinco campos del ClientHello en el orden en que el cliente los envió. JA4 es una huella en tres partes, en parte legible, que ordena los cifrados y las extensiones antes de calcular su hash con SHA-256 truncado, y que registra en claro el protocolo, la versión TLS, la presencia de SNI, los recuentos y el ALPN.

¿Por qué JA3 dejó de funcionar con Chrome?

Desde principios de 2023, los navegadores Chromium desordenan aleatoriamente las extensiones TLS en cada ClientHello. JA3 calcula el hash de las extensiones en el orden de envío, así que el mismo navegador produce un JA3 distinto en casi cada conexión. JA4 ordena primero las extensiones, por lo que su valor se mantiene estable.

¿Una huella TLS identifica malware?

No, identifica una implementación y configuración de cliente TLS. Muchos programas sin relación comparten la misma biblioteca y, por tanto, la misma huella. Usa las huellas para agrupar y priorizar, y confirma con el destino, la cronología, las evidencias del host y otros indicadores.

Artículos relacionados

Cómo leer el DNS en una captura de red: consultas y respuestas, códigos de resultado, dominios raros o aleatorios y señales de tunelización DNS y sus límites.
Guía paso a paso de PCAP Parser: carga una captura y lee conversaciones, jerarquía de protocolos, DNS, HTTP, TLS, archivos extraídos e IOC, y exporta.
Comparativa justa de Wireshark, tshark, NetworkMiner, Zeek, Zui y PCAP Parser para analizar pcap: puntos fuertes, límites y qué herramienta usar en cada caso.