In this Article
Neue Sicherheitsherausforderungen führen zur Weiterentwicklung von Anti-Bot-Maßnahmen, und manchmal geraten selbst legitime Scraper zwischen die Fronten. Eine solche Technik ist TLS-Fingerprinting, eine raffinierte, noch wenig bekannte und ziemlich wirksame Methode, um ein Gerät zu identifizieren, das versucht, sich mit einem Server zu verbinden. Warum lässt sie sich nicht so leicht umgehen, und was müssen Sie tun, um die benötigten Daten erfolgreich zu scrapen? Dieser Artikel deckt alle Karten auf.
Was ist TLS eigentlich?
Um TLS-Fingerprinting zu verstehen, sehen wir uns zunächst TLS selbst an. TLS oder Transport Layer Security (früher SSL – Secure Sockets Layer) ist ein Protokoll, das über einer normalen HTTP-Verbindung läuft und Ihre Online-Aktivitäten absichert. Wenn Sie neben einer URL ein Schlosssymbol sehen oder die Adresse einer Website mit https beginnt, ist TLS aktiv. Tatsächlich ist es inzwischen schwer, noch auf eine Website zu stoßen, die kein TLS verwendet. Wenn Sie versuchen, eine Website aufzurufen, die nur mit “http” beginnt (ohne “s”), zeigt Ihr Browser statt Sie zu einer Webseite weiterzuleiten eine Warnung über eine unsichere Verbindung an.
TLS verschlüsselt Ihre Daten, bevor es sie an den Zielserver sendet – es verwandelt sie in Folgen zufälliger Zeichen wie 9823h4brjhvbi, sodass böswillige Akteure Ihre Informationen selbst dann nicht nutzen können, wenn sie sie abfangen. Bevor TLS Ihre Daten sendet, muss es jedoch sicherstellen, dass die Informationen an den legitimen Server gehen und dieser sie anschließend entschlüsseln kann. Deshalb baut TLS vor dem Senden der Daten zunächst eine Verbindung auf – es tauscht eine Reihe von Nachrichten mit dem Zielserver aus, um ihn zu überprüfen, eine Verschlüsselungsmethode zu vereinbaren und gemeinsame Sitzungsschlüssel zu erzeugen, die Daten während der Kommunikation schützen und entschlüsseln helfen.
Der gesamte Vorgang wird als TLS-Handshake bezeichnet und beginnt mit einer “ClientHello”-Nachricht. Diese Nachricht ist beim TLS-Fingerprinting von Interesse, da sie die Daten liefert, mit denen Server Sie anschließend identifizieren.
Woraus besteht die “ClientHello”-Nachricht?
Da die “ClientHello”-Nachricht keine sensiblen Daten wie Zugangsdaten enthält und unverschlüsselt übertragen wird, können Sie sie problemlos erfassen und ihren Inhalt mit Netzwerkanalyse-Tools wie Wireshark anzeigen. Sie enthält viele Daten.
- TLS-Version – die höchste Version, die ein Client unterstützt.
- Zufallswert – eine Zufallszahl vom Client.
- Sitzungs-ID – sie wird für wiederaufgenommene Sitzungen verwendet und ist daher beim ersten Handshake leer.
- Cipher Suites – vom Client unterstützte Verschlüsselungsalgorithmen. Sie sind nach Präferenz aufgelistet.
- Komprimierungsmethode – heute ist sie fast immer 0.
- Unterstützte Erweiterungen – zusätzliche Funktionen, die ein Client möglicherweise nutzen möchte, zum Beispiel:
- Server Name Indication (SNI) – gibt einen Hostnamen an, den ein Client anfordert.
- Application-Layer Protocol Negotiation (ALPN)-Protokoll – eine Erweiterung zur Aushandlung des Protokolls, das über TLS verarbeitet werden soll. Sie ist wirksam, weil sie unabhängig von der Anwendungsschicht ist. Typischerweise sind TLS-Erweiterungen für Webserver HTTP/1.1 oder HTTP/2.
- TLS-Bibliotheken – verschiedene Bibliotheken, die ein Client verwendet, da unterschiedliche Clients unterschiedliche nutzen.
- Signaturalgorithmen – Liste der unterstützten Algorithmen zur Überprüfung der Serveridentität.
- Elliptische Kurven – da verschlüsselte Kommunikation gekrümmte Gleichungen über endlichen Körpern nutzt, gibt dieser Teil an, welche Kurve verwendet werden soll.
- Punktformate elliptischer Kurven – gibt an, wie Punkte kodiert werden.
Es gibt auch weitere Erweiterungen. Anhand all dessen kann eine Website aus einer “ClientHello”-Nachricht eine erhebliche Menge an Daten über Sie ableiten, darunter den Software-Stack, etwa Browserfamilie, Gerätetyp und Sicherheitsstatus.
JA3-Fingerprinting-Methode
Ein Server hat also eine “ClientHello”-Nachricht erhalten. Was kommt als Nächstes? Hier kommt die JA3-Technik ins Spiel. Sie wird von Salesforce verwaltet und ist die beliebteste Fingerprinting-Lösung. Sie konzentriert sich auf fünf Schlüsselkomponenten der Nachricht: TLS-Version, Cipher Suites, Erweiterungs-IDs, unterstützte Gruppen (elliptische Kurven) und Punktformate elliptischer Kurven. Jeder Teil wird in ein Dezimalformat umgewandelt und mit Kommas und Bindestrichen verkettet. Die eigentlichen Fingerprint-Daten sind jedoch eine lange Zeichenfolge, weshalb aus Gründen der Übersichtlichkeit MD5, eine kryptografische Hashfunktion, verwendet wird. Sie erzeugt einen festen 128-Bit-Hash. Ein Browser vergleicht das Ergebnis anschließend mit anderen möglichen Fingerprints, häufig aus einer internen Datenbank. Manchmal werden jedoch auch öffentliche Datenbanken verwendet.
Ziel ist es, Unterschiede zu erkennen: Wirkt dieser Client wie ein typischer Webbrowser, oder ist etwas an ihm verdächtig? Das Problem ist, dass die Hashes eines normalen Webbrowsers wie Chrome und die einer beim Web Scraping verwendeten Programmbibliothek unterschiedlich wären, weil sich ihre jeweiligen ClientHello-Nachrichten unterscheiden. Da JA3-Algorithmen nur wenige Variablen berücksichtigen, gibt es nicht viele einzigartige Fingerprint-Optionen. Daher lässt sich relativ leicht zwischen einem normalen Nutzer und einem Scraping-Bot unterscheiden.
Das zeigt, wie wirksam TLS-Fingerprinting bei der Abwehr von Scrapern ist, und bereitet allen, die auf Web Scraping angewiesen sind, erhebliche Kopfschmerzen.
Es gibt Anti-Web-Scraping-Datenbanken, die mögliche JA3-Fingerprints sammeln. Sie können Ihren Fingerprint berechnen und prüfen, ob er auf einer Whitelist steht, um einen reibungslosen Zugriff sicherzustellen.
Nicht nur JA3-Fingerprints können allerdings verraten, dass ein sich verbindender Client ein Scraper ist. Schon Unterschiede bei den Werten in der ClientHello-Nachricht selbst können Anti-Bot-Systeme auslösen. Zum Beispiel:
- Das Fehlen von SNI kann ein Warnsignal sein, da SNI in einer Anfrage üblicherweise erwartet wird.
- Veraltete ALPN-Anfragen können als Zeichen verdächtiger Aktivität gelten, da moderne Browser normalerweise HTTP/2 unterstützen.
- Die von Browsern wie Chrome unterstützten elliptischen Kurven unterscheiden sich von denen, die Programmskripte unterstützen, was Verdacht erregen kann.
- Die Liste der Cipher Suites ist nach Priorität geordnet und muss einschließlich der Reihenfolge einer Liste gängiger Webbrowser entsprechen. Dasselbe gilt für Erweiterungen.
Möglichkeiten zur Anpassung an TLS-Fingerprinting
Beim TLS-Fingerprinting besteht Ihr Ziel darin, die Fingerprints Ihres Scrapers denen eines gängigen Webbrowsers anzugleichen. Das ist keine leichte Aufgabe, doch es gibt mehrere Ansätze, die Sie ausprobieren können. Vielleicht möchten Sie sogar einige davon kombinieren.
- Verwenden Sie Headless-Browser
Wenn Sie hochwertige Browser wie Puppeteer, Playwright oder Selenium verwenden, nutzen Sie tatsächlich echte Browser und erhalten dadurch authentische Fingerprints. Sie verändern das TLS-Fingerprinting nicht, sodass Websites nicht feststellen können, ob ein normaler Browser oder ein Headless-Browser versucht, eine Verbindung aufzubauen. Eine Schwachstelle weniger.
- Verwenden Sie eine Auswahl von Browsern und Betriebssystemversionen
Dieser Trick hilft dabei, Verbindungen auf mehrere Fingerprints zu verteilen, was bei einem großen Web-Scraping-Projekt nützlich ist.
- Verwenden Sie einen LibCurl-basierten HTTP-Client
Sie können solche Clients so aktualisieren, dass sie curl-impersonate verwenden. Dabei handelt es sich um eine modifizierte Version der Bibliothek libcurl, die TLS-Fingerprints so anpasst, dass sie wie die eines normalen Webbrowsers aussehen. Zu den Bibliotheken, die libcurl unterstützen, gehören Typhoeus (Ruby), Guzzle (PHP), PyCurl (Python) sowie die Standard- und Community-Bibliotheken von curl und crul (R).
- TLS-Härtung
Wenn Sie die Sprache Go verwenden, haben Sie Glück – sie gehört zu den Sprachen, die TLS-Spoofing ermöglichen. Bibliotheken wie utls von Refraction Networking, ja3transport und CycleTLS sind genau das, was Sie benötigen.
Wenn Sie Java oder Python verwenden, ist es jedoch nicht so einfach. Mit Java können Sie die Methode sslconfig.enabledCipherSuites verwenden, um die Liste der aktivierten Cipher Suites neu zu konfigurieren. Mit Python können Sie mithilfe von requests und httpx zumindest die Variablen für Cipher Suite und TLS-Version konfigurieren. Das Spoofing dieser Variablen kann helfen, Zugriffsunterbrechungen zu beheben. Ihre Fingerprints würden dadurch jedoch weiterhin nicht wirklich authentisch wirken.
- Rotieren Sie andere Elemente
Wenn der gesamte Datenverkehr denselben TLS-Fingerprint hat, kann das verdächtig wirken, selbst wenn er echt aussieht. Versuchen Sie, Elemente zu rotieren, die sich rotieren lassen, etwa Cookies, User Agent, Header und IP-Adresse. Dadurch wird Ihre ClientHello-Nachricht leicht verändert, und folglich unterscheiden sich auch die JA3-Fingerprints etwas. Browser für mehrere Konten und hochwertige Proxys helfen Ihnen dabei.
Fazit
Nicht zuletzt kann es eine Herausforderung sein, TLS-Fingerprinting gerecht zu werden, da verschiedene Websites das TLS-Protokoll leicht unterschiedlich anpassen und eigene Kriterien sowie Datenbanken für die Zulassung oder Verweigerung des Zugriffs haben. Um TLS-Fingerprints erfolgreich zu spoofen, sollten Sie sich auf jede Website einzeln konzentrieren und ermitteln, was ihre Fingerprinting-Mechanismen auslöst und wie sie das Standardprotokoll anpasst. Zudem kombinieren Webquellen heute Signale auf Netzwerkebene wie JA3-Fingerprinting mit Signalen auf Anwendungsebene wie Schriftarten und Bildschirmauflösung. Sich allein auf TLS-Spoofing zu verlassen, reicht daher nicht aus – Sie müssen sicherstellen, dass jedes Detail Ihres Scrapers echt wirkt. Prüfen Sie außerdem alles regelmäßig: Websites aktualisieren ihre Richtlinien und Erkennungsschemata häufig, und es entstehen neue Anti-Bot-Ansätze. Deshalb müssen Sie ebenfalls Schritt halten, um genaue Daten zu erhalten. Natürlich sollten Sie stets innerhalb der erlaubten Grenzen bleiben, nur verfügbare Daten scrapen, Zielwebsites nicht überlasten und vertrauenswürdige Tools verwenden, etwa rechtmäßig beschaffte Proxys. DataImpulse kann Sie beim letzten Punkt selbstverständlich unterstützen – klicken Sie auf die Schaltfläche “Jetzt ausprobieren” oder kontaktieren Sie uns unter [email protected], wenn Sie Fragen haben.
