
Herramienta activa de huellas digitales TLS que envía paquetes Client Hello diseñados para generar hashes JARM únicos con el fin de identificar configuraciones de servidores, agrupar infraestructura y detectar servidores maliciosos.
Por favor, lee la publicación inicial del blog sobre JARM para más información.
JARM es una herramienta activa de huellas digitales de servidores de seguridad de la capa de transporte (TLS).
Las huellas digitales de JARM se pueden usar para:
El soporte de JARM ha sido o está siendo añadido 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]
Ejemplo:
% python3 jarm.py www.salesforce.com
Domain: www.salesforce.com
Resolved IP: 23.50.225.123
JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
Para usarlo con Python 2 necesitarás el módulo ipaddress:
pip install -r requirements.txt
./jarm.sh <list> <output_file>
Ejemplo:
% ./jarm.sh alexa500.txt jarm_alexa_500.csv
Antes de aprender cómo funciona JARM, es importante entender cómo funciona TLS. TLS y su predecesor, SSL, se utilizan para cifrar la comunicación tanto en aplicaciones comunes como los navegadores de Internet, para mantener tus datos seguros, como en malware, para que pueda esconderse entre el ruido. Para iniciar una sesión TLS, un cliente enviará un mensaje TLS Client Hello después del handshake TCP de 3 vías. Este paquete y la forma en que se genera depende de los paquetes y métodos utilizados al construir la aplicación cliente. El servidor, si acepta conexiones TLS, responderá con un paquete TLS Server Hello.
Los servidores TLS formulan su paquete Server Hello basándose en los detalles recibidos en el paquete TLS Client Hello. La forma en que se formula el Server Hello para un Client Hello dado puede variar según cómo se haya construido la aplicación o el servidor, incluyendo:
Todos estos factores hacen que cada servidor TLS responda de manera única. Las combinaciones de factores hacen que sea improbable que servidores desplegados por diferentes organizaciones tengan la misma respuesta.
JARM funciona enviando activamente 10 paquetes TLS Client Hello a un servidor TLS objetivo y capturando atributos específicos de las respuestas TLS Server Hello. Las respuestas agregadas del servidor TLS luego se hashean de una manera específica para producir la huella digital JARM.
No es la primera vez que trabajamos con huellas digitales TLS. En 2017 desarrollamos JA3/S, un método pasivo de huellas digitales de cliente/servidor TLS que ahora se encuentra en la mayoría de las herramientas de seguridad de redes. Pero mientras que JA3/S es pasivo, identificando clientes y servidores al escuchar el tráfico de red, JARM es un escáner activo de huellas digitales de servidores. Puedes obtener más información sobre la negociación TLS y las huellas digitales pasivas JA3/S aquí.
Los 10 paquetes TLS Client Hello en JARM han sido especialmente diseñados para extraer respuestas únicas de los servidores TLS. JARM envía diferentes versiones TLS, cifrados y extensiones en órdenes variables para recopilar respuestas únicas. ¿El servidor soporta TLS 1.3? ¿Negociará TLS 1.3 con cifrados 1.2? Si ordenamos los cifrados de más débil a más fuerte, ¿cuál elegirá? Estos son los tipos de preguntas inusuales que JARM le hace esencialmente al servidor para obtener las respuestas más únicas. Las 10 respuestas luego se hashean para producir la huella digital JARM.
El hash de la huella digital JARM es un hash difuso híbrido, utiliza la combinación de un algoritmo hash reversible y no reversible para producir una huella digital de 62 caracteres. Los primeros 30 caracteres están compuestos por el cifrado y la versión TLS elegidos por el servidor para cada uno de los 10 client hello enviados. Un '000' indica que el servidor se negó a negociar con ese client hello. Los 32 caracteres restantes son un hash SHA256 truncado de las extensiones acumulativas enviadas por el servidor, ignorando los datos del certificado x509. Al comparar huellas digitales JARM, si los primeros 30 caracteres son iguales pero los últimos 32 son diferentes, esto significaría que los servidores tienen configuraciones muy similares, aceptando las mismas versiones y cifrados, aunque no exactamente iguales ya que las extensiones son diferentes.
Después de recibir cada mensaje TLS server hello, JARM cierra la conexión correctamente con un FIN para no dejar los sockets abiertos.
Es importante tener en cuenta que JARM es una función de huella digital de alto rendimiento y no debe considerarse ni confundirse con una función criptográfica segura. Diseñamos la huella digital JARM para que sea consumible por humanos tanto como por máquinas. Esto significa que es lo suficientemente pequeña como para examinarla, compartirla y tuitearla con suficiente espacio para detalles contextuales.
Los servidores de comando y control (C2) de malware y los servidores maliciosos son configurados por sus creadores como cualquier otro servidor y luego desplegados en su flota. Por lo tanto, tienden a producir huellas digitales JARM únicas. A continuación se muestran ejemplos de malware y herramientas ofensivas comunes y la superposición de JARM con los sitios web Alexa Top 1M (a octubre de 2020):
Con poca o ninguna superposición con los sitios web Alexa Top 1M, debería ser poco probable que un host dentro de una organización se conecte a un servidor con estas huellas digitales JARM.
John Althouse - Idea original, concepto y líder del proyecto Andrew Smart - Concepto y pruebas RJ Nunnally - Programación y pruebas Mike Brady - Programación y pruebas
Reescrito en Python para uso operativo por Caleb Yu
| Dominio | 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 | Huella digital JARM | Superposición con Alexa Top 1M |
|---|
| Trickbot | 22b22b09b22b22b22b22b22b22b22b352842cd5d6b0278445702035e06875c | 0 |
| AsyncRAT | 1dd40d40d00040d1dc1dd40d1dd40d3df2d6a0c2caaa0dc59908f0d3602943 | 0 |
| Metasploit | 07d14d16d21d21d00042d43d000000aa99ce74e2c6d013c745aa52b5cc042d | 0 |
| Cobalt Strike | 07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 | 0 |
| Merlin C2 | 29d21b20d29d29d21c41d21b21b41d494e0df9532e75299f15ba73156cee38 | 303 |