Seguridad de la capa de transporte o TLS es un algoritmo que se utiliza para cifrar todo el tráfico de internet y ayuda con las necesidades de ciberseguridad. Este protocolo utiliza algoritmos criptográficos para cifrar la comunicación basada en la web entre un servidor y sus clientes. Esta técnica se desarrolló para asegurar la conexión desde el lado del servidor, permitiendo a los servidores identificar al cliente con un mayor grado de precisión, presente incluso en el primer paquete. Para aprender más sobre la seguridad TLS, primero necesitamos ver cómo funciona y qué es el término TLS handshake.
Para una visión general, consulta Qué es el fingerprinting TLS. Evita las comprobaciones TLS con anti-bot bypass o lee nuestro glosario de fingerprinting TLS.
TLS handshaking: ¿cómo funciona?
El handshake TLS es el término para cifrar y asegurar la conexión desde ambos extremos, el cliente y el servidor al mismo tiempo. Cuando un cliente accede a un sitio cifrado con TLS, realiza un handshake TLS con el servidor; el handshake básicamente significa el proceso de identificación del cliente. El proceso comienza con una solicitud del cliente para iniciar la sesión segura del sitio web. Esta sesión de acceso seguro se denomina 'hello' para facilitar su comprensión. Como TLS es un protocolo de cifrado divino, tiene múltiples versiones con una amplia gama de opciones de cifrado (también conocidas como suites de cifrado), el cliente (puede ser un navegador, script o un prompt) envía al servidor una lista de métodos de cifrado soportados o suites de cifrado y la versión actual de TLS en el mensaje 'Client Hello' para iniciar la solicitud. El servidor luego analiza la lista con sus propios cifrados soportados y envía de vuelta el mensaje 'Hello' que consiste en el protocolo TLS, la suite de cifrado elegida y el certificado SSL que incluye la clave pública de cifrado. Después de eso, el cliente utiliza la clave pública del certificado SSL y verifica su precisión (como que el nombre del servidor debe coincidir con el DNS en el certificado, y que no esté caducado). Después de una sesión de verificación completa, el cliente envía otra cadena aleatoria (o llamada secreto premaster) que está cifrada usando la clave pública del servidor, que el servidor descifra usando la clave privada y luego tanto el cliente como el servidor generan la clave de sesión usando el cliente aleatorio, el servidor aleatorio y el secreto premaster. Estos deben llegar con el mismo resultado, y finalmente, el servidor y el cliente envían un mensaje finalizado que está cifrado con la clave de sesión. Cuando tanto el cliente como el servidor están cifrados de manera segura, podemos decir que el handshake TLS está completo. Echemos un vistazo al diagrama que representa todo este proceso.
Biblioteca TLS: Reconociendo el Cliente del Usuario
Client Hello es en realidad una lista de cifrados soportados por el cliente, cada uno usa una biblioteca TLS diferente que se enumeran aquí junto con diferencias notables entre ellas:

Con la ayuda del fingerprinting TLS, el servidor puede identificar la biblioteca TLS utilizada por el cliente y compararla con los resultados esperados, cada biblioteca es diferente e incluso soporta diferentes cifrados en un orden separado también. Los clientes web pueden distinguirse fácilmente en función de su firma TLS. Lo que debe tenerse en cuenta es que esta información está realmente disponible en la primera sesión (o el primer paquete de la sesión), que el servidor puede ver incluso antes de responder al cliente. Además, hasta que el estándar de Mensaje Hello del Cliente cifrado se estandarice, esta información está fácilmente disponible para cualquier red de terceros que pueda inferirla también.
Un cliente podría alterar la cadena User-Agent (para falsificar los resultados o mostrar otra versión del navegador), pero el mensaje Hello a veces puede revelar su versión real y el sistema operativo, algunos navegadores particulares contienen una lista diferente de cifrados preferidos también (como Chrome 81 y 93).
Implementación de Código Abierto y Métodos de Cálculo de Firma
JA3
El primer y más popular método para el fingerprinting TLS (o llamado método de cálculo de firma) es JA3. Fue desarrollado por un equipo en Salesforce y se abrió al público en 2017 (blog de Salesforce). Toma el paquete Client Hello y produce un hash MD5 que identifica al cliente durante el proceso de handshake TLS. Los componentes que toma del paquete son la versión de TLS, los cifrados aceptados, la lista de extensiones, la curva elíptica y sus formatos. Después de obtener estos campos, los combina en orden usando comas para delimitar los campos en sí y un guión para delimitar los valores de los campos, luego la cadena resultante se convierte en un hash MD5. JA3 sigue siendo ampliamente utilizado, aunque JA4 es cada vez más común para las pilas TLS 1.3 modernas.
JA3S
Esto se utiliza para la implementación del lado del servidor de la comunicación SSL o TLS, se usa junto con JA3 que se enfoca en el lado del cliente y ayuda con el juicio de legitimidad y precisión de una aplicación. La huella digital se genera utilizando los campos de la cadena Server Hello, como la versión de TLS, los cifrados y las extensiones. JA3 y JA3S ofrecen seguridad contra la posibilidad de que el malware genere el mismo hash MD5 que las aplicaciones legítimas.
La implementación de referencia se encuentra en salesforce/ja3.
JA4
JA4 es un formato de huella digital de cliente TLS más nuevo (FoxIO, 2023+) que codifica la versión de TLS, el uso de SNI, recuentos de cifrado/extensión, ALPN y hashes SHA256 truncados: por ejemplo t13d1516h2_8daaf6152771_d8a2da3f94cd. Se usa ampliamente junto con JA3 en discusiones sobre anti-bots y scraping.
- Especificación y antecedentes: JA4+ network fingerprinting (FoxIO)
- Capturar valores reales: tls.peet.ws
- Decodificar cadenas: JA4 Decoder (herramienta gratuita de Piloterr)
Nuestro TLS Capture Analyzer extrae tanto JA3 como JA4 del JSON de tls.peet.ws.
TS1
Este método de fingerprinting TLS funciona de manera diferente, creando un hash único para cada firma TLS. Inicialmente se inspiró en JA3, pero ahora es más completo que este. Codifica todos los parámetros del mensaje Client Hello en formato JSON, luego calcula su hash SHA1 para producir la firma. En este método, diferentes clientes tienen hashes diferentes o únicos que pueden guardarse en la base de datos para una fácil comparación de firmas. Estas firmas codifican más parámetros que JA3, de modo que pueden representar una imagen más precisa del cliente para el servidor. Una cosa que vale la pena mencionar es que, debido al uso del formato JSON, este método es más como un 'a prueba de futuro' para el desarrollo adicional de extensiones TLS que aún no existen.
Usabilidad del Fingerprinting TLS, ¿dónde se está utilizando?
El caso de uso más común del fingerprinting TLS es en soluciones Anti-Bot y Anti-DDoS, para proteger páginas web de ataques de crawling. Algunas personas también lo usan para campañas de phishing (lo cual, por supuesto, nunca puede considerarse un uso legítimo). Algunos escenarios de uso comunes son:
Detección y protección de bots
Una aplicación programada o diseñada para realizar acciones específicas en otros dispositivos que a menudo resulta en un ciberataque. En algunos escenarios de amplio alcance, se utiliza una red de dispositivos para completar ciberataques a gran escala que se conocen como botnet. Investigadores o profesionales pueden rastrearlos para identificar qué tienen en común, como malware, y compartir los resultados con la comunidad de seguridad en forma de IOCs.
Después de identificar un bot, puedes bloquear su IP o contratar los servicios de un instituto u organización de protección contra bots (los profesionales), o incluso implementar un código captcha para proteger tu contenido de los bots.
Protección DDoS
DDoS o Denegación de Servicio Distribuido es una forma de ataque que busca saturar un sitio web objetivo con tráfico basura. Este tipo de ataques también utiliza botnets. Una vez que detectas un aumento de tráfico en tu sitio, investiga el client hello de todos los dispositivos conectados. Si los campos del client hello son iguales en todos los dispositivos, entonces puedes decir que todos están infectados con el mismo malware. Puedes bloquear todas sus direcciones IP para proteger tu sitio en este punto.
Control sobre tus firmas TLS
La mayoría de las veces, los parámetros en el mensaje client hello de TLS no son controlables por ningún tipo de herramientas o scripts, pero en Python, puedes controlar la lista de suites de cifrado. Existen algunos métodos que pueden darte control total sobre las firmas TLS, que son:
- Puppeteer Extra: automatización de Chrome sin cabeza
- curl-impersonate: suplantación de TLS del navegador
- uTLS: suplantación de TLS en Go
- reqwest-impersonate: suplantación de TLS en Rust (ver también wreq)
- JA3Transport: biblioteca de Go para TLS con forma JA3

Conclusión
El fingerprinting TLS se está volviendo más popular día a día y se ha convertido en algo extremadamente común en la web por sus propósitos legítimos, como bloquear ataques DDoS y proteger contra bots, pero también está haciendo que el espacio web sea menos abierto para el público y más privado y restrictivo hacia clientes específicos. Las herramientas para proteger a los clientes falsificando la firma TLS aún son imperfectas e inmaduras, y necesitan más mejoras. El desarrollo de tales herramientas sigue siendo muy importante para que la web se convierta en un espacio libre, fácil y abierto para todos. En ese sentido, la mejor solución vendría del lado de la propia biblioteca TLS, para proporcionar un control más refinado a los usuarios para protegerse. Y proporcionar más medios para asegurar sus sitios. Necesita implementar 4 cosas para obtener una base de usuarios mejor y más limpia:
- Permitir a los usuarios controlar las extensiones TLS
- Permitir a los usuarios controlar la lista exacta de cifrados
- Soportar las últimas extensiones que algunos navegadores están utilizando actualmente
- Hacer el proceso de verificación más privado para evitar casos de uso negativos
- Proporcionar soporte para nuevos y emergentes lenguajes de programación
Consulta también Recursos de Fingerprinting para sitios de prueba, bibliotecas y herramientas de la caja de herramientas de Piloterr.