Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Fingerprints JA3 e JA4 no AWS WAF e além

By Tyler WengerdApr 10, 20259 min read

Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.

Vamos falar sobre fingerprints | Fonte: Everett Collection/Shutterstock

Se você já analisou logs do AWS WAF, talvez tenha reparado nos campos ja3fingerprint e ( mais recentemente) ja4fingerprint. Se está se perguntando o que são, seja bem-vindo! E se nunca tinha visto antes, mas agora ficou curioso… seja bem-vindo também!

Neste artigo, vamos ver o que são esses fingerprints, como eles podem ser úteis em qualquer serviço de nuvem que você use e como detectá-los, analisá-los e trabalhar com eles na AWS, no Google Cloud e no Azure. Também vamos compartilhar alguns exemplos de queries para usar com logs do AWS WAF.

Afinal, o que são os fingerprints JA3 e JA4?

Os fingerprints JA3 e JA4 (que se pronunciam "djei-ei-três" e "djei-ei-quatro") são identificadores de cliente calculados por serviços como o AWS WAF e podem ser muito úteis para identificar tipos de tráfego, principalmente para mitigar ataques em potencial ou em andamento.

Um pouco de história

Pode parecer estranho, mas o JA3 e o JA4 não foram precedidos por JA1 e JA2. O nome "JA3" vem das iniciais dos três desenvolvedores "J.A." da ferramenta:

  • John Althouse
  • Josh Atkins
  • Jeff Atkinson

(Fonte: uma excelente apresentação dos próprios John Althouse e Jeff Atkinson: Profiling And Detecting All Things SSL With JA3 )

O trabalho deles partiu dos esforços de análise de cipher suites TLS de Ivan Ristić e também de Lee Brotherston.

O JA3 foi inventado na Salesforce, e o JA4 é seu sucessor direto, criado pela FoxIO — uma empresa cofundada por John Althouse e por um quarto(!) J.A., Josh Alexander.

Os dois fingerprints são open-source, mas a FoxIO também licencia um conjunto maior chamado JA4+, com termos de licenciamento próprios. A AWS hoje não dá suporte a nenhum recurso JA4+, mas várias outras ferramentas de rede e segurança dão.

Uma explicação curta (e simplificada)

Em uma frase: os fingerprints JA3 e JA4 são uma forma de identificar clientes (qualquer coisa que acessa um serviço) com base nas informações do pacote Client Hello do handshake TLS inicial enviado a esses serviços, independentemente de endereço IP, portas, geolocalização ou outras variáveis comuns.

Fluxo simplificado do handshake TLS 1.2 | Fonte: Wikimedia Commons

Como os fingerprints JA3 e JA4 são calculados

Os fingerprints JA3 são calculados (conforme descrito no repositório oficial open-source) usando os seguintes campos do pacote Client Hello:

Esses campos são enumerados, organizados em uma única string, e essa string passa por um hash MD5 para gerar uma string mais curta.

Detalhes em texto de um pacote Client Hello capturado pelo Wireshark

Aqui vai uma captura no Wireshark de um handshake TLS 1.3 feita na minha máquina. Olha só, ela mostra o fingerprint JA3!

Os fingerprints de cliente JA4 usam os seguintes detalhes do Client Hello, como descrito no repositório do JA4:

  • Protocolo (TCP ou QUIC)
  • Versão do TLS
  • O SNI está sendo usado? (sim="d" para domínio, não="i" para IP)
  • Cipher suites (quantas e quais)
  • Extensões (quantas e quais)
  • Valor da extensão ALPN (Application-Layer Protocol Negotiation; alguns exemplos são códigos curtos para HTTP/2, HTTP/3, POP3, DNS-over-TLS, SPDY/3 e outros)

Slide com um diagrama mostrando como cada parte do fingerprint de cliente JA4 é calculada

Um ótimo detalhamento visual de como cada parte de um fingerprint JA4 é calculada | Fonte: repositório JA4 da FoxIO; licença BSD-3-Clause.

Esses detalhes não passam por hash MD5; algumas partes da assinatura já vêm com hash e truncadas, então a assinatura final tem só 36 caracteres.

Uma demonstração rápida

O site https://ja4db.com mostra o seu fingerprint JA4 atual — vale a pena testar!

Por que vale a pena usar fingerprints JA3/JA4?

Caso de uso 1: Rate limiting

Tradicionalmente, as regras de rate limiting em WAFs ou em outras camadas de proteção se baseiam em endereço IP, caminho da URI ou outras partes das requisições do cliente.

Limitar a taxa de requisições com base no fingerprint específico do cliente traz os seguintes benefícios:

  • Evita falsos positivos que podem ocorrer com limites baseados em IP ou em outros critérios comuns
  • Limita atacantes que usam o mesmo fingerprint/ferramenta, independentemente do endereço IP

Tanto o Google Cloud Armor quanto o AWS WAF oferecem esse recurso.

Screenshot parcial de uma tela de configuração de regra do AWS WAF, mostrando \

A AWS permite usar fingerprints JA3 ou JA4 como chaves de agregação em uma regra de rate-limit

Caso de uso 2: Blocklisting

Se você já conhece um ou mais fingerprints maliciosos, basta adicioná-los a uma blocklist. O Google Cloud Armor e o AWS WAF também oferecem esse recurso.

Caso de uso 3: Threat hunting

Threat hunting é uma prática defensiva que busca detectar ameaças no seu ambiente de forma proativa. Por exemplo, se sai uma notícia sobre novos endereços IP de servidores C2 descobertos em campo, dá para verificar nos seus logs de rede se houve alguma comunicação com esses IPs.

Da mesma forma, se você consegue detectar fingerprints JA3/4 no seu ambiente de rede, pode varrer os logs em busca de fingerprints de clientes maliciosos recém-descobertos. Esses fingerprints são só mais uma ferramenta no seu arsenal.

Fingerprints vs. endereços IP

Como os fingerprints JA3 e JA4 rastreiam detalhes específicos sobre os clientes, há cenários em que eles são extremamente úteis para a defesa, em vez de tentar rastrear ou bloquear endereços IP:

  • Um atacante com um script de ataque customizado provavelmente terá um fingerprint único, que depende das bibliotecas, do sistema operacional etc.
  • O tráfego de malware em vários laptops corporativos comprometidos provavelmente terá o mesmo fingerprint, ou no mínimo um conjunto bem pequeno deles.
  • Fingerprints de ferramentas maliciosas conhecidas podem ser compartilhados e bloqueados automaticamente antes mesmo que esse tipo de tráfego seja detectado na rede.

JA3 vs. JA4

O ideal é usar fingerprints JA4, mas os JA3 ainda são úteis quando você sabe o que está procurando. Veja algumas diferenças importantes:

  • Os fingerprints JA4 são baseados em mais informações do que os JA3.
  • O JA3 foi criado e patrocinado pela Salesforce, mas não é mais mantido ativamente.
  • Como tudo no mundo da cibersegurança, as pesquisas e os métodos de evasão de detecção estão sempre evoluindo. O JA3 existe há mais tempo e tem mais formas conhecidas de driblar a detecção.
  • Alguns clientes (entre eles Chrome e Firefox) já permitem embaralhar partes do pacote Client Hello. Isso muda o fingerprint JA3, mas o método JA4 usa ordenação para manter os fingerprints consistentes.
  • Os dois tipos de fingerprint têm bancos de dados mantidos pela comunidade. O maior banco de dados público de JA3 que encontrei tem pouco mais de 128.000 entradas, pelas minhas contas. Também contei cerca de 105.000 entradas no banco de dados JA4+ no momento em que escrevo este artigo.
  • O JA3 tem um legado mais longo, mas o suporte ao JA4 está ativo e crescendo. Enquanto eu escrevia este artigo, por exemplo, a AWS anunciou que o serviço Network Firewall agora oferece filtragem por JA4!

Outras considerações

Falsos positivos Aplicar regras agressivas de rate-limiting com base no valor do fingerprint pode gerar muitos falsos positivos, principalmente em cenários com muitos clientes parecidos. Usar dados adicionais do cliente, como a ordem dos cabeçalhos detalhada neste post da AWS, ajuda a reduzir bloqueios de usuários legítimos.

Os bancos de dados ainda estão crescendo Como os bancos de dados públicos de JA3 e JA4 são mantidos pela comunidade, depender só deles pode não ser ideal se você precisa de detecção de ameaças de ponta. Provedores de nuvem e serviços gerenciados de segurança costumam manter bases privadas de fingerprints maliciosos, então vale considerar regras gerenciadas como o grupo de regras Bot Control da AWS.

A astúcia do atacante varia Aqui na DoiT, já ajudamos clientes a analisar tanto ataques que pareciam bem simples — um único fingerprint em vários IPs, sugerindo o uso de uma ferramenta básica de DoS — quanto ataques que realmente não puderam ser amarrados a um fingerprint JA3/4 consistente. As capacidades, os recursos e a paciência de cada atacante variam.

E o Azure? O Azure também merece um espaço nessa conversa! As ferramentas do Azure ainda não suportam recursos personalizados de JA3 e JA4 da mesma forma direta que a AWS e o Google Cloud, mas algumas ferramentas de segurança incluem capacidades de fingerprinting:

Como usar isso na AWS?

Logging e regras baseadas em fingerprints JA3 e JA4 têm bom suporte na AWS, e vou focar nos recursos da AWS na seção a seguir.

Logging de requisições

O primeiro passo é conseguir registrar os fingerprints JA3 e JA4! Os seguintes tipos de recursos da AWS suportam campos de fingerprint JA3 e JA4 nos seus logs:

Exemplo de logs do AWS WAF mostrando os valores dos meus fingerprints JA3 e JA4. Não me bloqueia!

Bloqueio e rate-limiting com base em valores de fingerprint

Já comentei sobre esse recurso nas seções anteriores, mas aqui vai uma lista prática da documentação citada:

Análise de logs

Abaixo estão algumas queries do CloudWatch Log Insights que já usei para investigar fingerprints JA3 e JA4 em tráfego do WAF.

Contagem dos principais fingerprints JA3

fields ja3Fingerprint
| stats count(*) as requestCount by ja3Fingerprint
| sort requestCount desc

Screenshot do Logs Insights mostrando uma query e uma lista de fingerprints com a frequência em que aparecem nos logs

1.097? Será que é demais?

Contagem dos principais fingerprints JA4, separados por caminho da URL e user agent

parse @message /\{\"name\":\"[Uu]ser\-[Aa]gent\",\"value\"\:\"(?<useragent>[^"\}]*)/
| stats count(*) as requestCount by ja4Fingerprint, httpRequest.uri, useragent
| sort requestCount desc

Screenshot do Logs Insights mostrando uma query e uma lista de fingerprints com a frequência em que aparecem nos logs, junto com detalhes de user agent e caminho

Adicionar mais informações deixa muito mais claro o que está acontecendo!

Fingerprints de requisições bloqueadas por regras baseadas em taxa

Repare que isso checa qualquer regra baseada em taxa. É útil quando você tem regras rate-based por IP em vigor e quer ver se há algum fingerprint em comum.

fields @timestamp, httpRequest.clientIp as ClientIP, terminatingRuleId as rule, httpRequest.country as Country, ja4Fingerprint
| filter action = "BLOCK"
| filter terminatingRuleType = "RATE_BASED"
| stats count(*) as count by ja4Fingerprint, ClientIP, rule, Country | sort by count desc

Screenshot do Logs Insights mostrando uma query de tráfego bloqueado (vindo de regras rate-based) e uma lista de fingerprints e endereços IP redigidos, ordenados por contagem

Clientes diferentes podem ter o mesmo IP, mas fingerprints distintos

A AWS tem mais exemplos neste post do blog e neste artigo do re:Post. Você vai precisar adaptá-los para incluir fingerprints JA3/4, mas é um ótimo ponto de partida para descobrir o que pode ser útil no seu cenário.

Mais informações

Abaixo está uma lista das fontes e ferramentas mais úteis que encontrei sobre fingerprinting JA3 e JA4.

Fontes oficiais

Ferramentas

Posts de blog

Apresentações

Os fingerprints JA3 e JA4 são uma adição extremamente valiosa às várias opções de detecção e análise que você já pode ter à disposição — seja você analista de segurança, engenheiro de nuvem, o profissional faz-tudo de um time pequeno tentando dar conta de um ataque DDoS, ou qualquer outro papel que esteja exercendo quando se deparar com isso na vida real.

Tem dúvidas sobre como proteger o seu ambiente de nuvem?

Fale com a DoiT hoje mesmo para conversar sobre como podemos ajudar a maximizar a eficiência, o custo-benefício e a segurança do seu ambiente de nuvem. Com a DoiT, você tem acesso a expertise em nuvem exclusivamente sênior para consultoria, capacitação e suporte, e estamos aqui sempre que precisar de orientação especializada, uma segunda opinião, apoio na adoção de novas tecnologias ou ajuda para apagar incêndios em produção.

Se quiser se aprofundar em outros temas de segurança e arquitetura de nuvem, confira os posts do nosso blog de engenharia de nuvem.