In this Article
Novos desafios de segurança levam à evolução das medidas anti-bot, e às vezes até scrapers legítimos acabam sendo pegos no fogo cruzado. Uma dessas técnicas é a impressão digital TLS: um método sorrateiro, ainda não muito conhecido e bastante eficaz para identificar um dispositivo que tenta se conectar a um servidor. Por que ela não é das mais fáceis de contornar e o que fazer para coletar os dados de que você precisa com sucesso – este artigo revela todas as cartas.
O que é TLS, afinal?
Para entender a impressão digital TLS, vamos primeiro dar uma olhada no próprio TLS. TLS ou Transport Layer Security (anteriormente SSL – Secure Sockets Layer) é um protocolo que funciona sobre uma conexão HTTP padrão e protege suas atividades online. Quando você vê um sinal de cadeado perto de uma URL ou quando o endereço de um site começa com https, isso significa que o TLS está ativo. Na verdade, hoje é difícil encontrar um site que não use TLS. Caso você tente visitar um site que comece simplesmente com “http” (sem “s”), seu navegador exibirá um aviso sobre uma conexão insegura em vez de redirecioná-lo para uma página da web.
O TLS criptografa seus dados antes de enviá-los ao servidor de destino – transforma-os em sequências de símbolos aleatórios, como 9823h4brjhvbi, de modo que, mesmo que agentes maliciosos interceptem suas informações, eles não conseguirão usá-las. No entanto, antes de enviar seus dados, o TLS deve garantir que está enviando as informações para o servidor legítimo, e este deve então decifrá-las. É por isso que, antes de enviar dados, o TLS primeiro estabelece uma conexão – ele troca uma série de mensagens com o servidor de destino para verificá-lo, concordar sobre um método de criptografia e gerar chaves de sessão compartilhadas que ajudarão a proteger e decifrar os dados durante a comunicação.
Todo esse processo é chamado de handshake TLS, que começa com uma mensagem “ClientHello”. Essa mensagem é o que nos interessa em termos de impressão digital TLS, pois é a fonte de dados que os servidores usam depois para identificar você.
Do que consiste a mensagem “ClientHello”
Como a mensagem “ClientHello” não contém dados sensíveis, como credenciais, e é transmitida em formato não criptografado, você pode capturá-la facilmente e visualizar seu conteúdo usando ferramentas de análise de rede como Wireshark. Ela contém muitos dados.
- Versão TLS – a mais alta compatível com o cliente.
- Random – número aleatório do cliente.
- Session ID – é usado para sessões retomadas, portanto fica vazio no primeiro handshake.
- Cipher suites – algoritmos de criptografia compatíveis com um cliente. Eles são listados em ordem de preferência.
- Método de compressão – hoje é quase sempre 0.
- Extensões compatíveis – recursos adicionais que um cliente pode querer usar, por exemplo:
- Server Name Indication (SNI) – especifica o nome de host que um cliente está solicitando.
- Protocolo Application-Layer Protocol Negotiation (ALPN) – uma extensão para negociar qual protocolo deve ser tratado sobre TLS. É eficaz porque independe da camada de aplicação. Normalmente, as extensões TLS para servidores web são HTTP/1.1 ou HTTP/2.
- Bibliotecas TLS – um conjunto de bibliotecas que um cliente usa, pois clientes diferentes usam bibliotecas diferentes.
- Algoritmos de assinatura – lista de algoritmos compatíveis para verificar a identidade do servidor.
- Curvas elípticas – como a comunicação criptografada usa equações curvas em campos finitos, esta parte indica qual curva usar.
- Formatos de ponto de curva elíptica – informa como os pontos são codificados.
Também existem outras extensões. Com tudo isso, um site pode inferir uma quantidade significativa de dados sobre você a partir de uma mensagem “ClientHello”, incluindo a pilha de software, como família do navegador, tipo de dispositivo e postura de segurança, entre outros.
Método de impressão digital JA3
Certo, um servidor recebeu uma mensagem “ClientHello”. O que vem a seguir? Aqui, a técnica JA3 entra em cena. A Salesforce a gerencia, e ela é a solução de impressão digital mais popular. Ela se concentra em cinco componentes principais da mensagem: versão TLS, cipher suites, IDs de extensão, grupos compatíveis (curvas elípticas) e formatos de ponto de curva elíptica. Cada parte é convertida em formato decimal e concatenada com vírgulas e hífens. No entanto, os dados reais da impressão digital são uma string longa, então, por conveniência, usa-se MD5, uma função hash criptográfica. Ela produz um hash fixo de 128 bits. Um navegador então compara o resultado com outras possibilidades de impressão digital, muitas vezes a partir de um banco de dados interno. Ainda assim, às vezes bancos de dados públicos também são usados.
O objetivo é identificar as diferenças – este cliente parece ser um navegador web típico ou há algo suspeito nele? O problema é que os hashes produzidos por um navegador web comum, como Chrome, ou por uma biblioteca de programação usada para web scraping, seriam diferentes porque suas respectivas mensagens ClientHello seriam distintas. Como os algoritmos JA3 consideram apenas algumas variáveis, não há muitas opções únicas de impressão digital, então é relativamente fácil distinguir entre um usuário comum e um bot de scraping.
Isso comprova que a impressão digital TLS é eficaz para combater scrapers e a torna uma grande dor de cabeça para quem depende de web scraping.
Existem bancos de dados anti-web-scraping que coletam possibilidades de impressão digital JA3. Você pode calcular sua impressão digital e verificar se ela está na lista de permissões para garantir acesso sem problemas.
No entanto, não são apenas as impressões digitais JA3 que podem revelar a verdade sobre um cliente conectado ser um scraper. Até mesmo a diferença nos valores da própria mensagem ClientHello pode acionar sistemas anti-bot. Por exemplo:
- A ausência de SNI pode ser um sinal de alerta, pois normalmente ele é esperado em uma solicitação.
- Solicitações ALPN desatualizadas podem ser vistas como sinal de atividade suspeita, já que navegadores modernos geralmente são compatíveis com HTTP/2.
- As curvas elípticas compatíveis com navegadores como Chrome e aquelas compatíveis com scripts de programação diferem, o que pode levantar suspeitas.
- A lista de Cipher Suites é ordenada por prioridade e deve corresponder a uma lista de navegadores web comuns, incluindo a ordem. O mesmo vale para Extensions.
Formas de se alinhar à impressão digital TLS
Quando se trata de impressão digital TLS, seu objetivo é fazer seu scraper corresponder às impressões digitais de um navegador web comum. Não é uma tarefa fácil; no entanto, há várias ideias que você pode testar. Talvez você até queira combinar algumas delas.
Quando você usa navegadores de alta qualidade como Puppeteer, Playwright ou Selenium, você na verdade usa navegadores reais e obtém impressões digitais autênticas como resultado. Eles não alteram a impressão digital TLS, então os sites não conseguem determinar se um navegador comum ou um headless está tentando se conectar. Uma brecha a menos.
- Use uma coleção de navegadores e versões de sistemas operacionais
Esse truque ajuda a distribuir conexões por múltiplas impressões digitais, o que é útil se você executa um grande projeto de web scraping.
- Use um cliente HTTP baseado em LibCurl
Você pode atualizar esses clientes para usar curl-impersonate. Trata-se de uma versão modificada da biblioteca libcurl, que ajusta impressões digitais TLS para fazê-las parecer as de um navegador web comum. As bibliotecas compatíveis com libcurl incluem Typhoeus (Ruby), Guzzle (PHP), PyCurl (Python) e as bibliotecas curl default e crul community (R).
- Fortificação TLS
Se você usa a linguagem Go, está com sorte – ela é uma das linguagens que permite spoofing TLS. Bibliotecas como utls da Refraction Networking, ja3transport e CycleTLS são o que você precisa.
No entanto, as coisas não são tão fáceis se você usa Java ou Python. Com Java, você pode usar o método sslconfig.enabledCipherSuites para reconfigurar a lista de cipher suites desabilitados. Com Python, você pode chegar a configurar variáveis de Cipher Suite e versão TLS usando requests e httpx. Fazer spoofing dessas variáveis pode ajudar a resolver interrupções de acesso; no entanto, suas impressões digitais ainda não pareceriam realmente autênticas.
- Rotacione outros elementos
Quando todo o tráfego tem a mesma impressão digital TLS (mesmo que pareça genuína), isso pode parecer suspeito. Tente rotacionar elementos que podem ser rotacionados, como cookies, user agent, headers e endereço IP. Isso modificará ligeiramente sua mensagem ClientHello; como resultado, as impressões digitais JA3 também serão um pouco diferentes. Navegadores multi-account e proxies de alta qualidade ajudarão você com isso.
Palavra final
Por fim, mas não menos importante, operar em conformidade com a impressão digital TLS pode ser um desafio, pois diferentes sites adaptam ligeiramente o protocolo TLS e têm seus próprios critérios e bancos de dados para permitir ou negar acesso. Para fazer spoofing de impressões digitais TLS com sucesso, concentre-se especificamente em cada site, identificando o que aciona seus mecanismos de impressão digital e como ele personaliza o protocolo padrão. Além disso, hoje as fontes web combinam sinais em nível de rede, como impressão digital JA3, com sinais em nível de aplicação, como fontes e resolução de tela, portanto confiar apenas em spoofing TLS não será suficiente – você precisa garantir que cada detalhe do seu scraper pareça genuíno. Além disso, revise tudo periodicamente – os sites frequentemente atualizam suas políticas e esquemas de detecção, e novas abordagens anti-bot surgem, então você deve fazer o mesmo para obter dados precisos. É claro que você deve sempre permanecer dentro dos limites permitidos, coletar apenas dados disponíveis, evitar sobrecarregar os sites de destino e usar ferramentas confiáveis, como proxies obtidos legalmente. A DataImpulse certamente pode ajudar com a última parte – pressione o botão “Experimente agora” ou entre em contato conosco em [email protected] se tiver alguma dúvida.
