13 puntos por GN⁺ 2024-12-31 | 1 comentarios | Compartir por WhatsApp
  • curl-impersonate es una compilación especial de curl que puede imitar navegadores web principales como Chrome, Edge, Safari y Firefox
    • Realiza el handshake de TLS y HTTP igual que un navegador real
    • Se puede usar como herramienta de línea de comandos o integrarse como biblioteca
  • Importancia
    • Cuando un cliente HTTP accede a un sitio web con TLS, realiza un handshake de TLS, y en ese proceso se pueden identificar las características del cliente
    • curl-impersonate hace que esos handshakes sean iguales a los de un navegador real para que los servicios web no puedan identificar al cliente
  • Implementación técnica
    • Compila curl usando BoringSSL, la biblioteca TLS de Google.
    • Modifica varias extensiones TLS y opciones SSL.
    • Cambia la configuración de conexión HTTP/2.
    • Ejecuta curl con flags no estándar.
  • Navegadores compatibles
    • Puede imitar varias versiones de navegadores como Chrome, Edge, Safari y Firefox.
    • Incluye scripts para cada navegador.
  • Uso básico
    • Se incluyen scripts wrapper para ejecutar curl-impersonate para cada navegador compatible.
    • Ejemplo: curl_chrome123 https://www.wikipedia.org
  • Uso avanzado
    • Se puede configurar mediante API usando la biblioteca libcurl-impersonate.
    • La biblioteca se puede reemplazar en tiempo de ejecución usando la variable de entorno CURL_IMPERSONATE.
  • Instalación
    • Hay binarios precompilados para Windows, Linux y macOS en la página de releases de GitHub.
    • También se puede usar mediante una imagen de Docker.
  • Este repositorio es un fork más activo de curl-impersonate y tiene las siguientes diferencias principales
    • Soporte para Encrypted Client Hello (ECH): se agregó la función ECH introducida en Chrome 119.
    • Soporte para compresión ZSTD: soporte para el protocolo de compresión ZSTD introducido en Chrome 123.
    • Soporte para la curva X25519Kyber768: se agregó la nueva curva criptográfica introducida en Chrome 124.
    • Ampliación de opciones de huella HTTP/2 de Akamai: se reforzaron las opciones de huella HTTP/2, incluido Safari.
    • Actualización a la versión más reciente de curl: se actualizó a curl 8.7.1.
    • Configuración del orden de extensiones TLS y GREASE: se agregaron opciones para activar/desactivar GREASE y definir el orden de las extensiones TLS.
    • Preparación para soporte de navegadores basados en Webkit y Gecko: está en curso el trabajo en un binario único para Chrome y Firefox.

1 comentarios

 
GN⁺ 2024-12-31
Opiniones de Hacker News
  • Hay un proyecto que, mediante bindings de Python, ofrece una API similar a requests. Esto permite hacer solicitudes HTTP fácilmente sin ejecutar toda la pila del navegador

    • Da la sensación del fin del internet abierto. Las grandes empresas quieren que solo se use el software que ellas aprueban e intentan identificar a los usuarios
    • Lo están abordando desde varios ángulos, como seguridad, bots y DDoS, y no se limita solo al navegador
    • Parece que el objetivo final es que las grandes empresas rastreen todas las acciones del usuario y solo permitan las conductas aprobadas
  • En ciertos sitios se necesita detección de navegador basada en JavaScript. Incluso puede neutralizar puppeteer-extra-plugin-stealth

    • Parece poco probable que el fingerprinting TLS se use en sitios sin una detección de bots seria
    • Puede ser útil obtener tokens/cookies de vida corta con un navegador headless y luego usarlos para hacer solicitudes desde un cliente liviano
  • El script de compilación es complejo. Usa autotools, pero hay que compilar desde un subdirectorio

    • El objetivo de compilación predeterminado no es compilar el proyecto, sino mostrar el texto de ayuda
    • Al usar los objetivos de compilación, las dependencias no están configuradas correctamente, así que hay que ejecutarlo varias veces
    • No pudo completar la compilación por una falla al compilar BoringSSL. Lo intentó en Ubuntu 20, pero falló
    • También lo intentó en Ubuntu 22, pero volvió a fallar la compilación de BoringSSL. El script de make funcionó mejor
    • Se resolvió el problema quitando -Werror. La lista de dependencias está incompleta
    • Se necesitan libc++-XX-dev y libc++abi-XX-dev. El proceso de instalación está algo incompleto
    • BoringSSL es una biblioteca grande, así que la compilación tarda bastante
  • Hizo un proyecto similar para Python. Está buscando a alguien que ayude con los builds para Windows

  • Solo unos pocos sitios web usan fingerprinting JA3/JA4. También hay sitios que usan técnicas avanzadas para correlacionar headers y fingerprints

    • Se puede usar el fingerprint de Burp Suite para realizar tareas de seguridad
  • Usa ja3proxy para exponer un proxy HTTP a través de utls. No tiene funciones especiales para HTTP/2

  • En Go, el paquete tls-client es el que más se usa

  • Hay comentarios sobre cómo las granjas de scrapers con IA hacen DDoS a los sitios, y resulta interesante

  • Cree que este tipo de proyectos no debería publicarse. El enemigo podría estar entre nosotros

    • La discriminación por user agent debería ser ilegal. La UE podría impulsar un cambio, aunque también muestra mucho interés en la identidad digital
  • Si necesitas leer datos de ciertos sitios web, usan la información del handshake para impedir que se lean por software

    • Al hacer solicitudes HTTP, usa por defecto un navegador headless. Algunos sitios web no pueden leerse por captchas y otros obstáculos