Come decriptare una connessione SSL con Wireshark

DiMarco Nisticò

PUBBLICATO IL 14 Mar 2019 ALLE 15:00 - AGGIORNATO IL 19 Agosto 2019 ALLE 13:17

Oggi andremo ad utilizzare Wireshark, software molto utile per il controllo e la gestione del traffico di una determinata connessione, per decriptare vari pacchetti di tipo SSL e successivamente recuperare un link ad uno specifico file.

Wireshark è uno dei software più diffusi per quanto riguarda il controllo del traffico web e dell’analisi dei pacchetti dati che viaggiano tra diversi protocolli, come HTTP, SSL o DNS. Per quanto semplice nell’interfaccia, padroneggiarlo al meglio richiede parecchia pratica e studio di tutte le principali funzionalità. Le potenzialità di Wireshark sono veramente infinite, dalla risoluzione di un semplice problema di rete ad un più avanzato controllo di ogni pacchetto che viaggia all’interno di una rete, detto sniffing. Oggi andremo ad occuparci di una connessione di tipo SSL/TLS.

Il protocollo SSL e TLS

Con il termine TLS, acronimo per Transport Layer Security, definiamo un protocollo di rete crittografato che permette uno scambio dati sicuro tra la sorgente che invia il pacchetto e il destinatario che lo riceve, grazie ad un sistema di autenticazione ed integrità dei dati che ne permette una difficile intrusione. Negli ultimi anni questo protocollo è stato integrato principalmente nelle applicazioni web o i browser, attraverso l’ormai noto procotollo HTTPS, diventato uno standard obbligatorio quando si decide di aprire un sito web. Infatti Google non vede molto di buon occhio i siti che ancora non possiedono una connessione di tipo HTTPS, contrassegnandoli come non sicuri.

Il protocollo SSL, e successivamente TLS, è nato con lo scopo di fornire una maggior sicurezza nelle connessioni TCP/IP. A differenza di un modello di tipo ISO/OSI, la connessione TCP è nata come semplice scambio di dati. Successivamente però l’evoluzione delle telecomunicazioni e delle infrastrutture ha reso necessario optare per un cambiamento radicale che potesse, in qualche modo, migliorare la sicurezza nello scambio di pacchetti tra un client ed un server.

Nasce così il protocollo SSL, che si compone essenzialmente di tre fasi: scelta dell’algoritmo, autenticazione e cifratura. Nella prima fase, il client e il server decidono quale algoritmo utilizzare per stabilire la connessione criptata, oltre che assicurare la connessione tra dispositivi tramite il MAC (Message authentication code). Questo algoritmo sarà fondamentale anche per le fasi successive. In seguito avviene lo scambio delle chiavi, di cui una parte è pubblica e leggibile da chiunque mentre un’altra è precondivisa (Pre-Shared Key) solamente tra gli utenti che stabiliscono la connessione criptata. Dunque un utente esterno non ha modo, teoricamente, di accedere ai pacchetti dati di una connessione SSL senza possedere le chiavi precondivise. Infine c’è la fase di integrità delle informazione, che solitamente utilizza un controllo tramite hash.

Dunque la sicurezza del protocollo SSL o TLS è garantita proprio dalle chiavi di crittografia, di cui una parte viene condivisa solamente dal client e il server. Immaginate ad esempio il servizio MEGA di file hosting. Per condividere un file è possibile generare sia il link privo di chiave che il link che comprende la chiave. Nel primo caso un utente che possiede il link avrà modo di aprire l’URL ma non potrà scaricare il file senza la chiave di decriptazione. Nel secondo caso invece il file viene reso pubblico a tutti e quindi chiunque può scaricarlo e utilizzarlo come vuole. Il protocollo SSL/TLC funziona più o meno in questo modo.

In questo articolo andremo a vedere come decriptare una connessione SSL, usando proprio le chiavi private, per poter accedere a determinati link o file scambiati durante la connessione.

Sniffing dei pacchetti SSL tramite Wireshark

Wireshark utilizza file di estensione .pcapng, che contengono i vari pacchetti analizzati durante la connessione. Per creare una nuova sessione, aprire Wireshark e andare su Cattura>Avvia. Se volete modificare la sorgente di rete dovrete andare su Cattura>Opzioni… e selezionare l’input tra quelli nell’elenco. Potete decidere di analizzare direttamente la vostra connessione o sfruttare un ambiente virtuale in Kali Linux per effettuare vari test. Dopo qualche minuto, avrete una schermata simile a questa:

Sniffing di pacchetti SSL

Interrompendo la cattura, potrete poi salvare i pacchetti in formato .pcapng.gz. Come potete notare vengono elencati tutti i singoli pacchetti che vengono inviati all’IP di destinazione, con tanto di protocollo utilizzato e tipologia di richiesta. Nell’immagine potete inoltre notare alcuni pacchetti inviati tramite connessione TLSv1.2. Ciò che interessa a noi sono i pacchetti 26 e 30, con la dicitura Application Data. Questi due pacchetti infatti contengono proprio i file, o comunque le informazioni, che abbiamo bisogno di decriptare. Durante la connessione il client invia al server una chiave random di riconoscimento mentre il server restituirà al client la cosiddetta Master Key, necessaria per decifrare le informazioni. Ogni singola sessione in SSL/TLC è contrassegnata da una chiave random e una Master Key, che vengono salvate in un apposito file. Per generare questo file, in Kali Linux si utilizza il comando “cat session.log“. A questo punto verrà stampato un file strutturato come segue:

CLIENT_RANDOM ChiaveRandom1 MasterKeySegreta1
CLIENT_RANDOM ChiaveRandom2 MasterKeySegreta2
CLIENT_RANDOM ChiaveRandom3 MasterKeySegreta3
CLIENT_RANDOM ChiaveRandom4 MasterKeySegreta4
CLIENT_RANDOM ChiaveRandom5 MasterKeySegreta5
CLIENT_RANDOM ChiaveRandom6 MasterKeySegreta6

Ogni chiave è fondamentale per poter decriptare ogni singolo pacchetto SSL. Una volta rinominato il file in secrets (senza nessuna estensione), è possibile importarlo in Wireshark per poter decriptare la connessione SSL ed accedere ai file e link protetti dal protocollo. Per farlo, andate su Modifica>Preferenze…, dove poi dovrete aprire il menù Protocols sulla sinistra e cercare la voce TLS. Ora si aprirà questa finestra:

File secrets su Wireshark

A questo punto sotto la voce (Pre)-Master-Secret log filename dovrete indicare il percorso del vostro file secrets, contenente le diverse chiavi di decriptazione. Una volta dato l’OK, vedrete questa volta che i pacchetti di tipo Application Data con protocollo TLS saranno diventati dei semplici HTTP.

File decriptati su Wireshark

Ora nel pacchetto 26 è presente in chiaro il link che prima era protetto (si tratta di un link di MEGA.nz) mentre il pacchetto 30 indica solamente che l’URL richiesto è disponibile. Dunque una volta fatto ciò potete semplicemente esportare gli elementi non protetti da File>Esporta oggetti>HTML…

Abbiamo visto in questa guida come poter decriptare una connessione SSL/TLS utilizzando le chiavi di decriptazione generate durante l’invio dei pacchetti. Ciò vi fa capire quanto sia fondamentale non comunicare a nessun, se non il destinatario, le chiavi di comunicazione SSL, per evitare di ritrovarvi con dei dati trafugati. In questo caso si tratta di un semplice file, ma nella peggiore delle ipotesi possono essere coinvolti interi siti web. Provate a fare qualche test in proprio per verificare quanto abbiamo appena discusso. Fateci sapere nei commenti se avete avuto problemi.

Di Marco Nisticò

Sviluppatore informatico, cerco sempre di stare al passo con i tempi in un mondo ormai circondato dalla tecnologia.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.