
Ferramenta ativa de fingerprinting de servidores TLS que envia pacotes Client Hello personalizados para gerar hashes JARM exclusivos para identificar configurações de servidores, agrupar infraestrutura e detectar servidores maliciosos.
Por favor, leia o post inicial do blog sobre JARM para mais informações.
JARM é uma ferramenta ativa de fingerprinting de servidores Transport Layer Security (TLS).
As impressões digitais JARM podem ser usadas para:
O suporte ao JARM foi ou está sendo adicionado a:
SecurityTrails
Shodan
BinaryEdge
RiskIQ
Palo Alto Networks
Censys
360
python3 jarm.py [-h] [-i INPUT] [-p PORT] [-v] [-V] [-o OUTPUT] [-j] [-P PROXY] [domain/IP]
Exemplo:
% python3 jarm.py www.salesforce.com
Domínio: www.salesforce.com
IP resolvido: 23.50.225.123
JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
Para usá-lo com Python 2, você precisará do módulo ipaddress:
pip install -r requirements.txt
./jarm.sh <list> <output_file>
Exemplo:
% ./jarm.sh alexa500.txt jarm_alexa_500.csv
Antes de aprender como o JARM funciona, é importante entender como o TLS funciona. O TLS e seu predecessor, SSL, são usados para criptografar a comunicação tanto para aplicações comuns, como navegadores de Internet, para manter seus dados seguros, quanto para malware, para que ele possa se esconder no ruído. Para iniciar uma sessão TLS, um cliente enviará uma mensagem TLS Client Hello após o handshake triplo TCP. Esse pacote e a forma como é gerado dependem dos pacotes e métodos usados ao construir a aplicação cliente. O servidor, se aceitar conexões TLS, responderá com um pacote TLS Server Hello.
Os servidores TLS formulam seu pacote Server Hello com base nos detalhes recebidos no pacote TLS Client Hello. A forma como o Server Hello é formulado para um determinado Client Hello pode variar de acordo com a forma como a aplicação ou o servidor foi construído, incluindo:
Todos esses fatores fazem com que cada servidor TLS responda de forma única. As combinações de fatores tornam improvável que servidores implantados por organizações diferentes tenham a mesma resposta.
O JARM funciona enviando ativamente 10 pacotes TLS Client Hello para um servidor TLS alvo e capturando atributos específicos das respostas TLS Server Hello. As respostas agregadas do servidor TLS são então hashadas de uma forma específica para produzir a impressão digital JARM.
Não é a primeira vez que trabalhamos com fingerprinting TLS. Em 2017, desenvolvemos o JA3/S, um método passivo de fingerprinting de clientes/servidores TLS agora encontrado na maioria das ferramentas de segurança de rede. Mas enquanto o JA3/S é passivo, identificando clientes e servidores ao ouvir o tráfego de rede, o JARM é um scanner ativo de fingerprinting de servidores. Você pode saber mais sobre negociação TLS e fingerprinting passivo JA3/S aqui.
Os 10 pacotes TLS Client Hello no JARM foram especialmente criados para extrair respostas únicas dos servidores TLS. O JARM envia diferentes versões TLS, cifras e extensões em ordens variadas para coletar respostas únicas. O servidor suporta TLS 1.3? Ele negociará TLS 1.3 com cifras 1.2? Se ordenarmos as cifras da mais fraca para a mais forte, qual cifra ele escolherá? Esses são os tipos de perguntas incomuns que o JARM está essencialmente fazendo ao servidor para obter as respostas mais exclusivas. As 10 respostas são então hashadas para produzir a impressão digital JARM.
O hash da impressão digital JARM é um hash fuzzy híbrido, que utiliza a combinação de um algoritmo de hash reversível e não reversível para produzir uma impressão digital de 62 caracteres. Os primeiros 30 caracteres são compostos pela cifra e versão TLS escolhida pelo servidor para cada um dos 10 client hello enviados. Um "000" indica que o servidor recusou negociar com aquele client hello. Os 32 caracteres restantes são um hash SHA256 truncado das extensões cumulativas enviadas pelo servidor, ignorando dados do certificado x509. Ao comparar impressões digitais JARM, se os primeiros 30 caracteres forem iguais, mas os últimos 32 forem diferentes, isso significa que os servidores têm configurações muito semelhantes, aceitando as mesmas versões e cifras, embora não exatamente as mesmas, dado que as extensões são diferentes.
Após receber cada mensagem TLS server hello, o JARM fecha a conexão graciosamente com um FIN para não deixar os sockets abertos.
É importante notar que o JARM é uma função de impressão digital de alto desempenho e não deve ser considerada, ou confundida com, uma função criptográfica segura. Projetamos a impressão digital JARM para ser consumível tanto por humanos quanto por máquinas. Isso significa que é pequena o suficiente para ser verificada visualmente, compartilhada e tuitada com espaço suficiente para detalhes contextuais.
Servidores de comando e controle (C2) de malware e servidores maliciosos são configurados por seus criadores como qualquer outro servidor e depois implantados em sua frota. Portanto, eles tendem a produzir impressões digitais JARM únicas. Abaixo estão exemplos de malware e ferramentas ofensivas comuns e a sobreposição do JARM com os sites do Alexa Top 1 milhão (em outubro de 2020):
Com pouca ou nenhuma sobreposição com os sites do Alexa Top 1 Milhão, seria improvável que um host dentro de uma organização se conectasse a um servidor com essas impressões digitais JARM.
John Althouse - Ideia original, conceito e liderança do projeto
Andrew Smart - Conceito e testes
RJ Nunnally - Programação e testes
Mike Brady - Programação e testes
Reescrito em Python para uso operacional por Caleb Yu
| Domínio | JARM |
|---|
| salesforce.com | 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5 |
| force.com | 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5 |
| google.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| youtube.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| gmail.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| facebook.com | 27d27d27d29d27d1dc41d43d00041d741011a7be03d7498e0df05581db08a9 |
| instagram.com | 27d27d27d29d27d1dc41d43d00041d741011a7be03d7498e0df05581db08a9 |
| oculus.com | 29d29d20d29d29d21c41d43d00041d741011a7be03d7498e0df05581db08a9 |
| Servidor Malicioso C2 | Impressão Digital JARM | Sobreposição com Alexa Top 1M |
|---|
| Trickbot | 22b22b09b22b22b22b22b22b22b22b352842cd5d6b0278445702035e06875c | 0 |
| AsyncRAT | 1dd40d40d00040d1dc1dd40d1dd40d3df2d6a0c2caaa0dc59908f0d3602943 | 0 |
| Metasploit | 07d14d16d21d21d00042d43d000000aa99ce74e2c6d013c745aa52b5cc042d | 0 |
| Cobalt Strike | 07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 | 0 |
| Merlin C2 | 29d21b20d29d29d21c41d21b21b41d494e0df9532e75299f15ba73156cee38 | 303 |