
Strumento attivo di fingerprinting di server TLS che invia pacchetti Client Hello appositamente realizzati per generare hash JARM unici per identificare configurazioni del server, raggruppare infrastrutture e rilevare server malevoli.
Si prega di leggere il post originale del blog su JARM per maggiori informazioni.
JARM è uno strumento attivo di fingerprinting dei server Transport Layer Security (TLS).
Le impronte digitali JARM possono essere utilizzate per:
Il supporto JARM è stato o sta per essere aggiunto a:
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]
Esempio:
% python3 jarm.py www.salesforce.com
Dominio: www.salesforce.com
IP risolto: 23.50.225.123
JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
Per utilizzarlo con Python 2 è necessario il modulo ipaddress:
pip install -r requirements.txt
./jarm.sh <list> <output_file>
Esempio:
% ./jarm.sh alexa500.txt jarm_alexa_500.csv
Prima di imparare come funziona JARM, è importante capire come funziona TLS. TLS e il suo predecessore, SSL, sono utilizzati per crittografare la comunicazione sia per applicazioni comuni come i browser Internet, per mantenere i tuoi dati al sicuro, sia per i malware, in modo che possano nascondersi nel rumore. Per avviare una sessione TLS, un client invia un messaggio TLS Client Hello dopo la stretta di mano TCP a 3 vie. Questo pacchetto e il modo in cui viene generato dipendono dai pacchetti e dai metodi utilizzati nella creazione dell'applicazione client. Il server, se accetta connessioni TLS, risponderà con un pacchetto TLS Server Hello.
I server TLS formulano il loro pacchetto Server Hello in base ai dettagli ricevuti nel pacchetto TLS Client Hello. Il modo in cui il Server Hello viene formulato per un dato Client Hello può variare in base a come è stata creata l'applicazione o il server, inclusi:
Tutti questi fattori portano ogni server TLS a rispondere in modo unico. Le combinazioni di fattori rendono improbabile che server distribuiti da organizzazioni diverse abbiano la stessa risposta.
JARM funziona inviando attivamente 10 pacchetti TLS Client Hello a un server TLS target e catturando attributi specifici delle risposte TLS Server Hello. Le risposte aggregate del server TLS vengono quindi sottoposte a hash in modo specifico per produrre l'impronta digitale JARM.
Non è la prima volta che lavoriamo con il fingerprinting TLS. Nel 2017 abbiamo sviluppato JA3/S, un metodo di fingerprinting passivo di client/server TLS ora presente sulla maggior parte degli strumenti di sicurezza di rete. Ma mentre JA3/S è passivo, identifica client e server ascoltando il traffico di rete, JARM è uno scanner attivo di fingerprinting dei server. Puoi saperne di più sulla negoziazione TLS e sul fingerprinting passivo JA3/S qui.
I 10 pacchetti TLS Client Hello in JARM sono stati appositamente progettati per estrarre risposte uniche dai server TLS. JARM invia diverse versioni TLS, cifrari ed estensioni in ordini variabili per raccogliere risposte uniche. Il server supporta TLS 1.3? Negoziare TLS 1.3 con cifrari 1.2? Se ordiniamo i cifrari dal più debole al più forte, quale cifrario sceglierà? Questi sono i tipi di domande insolite che JARM essenzialmente pone al server per ottenere le risposte più uniche. Le 10 risposte vengono quindi sottoposte a hash per produrre l'impronta digitale JARM.
L'hash dell'impronta digitale JARM è un hash fuzzy ibrido, utilizza la combinazione di un algoritmo di hash reversibile e non reversibile per produrre un'impronta digitale di 62 caratteri. I primi 30 caratteri sono costituiti dal cifrario e dalla versione TLS scelti dal server per ciascuno dei 10 client hello inviati. Un "000" indica che il server ha rifiutato di negoziare con quel client hello. I restanti 32 caratteri sono un hash SHA256 troncato delle estensioni cumulative inviate dal server, ignorando i dati del certificato x509. Quando si confrontano le impronte digitali JARM, se i primi 30 caratteri sono gli stessi ma gli ultimi 32 sono diversi, ciò significherebbe che i server hanno configurazioni molto simili, accettando le stesse versioni e cifrari, anche se non esattamente identici poiché le estensioni sono diverse.
Dopo aver ricevuto ogni messaggio hello del server TLS, JARM chiude la connessione in modo elegante con un FIN per non lasciare i socket aperti.
È importante notare che JARM è una funzione di fingerprinting ad alte prestazioni e non deve essere considerata o confusa con una funzione crittografica sicura. Abbiamo progettato l'impronta digitale JARM per essere consumabile dall'uomo tanto quanto dalla macchina. Ciò significa che è abbastanza piccola da essere esaminata visivamente, condivisa e twittata con spazio sufficiente per dettagli contestuali.
I server di comando e controllo (C2) dei malware e i server dannosi vengono configurati dai loro creatori come qualsiasi altro server e poi distribuiti nella loro flotta. Questi tendono quindi a produrre impronte digitali JARM uniche. Di seguito sono riportati esempi di malware comuni e strumenti offensivi e la sovrapposizione JARM con i primi 1 milione di siti web Alexa (a ottobre 2020):
Con una sovrapposizione da scarsa a nulla con i primi 1 milione di siti web Alexa, dovrebbe essere improbabile che un host all'interno di un'organizzazione si connetta a un server con queste impronte digitali JARM.
John Althouse - Idea originale, concetto e guida del progetto
Andrew Smart - Concetto e test
RJ Nunnally - Programmazione e test
Mike Brady - Programmazione e test
Riscritto in Python per uso operativo da Caleb Yu
| Dominio | 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 |
| Server C2 dannoso | Impronta digitale JARM | Sovrapposizione con Alexa Top 1M |
|---|
| Trickbot | 22b22b09b22b22b22b22b22b22b22b352842cd5d6b0278445702035e06875c | 0 |
| AsyncRAT | 1dd40d40d00040d1dc1dd40d1dd40d3df2d6a0c2caaa0dc59908f0d3602943 | 0 |
| Metasploit | 07d14d16d21d21d00042d43d000000aa99ce74e2c6d013c745aa52b5cc042d | 0 |
| Cobalt Strike | 07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1 | 0 |
| Merlin C2 | 29d21b20d29d29d21c41d21b21b41d494e0df9532e75299f15ba73156cee38 | 303 |