In this Article
Los nuevos desafíos de seguridad impulsan la evolución de las medidas antibots, y a veces incluso los scrapers legítimos quedan atrapados en el fuego cruzado. Una de estas técnicas es la huella digital TLS: un método sigiloso, aún no muy conocido y bastante eficaz para identificar un dispositivo que intenta conectarse a un servidor. ¿Por qué no es de los más fáciles de eludir y qué hacer para extraer correctamente los datos que necesitas? Este artículo revela todas las claves.
¿Qué es TLS?
Para entender la huella digital TLS, primero veamos qué es TLS en sí. TLS o Transport Layer Security (antes SSL – Secure Sockets Layer) es un protocolo que se ejecuta sobre una conexión HTTP estándar y protege tus actividades en línea. Cuando ves un candado cerca de una URL o cuando la dirección de un sitio web empieza con https, significa que TLS está activo. De hecho, hoy es difícil encontrar un sitio web que no use TLS. Si intentas visitar un sitio web que empieza simplemente con “http” (sin “s”), tu navegador te mostrará una advertencia sobre una conexión no segura en lugar de redirigirte a una página web.
TLS cifra tus datos antes de enviarlos al servidor de destino: los convierte en cadenas de símbolos aleatorios, como 9823h4brjhvbi, de modo que, incluso si actores maliciosos interceptan tu información, no podrán usarla. Sin embargo, antes de enviar tus datos, TLS debe asegurarse de que envía la información al servidor legítimo, y este luego debe descifrarla. Por eso, antes de enviar datos, TLS primero establece una conexión: intercambia una serie de mensajes con el servidor de destino para verificarlo, acordar un método de cifrado y generar claves de sesión compartidas que ayudarán a proteger y descifrar los datos durante la comunicación.
Todo el proceso se conoce como handshake TLS, que comienza con un mensaje “ClientHello”. Este mensaje es el que nos interesa en términos de huella digital TLS, ya que es la fuente de datos que luego los servidores usan para identificarte.
De qué se compone el mensaje “ClientHello”
Como el mensaje “ClientHello” no contiene datos sensibles, como credenciales, y se transmite en un formato sin cifrar, puedes capturarlo fácilmente y ver su contenido usando herramientas de análisis de red como Wireshark. Contiene muchos datos.
- Versión de TLS – la más alta que admite un cliente.
- Random – número aleatorio del cliente.
- ID de sesión – se usa para sesiones reanudadas, por lo que está vacío en el primer handshake.
- Suites de cifrado – algoritmos de cifrado admitidos por un cliente. Se enumeran por orden de preferencia.
- Método de compresión – hoy casi siempre es 0.
- Extensiones admitidas – funciones adicionales que un cliente puede querer usar, por ejemplo:
- Server Name Indication (SNI) – especifica el nombre de host que solicita un cliente.
- Protocolo Application-Layer Protocol Negotiation (ALPN) – una extensión para negociar qué protocolo debe gestionarse sobre TLS. Es eficaz porque es independiente de la capa de aplicación. Normalmente, las extensiones TLS para servidores web son HTTP/1.1 o HTTP/2.
- Bibliotecas TLS – un conjunto de bibliotecas que usa un cliente, ya que distintos clientes usan distintas bibliotecas.
- Algoritmos de firma – lista de algoritmos admitidos para verificar la identidad del servidor.
- Curvas elípticas – como la comunicación cifrada usa ecuaciones curvas en campos finitos, esta parte indica qué curva usar.
- Formatos de puntos de curvas elípticas – indica cómo se codifican los puntos.
También existen otras extensiones. Con todo eso, un sitio web puede inferir una cantidad significativa de datos sobre ti a partir de un mensaje “ClientHello”, incluido el stack de software, como la familia del navegador, el tipo de dispositivo y la postura de seguridad, entre otros.
Método de huella digital JA3
Bien, un servidor recibió un mensaje “ClientHello”. ¿Qué sigue? Aquí entra en juego la técnica JA3. Salesforce la administra y es la solución de huella digital más popular. Se centra en cinco componentes clave del mensaje: versión de TLS, suites de cifrado, ID de extensiones, grupos admitidos (curvas elípticas) y formatos de puntos de curvas elípticas. Cada parte se convierte a formato decimal y se concatena con comas y guiones. Sin embargo, los datos reales de la huella digital son una cadena larga, por lo que, por comodidad, se usa MD5, una función hash criptográfica. Produce un hash fijo de 128 bits. Luego, un navegador compara el resultado con otras posibilidades de huella digital, a menudo desde una base de datos interna. Aun así, a veces también se usan bases de datos públicas.
El objetivo es detectar las diferencias: ¿este cliente parece ser un navegador web típico o hay algo sospechoso en él? El problema es que los hashes producidos por un navegador web común, como Chrome, o por una biblioteca de programación usada para web scraping, serían diferentes porque sus respectivos mensajes ClientHello serían distintos. Como los algoritmos JA3 consideran solo unas pocas variables, no hay muchas opciones de huellas digitales únicas, por lo que es relativamente fácil distinguir entre un usuario común y un bot de scraping.
Eso demuestra que la huella digital TLS es eficaz para combatir scrapers y la convierte en un dolor de cabeza importante para quienes dependen del web scraping.
Existen bases de datos anti-web-scraping que recopilan posibilidades de huellas digitales JA3. Puedes calcular tu huella digital y comprobar si está en la lista blanca para garantizar un acceso fluido.
Sin embargo, las huellas digitales JA3 no son lo único que puede revelar que un cliente que se conecta es un scraper. Incluso la diferencia de valores en el propio mensaje ClientHello puede activar sistemas antibots. Por ejemplo:
- La ausencia de SNI puede ser una señal de alerta, ya que normalmente se espera en una solicitud.
- Las solicitudes ALPN obsoletas pueden verse como una señal de actividad sospechosa, ya que los navegadores modernos suelen admitir HTTP/2.
- Las curvas elípticas admitidas por navegadores como Chrome y las admitidas por scripts de programación difieren, lo que puede levantar sospechas.
- La lista de Cipher Suites está ordenada por prioridad y debe coincidir con una lista de navegadores web comunes, incluido el orden. Lo mismo ocurre con Extensions.
Formas de alinearse con la huella digital TLS
Cuando se trata de la huella digital TLS, tu objetivo es hacer que tu scraper coincida con las huellas digitales de un navegador web común. No es una tarea fácil; sin embargo, hay varias ideas que puedes probar. Incluso puedes combinar algunas de ellas.
- Usar navegadores headless
Cuando usas navegadores de alta calidad como Puppeteer, Playwright o Selenium, en realidad usas navegadores reales y obtienes huellas digitales auténticas como resultado. No cambian la huella digital TLS, por lo que los sitios web no pueden determinar si un navegador normal o uno headless intenta conectarse. Una brecha menos.
- Usar una colección de navegadores y versiones de sistemas operativos
Este truco ayuda a distribuir conexiones a través de múltiples huellas digitales, lo cual es útil si ejecutas un proyecto de web scraping grande.
- Usar un cliente HTTP basado en LibCurl
Puedes actualizar estos clientes para usar curl-impersonate. Es una versión modificada de la biblioteca libcurl, que ajusta las huellas digitales TLS para que parezcan las de un navegador web común. Entre las bibliotecas compatibles con libcurl se incluyen Typhoeus (Ruby), Guzzle (PHP), PyCurl (Python), y las bibliotecas curl default y crul community (R).
- Fortificación TLS
Si usas el lenguaje Go, tienes suerte: es uno de los lenguajes que permite spoofing de TLS. Bibliotecas como utls de Refraction Networking, ja3transport y CycleTLS son lo que necesitas.
Sin embargo, las cosas no son tan fáciles si usas Java o Python. Con Java, puedes usar el método sslconfig.enabledCipherSuites para reconfigurar la lista de suites de cifrado no habilitadas. Con Python, puedes llegar a configurar las variables Cipher Suite y versión TLS usando requests y httpx. Hacer spoofing de esas variables puede ayudar a resolver interrupciones de acceso; sin embargo, tus huellas digitales aún no se verían realmente auténticas.
- Rotar otros elementos
Cuando todo el tráfico tiene la misma huella digital TLS (aunque parezca genuina), puede verse sospechoso. Intenta rotar los elementos que se puedan rotar, como cookies, user agent, headers y dirección IP. Esto modificará ligeramente tu mensaje ClientHello; como resultado, las huellas digitales JA3 también serán algo diferentes. Los navegadores multi-account y los proxies de alta calidad te ayudarán con esto.
Palabras finales
Por último, pero no menos importante, operar en línea con la huella digital TLS puede ser un desafío, ya que distintos sitios web adaptan ligeramente el protocolo TLS y tienen sus propios criterios y bases de datos para permitir o denegar el acceso. Para falsificar correctamente las huellas digitales TLS, concéntrate en cada sitio web en particular, identificando qué activa sus mecanismos de huella digital y cómo personaliza el protocolo estándar. Además, hoy las fuentes web combinan señales a nivel de red, como la huella digital JA3, con señales a nivel de aplicación, como fuentes y resolución de pantalla, por lo que depender únicamente del spoofing de TLS no será suficiente: debes asegurarte de que cada detalle de tu scraper parezca genuino. Además, revisa todo periódicamente: los sitios web actualizan con frecuencia sus políticas y esquemas de detección, y surgen nuevos enfoques antibots, por lo que debes hacer lo mismo para obtener datos precisos. Por supuesto, siempre debes mantenerte dentro de los límites permitidos, extraer solo datos disponibles, evitar sobrecargar los sitios web de destino y usar herramientas confiables, como proxies obtenidos legalmente. DataImpulse sin duda puede ayudarte con la última parte: presiona el botón “Probar ahora” o contáctanos en [email protected] si tienes alguna pregunta.
