O que faz
Um JA4 é uma impressão digital (fingerprint) de um cliente TLS, calculada a partir dos campos do seu ClientHello: a versão do TLS, as cifras que ele oferece, as extensões que envia, os algoritmos de assinatura e o ALPN. Dois clientes que montam o ClientHello da mesma forma produzem o mesmo JA4, e é assim que servidores, proxies e sensores passivos reconhecem o software cliente sem descriptografar nada. Esta ferramenta decodifica um JA4 em suas partes, ou calcula o JA4 com hash a partir dos valores brutos, sem hash. Tudo roda no seu navegador.
Como um JA4 é formado
Um JA4 tem três seções unidas por sublinhados, JA4_a_JA4_b_JA4_c, por exemplo t13d1516h2_8daaf6152771_e5627efa2ab1.
- JA4_a é legível e tem dez caracteres:
- transporte:
tpara TLS sobre TCP,qpara QUIC,dpara DTLS; - versão do TLS:
13para TLS 1.3,12para 1.2, e assim por diante, lida da extensão supported_versions quando presente; - SNI:
dquando o ClientHello carrega um nome de servidor (um domínio),iquando não carrega (um IP puro); - a contagem de cifras em dois dígitos;
- a contagem de extensões em dois dígitos (essa contagem inclui SNI e ALPN);
- o marcador ALPN: o primeiro e o último caractere do primeiro valor de ALPN, ou seja,
h2para HTTP/2, ou00quando não há ALPN.
- transporte:
- JA4_b são os primeiros doze caracteres hexadecimais do SHA-256 da lista de cifras, ordenada.
- JA4_c são os primeiros doze caracteres hexadecimais do SHA-256 da lista de extensões (ordenada, com SNI e ALPN removidos) seguida da lista de algoritmos de assinatura em sua ordem original.
Como JA4_b e JA4_c são hashes truncados, eles são unidirecionais: a ferramenta pode exibi-los, mas não consegue recuperar as listas de cifras ou extensões a partir deles.
GREASE
O GREASE (os valores reservados do draft-davidben-tls-grease) mantém o TLS extensível fazendo os clientes enviarem valores aleatórios não usados que os servidores devem ignorar. O JA4 também os ignora, então eles nunca afetam as contagens nem os hashes. Se você colar valores brutos que incluam GREASE, esta ferramenta os filtra antes de contar, ordenar e fazer o hash.
A ordenação é o que torna o JA4 robusto
Fingerprints mais antigos como o JA3 faziam o hash das listas de cifras e extensões na ordem em que o cliente as enviava. Navegadores modernos hoje embaralham deliberadamente a ordem das extensões TLS a cada conexão, o que muda o JA3 toda vez e o derrota. O JA4 ordena as cifras e extensões antes de fazer o hash, então a impressão digital permanece estável mesmo quando o cliente embaralha a ordem. Esse é o principal motivo pelo qual o JA4 substituiu, em grande parte, o JA3.
Exemplo prático
A impressão digital t13d1516h2_8daaf6152771_e5627efa2ab1 decodifica para TLS sobre TCP, TLS 1.3, SNI presente, 15 cifras, 16 extensões e ALPN h2 (HTTP/2). Este é o exemplo prático da especificação do JA4, e é um dos vetores de teste desta ferramenta: o SHA-256 da sua lista ordenada de cifras dá 8daaf6152771, e as extensões ordenadas mais os algoritmos de assinatura dão e5627efa2ab1.
Uma nota sobre licenciamento
O JA4 (fingerprinting de cliente TLS) é publicado pela FoxIO sob a licença permissiva BSD 3-Clause, os mesmos termos do JA3 original, então é livre para implementar, inclusive em ferramentas comerciais. Os outros membros da família JA4+, como JA4S, JA4H, JA4X e JA4T, estão sob a FoxIO License 1.1, que não permite monetização sem um acordo à parte, então esta ferramenta implementa apenas o JA4.
O JA3, o predecessor
Esta ferramenta também trata o JA3, o fingerprint mais antigo que o JA4 substituiu. Um JA3 é o MD5 de cinco campos decimais do ClientHello na ordem em que foram enviados: SSLVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats, por exemplo 769,47-53-5-10-49161-49162-49171-49172-50-56-19-4,0-10-11,23-24-25,0. Cole uma string JA3 e a ferramenta calcula o MD5 e separa os campos; cole um MD5 puro de 32 caracteres e ela o reconhece como um hash JA3 que, sendo unidirecional, não pode ser decodificado. O JA3 é BSD 3-Clause como o JA4. Ele é sensível à ordem, então um navegador que embaralha a ordem das extensões produz um JA3 diferente a cada conexão, o que é a razão de o JA4 existir.
Como usar
A ferramenta detecta automaticamente o que você cola: um JA4 tem sublinhados, enquanto um JA3 são campos decimais separados por vírgulas, ou um MD5 puro. Cole um JA4 com hash para decodificá-lo, um JA4_r bruto (o valor JA4_a seguido das listas brutas de cifras, extensões e algoritmos de assinatura, separadas por sublinhados) para calcular o JA4 com hash, uma string JA3 para calcular seu MD5 e ver seus campos, ou um MD5 de JA3 para identificá-lo. O caminho do JA4 bruto ordena e filtra o GREASE das listas para você, então entradas em ordem ordenada ou original produzem o mesmo JA4 canônico.