Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

JA3- und JA4-Fingerprints in AWS WAF und darüber hinaus

By Tyler WengerdApr 10, 20259 min read

Diese Seite ist auch in English, Español, Français, Italiano, 日本語 und Português verfügbar.

Sprechen wir über Fingerprints | Quelle: Everett Collection/Shutterstock

Wer schon einmal AWS-WAF-Logs analysiert hat, dem sind vielleicht die Logfelder ja3fingerprint und (seit Kurzem) ja4fingerprint aufgefallen. Sie fragen sich, was es damit auf sich hat? Herzlich willkommen! Sie haben davon noch nie gehört, sind jetzt aber neugierig? Auch herzlich willkommen!

In diesem Artikel sehen wir uns an, was diese Fingerprints eigentlich sind, wie sie in den unterschiedlichsten Cloud-Diensten weiterhelfen und wie Sie sie in AWS, Google Cloud und Azure erkennen, analysieren und einsetzen. Außerdem zeigen wir einige Beispiel-Queries für AWS-WAF-Logs.

Was sind JA3- und JA4-Fingerprints überhaupt?

JA3- und JA4-Fingerprints (ausgesprochen "dscha-drei" und "dscha-vier") sind Client-Identifikatoren, die von Diensten wie AWS WAF berechnet werden. Sie sind sehr nützlich, um Traffic-Typen zu erkennen – insbesondere, um potenzielle oder laufende Angriffe abzuwehren.

Eine kurze Geschichte

Was vielleicht überrascht: JA3 und JA4 hatten keine Vorgänger namens JA1 oder JA2. Der Name "JA3" stammt von den Initialen der drei "J.A."-Entwickler des Tools:

  • John Althouse
  • Josh Atkins
  • Jeff Atkinson

(Quelle: ein hervorragender Vortrag von John Althouse und Jeff Atkinson selbst: Profiling And Detecting All Things SSL With JA3 )

Ihre Arbeit baute auf den Analysen von TLS-Cipher-Suites von Ivan Ristić sowie Lee Brotherston auf.

JA3 entstand bei Salesforce, JA4 ist der direkte Nachfolger und stammt von FoxIO – einem Unternehmen, das von John Althouse und einem vierten(!) J.A. mitgegründet wurde: Josh Alexander.

Beide Fingerprint-Verfahren sind Open Source. FoxIO lizenziert darüber hinaus eine erweiterte Suite namens JA4+ mit eigenen Lizenzbedingungen. AWS unterstützt aktuell keine JA4+-Funktionen, viele andere Netzwerk- und Security-Tools jedoch schon.

Eine kurze (und stark vereinfachte) Erklärung

In einem Satz: JA3- und JA4-Fingerprints sind eine Methode, Clients (alles, was auf einen Dienst zugreift) anhand von Informationen aus dem Client-Hello-Paket des initialen TLS-Handshakes zu identifizieren – unabhängig von IP-Adresse, Ports, Geolocation oder anderen üblichen Variablen.

Vereinfachter Ablauf eines TLS-1.2-Handshakes | Quelle: Wikimedia Commons

Berechnung von JA3- und JA4-Fingerprints

JA3-Fingerprints werden (wie im offiziellen Open-Source-Repository beschrieben) anhand der folgenden Felder im Client-Hello-Paket berechnet:

Diese Felder werden aufgezählt, in einen einzigen String sortiert und anschließend per MD5 zu einem kürzeren String gehasht.

Textdetails eines Client-Hello-Pakets aus einem Wireshark-Mitschnitt

Hier ein Wireshark-Mitschnitt eines TLS-1.3-Handshakes von meinem Rechner. Und siehe da – der JA3-Fingerprint wird angezeigt!

JA4-Client-Fingerprints nutzen die folgenden Details aus dem Client Hello, wie im JA4-Repository beschrieben:

  • Protokoll (TCP oder QUIC)
  • TLS-Version
  • Wird SNI verwendet? (ja="d" für Domain, nein="i" für IP)
  • Cipher-Suites (Anzahl und welche)
  • Extensions (Anzahl und welche)
  • ALPN-Extension-Wert (Application-Layer Protocol Negotiation; Beispiele sind Kurzcodes für HTTP/2, HTTP/3, POP3, DNS-over-TLS, SPDY/3 und mehr)

Eine Folie mit einem Diagramm, wie jeder Teil eines JA4-Client-Fingerprints berechnet wird

Eine schöne visuelle Aufschlüsselung, wie jeder Teil eines JA4-Fingerprints berechnet wird | Quelle: FoxIOs JA4-Repository; BSD-3-Clause-Lizenz.

Diese Details werden nicht per MD5 gehasht; einige Teile der Signatur sind bereits gehasht und gekürzt, sodass die Signatur nur 36 Zeichen lang ist.

Eine kurze Demo

Die Website https://ja4db.com zeigt Ihren aktuellen JA4-Fingerprint – probieren Sie es aus!

Wofür sollte ich JA3-/JA4-Fingerprints überhaupt nutzen?

Anwendungsfall 1: Rate Limiting

Klassische Rate-Limiting-Regeln in WAFs und anderen Schutzschichten basieren in der Regel auf IP-Adressen, URI-Pfaden oder anderen Bestandteilen der Client-Anfragen.

Eine Begrenzung der Request-Rate auf Basis des spezifischen Client-Fingerprints bringt folgende Vorteile:

  • Weniger False Positives, die bei IP-basierten Limits oder anderen gängigen Methoden auftreten können
  • Begrenzung von Angreifern mit demselben Fingerprint bzw. Tool – unabhängig von der IP-Adresse

Sowohl Google Cloud Armor als auch AWS WAF unterstützen dieses Feature.

Teil-Screenshot der Konfigurationsseite einer AWS-WAF-Regel mit \

AWS erlaubt JA3- oder JA4-Fingerprints als Aggregation Keys für Rate-Limit-Regeln

Anwendungsfall 2: Blocklisting

Wenn Sie bereits einen oder mehrere bösartige Fingerprints kennen, setzen Sie diese einfach auf eine Blocklist. Auch hier unterstützen sowohl Google Cloud Armor als auch AWS WAF dieses Feature.

Anwendungsfall 3: Threat Hunting

Threat Hunting ist eine defensive Disziplin, mit der Bedrohungen in Ihrer Umgebung proaktiv aufgespürt werden. Werden zum Beispiel neue C2-Server-IPs öffentlich, können Sie Ihre Netzwerk-Logs auf Kommunikation mit diesen IPs prüfen.

Genauso können Sie, sofern Sie JA3-/4-Fingerprints in Ihrer Netzwerkumgebung erfassen, die Logs nach Fingerprints neu entdeckter bösartiger Clients durchsuchen. Diese Fingerprints sind schlicht ein weiteres Werkzeug in Ihrem Werkzeugkasten.

Fingerprints vs. IP-Adressen

Da JA3- und JA4-Fingerprints spezifische Details über Clients erfassen, gibt es Fälle, in denen sie für die Verteidigung deutlich nützlicher sind als das Aufspüren oder Sperren von IP-Adressen:

  • Ein Angreifer mit einem eigens entwickelten Angriffsskript hat in der Regel einen einzigartigen Fingerprint, abhängig von verwendeten Bibliotheken, Betriebssystem usw.
  • Traffic von Malware auf mehreren kompromittierten Firmen-Laptops weist meist denselben oder zumindest eine sehr kleine Menge an Fingerprints auf.
  • Fingerprints bekannter Schadtools können geteilt und automatisch blockiert werden, noch bevor entsprechender Traffic im Netzwerk auftaucht.

JA3 vs. JA4

JA4-Fingerprints sind zu bevorzugen, JA3-Fingerprints bleiben aber nützlich, wenn Sie wissen, wonach Sie suchen. Hier einige zentrale Unterschiede:

  • JA4-Fingerprints basieren auf mehr Informationen als JA3-Fingerprints.
  • JA3 wurde von Salesforce entwickelt und gesponsert, wird aber nicht mehr aktiv gepflegt.
  • Wie alles in der Cybersecurity entwickeln sich auch Methoden zur Erkennungsumgehung weiter. JA3 gibt es länger, und es sind mehr Wege zur Umgehung der Erkennung bekannt.
  • Manche Clients (darunter Chrome und Firefox) unterstützen inzwischen die Option, Teile ihres Client-Hello-Pakets zu mischen. Das verändert den JA3-Fingerprint, während die JA4-Methode durch Sortierung konsistente Fingerprints liefert.
  • Beide Fingerprint-Typen verfügen über community-gepflegte Datenbanken. Die größte öffentlich verfügbare JA3-Datenbank, die ich finden konnte, hat nach meiner Zählung etwas über 128.000 Einträge. In der JA4+-Datenbank habe ich zum Zeitpunkt dieses Artikels rund 105.000 Einträge gezählt.
  • JA3 hat den längeren Stammbaum, der Support für JA4 wächst aber stetig. Während ich an diesem Artikel schrieb, hat AWS beispielsweise angekündigt, dass der Network-Firewall-Service nun JA4-Filtering unterstützt!

Weitere Aspekte

False Positives Aggressive Rate-Limiting-Regeln auf Basis von Fingerprint-Werten können viele False Positives nach sich ziehen, vor allem dann, wenn Sie viele ähnliche Clients haben. Zusätzliche Client-Daten – etwa die Header-Reihenfolge, wie in diesem AWS-Blogpost beschrieben – können dabei helfen, Sperrungen legitimer Nutzer zu minimieren.

Datenbanken wachsen noch Öffentliche JA3- und JA4-Datenbanken werden von der Community gepflegt. Sich allein darauf zu verlassen, ist daher nicht ideal, wenn Sie hochaktuelle Bedrohungserkennung benötigen. Cloud-Anbieter und Managed-Security-Services pflegen vermutlich eigene private Datenbanken bösartiger Fingerprints – Managed Rules wie die Bot-Control-Rule-Group von AWS sind also durchaus eine Überlegung wert.

Angreifer agieren unterschiedlich raffiniert Bei DoiT haben wir Kunden geholfen, sowohl sehr einfache Angriffe zu analysieren – ein einzelner Fingerprint über mehrere IPs hinweg, der auf ein simples DoS-Tool hindeutet – als auch Angriffe, die sich keinem konsistenten JA3-/4-Fingerprint zuordnen ließen. Fähigkeiten, Ressourcen und Geduld eines Angreifers können stark variieren.

Hey, was ist mit Azure? Azure verdient hier ebenfalls etwas Aufmerksamkeit! Die Azure-Tools unterstützen benutzerdefinierte JA3- und JA4-Funktionen (noch) nicht so direkt wie AWS und Google Cloud, einige Security-Tools verfügen aber bereits über Fingerprinting-Fähigkeiten:

Wie kann ich das in AWS einsetzen?

Logging und Regeln auf Basis von JA3- und JA4-Fingerprints werden in AWS gut unterstützt – im folgenden Abschnitt konzentriere ich mich auf die AWS-Funktionen.

Logging von Requests

Der erste Schritt: JA3- und JA4-Fingerprints überhaupt loggen können! Folgende AWS-Ressourcentypen unterstützen JA3- und JA4-Fingerprint-Felder in ihren Logs:

  • WAF-Logs (nur für Logs zu CloudFront- und Application-Load-Balancer-Ressourcen)
  • Network-Firewall-Logs (nur in bestimmten Fällen – AWS hat dazu ein Beispiel hier)

Beispielhafte AWS-WAF-Logs mit meinen JA3- und JA4-Fingerprint-Werten. Bitte nicht blockieren!

Blocken und Rate-Limiting auf Basis von Fingerprint-Werten

Dieses Feature habe ich oben bereits angesprochen – hier eine praktische Liste der referenzierten Dokumentation:

Logs analysieren

Hier einige CloudWatch Log Insights-Queries, die ich in der Vergangenheit zur Untersuchung von JA3- und JA4-Fingerprints im WAF-Traffic genutzt habe.

Anzahl der häufigsten JA3-Fingerprints

fields ja3Fingerprint
| stats count(*) as requestCount by ja3Fingerprint
| sort requestCount desc

Screenshot aus Logs Insights mit einer Query und einer Liste von Fingerprints und deren Häufigkeit in den Logs

1.097? Ist das zu viel?

Anzahl der häufigsten JA4-Fingerprints, aufgeschlüsselt nach URL-Pfad und User Agent

parse @message /\{\"name\":\"[Uu]ser\-[Aa]gent\",\"value\"\:\"(?<useragent>[^"\}]*)/
| stats count(*) as requestCount by ja4Fingerprint, httpRequest.uri, useragent
| sort requestCount desc

Screenshot aus Logs Insights mit einer Query und einer Liste von Fingerprints inklusive Häufigkeit, User Agent und Pfad

Mehr Kontext macht es deutlich einfacher zu erkennen, was vor sich geht!

Fingerprints von Requests, die durch Rate-Based-Regeln blockiert wurden

Hinweis: Diese Query prüft beliebige Rate-Based-Regeln. Hilfreich, wenn Sie IP-basierte Rate-Based-Regeln im Einsatz haben und sehen möchten, ob es gemeinsame Fingerprints gibt.

fields @timestamp, httpRequest.clientIp as ClientIP, terminatingRuleId as rule, httpRequest.country as Country, ja4Fingerprint
| filter action = "BLOCK"
| filter terminatingRuleType = "RATE_BASED"
| stats count(*) as count by ja4Fingerprint, ClientIP, rule, Country | sort by count desc

Screenshot aus Logs Insights mit einer Query auf blockierten Traffic (aus Rate-Based-Regeln) und einer Liste von Fingerprints und anonymisierten IP-Adressen, sortiert nach Anzahl

Verschiedene Clients können dieselbe IP, aber unterschiedliche Fingerprints haben

Weitere Beispiele finden Sie in diesem AWS-Blogpost sowie in diesem re:Post-Artikel. Sie müssen sie an JA3-/4-Fingerprints anpassen, aber als Einstieg sind sie hervorragend geeignet, um zu sehen, was für Ihren Anwendungsfall sinnvoll ist.

Weiterführende Informationen

Im Folgenden eine Liste der nützlichsten Quellen und Tools, die ich rund um JA3- und JA4-Fingerprinting gefunden habe.

Offizielle Quellen

Tools

Blogposts

Vorträge

JA3- und JA4-Fingerprints sind eine ungemein wertvolle Ergänzung zu den Erkennungs- und Analysemöglichkeiten, die Sie vielleicht schon nutzen – egal, ob Sie Security-Analyst, Cloud-Engineer oder Allrounder in einem kleinen Team sind, das gerade einen DDoS-Angriff abwehrt, oder in welcher Rolle auch immer Sie unterwegs sind, wenn Ihnen das Thema in freier Wildbahn begegnet.

Haben Sie Fragen zur Absicherung Ihrer Cloud-Umgebung?

Kontaktieren Sie DoiT noch heute und besprechen Sie mit uns, wie wir Effizienz, Wirtschaftlichkeit und Sicherheit Ihrer Cloud-Umgebung gemeinsam maximieren. Mit DoiT erhalten Sie Zugang zu ausschließlich Senior Cloud-Expertise für Beratung, Weiterbildung und Support – wir sind da, wann immer Sie Expertenrat, eine zweite Meinung, Unterstützung bei der Einführung neuer Technologien oder Hilfe bei akuten Produktionsproblemen brauchen.

Wenn Sie tiefer in weitere Themen rund um Cloud-Sicherheit und -Architektur eintauchen möchten, werfen Sie einen Blick in unsere Cloud-Engineering-Blogposts.