13 pontos por GN⁺ 2024-12-31 | 1 comentários | Compartilhar no WhatsApp
  • curl-impersonate é uma build especial do curl capaz de imitar os principais navegadores, como Chrome, Edge, Safari e Firefox
    • Realiza handshakes TLS e HTTP da mesma forma que navegadores reais
    • Pode ser usado como ferramenta de linha de comando ou integrado como biblioteca
  • Importância
    • Quando um cliente HTTP acessa um site com TLS, ele executa um handshake TLS, e nesse processo as características do cliente podem ser identificadas
    • O curl-impersonate faz esses handshakes da mesma forma que navegadores reais para que serviços web não consigam identificar o cliente
  • Implementação técnica
    • Compila o curl usando a biblioteca TLS do Google, a BoringSSL.
    • Modifica várias extensões TLS e opções de SSL.
    • Altera as configurações de conexão HTTP/2.
    • Executa o curl com flags não padronizadas.
  • Navegadores suportados
    • Pode imitar várias versões de navegadores como Chrome, Edge, Safari e Firefox.
    • Há scripts fornecidos para cada navegador.
  • Uso básico
    • São fornecidos scripts wrapper para executar o curl-impersonate para cada navegador compatível.
    • Exemplo: curl_chrome123 https://www.wikipedia.org
  • Uso avançado
    • Pode ser configurado via API usando a biblioteca libcurl-impersonate.
    • A biblioteca pode ser substituída em tempo de execução usando a variável de ambiente CURL_IMPERSONATE.
  • Instalação
    • Binários pré-compilados para Windows, Linux e macOS estão disponíveis na página de releases do GitHub.
    • Também pode ser usado por meio de imagens Docker.
  • Este repositório é um fork mais ativo do curl-impersonate, com as seguintes diferenças principais
    • Suporte a Encrypted Client Hello (ECH): adiciona o recurso ECH introduzido no Chrome 119.
    • Suporte à compressão ZSTD: compatibilidade com o protocolo de compressão ZSTD introduzido no Chrome 123.
    • Suporte à curva X25519Kyber768: adiciona a nova curva criptográfica introduzida no Chrome 124.
    • Expansão das opções de fingerprint HTTP/2 da Akamai: reforça as opções de fingerprint HTTP/2, incluindo o Safari.
    • Upgrade para a versão mais recente do curl: atualização para o curl 8.7.1.
    • Configuração da ordem das extensões TLS e do GREASE: adiciona opções para ativar/desativar o GREASE e definir a ordem das extensões TLS.
    • Preparação para suporte a navegadores baseados em Webkit e Gecko: está em andamento o trabalho em um binário único para Chrome e Firefox.

1 comentários

 
GN⁺ 2024-12-31
Comentários do Hacker News
  • Há um projeto que fornece uma API semelhante à do requests por meio de bindings em Python. Isso facilita fazer requisições HTTP sem executar toda a stack de um navegador

    • Dá a sensação do fim da internet aberta. As grandes empresas querem que só se use software aprovado por elas e tentam identificar os usuários
    • Estão abordando isso por vários ângulos, como segurança, bots e DDoS, e não se limita apenas ao navegador
    • O objetivo final parece ser que as grandes empresas rastreiem todo o comportamento do usuário e permitam apenas ações aprovadas
  • Em certos sites, é necessária detecção de navegador baseada em JavaScript. Até o puppeteer-extra-plugin-stealth pode ser neutralizado

    • A impressão digital de TLS provavelmente não será usada em sites sem detecção séria de bots
    • Pode ser útil usar um navegador headless para obter tokens/cookies de curta duração e depois fazer as requisições com um cliente leve
  • O script de build é complexo. Usa autotools, mas é preciso compilar a partir de um subdiretório

    • O alvo de build padrão não é a compilação do projeto, mas sim um texto de ajuda
    • Ao usar os alvos de build, as dependências não estão configuradas corretamente, então é preciso executar várias vezes
    • Não foi possível concluir o build por causa de falha na compilação do BoringSSL. Houve tentativa no Ubuntu 20, mas falhou
    • Houve tentativa no Ubuntu 22, mas a compilação do BoringSSL também falhou. O script make funcionou melhor
    • O problema foi resolvido removendo -Werror. A lista de dependências está incompleta
    • São necessários libc++-XX-dev e libc++abi-XX-dev. O processo de instalação está um pouco incompleto
    • O BoringSSL é uma biblioteca grande, então o tempo de compilação é longo
  • Foi criado um projeto semelhante para Python. Estão procurando alguém para ajudar com o build no Windows

  • Apenas um pequeno número de sites usa impressão digital JA3/JA4. Também existem sites que usam técnicas avançadas para correlacionar cabeçalhos e impressões digitais

    • É possível usar a impressão digital do Burp Suite para realizar tarefas de segurança
  • Usam ja3proxy para expor um proxy HTTP via utls. Não há nenhum recurso especial para HTTP/2

  • Em Go, o pacote tls-client é o mais usado

  • Há interesse e discussão sobre fazendas de scrapers de IA fazendo DDoS em sites

  • Acham que esse tipo de projeto não deveria ser publicado. O inimigo pode estar entre nós

    • A discriminação por user-agent deveria ser ilegal. A UE talvez possa trazer mudanças, mas tem grande interesse em identidade digital
  • Quando é preciso ler dados de certos sites, usam informações de handshake para impedir que isso seja feito por software

    • Ao fazer requisições HTTP, usam navegadores headless por padrão. Alguns sites não podem ser lidos por causa de captchas e afins