13 points par GN⁺ 2024-12-31 | 1 commentaires | Partager sur WhatsApp
  • curl-impersonate est une version spéciale de curl capable d’imiter les principaux navigateurs web comme Chrome, Edge, Safari et Firefox
    • Il effectue les handshakes TLS et HTTP exactement comme un vrai navigateur
    • Il peut être utilisé comme outil en ligne de commande ou intégré comme bibliothèque
  • Importance
    • Lorsqu’un client HTTP accède à un site web en TLS, il effectue un handshake TLS, et ce processus peut permettre d’identifier les caractéristiques du client
    • curl-impersonate rend ces handshakes identiques à ceux d’un vrai navigateur afin que les services web ne puissent pas identifier le client
  • Implémentation technique
    • curl est compilé avec BoringSSL, la bibliothèque TLS de Google.
    • Diverses extensions TLS et options SSL sont modifiées.
    • Les paramètres de connexion HTTP/2 sont ajustés.
    • curl est exécuté avec des drapeaux non standard.
  • Navigateurs pris en charge
    • Il peut imiter différentes versions de navigateurs comme Chrome, Edge, Safari et Firefox.
    • Des scripts sont fournis pour chaque navigateur.
  • Utilisation de base
    • Des scripts wrapper sont fournis pour exécuter curl-impersonate pour chaque navigateur pris en charge.
    • Exemple : curl_chrome123 https://www.wikipedia.org
  • Utilisation avancée
    • Il peut être configuré via une API en utilisant la bibliothèque libcurl-impersonate.
    • La bibliothèque peut être remplacée à l’exécution à l’aide de la variable d’environnement CURL_IMPERSONATE.
  • Installation
    • Des binaires précompilés pour Windows, Linux et macOS sont disponibles sur la page des releases GitHub.
    • Il peut aussi être utilisé via une image Docker.
  • Ce dépôt est un fork plus activement maintenu de curl-impersonate, avec les principales différences suivantes
    • Prise en charge de Encrypted Client Hello (ECH) : ajout de la fonctionnalité ECH introduite dans Chrome 119.
    • Prise en charge de la compression ZSTD : prise en charge du protocole de compression ZSTD introduit dans Chrome 123.
    • Prise en charge de la courbe X25519Kyber768 : ajout de la nouvelle courbe cryptographique introduite dans Chrome 124.
    • Extension des options d’empreinte Akamai HTTP/2 : amélioration des options d’empreinte HTTP/2, y compris pour Safari.
    • Mise à niveau vers une version récente de curl : version mise à jour vers curl 8.7.1.
    • Ordre des extensions TLS et configuration de GREASE : ajout d’options pour définir l’ordre des extensions TLS et activer/désactiver GREASE.
    • Préparation du support des navigateurs basés sur Webkit et Gecko : des travaux sont en cours sur un binaire unique pour Chrome et Firefox.

1 commentaires

 
GN⁺ 2024-12-31
Avis Hacker News
  • Il existe un projet qui, via des bindings Python, fournit une API similaire à requests. Cela permet d’effectuer facilement des requêtes HTTP sans exécuter toute la stack d’un navigateur

    • Cela donne l’impression d’assister à la fin de l’Internet ouvert. Les grandes entreprises veulent faire en sorte que seuls les logiciels qu’elles approuvent soient utilisés, et cherchent à identifier les utilisateurs
    • Elles abordent le sujet sous plusieurs angles, notamment la sécurité, les bots et le DDoS, et cela ne se limite pas aux navigateurs
    • L’objectif final semble être que les grandes entreprises puissent suivre tous les comportements des utilisateurs et n’autoriser que les comportements approuvés
  • Certains sites nécessitent une détection de navigateur basée sur JavaScript. Il est même possible de neutraliser puppeteer-extra-plugin-stealth

    • L’empreinte TLS ne sera probablement pas utilisée sur des sites qui n’ont pas de détection de bots très poussée
    • Cela peut être utile pour obtenir des jetons/cookies à courte durée de vie avec un navigateur headless, puis les utiliser pour envoyer des requêtes avec un client léger
  • Le script de build est complexe. Il utilise autotools, mais il faut lancer le build depuis un sous-répertoire

    • La cible de build par défaut n’est pas la compilation du projet, mais un texte d’aide
    • Lorsqu’on utilise les cibles de build, les dépendances ne sont pas correctement configurées, ce qui oblige à exécuter la commande plusieurs fois
    • Impossible de terminer le build à cause d’un échec de compilation de BoringSSL. Tentative sur Ubuntu 20, sans succès
    • Tentative également sur Ubuntu 22, mais échec du build de BoringSSL. Le script make fonctionnait mieux
    • Le problème a été résolu en supprimant -Werror. La liste des dépendances est incomplète
    • libc++-XX-dev et libc++abi-XX-dev sont nécessaires. Le processus d’installation est un peu incomplet
    • BoringSSL est une grosse bibliothèque, donc le build prend du temps
  • J’ai créé un projet similaire pour Python. Je cherche quelqu’un pour aider sur les builds Windows

  • Seul un petit nombre de sites utilisent l’empreinte JA3/JA4. Certains emploient aussi des techniques avancées pour corréler les en-têtes et l’empreinte

    • Il est possible d’utiliser l’empreinte de Burp Suite pour effectuer des tâches de sécurité
  • J’utilise ja3proxy pour exposer un proxy HTTP via utls. Il n’y a pas de fonctionnalité particulière pour HTTP/2

  • En Go, c’est surtout le package tls-client qui est utilisé

  • Histoire liée au fait que des fermes de scrapers IA provoquent des DDoS sur des sites, et sujet intéressant

  • Je pense que ce type de projet ne devrait pas être publié. L’ennemi pourrait être parmi nous

    • La discrimination fondée sur le user-agent devrait être illégale. L’UE pourrait faire bouger les choses, mais elle s’intéresse aussi beaucoup à l’identité numérique
  • Si l’on doit lire des données sur certains sites web, les informations de handshake empêchent qu’elles soient lues par logiciel

    • Pour les requêtes HTTP, j’utilise par défaut un navigateur headless. Certains sites web restent illisibles à cause des CAPTCHA, etc.