13 Punkte von GN⁺ 2024-12-31 | 1 Kommentare | Auf WhatsApp teilen
  • curl-impersonate ist ein spezieller Curl-Build, der gängige Webbrowser wie Chrome, Edge, Safari und Firefox imitieren kann
    • Führt TLS- und HTTP-Handshakes identisch zu echten Browsern aus
    • Kann als Kommandozeilen-Tool verwendet oder als Bibliothek integriert werden
  • Wichtigkeit
    • Wenn ein HTTP-Client auf TLS-Websites zugreift, führt er einen TLS-Handshake durch; dabei können die Eigenschaften des Clients identifiziert werden
    • curl-impersonate macht diese Handshakes identisch zu denen echter Browser, sodass Webdienste den Client nicht identifizieren können
  • Technische Umsetzung
    • Curl wird mit BoringSSL, der TLS-Bibliothek von Google, kompiliert.
    • Verschiedene TLS-Erweiterungen und SSL-Optionen werden angepasst.
    • HTTP/2-Verbindungseinstellungen werden geändert.
    • Curl wird mit nicht standardmäßigen Flags ausgeführt.
  • Unterstützte Browser
    • Kann verschiedene Browserversionen wie Chrome, Edge, Safari und Firefox imitieren.
    • Für jeden Browser werden Skripte bereitgestellt.
  • Grundlegende Verwendung
    • Für jeden unterstützten Browser werden Wrapper-Skripte zum Ausführen von curl-impersonate bereitgestellt.
    • Beispiel: curl_chrome123 https://www.wikipedia.org
  • Erweiterte Verwendung
    • Mit der Bibliothek libcurl-impersonate ist die Konfiguration über eine API möglich.
    • Mit der Umgebungsvariable CURL_IMPERSONATE kann die Bibliothek zur Laufzeit ersetzt werden.
  • Installation
    • Vorkompilierte Binärdateien für Windows, Linux und macOS werden auf der GitHub-Releases-Seite bereitgestellt.
    • Kann auch über Docker-Images verwendet werden.
  • Dieses Repository ist ein aktiver gepflegter Fork von curl-impersonate und weist die folgenden wesentlichen Unterschiede auf
    • Unterstützung für Encrypted Client Hello (ECH): Hinzugefügte ECH-Funktion, eingeführt in Chrome 119.
    • Unterstützung für ZSTD-Komprimierung: Unterstützung für das in Chrome 123 eingeführte ZSTD-Komprimierungsprotokoll.
    • Unterstützung für die Kurve X25519Kyber768: Hinzugefügte neue kryptografische Kurve, eingeführt in Chrome 124.
    • Erweiterte Akamai-HTTP/2-Fingerprint-Optionen: Verbesserte HTTP/2-Fingerprint-Optionen, einschließlich Safari.
    • Upgrade auf die neueste Curl-Version: Versionsupdate auf Curl 8.7.1.
    • Konfigurierbare TLS-Erweiterungsreihenfolge und GREASE: Hinzugefügte Optionen zum Aktivieren/Deaktivieren von GREASE sowie zur Reihenfolge von TLS-Erweiterungen.
    • Vorbereitung für die Unterstützung von WebKit- und Gecko-basierten Browsern: Arbeit an einer einzelnen Binärdatei für Chrome und Firefox läuft.

1 Kommentare

 
GN⁺ 2024-12-31
Hacker-News-Kommentare
  • Es gibt ein Projekt, das über Python-Bindings eine requests-ähnliche API bereitstellt. Damit lassen sich HTTP-Anfragen einfach stellen, ohne den gesamten Browser-Stack auszuführen

    • Das vermittelt das Gefühl vom Ende des offenen Internets. Große Unternehmen wollen offenbar nur von ihnen genehmigte Software zulassen und Nutzer identifizieren
    • Das wird aus verschiedenen Blickwinkeln angegangen, etwa Sicherheit, Bots und DDoS, und ist nicht nur auf Browser beschränkt
    • Das Endziel scheint zu sein, dass große Unternehmen sämtliches Nutzerverhalten verfolgen und nur genehmigtes Verhalten zulassen
  • Auf bestimmten Websites ist JavaScript-basierte Browser-Erkennung nötig. Selbst puppeteer-extra-plugin-stealth kann ausgehebelt werden

    • TLS-Fingerprinting dürfte auf Websites ohne ernsthafte Bot-Erkennung wohl nicht eingesetzt werden
    • Es kann nützlich sein, mit einem Headless-Browser kurzlebige Token/Cookies zu erhalten und diese dann für Anfragen mit einem leichtgewichtigen Client zu verwenden
  • Das Build-Skript ist kompliziert. Es verwendet autotools, aber man muss in Unterverzeichnissen bauen

    • Das Standard-Build-Ziel ist nicht der Projekt-Build, sondern ein Hilfetext
    • Bei Verwendung der Build-Ziele sind die Abhängigkeiten nicht korrekt gesetzt, sodass man sie mehrfach ausführen muss
    • Wegen eines fehlgeschlagenen BoringSSL-Builds konnte der Build nicht abgeschlossen werden. Der Versuch auf Ubuntu 20 schlug fehl
    • Auch auf Ubuntu 22 schlug der BoringSSL-Build fehl. Das make-Skript funktionierte besser
    • Das Entfernen von -Werror löste das Problem. Die Liste der Abhängigkeiten ist unvollständig
    • libc++-XX-dev und libc++abi-XX-dev werden benötigt. Der Installationsprozess ist etwas unvollständig
    • BoringSSL ist eine große Bibliothek, daher dauert der Build lange
  • Ich habe ein ähnliches Projekt für Python erstellt. Ich suche jemanden, der beim Windows-Build helfen kann

  • Nur wenige Websites verwenden JA3/JA4-Fingerprinting. Es gibt auch Websites, die fortgeschrittene Techniken einsetzen, um Header mit Fingerprints zu verknüpfen

    • Mit dem Fingerprint von Burp Suite lassen sich Sicherheitsarbeiten durchführen
  • Mit ja3proxy wird über utls ein HTTP-Proxy bereitgestellt. Besondere Funktionen für HTTP/2 gibt es nicht

  • In Go wird hauptsächlich das Paket tls-client verwendet

  • Interessant ist auch die Geschichte darüber, dass AI-Scraper-Farmen Websites per DDoS angreifen

  • Ich finde, solche Projekte sollten nicht veröffentlicht werden. Der Feind könnte unter uns sein

    • Diskriminierung nach User-Agent sollte illegal sein. Die EU könnte Veränderungen bewirken, scheint sich aber stark für digitale Identität zu interessieren
  • Wenn man Daten von bestimmten Websites lesen muss, verhindern Handshake-Informationen, dass man sie per Software auslesen kann

    • Für HTTP-Anfragen wird standardmäßig ein Headless-Browser verwendet. Manche Websites lassen sich wegen Captchas usw. nicht lesen