Zum Hauptinhalt springen
Piloterr
Zurück zum Blog
30. Mai 2023

Häufig gestellte Fragen zu TLS-Fingerprinting

Transport Layer Security oder TLS ist ein Algorithmus, der verwendet wird, um den gesamten Internetverkehr zu verschlüsseln und Ihnen bei den Anforderungen an die Cybersicherheit zu helfen. Dieses Protokoll verwendet kryptografische Algorithmen, um die webbasierte Kommunikation zwischen einem Server und seinen Clients zu verschlüsseln. Diese Technik wurde entwickelt, um die Verbindung von der Serverseite aus zu sichern und ermöglicht es Servern, den Client mit einem höheren Genauigkeitsgrad zu identifizieren, der sogar im ersten Paket vorhanden ist. Um mehr über TLS-Sicherheit zu erfahren, müssen wir zunächst betrachten, wie sie funktioniert und was der Begriff TLS-Handshake bedeutet.

Für einen Überblick siehe Was ist TLS-Fingerprinting. TLS-Prüfungen mit Anti-Bot-Bypass umgehen oder unser TLS-Fingerprint-Glossar lesen.

TLS-Handshake: Wie funktioniert das?

TLS-Handshake ist der Begriff, um die Verbindung von beiden Enden, dem Client und dem Server, gleichzeitig zu verschlüsseln und zu sichern. Wenn ein Client auf eine TLS-verschlüsselte Website zugreift, führt er einen TLS-Handshake mit dem Server durch. Der Handshake bedeutet im Grunde den Prozess der Identifizierung des Clients. Der Prozess beginnt mit einer Anfrage des Clients, die sichere Sitzung der Website zu initiieren. Diese sichere Zugriffssitzung wird zur einfachen Verständigung als 'Hello'-Sitzung bezeichnet. Da TLS ein hochwertiges Verschlüsselungsprotokoll ist, gibt es mehrere Versionen mit einer breiten Palette von Verschlüsselungsoptionen (auch bekannt als Cipher Suites). Der Client (kann ein Browser, ein Skript oder eine Eingabeaufforderung sein) sendet dem Server eine Liste der unterstützten Verschlüsselungsmethoden oder Cipher Suites und die aktuelle TLS-Version in der 'Client Hello'-Nachricht, um die Anfrage zu initiieren. Der Server analysiert dann die Liste mit seinen eigenen unterstützten Ciphers und sendet die 'Hello'-Nachricht zurück, die aus dem TLS-Protokoll, der gewählten Cipher Suite und dem SSL-Zertifikat besteht, das den öffentlichen Verschlüsselungsschlüssel enthält. Danach verwendet der Client den öffentlichen Schlüssel aus dem SSL-Zertifikat und überprüft dessen Genauigkeit (z. B. muss der Servername mit dem DNS im Zertifikat übereinstimmen, und es darf nicht abgelaufen sein). Nach einer vollständigen Überprüfungssitzung sendet der Client eine weitere zufällige Zeichenfolge (oder als Premaster Secret bezeichnet), die mit dem öffentlichen Schlüssel des Servers verschlüsselt ist, die der Server mit dem privaten Schlüssel entschlüsselt. Anschließend generieren sowohl der Client als auch der Server einen Sitzungsschlüssel unter Verwendung des Client-Zufallswerts, des Server-Zufallswerts und des Premaster Secrets. Diese sollten zum gleichen Ergebnis führen, und schließlich senden Server und Client eine 'Finished'-Nachricht, die mit dem Sitzungsschlüssel verschlüsselt ist. Wenn sowohl der Client als auch der Server sicher verschlüsselt sind, können wir sagen, dass der TLS-Handshake abgeschlossen ist. Werfen wir einen Blick auf das Diagramm, das diesen gesamten Prozess darstellt.

TLS-Bibliothek: Erkennen des Benutzer-Clients

Client Hello ist eigentlich eine Liste der vom Client unterstützten Cipher Suites, wobei jede eine andere TLS-Bibliothek verwendet, die hier zusammen mit ihren bemerkenswerten Unterschieden aufgeführt sind:

JA3-Diagramm zur TLS Client Hello Fingerprinting-Methode

Mit Hilfe von TLS-Fingerprinting kann der Server die vom Client verwendete TLS-Bibliothek identifizieren und mit den erwarteten Ergebnissen vergleichen. Jede Bibliothek ist unterschiedlich und unterstützt sogar verschiedene Cipher Suites in einer separaten Reihenfolge. Web-Clients können leicht anhand ihrer TLS-Signatur unterschieden werden. Wichtig ist, dass diese Informationen bereits bei der allerersten Sitzung (oder dem ersten Paket der Sitzung) verfügbar sind, die der Server sehen kann, noch bevor er auf den Client antwortet. Darüber hinaus sind diese Informationen bis zur Standardisierung der verschlüsselten Client-Hello-Nachricht für jedes dritte Netzwerk leicht verfügbar, das sie ebenfalls ableiten kann.

Ein Client könnte die User-Agent-Zeichenfolge ändern (um die Ergebnisse zu fälschen oder eine andere Browserversion anzuzeigen), aber die Hello-Nachricht kann manchmal die tatsächliche Version und das Betriebssystem preisgeben. Einige bestimmte Browser enthalten auch eine unterschiedliche Liste bevorzugter Cipher Suites (wie Chrome 81 und 93).

Open-Source-Implementierung & Methoden zur Signaturberechnung

JA3

Die erste und bekannteste Methode für TLS-Fingerprinting (oder Signaturberechnungsmethode genannt) ist JA3. Sie wurde von einem Team bei Salesforce entwickelt und 2017 als Open-Source veröffentlicht (Salesforce-Blog). Sie nimmt das Client-Hello-Paket und erzeugt einen MD5-Hash, der den Client während des TLS-Handshake-Prozesses identifiziert. Die Komponenten, die sie aus dem Paket entnimmt, sind die TLS-Version, akzeptierte Cipher Suites, Liste der Erweiterungen, elliptische Kurve und deren Formate. Nachdem diese Felder abgerufen wurden, kombiniert sie sie in der Reihenfolge, wobei Kommas zur Trennung der Felder selbst und Bindestriche zur Trennung der Feldwerte verwendet werden. Anschließend wird die resultierende Zeichenfolge in einen MD5-Hash umgewandelt. JA3 bleibt weit verbreitet, obwohl JA4 zunehmend für moderne TLS 1.3-Stacks verwendet wird.

JA3S

Dies wird für die serverseitige Implementierung der SSL- oder TLS-Kommunikation verwendet und kommt zusammen mit JA3 zum Einsatz, das sich auf die Client-Seite konzentriert und bei der Beurteilung der Legitimität und Genauigkeit einer Anwendung hilft. Der Fingerprint wird unter Verwendung der Felder aus der Server-Hello-Zeichenfolge generiert, wie TLS-Version, Cipher Suites und Erweiterungen. JA3 und JA3S bieten Schutz gegen die Möglichkeit, dass Malware denselben MD5-Hash wie legitime Anwendungen erzeugt.

Die Referenzimplementierung findet sich in salesforce/ja3.

JA4

JA4 ist ein neueres TLS-Client-Fingerprint-Format (FoxIO, 2023+), das TLS-Version, SNI-Nutzung, Cipher-/Erweiterungsanzahlen, ALPN und verkürzte SHA256-Hashes kodiert: zum Beispiel t13d1516h2_8daaf6152771_d8a2da3f94cd. Es wird häufig zusammen mit JA3 in Anti-Bot- und Scraping-Diskussionen verwendet.

Unser TLS Capture Analyzer extrahiert sowohl JA3 als auch JA4 aus tls.peet.ws JSON.

TS1

Diese Methode des TLS-Fingerprintings funktioniert anders, indem sie einen eindeutigen Hash für jede TLS-Signatur erstellt. Sie wurde zunächst von JA3 inspiriert, ist aber jetzt umfassender. Sie kodiert alle Parameter der Client-Hello-Nachricht im JSON-Format und berechnet dann deren SHA1-Hash, um die Signatur zu erzeugen. Bei dieser Methode haben verschiedene Clients unterschiedliche oder eindeutige Hashes, die zur einfachen Vergleichbarkeit der Signaturen in der Datenbank gespeichert werden können. Diese Signaturen kodieren mehr Parameter als JA3, sodass sie ein genaueres Bild des Clients für den Server darstellen können. Erwähnenswert ist, dass diese Methode aufgrund der Verwendung des JSON-Formats eher 'zukunftssicher' für die weitere Entwicklung von TLS-Erweiterungen ist, die derzeit noch nicht existieren.

Verwendbarkeit von TLS-Fingerprinting, wo wird es eingesetzt?

Der häufigste Anwendungsfall von TLS-Fingerprinting sind Anti-Bot- und Anti-DDoS-Lösungen, um Webseiten vor Crawling-Angriffen zu schützen. Einige nutzen es auch für Phishing-Kampagnen (was natürlich niemals als legitime Nutzung angesehen werden kann). Einige gängige Nutzungsszenarien sind:

Bot-Erkennung und -Schutz

Eine Anwendung, die programmiert oder entworfen wurde, um bestimmte Aktionen auf anderen Geräten auszuführen, was oft zu Cyberangriffen führt. In einigen weitreichenden Szenarien wird ein Netzwerk von Geräten verwendet, um groß angelegte Cyberangriffe durchzuführen, die als Botnetz bekannt sind. Forscher oder Fachleute können diese verfolgen, um Gemeinsamkeiten wie Malware zu identifizieren und die Ergebnisse in Form von IOCs mit der Sicherheitscommunity zu teilen.

Nach der Identifizierung eines Bots können Sie dessen IP blockieren oder die Dienste eines Bot-Schutzinstituts oder einer Organisation in Anspruch nehmen (die Fachleute) oder sogar einen Captcha-Code implementieren, um Ihre Daten vor Bots zu schützen.

DDoS-Schutz

DDoS oder Distributed Denial of Service ist eine Angriffsform, die darauf abzielt, eine Ziel-Website mit Junk-Traffic zu überlasten. Diese Art von Angriffen nutzt ebenfalls Botnetze. Sobald Sie einen Anstieg des Traffics auf Ihrer Website feststellen, untersuchen Sie die Client-Hello-Nachricht aller verbundenen Geräte. Wenn die Client-Hello-Felder bei allen Geräten gleich sind, können Sie davon ausgehen, dass alle mit derselben Malware infiziert sind. An diesem Punkt können Sie alle ihre IP-Adressen blockieren, um Ihre Website zu schützen.

Kontrolle über Ihre TLS-Signaturen

Meistens sind die Parameter in der TLS-Client-Hello-Nachricht nicht durch irgendwelche Tools oder Skripte kontrollierbar, aber in Python können Sie die Liste der Cipher Suites steuern. Es gibt einige Methoden, die Ihnen volle Kontrolle über TLS-Signaturen geben, nämlich:

Überblick über TLS-Fingerprinting-Tools und Bibliotheken

Fazit

TLS-Fingerprinting wird von Tag zu Tag beliebter und ist im Web für seine legitimen Zwecke wie das Blockieren von DDoS-Angriffen und Bot-Schutz extrem verbreitet, macht den Webspace jedoch weniger offen für die Öffentlichkeit und privater sowie restriktiver gegenüber bestimmten Clients. Tools zum Schutz von Clients durch das Fälschen von TLS-Signaturen sind noch unvollkommen und unreif, und die Weiterentwicklung solcher Tools ist nach wie vor sehr wichtig, damit das Web ein freier, einfacher und offener Raum für alle wird. In dieser Hinsicht wäre die beste Lösung von der TLS-eigenen Bibliotheksseite, den Nutzern eine feinere Kontrolle zu bieten, um sich selbst zu schützen. Und mehr Mittel bereitzustellen, um sich selbst und ihre Website zu sichern. Es müssen 4 Dinge implementiert werden, um eine bessere und saubere Nutzerbasis zu erreichen:

  • Nutzern ermöglichen, TLS-Erweiterungen zu kontrollieren
  • Nutzern ermöglichen, die genaue Liste der Cipher Suites zu kontrollieren
  • Unterstützung der neuesten Erweiterungen, die einige Browser derzeit verwenden
  • Den Überprüfungsprozess privater gestalten, um negative Anwendungsfälle zu vermeiden
  • Unterstützung für neue und aufkommende Programmiersprachen bieten

Siehe auch Fingerprinting-Ressourcen für Testseiten, Bibliotheken und Piloterr-Toolbox-Tools.

Weitere Artikel

Anleitungen und Neuigkeiten zu Web Scraping, Proxys und Datenextraktion.

Fingerprint

hellojs vs. undici: Warum Ihr Node-Scraper auf JA4 blockiert wird

Node-HTTP-Clients zeigen einen eindeutigen TLS/JA4-Fingerabdruck. Vergleichen Sie hellojs, undici und axios und nutzen Sie kostenlose Toolbox-Tools, um Ihren Fingerabdruck zu überprüfen.

Josselin Liebe
Josselin Liebe
Lesen
Fingerprint

RNet: Ultra-schneller Python-HTTP-Client mit fortschrittlichem TLS-Fingerprinting

RNet: Ultra-schneller Python-HTTP-Client mit fortschrittlichem TLS-Fingerprinting und Browser-Emulation. Umgehen Sie Anti-Bot-Systeme mit Rust-basierter Performance.

Josselin Liebe
Josselin Liebe
Lesen
Fingerprint

Wreq: Rust-HTTP-Client für Browser-Emulation und TLS-Fingerprinting

Entdecken Sie Wreq, den ultimativen Rust-HTTP-Client für Browser-Emulation und TLS-Fingerprinting. Umgehen Sie Anti-Bot-Systeme mit praktischen Web-Scraping-Beispielen.

Josselin Liebe
Josselin Liebe
Lesen

Bereit loszulegen?

Ihre Web-Scraping-API ist nur einen Klick entfernt. Starten Sie mit +500 Credits, ohne Infrastruktur einrichten zu müssen, ohne Proxys zu verwalten und ohne Kreditkarte.

  • +500 Credits
  • Keine Kreditkarte erforderlich
  • Alle Endpunkte enthalten