JARM: herramienta de huellas digitales para detectar servidores maliciosos

La literatura sobre seguridad defensiva reconoce unánimemente un hecho: de vez en cuando, aparece una herramienta que proporciona a los equipos azules una ventaja importante sobre sus adversarios. Esta búsqueda siempre elusiva presenta requisitos esenciales y puntos en común, como la capacidad de buscar y detectar de manera proactiva hosts maliciosos, o la capacidad de responder rápidamente a las amenazas de red específicas. Y con un fuerte aumento en el número de incidentes que involucran algún tipo de malware que produce el robo de datos, los proveedores están en una carrera reñida para ganarse la confianza de sus clientes, aprovechando alternativas más nuevas a las soluciones heredadas.

Con el espíritu de buscar e identificar servidores maliciosos en cualquier lugar donde se puedan encontrar, se ha lanzado recientemente una aplicación de código abierto llamada JARM, que se basa en el conocimiento de los mecanismos de Transport Layer Security (TLS) para lograr precisamente eso. Esta publicación de blog te llevará en un breve recorrido por JARM para mostrarte por qué la consideramos una valiosa herramienta.

TLS y JARM

TLS es el siguiente paso evolutivo de su antepasado SSL (Secure Sockets Layer). Como su predecesor, el ensamblado TLS presenta su propia versión de un proceso de protocolo de enlace mediante el cual se acuerdan primitivas criptográficas, también conocidas como conjuntos de cifrado, entre el cliente y el servidor antes de cualquier intercambio de datos.

Es precisamente esta agilidad criptográfica la que le da a TLS su calidad multifacética; cubriendo una amplia gama de aplicaciones (por ejemplo, tráfico web) y proporcionando servicios críticos como la confidencialidad y la integridad.

Para comprender cómo JARM aprovecha ciertos atributos de TLS, echemos un vistazo más de cerca a la secuencia de conexión inicial del protocolo. Inmediatamente después del protocolo de enlace de TCP, el lado del cliente envía un mensaje que contiene combinaciones de algoritmos criptográficos compatibles con la persona que llama, detalles de versiones, extensiones, una lista de métodos de compresión y otros parámetros de sesión en bloques de datos de la aplicación.

En respuesta, el servidor envía su propio mensaje cuando se ha confirmado un conjunto satisfactorio de algoritmos; el paquete también se formula con la propia versión del servidor de los parámetros de conexión utilizados por el cliente. Posteriormente, el servidor y el cliente proceden a verificar la autenticidad del otro a través de certificados digitales, después de lo cual ambas partes calculan los secretos maestros utilizados para derivar las claves de sesión, los mensajes de envoltura y las estructuras de túnel de tráfico restantes.

Los parámetros TLS que se ofrecen en el mensaje del cliente contienen varias propiedades de identificación que están directamente relacionadas con la aplicación cliente. Estas características incluyen compilaciones de SO, paquetes, bibliotecas e incluso atribuciones de procesos. Este nivel de granularidad es particularmente útil para crear huellas dactilares con un alto grado de precisión que se puede aprovechar para identificar la misma aplicación durante sesiones futuras. De manera similar, los servidores TLS construyen sus paquetes basados ​​en los del cliente, así como en su propio subconjunto de identificadores integrados como:

  • Nombre y versión del sistema operativo
  • Bibliotecas del lado del servidor
  • Otras configuraciones personalizadas

Una vez más, esta relación simbiótica entre los paquetes del cliente y el servidor dicta la forma en que los servidores responden únicamente a una aplicación específica, proporcionando una excelente oportunidad para una rápida identificación mediante huellas dactilares. Y es aquí donde surge JARM.

¿Qué es JARM?

Como se mencionó anteriormente, JARM es una aplicación de huellas dactilares de servidor TLS lanzada recientemente como un proyecto de código abierto por el grupo de ingeniería de Salesforce.

La herramienta comparte algunas similitudes con un método anterior de generación de perfiles de clientes TLS mediante firmas JA3, lanzado por el mismo equipo, que examina pasivamente el tráfico de red y recopila huellas digitales de clientes y servidores por igual.

El componente activo de JARM proviene de su capacidad para enviar 10 paquetes TLS de cliente personalizados a un servidor TLS de destino en busca de un conjunto único de respuestas; agregando hash a estos de tal manera que se cree lo que se llama una huella digital JARM.

Detrás de escena, la huella digital JARM utiliza una técnica de hash difusa capaz de concatenar dos bloques largos consecutivos de 30 caracteres y 32 caracteres en un hash criptográfico de longitud fija para producir la huella digital final de 62 caracteres.

El primer bloque tiene aspectos como las versiones TLS y los cifrados elegidos por el servidor en respuesta a cada paquete enviado previamente por el cliente, mientras que el segundo bloque representa un hash SHA256 truncado de las extensiones del lado del servidor. Como resultado, los servidores individuales se pueden identificar rápidamente a partir de una lista de huellas dactilares JARM precompiladas para una multitud de propósitos que incluyen:

  • Comprobación de si los servidores de un grupo comparten la misma configuración de TLS
  • Vincular servidores individuales a organizaciones específicas (por ejemplo, Google)
  • Identificación de aplicaciones o infraestructura predeterminadas

Los defensores de la red y los cazadores de amenazas encontrarán en JARM un poderoso aliado para detectar actividades potencialmente maliciosas que amenacen sus entornos.

¿Cómo se usa JARM?

Agregar JARM a tu combinación de herramientas y procesos de seguridad puede transformar la forma en que los hosts externos se etiquetan y verifican con fines de reputación, lo que te permite comparar cualquier huella digital computada con tu propio espacio de direcciones. Todo esto es posible gracias a la capacidad de JARM de realizar huellas digitales en la pila de software vinculada a cada uno de esos hosts, como lo haría con casi cualquier otro punto final habilitado para TLS.

Un enfoque de muestra para el desafío de catalogar programáticamente estos hosts maliciosos se describe utilizando el millón de sitios principales de Alexa como un conjunto de datos backend.

Otro esquema que aprovecha el poder de JARM es el análisis de facetas de Shodan, un servicio que incluye acceso a una base de datos de instancias TLS descubiertas y sus huellas digitales JARM generadas que se pueden aprovechar mediante un navegador web o la API, si se desea la automatización. La herramienta es una forma excelente de realizar un análisis de verificación al azar, que suele ser el caso cuando se embarca en una investigación rápida.

Instalación

Salesforce nos ha proporcionado un repositorio de Github desde el que descargar JARM en dos formatos diferentes, jarm.py y jarm.sh. Obtener JARM en tu máquina es tan fácil como clonar el repositorio usando git clone https://github.com/salesforce/jarm.git, o descargando el directorio completo usando la opción «Descargar ZIP».

Para usar jarm.py, debes proporcionar la IP o el nombre de dominio del servidor TLS de destino cuya huella digital JARM deseas calcular.

Además, jarm.sh es un script de envoltura de Bash que puede automatizar los escaneos JARM a gran velocidad utilizando una lista externa de direcciones IP, enviando los resultados a un archivo de tu elección.

Finalmente, como explica la documentación, es importante tener en cuenta que no se debe considerar que JARM posea todas las cualidades criptográficas asociadas con un verdadero algoritmo hash. Su único propósito es simplemente proporcionar huellas dactilares de alto rendimiento con suficiente flexibilidad para información contextualizada y fácil consumo.

JARM ofrece una perspectiva única en la detección, categorización y correlación potencial de la actividad de TLS que se remonta a servidores maliciosos o incluso campañas completas asociadas con el uso de algunos de los marcos de ataque más populares.

Sin embargo, estos pensamientos finales vienen con un consejo: nunca uses JARM como único indicador o prueba de origen nefasto. Siempre complementa tu análisis con la cantidad adecuada de metadatos y otras técnicas para clasificar adecuadamente tu tráfico y construir tu caso.

En última instancia, te invitamos a probar JARM más allá del ámbito de la detección y respuesta, por ejemplo, en áreas que involucran la clasificación de activos o la catalogación simple de aplicaciones.