Ein JARM-Fingerabdruck ist eine passive, clientseitige TLS-Fingerprinting-Methode, die verwendet wird, um den spezifischen TLS-Stack eines Servers oder Proxys zu identifizieren, indem seine Antwort auf eine Reihe speziell entworfener TLS ClientHello-Probes analysiert wird. Von Salesforce entwickelt, liefert JARM einen einzigartigen Fingerabdruck für die TLS-Implementierung eines Servers, der es Betreibern ermöglicht, spezifische Server-Software zu identifizieren, Proxys zu erkennen und Infrastruktur zu verfolgen.
JARM-Fingerabdrücke verstehen
JARM-Fingerprinting (Just Another Rather Marvelous) funktioniert, indem 10 verschiedene TLS ClientHello-Pakete an einen Zielserver gesendet werden. Jedes ClientHello ist mit spezifischen, geordneten Variationen in seinen Parametern konzipiert, wie z.B. unterstützte TLS-Versionen, Cipher Suites, Erweiterungen und elliptische Kurven. Die Antworten des Servers auf diese Probes, die seine gewählte TLS-Version, Cipher Suite, Erweiterungen und andere Handshake-Parameter umfassen, werden dann konkateniert und gehasht, um einen 62-stelligen Fingerabdruck zu erzeugen.
Dieser Prozess nutzt subtile Unterschiede in der Art und Weise aus, wie verschiedene TLS-Stacks (z.B. OpenSSL, Microsoft SChannel, Go's crypto/tls, BoringSSL, LibreSSL) TLS-Handshakes aushandeln. Selbst geringfügige Konfigurationsunterschiede oder Patch-Level können zu unterschiedlichen JARM-Fingerabdrücken führen.
JARM-Probe-Details
Die 10 ClientHello-Probes variieren in mehreren Dimensionen:
* TLS-Versionen: Probes zielen auf spezifische TLS-Versionen ab (z.B. TLS 1.0, 1.1, 1.2, 1.3).
* Cipher Suites: Jede Probe enthält eine eindeutige Liste und Reihenfolge von Cipher Suites.
* Erweiterungen: Es werden verschiedene Sätze und Reihenfolgen von TLS-Erweiterungen verwendet (z.B. SNI, ALPN, renegotiation_info, supported_groups).
* Elliptische Kurven: Variationen in den unterstützten elliptischen Kurven sind enthalten.
Die ServerHello-Antwort des Servers auf jede dieser 10 Probes wird erfasst. Die aus diesen Antworten extrahierten Schlüsselfelder umfassen:
* Ausgehandelte TLS-Version
* Gewählte Cipher Suite
* Liste der vorhandenen Erweiterungen
* Form der SNI-Erweiterungsantwort (falls vorhanden)
Diese extrahierten Felder werden dann zu einem einzigen String konkateniert. Dieser String wird anschließend MD5-gehasht, und eine Untermenge dieses Hashs bildet zusammen mit einem SHA-256-Hash des vollständigen Antwort-Strings den endgültigen 62-stelligen JARM-Fingerabdruck. Der Fingerabdruck ist so strukturiert, dass er Informationen über die Antworten auf jede der 10 Probes kodiert.
Warum JARM für Proxy-Dienste nützlich ist
JARM-Fingerabdrücke bieten mehrere praktische Anwendungen für Organisationen, die Proxy-Dienste betreiben oder mit ihnen interagieren.
Server- und Software-Identifikation
JARM kann die zugrunde liegende TLS-Bibliothek und Konfiguration eines Servers oder Proxys präzise identifizieren. Dies ermöglicht:
* Software-Klassifizierung: Unterscheidung zwischen gängigen Webservern wie Nginx, Apache HTTP Server, Microsoft IIS, Caddy oder Anwendungsservern wie Tomcat, Jetty.
* Versionserkennung: Oft führen unterschiedliche Versionen oder Patch-Level derselben Software zu unterschiedlichen JARM-Fingerabdrücken aufgrund von Änderungen in ihrer TLS-Stack-Implementierung.
* Fehlkonfigurationserkennung: Unerwartete Fingerabdrücke können auf nicht-standardmäßige Konfigurationen oder potenzielle Sicherheitsprobleme hinweisen.
Proxy-Erkennung und -Charakterisierung
Für einen Proxy-Dienst ist die Identifizierung von Zwischen-Proxys entscheidend, um Netzwerkpfade und die Sicherheitslage zu verstehen.
* Reverse Proxys und CDNs: Wenn ein Client sich mit einem Server hinter einem Reverse Proxy, Load Balancer oder Content Delivery Network (CDN) verbindet, spiegelt der JARM-Fingerabdruck den TLS-Stack des Proxy-/CDN-Edge-Knotens wider, nicht den des Ursprungsservers. Dies ermöglicht die Identifizierung von Diensten wie Cloudflare, Akamai, AWS CloudFront oder Nginx/HAProxy, die als Reverse Proxy fungieren.
* Forward Proxys: Ein Forward Proxy kann seinen eigenen TLS-Stack präsentieren, wenn er TLS-Interception (MITM) durchführt. Wenn die Verbindung eines Clients abgefangen wird, gehört der vom Client erhaltene JARM-Fingerabdruck dem Forward Proxy und nicht dem beabsichtigten Ziel. Nicht-abfangende Forward Proxys leiten das ClientHello typischerweise durch und bewahren den JARM des Ursprungsservers.
* WAFs (Web Application Firewalls): Viele WAFs arbeiten als Reverse Proxys und präsentieren ihren eigenen JARM-Fingerabdruck.
Sicherheit und Bedrohungsanalyse
JARM ist ein wertvolles Werkzeug in Sicherheitsoperationen:
* Malware C2-Identifikation: Bedrohungsakteure verwenden oft spezifische TLS-Stacks für ihre Command and Control (C2)-Infrastruktur wieder. JARM kann diese C2-Server identifizieren und deren Verfolgung über verschiedene IP-Adressen oder Domains hinweg ermöglichen.
* Infrastruktur-Mapping: Sicherheitsforscher nutzen JARM, um Angreifer-Infrastrukturen abzubilden, gemeinsame Komponenten zu identifizieren und scheinbar unterschiedliche Kampagnen zu verknüpfen.
* Phishing-Erkennung: Die Identifizierung unerwarteter JARM-Fingerabdrücke für legitime Domains kann auf einen Phishing-Versuch hindeuten, bei dem ein Angreifer eine andere Infrastruktur verwendet.
Netzwerksichtbarkeit
JARM bietet ein tieferes Verständnis des TLS-Ökosystems, mit dem ein Proxy interagiert:
* Baseline-Etablierung: Das Erstellen einer Baseline erwarteter JARM-Fingerabdrücke für bekannte Dienste und Partner hilft, Anomalien zu erkennen.
* Dienst-Erkennung: Identifizierung der zugrunde liegenden Technologie von Diensten, ohne eine Interaktion auf Anwendungsebene zu erfordern.
Einen JARM-Fingerabdruck generieren
Das Generieren eines JARM-Fingerabdrucks beinhaltet das Senden der spezifischen Probes und die Verarbeitung der Antworten. Für diesen Zweck stehen Tools und Bibliotheken zur Verfügung.