Ein JA3-Fingerprint ist ein MD5-Hash, der aus spezifischen Feldern einer TLS Client Hello-Nachricht abgeleitet wird. Er dient dazu, die Client-Anwendung oder -Bibliothek, die eine TLS-Verbindung initiiert, eindeutig zu identifizieren, und stellt somit eine robuste Methode für TLS-Client-Fingerprinting und Proxy-Erkennung dar.
TLS-Client-Fingerprinting verstehen
Wenn ein Client einen TLS-Handshake initiiert, sendet er eine Client Hello-Nachricht, die verschiedene Parameter enthält, die für den Aufbau einer sicheren Verbindung notwendig sind. Zu diesen Parametern gehören die TLS-Version, eine Liste der unterstützten Cipher Suites, Erweiterungen, elliptische Kurven und Formate elliptischer Kurven. Die spezifische Kombination und Reihenfolge dieser Parameter ist oft einzigartig für eine bestimmte Client-Anwendung, ein Betriebssystem und eine TLS-Bibliothek. Diese eindeutige Signatur ermöglicht die Identifizierung des Clients, selbst wenn andere identifizierende Informationen (wie User-Agent-Strings) geändert oder fehlen.
Was ist ein JA3-Fingerprint?
JA3, entwickelt von Salesforce, ist eine Methode zur Erstellung eines standardisierten Fingerprints der Client Hello-Nachricht. Sie konzentriert sich auf fünf Schlüsselfelder aus der Client Hello-Nachricht:
- TLS-Version: Die höchste vom Client unterstützte TLS-Version.
- Cipher Suites: Eine durch Kommas getrennte Liste der vom Client unterstützten Cipher Suites, nach Präferenz geordnet.
- TLS-Erweiterungen: Eine durch Kommas getrennte Liste der vom Client enthaltenen TLS-Erweiterungen, nach Typ geordnet.
- Elliptische Kurven: Eine durch Kommas getrennte Liste der unterstützten elliptischen Kurven.
- Formate elliptischer Kurven: Eine durch Kommas getrennte Liste der unterstützten Formate elliptischer Kurven.
Diese fünf Werte werden zu einem einzigen String zusammengefügt, wobei Kommas als Trennzeichen für Listen und Bindestriche als Trennzeichen zwischen den fünf Hauptfeldern verwendet werden. Dieser zusammengefügte String wird dann mittels MD5 gehasht, um den endgültigen 32-stelligen JA3-Fingerprint zu erzeugen. Die Verwendung von MD5 dient der Kürze und Konsistenz, nicht der kryptografischen Sicherheit.
JA3-Berechnungsbeispiel
Betrachten Sie eine hypothetische Client Hello-Nachricht mit den folgenden Parametern:
- TLS-Version:
0x0303(TLS 1.2) - Ciphers:
0xc02c,0xc02b,0xc030,0xc02f,0x009c,0x0095 - Erweiterungen:
0x0000,0x000b,0x000a,0x0012,0x0023,0x0017,0x0010,0x0035,0xff01,0x000d,0x0005 - Elliptische Kurven:
0x001d,0x0023,0x0024 - Formate elliptischer Kurven:
0x0000,0x0001,0x0002
Der zusammengefügte String wäre:
769,49164-49163-49168-49167-156-149,0-11-10-18-35-23-16-53-65281-13-5,29-35-36,0-1-2
Der MD5-Hash dieses Strings wäre der JA3-Fingerprint, z.B. e66a3d11b302c086d0b604e769494441.
JA3 in der Proxy-Erkennung
Proxys, insbesondere Forward-Proxys und solche, die TLS-Interception durchführen, modifizieren oder beenden und re-initiieren oft TLS-Verbindungen. Dieser Prozess verändert die Client Hello-Nachricht naturgemäß, was zu einem JA3-Fingerprint führt, der sich von dem des ursprünglichen Clients unterscheidet.
Wie Proxys JA3-Fingerprints beeinflussen
-
Forward-Proxys (HTTPS): Wenn ein Client sich mit einem HTTPS-Proxy verbindet, baut der Proxy eine neue TLS-Verbindung zum Zielserver auf. Die vom Zielserver beobachtete
Client Hello-Nachricht stammt von der Proxy-Software, nicht vom End-Client. Folglich spiegelt der JA3-Fingerprint den TLS-Stack des Proxys (z.B. Squid, Nginx, HAProxy oder benutzerdefinierte Proxy-Software) wider, anstatt den tatsächlichen Browser oder die Anwendung, die vom Endbenutzer verwendet wird. Diese Diskrepanz ist ein starker Indikator für die Proxy-Nutzung. -
TLS-Interception-Proxys (MITM): Diese Proxys beenden die TLS-Verbindung vom Client explizit und bauen eine neue, separate TLS-Verbindung zum Ziel auf. Dies ist in Unternehmensumgebungen zur Inspektion oder durch böswillige Akteure üblich. Die an den Zielserver gesendete
Client Hello-Nachricht wird vom Interception-Proxy generiert, was zu einem JA3-Fingerprint führt, der für die Interception-Software charakteristisch ist. -
SOCKS-Proxys: SOCKS-Proxys können auf einer niedrigeren Ebene arbeiten und rohe TCP-Verbindungen tunneln. Wenn ein SOCKS-Proxy den TCP-Stream einfach weiterleitet, ohne den TLS-Handshake zu modifizieren, könnte die ursprüngliche
Client Hello-Nachricht vom Client unberührt durchgelassen werden, und der JA3-Fingerprint bliebe derselbe. Viele SOCKS-Implementierungen oder spezifische Konfigurationen könnten jedoch immer noch TLS beenden und re-initiieren oder Header-Informationen ändern, was zu einem geänderten JA3 führt.
Proxys mit JA3 identifizieren
Durch die Analyse eingehender Client Hello-Nachrichten kann ein Server:
- Diskrepanzen erkennen: Den JA3-Fingerprint mit anderen Client-Indikatoren wie dem
User-Agent-Header vergleichen. EinUser-Agent, der vorgibt, Chrome unter Windows zu sein, aber einen JA3-Fingerprint präsentiert, der bekanntermaßen zu einem Proxy-Server oder einer spezifischen Scraping-Bibliothek gehört, deutet auf Proxy-Nutzung oder Spoofing hin. - Traffic kategorisieren: Traffic identifizieren, der von bekannten Proxy-Diensten, Rechenzentren oder Botnets stammt, die konsistente TLS-Stacks verwenden.
- Blockieren/Drosseln: Richtlinien implementieren, um Verbindungen von spezifischen JA3-Fingerprints zu blockieren oder zu drosseln, die mit unerwünschtem Traffic (z.B. Scraper, Bots oder kompromittierte Systeme) verbunden sind.
JA3 vs. JA3S
Während JA3 die Client Hello-Nachricht des Clients fingerprintet, fingerprintet JA3S (JA3 Server) die Server Hello-Nachricht des Servers. JA3S konzentriert sich auf die TLS-Version, Cipher Suite und Erweiterungen aus der Server Hello-Nachricht. Obwohl nützlich zur Identifizierung serverseitiger TLS-Implementierungen, ist es für die Client-Proxy-Erkennung weniger direkt anwendbar.
Einschränkungen und Umgehungstechniken
Obwohl leistungsstark, ist das JA3-Fingerprinting nicht unfehlbar:
- Spoofing: Ausgeklügelte Clients, Bots oder Proxy-Dienste können so konfiguriert werden, dass sie absichtlich spezifische JA3-Fingerprints nachahmen und so effektiv einen legitimen Browser spoofen. Dies erfordert die Kontrolle über die
Client Hello-Parameter der TLS-Bibliothek. - TLS-Bibliotheks-Updates: Updates von TLS-Bibliotheken (z.B. OpenSSL, NSS, BoringSSL) oder Betriebssystemen können die
Client Hello-Parameter ändern und so den JA3-Fingerprint für einen ansonsten identischen Client verändern. Dies erfordert eine kontinuierliche Überwachung und Aktualisierung der JA3-Signaturdatenbanken. - Bibliotheksvielfalt: Verschiedene HTTP-Client-Bibliotheken (z.B. Pythons
requests, Gosnet/http, Node.jshttps) und ihre zugrunde liegenden TLS-Implementierungen (z.B. OpenSSL, GnuTLS, BoringSSL, Goscrypto/tls) werden naturgemäß unterschiedliche JA3-Fingerprints erzeugen.
Häufige JA3-Fingerprint-Variationen
| Client-Typ | Typische JA3-Eigenschaften JA3 is a powerful tool for identifying and detecting various types of client traffic, particularly within the context of proxy services and bot detection. Knowing how to interpret and mitigate JA3 fingerprints is crucial for both proxy providers and consumers.