Uma impressão digital JA3 é um hash MD5 derivado de campos específicos dentro de uma mensagem TLS Client Hello, usada para identificar de forma única a aplicação ou biblioteca cliente que inicia uma conexão TLS, servindo assim como um método robusto de fingerprinting de cliente TLS e de detecção de proxy.
Entendendo o fingerprinting de cliente TLS
Quando um cliente inicia um handshake TLS, ele envia uma mensagem Client Hello contendo diversos parâmetros necessários para estabelecer uma conexão segura. Esses parâmetros incluem a versão do TLS, uma lista de cipher suites suportadas, extensões, curvas elípticas e formatos de curvas elípticas. A combinação e a ordem específicas desses parâmetros costumam ser únicas para uma determinada aplicação cliente, sistema operacional e biblioteca TLS. Essa assinatura distinta permite identificar o cliente, mesmo que outras informações de identificação (como as strings de user-agent) sejam modificadas ou estejam ausentes.
O que é uma impressão digital JA3?
Desenvolvido pela Salesforce, o JA3 é um método para criar uma impressão digital padronizada da mensagem Client Hello. Ele se concentra em cinco campos-chave do Client Hello:
- Versão do TLS: A versão mais alta do TLS que o cliente suporta.
- Cipher Suites: Uma lista separada por vírgulas das cipher suites que o cliente suporta, ordenada por preferência.
- Extensões TLS: Uma lista separada por vírgulas das extensões TLS que o cliente inclui, ordenada por tipo.
- Curvas Elípticas: Uma lista separada por vírgulas das curvas elípticas suportadas.
- Formatos de Curva Elíptica: Uma lista separada por vírgulas dos formatos de curva elíptica suportados.
Esses cinco valores são concatenados em uma única string, usando "," como separador das listas e "-" como separador entre os cinco campos principais. Essa string concatenada é então processada com MD5 para produzir a impressão digital JA3 final de 32 caracteres. O uso do MD5 é por brevidade e consistência, não por segurança criptográfica.
Exemplo de cálculo de JA3
Considere um Client Hello hipotético com os seguintes parâmetros:
- Versão do TLS:
0x0303(TLS 1.2) - Ciphers:
0xc02c,0xc02b,0xc030,0xc02f,0x009c,0x0095 - Extensões:
0x0000,0x000b,0x000a,0x0012,0x0023,0x0017,0x0010,0x0035,0xff01,0x000d,0x0005 - Curvas Elípticas:
0x001d,0x0023,0x0024 - Formatos de Curva Elíptica:
0x0000,0x0001,0x0002
A string concatenada seria:
769,49164-49163-49168-49167-156-149,0-11-10-18-35-23-16-53-65281-13-5,29-35-36,0-1-2
O hash MD5 dessa string seria a impressão digital JA3, por exemplo, e66a3d11b302c086d0b604e769494441.
JA3 na detecção de proxy
Proxies, em especial os forward proxies e aqueles que fazem interceptação TLS, frequentemente modificam ou encerram e reiniciam conexões TLS. Esse processo altera inerentemente a mensagem Client Hello, resultando em uma impressão digital JA3 diferente da do cliente original.
Como os proxies influenciam as impressões digitais JA3
-
Forward proxies (HTTPS): Quando um cliente se conecta a um proxy HTTPS, o proxy estabelece uma nova conexão TLS com o servidor de destino. A mensagem
Client Helloobservada pelo servidor de destino tem origem no software do proxy, e não no cliente final. Como consequência, a impressão digital JA3 reflete a stack TLS do proxy (por exemplo, Squid, Nginx, HAProxy ou software de proxy customizado) em vez do navegador ou aplicação realmente usados pelo usuário final. Essa discrepância é um forte indício de uso de proxy. -
Proxies de interceptação TLS (MITM): Esses proxies encerram explicitamente a conexão TLS vinda do cliente e estabelecem uma nova conexão TLS, separada, com o destino. Isso é comum em ambientes corporativos para inspeção ou por parte de agentes maliciosos. O
Client Helloenviado ao servidor de destino é gerado pelo proxy de interceptação, resultando em uma impressão digital JA3 característica do software de interceptação. -
Proxies SOCKS: Proxies SOCKS podem operar em um nível mais baixo, tunelando conexões TCP brutas. Se um proxy SOCKS simplesmente encaminha o fluxo TCP sem modificar o handshake TLS, o
Client Hellooriginal do cliente pode passar intacto, e a impressão digital JA3 permaneceria a mesma. No entanto, muitas implementações SOCKS ou configurações específicas ainda podem encerrar e reiniciar o TLS ou alterar informações de cabeçalho, levando a um JA3 modificado.
Identificando proxies com JA3
Ao analisar as mensagens Client Hello recebidas, um servidor pode:
- Detectar discrepâncias: Comparar a impressão digital JA3 com outros indicadores do cliente, como o cabeçalho
User-Agent. UmUser-Agentque afirma ser Chrome no Windows, mas apresenta uma impressão digital JA3 conhecida por pertencer a um servidor proxy ou a uma biblioteca de scraping específica, indica uso de proxy ou spoofing. - Categorizar o tráfego: Identificar tráfego originado de serviços de proxy conhecidos, data centers ou botnets que usam stacks TLS consistentes.
- Bloquear/limitar: Implementar políticas para bloquear ou limitar conexões de impressões digitais JA3 específicas associadas a tráfego indesejado (por exemplo, scrapers, bots ou sistemas comprometidos).
JA3 vs. JA3S
Enquanto o JA3 gera a impressão digital do Client Hello do cliente, o JA3S (JA3 Server) gera a impressão digital da mensagem Server Hello do servidor. O JA3S se concentra na versão do TLS, na cipher suite e nas extensões do Server Hello. Embora seja útil para identificar implementações TLS do lado servidor, é menos diretamente aplicável à detecção de proxy no cliente.
Limitações e técnicas de evasão
Apesar de poderoso, o fingerprinting JA3 não é infalível:
- Spoofing: Clientes sofisticados, bots ou serviços de proxy podem ser configurados para imitar intencionalmente impressões digitais JA3 específicas, falsificando de forma eficaz um navegador legítimo. Isso exige controle sobre os parâmetros do
Client Helloda biblioteca TLS. - Atualizações de bibliotecas TLS: Atualizações em bibliotecas TLS (por exemplo, OpenSSL, NSS, BoringSSL) ou em sistemas operacionais podem alterar os parâmetros do
Client Hello, mudando a impressão digital JA3 de um cliente que, no restante, é idêntico. Isso exige monitoramento e atualização contínuos das bases de assinaturas JA3. - Diversidade de bibliotecas: Diferentes bibliotecas de cliente HTTP (por exemplo,
requestsdo Python,net/httpdo Go,httpsdo Node.js) e suas implementações TLS subjacentes (por exemplo, OpenSSL, GnuTLS, BoringSSL,crypto/tlsdo Go) produzirão naturalmente impressões digitais JA3 distintas.
Variações comuns de impressão digital JA3
| Tipo de cliente | Características típicas do JA3
O JA3 é uma ferramenta poderosa para identificar e detectar diversos tipos de tráfego de clientes, particularmente no contexto de serviços de proxy e detecção de bots. Saber interpretar e mitigar impressões digitais JA3 é fundamental tanto para provedores quanto para consumidores de proxy.
