
Aktives TLS-Server-Fingerprinting-Tool, das maßgeschneiderte Client-Hello-Pakete sendet, um eindeutige JARM-Hashes zur Identifizierung von Serverkonfigurationen, Gruppierung von Infrastruktur und Erkennung bösartiger Server zu generieren.
Bitte lesen Sie den ursprünglichen JARM-Blogbeitrag für weitere Informationen.
JARM ist ein aktives Tool zur Fingerabdruck-Erkennung von Transport Layer Security (TLS)-Servern.
JARM-Fingerabdrücke können verwendet werden, um:
JARM-Unterstützung wurde oder wird hinzugefügt zu: SecurityTrails Shodan BinaryEdge RiskIQ Palo Alto Networks Censys 360
python3 jarm.py [-h] [-i INPUT] [-p PORT] [-v] [-V] [-o OUTPUT] [-j] [-P PROXY] [domain/IP]
Beispiel:
% python3 jarm.py www.salesforce.com
Domain: www.salesforce.com
Resolved IP: 23.50.225.123
JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
Um es mit Python 2 zu verwenden, benötigen Sie das ipaddress-Modul:
pip install -r requirements.txt
./jarm.sh <list> <output_file>
Beispiel:
% ./jarm.sh alexa500.txt jarm_alexa_500.csv
Bevor Sie lernen, wie JARM funktioniert, ist es wichtig zu verstehen, wie TLS funktioniert. TLS und sein Vorgänger SSL werden verwendet, um die Kommunikation sowohl für gängige Anwendungen wie Internetbrowser zu verschlüsseln, um Ihre Daten zu schützen, als auch für Malware, damit sie sich im Rauschen verstecken kann. Um eine TLS-Sitzung zu initiieren, sendet ein Client nach dem 3-Wege-Handshake eine TLS-Client-Hello-Nachricht. Dieses Paket und die Art und Weise, wie es erzeugt wird, hängt von den Paketen und Methoden ab, die beim Erstellen der Client-Anwendung verwendet werden. Der Server antwortet, wenn er TLS-Verbindungen akzeptiert, mit einem TLS-Server-Hello-Paket.
TLS-Server formulieren ihr Server-Hello-Paket basierend auf den Details, die im TLS-Client-Hello-Paket empfangen wurden. Die Art und Weise, wie das Server Hello für ein bestimmtes Client Hello formuliert wird, kann je nach Erstellung der Anwendung oder des Servers variieren, einschließlich:
All diese Faktoren führen dazu, dass jeder TLS-Server auf einzigartige Weise antwortet. Die Kombinationen von Faktoren machen es unwahrscheinlich, dass von verschiedenen Organisationen bereitgestellte Server die gleiche Antwort haben.
JARM funktioniert, indem aktiv 10 TLS-Client-Hello-Pakete an einen Ziel-TLS-Server gesendet und bestimmte Attribute der TLS-Server-Hello-Antworten erfasst werden. Die aggregierten TLS-Server-Antworten werden dann auf eine bestimmte Weise gehasht, um den JARM-Fingerabdruck zu erzeugen.
Dies ist nicht das erste Mal, dass wir mit TLS-Fingerprinting gearbeitet haben. Im Jahr 2017 entwickelten wir JA3/S, eine passive Methode zum TLS-Client/Server-Fingerprinting, die heute in den meisten Netzwerksicherheitstools zu finden ist. Aber während JA3/S passiv ist und Clients und Server durch das Abhören des Netzwerkverkehrs identifiziert, ist JARM ein aktiver Scanner für Server-Fingerabdrücke. Weitere Informationen zur TLS-Aushandlung und zum passiven JA3/S-Fingerprinting finden Sie hier.
Die 10 TLS-Client-Hello-Pakete in JARM wurden speziell entwickelt, um einzigartige Antworten von TLS-Servern zu erhalten. JARM sendet verschiedene TLS-Versionen, Chiffren und Erweiterungen in unterschiedlicher Reihenfolge, um einzigartige Antworten zu sammeln. Unterstützt der Server TLS 1.3? Wird er TLS 1.3 mit 1.2-Chiffren aushandeln? Wenn wir Chiffren von der schwächsten zur stärksten ordnen, welche wird er wählen? Dies sind die Arten ungewöhnlicher Fragen, die JARM dem Server im Wesentlichen stellt, um die einzigartigsten Antworten zu erhalten. Die 10 Antworten werden dann gehasht, um den JARM-Fingerabdruck zu erzeugen.
Der JARM-Fingerabdruck-Hash ist ein hybrider Fuzzy-Hash, der eine Kombination aus einem reversiblen und einem nicht-reversiblen Hash-Algorithmus verwendet, um einen 62-stelligen Fingerabdruck zu erzeugen. Die ersten 30 Zeichen bestehen aus der Chiffre und der TLS-Version, die der Server für jedes der 10 gesendeten Client-Hello-Pakete gewählt hat. Ein "000" zeigt an, dass der Server die Aushandlung mit diesem Client-Hello abgelehnt hat. Die restlichen 32 Zeichen sind ein abgeschnittener SHA256-Hash der kumulativen Erweiterungen, die vom Server gesendet wurden, unter Ignorierung der x509-Zertifikatsdaten. Beim Vergleich von JARM-Fingerabdrücken: Wenn die ersten 30 Zeichen gleich sind, die letzten 32 jedoch unterschiedlich, bedeutet dies, dass die Server sehr ähnliche Konfigurationen haben und dieselben Versionen und Chiffren akzeptieren, aber aufgrund unterschiedlicher Erweiterungen nicht exakt identisch sind.
Nach dem Empfang jeder TLS-Server-Hello-Nachricht schließt JARM die Verbindung ordnungsgemäß mit einem FIN, um die Sockets nicht offen zu lassen.
Es ist wichtig zu beachten, dass JARM eine leistungsstarke Fingerabdruck-Funktion ist und nicht mit einer sicheren Kryptofunktion verwechselt werden sollte. Wir haben den JARM-Fingerabdruck so konzipiert, dass er sowohl für Menschen als auch für Maschinen lesbar ist. Das bedeutet, dass es klein genug ist, um es zu überfliegen, zu teilen und zu twittern, mit genügend Platz für kontextuelle Details.
Malware-Befehls- und Kontrollserver (C2) und bösartige Server werden von ihren Erstellern wie jeder andere Server konfiguriert und dann in ihrem Netzwerk bereitgestellt. Diese neigen daher dazu, einzigartige JARM-Fingerabdrücke zu erzeugen. Im Folgenden finden Sie Beispiele für gängige Malware und offensive Tools sowie die JARM-Überschneidung mit den Alexa Top 1M Websites (Stand Oktober 2020):
Da es nur geringe oder keine Überschneidungen mit den Alexa Top 1M Websites gibt, sollte es unwahrscheinlich sein, dass ein Host innerhalb einer Organisation eine Verbindung zu einem Server mit diesen JARM-Fingerabdrücken herstellt.
John Althouse - Ursprüngliche Idee, Konzept und Projektleitung Andrew Smart - Konzept und Tests RJ Nunnally - Programmierung und Tests Mike Brady - Programmierung und Tests
Für den betrieblichen Einsatz von Caleb Yu in Python umgeschrieben
| Domain | JARM |
|---|
| salesforce.com | 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5 |
| force.com | 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5 |
| google.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| youtube.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| gmail.com | 27d40d40d29d40d1dc42d43d00041d4689ee210389f4f6b4b5b1b93f92252d |
| facebook.com | 27d27d27d29d27d1dc41d43d00041d741011a7be03d7498e0df05581db08a9 |
| instagram.com | 27d27d27d29d27d1dc41d43d00041d741011a7be03d7498e0df05581db08a9 |
| oculus.com | 29d29d20d29d29d21c41d43d00041d741011a7be03d7498e0df05581db08a9 |
| Bösartiger Server C2 | JARM-Fingerabdruck | Überschneidung mit Alexa Top 1M |
|---|
| Trickbot | 22b22b09b22b22b22b22b22b22b22b352842cd5d6b0278445702035e06875c | 0 |
| AsyncRAT | 1dd40d40d00040d1dc1dd40d1dd40d3df2d6a0c2caaa0dc59908f0d3602943 | 0 |
| Metasploit | 07d14d16d21d21d00042d43d000000aa99ce74e2c6d013c745aa52b5cc042d | 0 |
| Cobalt Strike | 07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 | 0 |
| Merlin C2 | 29d21b20d29d29d21c41d21b21b41d494e0df9532e75299f15ba73156cee38 | 303 |