Pular para o conteúdo
Glossary 8 min de leitura 1005 visualizações

Fingerprint JARM

Conheça o fingerprinting JARM, uma técnica para identificar servidores TLS e proxies a partir das características únicas de seu handshake TLS.

Security
Fingerprint JARM

Uma fingerprint JARM é um método passivo de fingerprinting TLS do lado do cliente, usado para identificar a stack TLS específica de um servidor ou proxy pela análise de sua resposta a uma série de sondagens ClientHello TLS especialmente construídas. Desenvolvido pela Salesforce, o JARM fornece uma fingerprint única da implementação TLS de um servidor, permitindo que operadores identifiquem softwares de servidor específicos, detectem proxies e rastreiem infraestrutura.

Entendendo as fingerprints JARM

O fingerprinting JARM (Just Another Rather Marvelous) funciona enviando 10 pacotes ClientHello TLS distintos a um servidor-alvo. Cada ClientHello é construído com variações específicas e ordenadas em seus parâmetros, como versões TLS suportadas, cipher suites, extensões e curvas elípticas. As respostas do servidor a essas sondagens — que incluem a versão TLS escolhida, a cipher suite, as extensões e outros parâmetros do handshake — são então concatenadas e submetidas a hash para produzir uma fingerprint de 62 caracteres.

Esse processo explora diferenças sutis na forma como as diversas stacks TLS (por exemplo, OpenSSL, Microsoft SChannel, crypto/tls do Go, BoringSSL, LibreSSL) negociam handshakes TLS. Mesmo pequenas diferenças de configuração ou de nível de patch podem resultar em fingerprints JARM distintas.

Detalhes das sondagens JARM

As 10 sondagens ClientHello variam em várias dimensões:
* Versões TLS: as sondagens miram versões TLS específicas (por exemplo, TLS 1.0, 1.1, 1.2, 1.3).
* Cipher suites: cada sondagem inclui uma lista e uma ordem distintas de cipher suites.
* Extensões: são usados conjuntos e ordens diferentes de extensões TLS (por exemplo, SNI, ALPN, renegotiation_info, supported_groups).
* Curvas elípticas: incluem-se variações nas curvas elípticas suportadas.

A resposta ServerHello do servidor a cada uma dessas 10 sondagens é capturada. Os principais campos extraídos dessas respostas incluem:
* Versão TLS negociada
* Cipher suite escolhida
* Lista de extensões presentes
* Forma da resposta da extensão SNI (se houver)

Esses campos extraídos são então concatenados em uma única string. Essa string passa em seguida por um hash MD5, e um subconjunto desse hash, junto com um hash SHA-256 da string completa de respostas, forma a fingerprint JARM final de 62 caracteres. A fingerprint é estruturada de modo a codificar informações sobre as respostas a cada uma das 10 sondagens.

Por que o JARM é útil para serviços de proxy

As fingerprints JARM oferecem várias aplicações práticas para organizações que operam ou interagem com serviços de proxy.

Identificação de servidor e software

O JARM consegue identificar com precisão a biblioteca TLS subjacente e a configuração de um servidor ou proxy. Isso permite:
* Classificação de software: diferenciar servidores web comuns como Nginx, Apache HTTP Server, Microsoft IIS, Caddy, ou servidores de aplicação como Tomcat e Jetty.
* Detecção de versão: com frequência, versões ou níveis de patch diferentes do mesmo software geram fingerprints JARM distintas, por causa de mudanças na implementação da stack TLS.
* Detecção de configuração incorreta: fingerprints inesperadas podem indicar configurações fora do padrão ou possíveis problemas de segurança.

Detecção e caracterização de proxies

Para um serviço de proxy, identificar proxies intermediários é fundamental para entender caminhos de rede e postura de segurança.
* Proxies reversos e CDNs: quando um cliente se conecta a um servidor por trás de um proxy reverso, load balancer ou Content Delivery Network (CDN), a fingerprint JARM refletirá a stack TLS do nó de borda do proxy/CDN, não a do servidor de origem. Isso permite identificar serviços como Cloudflare, Akamai, AWS CloudFront ou Nginx/HAProxy atuando como proxy reverso.
* Proxies forward: um proxy forward pode apresentar sua própria stack TLS ao realizar interceptação TLS (MITM). Se a conexão de um cliente for interceptada, a fingerprint JARM obtida pelo cliente pertencerá ao proxy forward, e não ao destino pretendido. Proxies forward que não interceptam normalmente repassam o ClientHello, preservando o JARM do servidor de origem.
* WAFs (Web Application Firewalls): muitos WAFs operam como proxies reversos e apresentarão sua própria fingerprint JARM.

Segurança e threat intelligence

O JARM é uma ferramenta valiosa em operações de segurança:
* Identificação de C2 de malware: agentes de ameaça costumam reutilizar stacks TLS específicas em sua infraestrutura de comando e controle (C2). O JARM pode gerar fingerprints desses servidores C2, permitindo identificá-los e rastreá-los através de diferentes endereços IP ou domínios.
* Mapeamento de infraestrutura: pesquisadores de segurança usam o JARM para mapear a infraestrutura de atacantes, identificar componentes compartilhados e vincular campanhas aparentemente desconexas.
* Detecção de phishing: identificar fingerprints JARM inesperadas para domínios legítimos pode indicar uma tentativa de phishing em que o atacante usa uma infraestrutura diferente.

Visibilidade de rede

O JARM proporciona um entendimento mais profundo do ecossistema TLS com o qual um proxy interage:
* Estabelecimento de baseline: criar uma baseline de fingerprints JARM esperadas para serviços e parceiros conhecidos ajuda a detectar anomalias.
* Descoberta de serviços: identificar a tecnologia subjacente dos serviços sem precisar de interação em nível de aplicação.

Gerando uma fingerprint JARM

Gerar uma fingerprint JARM envolve enviar as sondagens específicas e processar as respostas. Existem ferramentas e bibliotecas para isso.

Exemplo: usando a biblioteca Python jarm

A biblioteca Python jarm oferece uma forma direta de gerar fingerprints.

import jarm

def get_jarm_fingerprint(host, port=443):
    """
    Gera uma fingerprint JARM para um host e porta informados.
    """
    try:
        fingerprint = jarm.string_fingerprint(host, port, timeout=5)
        return fingerprint
    except Exception as e:
        return f"Error generating JARM for {host}:{port}: {e}"

if __name__ == "__main__":
    target_host_1 = "www.example.com"
    target_host_2 = "cloudflare.com" # Frequentemente servido pela própria stack TLS da Cloudflare
    target_host_3 = "nginx.org"

    print(f"JARM for {target_host_1}: {get_jarm_fingerprint(target_host_1)}")
    print(f"JARM for {target_host_2}: {get_jarm_fingerprint(target_host_2)}")
    print(f"JARM for {target_host_3}: {get_jarm_fingerprint(target_host_3)}")

Esse script se conecta ao host e à porta especificados, envia as sondagens JARM e imprime a fingerprint resultante de 62 caracteres.

Interpretando fingerprints JARM

Uma fingerprint JARM é, por si só, uma string opaca. Seu valor vem da comparação e da associação com serviços conhecidos ou agentes de ameaça.
* Consulta a bases de dados: bases públicas e privadas (por exemplo, JARM.info, Shodan, Censys) coletam e associam fingerprints JARM a softwares, serviços e organizações conhecidos.
* Reconhecimento de padrões: fingerprints JARM específicas costumam se correlacionar com bibliotecas TLS ou softwares de servidor específicos. Por exemplo:
* 27d40d40d27d40d00045d40d00041d01dd2d4000000000494a000000000000 é uma fingerprint comum do Nginx.
* 07d14d14d07d14d00041d14d0000000d1d2d00000000000000000000000000 costuma aparecer com o Apache HTTP Server (OpenSSL).
* 07d07d07d07d07d00041d07d0000000d1d2d00000000000000000000000000 pode indicar Cloudflare.
* Detecção de anomalias: qualquer desvio da fingerprint esperada para um serviço conhecido merece investigação.

JARM e o comportamento de proxies

A interação entre o JARM e os serviços de proxy é central para sua utilidade.

Proxies forward

  • Proxies forward sem interceptação: esses proxies simplesmente encaminham o ClientHello do cliente ao servidor de destino. Nesse cenário, a fingerprint JARM observada pelo cliente (caso o cliente estivesse gerando um JARM para o servidor) seria a do servidor de origem. Entretanto, se o próprio serviço de proxy atuasse como cliente e gerasse um JARM para um destino, ainda assim obteria o JARM do servidor de origem.
  • Proxies forward com interceptação (inspeção TLS): quando um proxy forward realiza inspeção TLS (por exemplo, para varredura de segurança ou aplicação de políticas), ele age como um Man-in-the-Middle (MITM). Ele encerra a conexão TLS do cliente e estabelece uma nova com o servidor de origem. A fingerprint JARM observada pelo cliente seria a da stack TLS do proxy forward. Da mesma forma, a fingerprint JARM observada pelo servidor de origem seria a da stack TLS do proxy forward. Esse comportamento é um indicador-chave para detectar inspeção TLS.

Proxies reversos, load balancers e CDNs

Esses serviços ficam à frente de um ou mais servidores de origem e tratam as conexões de entrada dos clientes.
* A fingerprint JARM obtida por um cliente que se conecta a um serviço protegido por um proxy reverso, load balancer ou CDN refletirá sempre a stack TLS desse intermediário.
* A fingerprint JARM do servidor de origem fica mascarada para observadores externos. Esse é um mecanismo primário para identificar esses tipos de serviço. Por exemplo, conectar-se a google.com retornará uma fingerprint JARM da infraestrutura de borda do Google, não do servidor de backend específico que atende à requisição.

Limitações e considerações

Embora poderoso, o JARM tem limitações:
* Sondagem ativa: o JARM exige o envio de sondagens ativas a um alvo, o que nem sempre é viável ou permitido em todos os ambientes.
* Mudanças dinâmicas: configurações de servidor, atualizações de software ou mudanças em load balancers podem alterar uma fingerprint JARM, exigindo monitoramento contínuo e novo fingerprinting.
* Spoofing: adversários sofisticados podem configurar suas stacks TLS para imitar fingerprints JARM conhecidas, embora isso exija esforço específico.
* Cobertura: o JARM captura aspectos específicos do handshake TLS, mas não fornece um retrato completo de todos os detalhes de configuração TLS.

JARM vs. JA3

JARM e JA3 são técnicas de fingerprinting TLS, mas atendem a propósitos diferentes.

Recurso JARM JA3
Alvo Servidor (identifica a stack TLS de um servidor ou proxy) Cliente (identifica a stack TLS de uma aplicação cliente)
Metodologia Envia 10 sondagens ClientHello distintas e construídas, e aplica hash às respostas ServerHello do servidor. Analisa um único pacote ClientHello enviado por um cliente, extraindo listas ordenadas de versão TLS, cipher suites, extensões, curvas elípticas e formatos de ponto de curva elíptica, e então aplica hash a elas.
Tipo de fingerprint String de 62 caracteres derivada de múltiplas respostas ServerHello. Hash MD5 de uma string concatenada (por exemplo, TLSVersion,Ciphers,Extensions,EllipticCurves,EllipticCurvePointFormats).
Caso de uso Identificar software de servidor, detectar proxies/CDNs, rastrear infraestrutura de C2, mapeamento de rede. Identificar aplicações cliente específicas (por exemplo, navegadores, malware, dispositivos IoT), detectar botnets, criar perfis de aplicações.
Ponto de observação Requer que um cliente inicie conexões com o servidor-alvo. Requer que um servidor ou dispositivo de rede observe o ClientHello vindo de um cliente.
Origem Salesforce (2020) Salesforce (2017)

O JARM foca no comportamento de resposta do servidor, o que o torna ideal para identificar as entidades que terminam conexões TLS, inclusive serviços de proxy.

Atualizado: 04.03.2026
Voltar à categoria

Leia também

Glossary 3 min

O que é um proxy móvel? Proxies 4G/5G explicados

Um proxy móvel roteia o tráfego através de um dispositivo 4G/5G real, te dando um IP de operadora compartilhado por milhares de usuários reais — o tipo mais difícil de bloquear. Veja como funcionam e quando usá-los.

Glossary 3 min

O que é um proxy ISP? Proxies residenciais estáticos explicados

Um proxy ISP é um IP estático hospedado em datacenter mas registrado em um ISP residencial — confiança residencial com velocidade de datacenter e IP fixo. Veja como funcionam e quando usá-los.

Glossary 3 min

Proxy HTTP vs HTTPS: qual é a diferença?

Um proxy HTTP pode ler seu tráfego web; um proxy HTTPS o tunela criptografado via CONNECT. Veja a diferença real, o que o proxy consegue ver e qual usar.

Glossary 4 min

O que é um proxy? Guia completo para iniciantes

Um servidor proxy é um intermediário que esconde seu IP real roteando o tráfego por outro IP. Veja como os proxies funcionam, os principais tipos e como escolher o certo.

Glossary 4 min

SOCKS5 vs proxy HTTP: diferenças, velocidade e quando usar cada um

Proxies SOCKS5 e HTTP resolvem problemas diferentes. Um proxy HTTP entende tráfego web e consegue cacheá-lo ou filtrá-lo; o SOCKS5 encaminha às cegas qualquer conexão TCP/UDP — torrents, jogos, e-mail, não só navegação. Nenhum dos dois criptografa o tráfego sozinho. Veja exatamente quando cada um ganha.

Glossary 1 min

CDN e proxies: como funcionam

CDN e proxies — como funcionam juntos — um termo da área de proxies e tecnologias de rede.

Experimente nossos proxies

20,000+ proxies em 100+ países do mundo

support_agent
GProxy Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.