- Cosa sono Wireshark e tcpdump?
- Cos'è la crittografia SSL?
- Decifrare SSL con una chiave segreta pre-master
- Utilizzo di una chiave RSA per decriptare SSL
- Vedi qui per saperne di più
Nelle reti moderne, la protezione della trasmissione dei dati è fondamentale e Secure Sockets Layer (SSL) e Transport Layer Security (TLS) sono protocolli ampiamente utilizzati per garantire la privacy e la sicurezza dei dati. Tuttavia, ci sono casi in cui potrebbe essere necessario analizzare il traffico crittografato per la risoluzione dei problemi, l'analisi forense o il monitoraggio della rete. Questo articolo tecnico ti guiderà attraverso la decifratura del traffico SSL/TLS utilizzando Wireshark e tcpdump, due potenti strumenti di analisi di rete. Spiegheremo cosa sono Wireshark e tcpdump, spiegheremo la crittografia SSL e TLS e mostreremo come decifrare il traffico SSL utilizzando una chiave segreta pre-master o una chiave privata RSA.
Cosa sono Wireshark e tcpdump? #
Wireshark #
Wireshark è un analizzatore di protocolli di rete open source che consente agli utenti di catturare e navigare interattivamente il traffico in esecuzione su una rete di computer. Consente di ispezionare i dati a livello granulare, fornendo visibilità sui protocolli e sui pacchetti di dati trasmessi. Wireshark è ampiamente utilizzato per la risoluzione dei problemi di rete, lo sviluppo di protocolli e l'analisi della sicurezza.
tcpdump #
tcpdump è uno strumento di analisi dei pacchetti a riga di comando che cattura il traffico di rete e lo visualizza in tempo reale. È altamente efficiente per catturare dati da reti live, consentendo di salvare i pacchetti in un file (noto come file di cattura) per un'analisi successiva. Sebbene tcpdump non abbia l'interfaccia grafica di Wireshark, è potente per analisi rapide, filtraggio dei pacchetti e raccolta di dati su sistemi remoti.
Cos'è la crittografia SSL? #
SSL (Secure Sockets Layer) è un protocollo sviluppato da Netscape per la trasmissione di documenti privati tramite Internet. SSL utilizza algoritmi di crittografia per garantire che i dati inviati tra il client (ad esempio, un browser Web) e il server siano illeggibili a chiunque intercetti la trasmissione.
TLS (Transport Layer Security) è il successore di SSL ed è più sicuro. Sebbene TLS sia tecnicamente distinto da SSL, il termine SSL è spesso utilizzato per riferirsi a entrambi i protocolli.
SSL/TLS funziona stabilendo un canale di comunicazione sicuro tra due sistemi. I concetti chiave nella crittografia SSL/TLS includono:
- Crittografia simmetrica: per crittografare e decrittografare i dati viene utilizzata un'unica chiave.
- Crittografia asimmetrica: vengono utilizzate due chiavi (pubblica e privata); i dati crittografati con la chiave pubblica possono essere decifrati solo con la corrispondente chiave privata.
- Certificati: SSL/TLS utilizza certificati per verificare l'identità del server e talvolta del client.
- Stretta di mano: processo mediante il quale il client e il server stabiliscono una connessione sicura, scambiandosi le chiavi e concordando i metodi di crittografia.
Decifrare SSL con una chiave segreta pre-master #
La chiave segreta pre-master è un componente cruciale nel processo di handshake SSL/TLS. Questa chiave viene utilizzata per generare chiavi di sessione, che vengono poi utilizzate per crittografare i dati effettivi trasferiti sulla rete. Ottenendo la chiave segreta pre-master, è possibile decrittografare i dati della sessione.
Passaggi di base per decifrare SSL con una chiave segreta pre-master #
Per decriptare il traffico SSL utilizzando la chiave segreta pre-master, seguire questi passaggi:
1. Imposta la variabile di ambiente del file di registro
2. Cattura con tcpdump e verifica il file di registro
3. Configurare Wireshark per la decrittazione SSL
Imposta la variabile di ambiente del file di registro #
Configurazione SSLKEYLOGFILE Su Windows #
Nei sistemi Windows, dovrai impostare una variabile di ambiente per memorizzare le chiavi segrete pre-master in un file di registro. Questa variabile, denominata SSLKEYLOGFILE, definisce il percorso in cui vengono salvate queste chiavi.
1. Inizia facendo clic con il tasto destro del mouse su Risorse del computer e selezionando Proprietà a Confronto dal menu per aprire il menu Sistema.
2. Fare clic su Impostazioni di sistema avanzate nell'elenco a sinistra per aprire la finestra Proprietà del sistema.
3. Nel Filtri scheda, fare clic sul pulsante "Variabili d'ambiente".
4. Sotto Variabili utente, clicca il Nuovo… pulsante. Puoi anche creare questa variabile sotto Variabili di sistema se vuoi registrare le chiavi SSL per tutti gli utenti del sistema. Tuttavia, di solito è meglio limitarlo al tuo profilo.
5. Nel Nome della variabile campo, inserisci SSLKEYLOGFILE.
Nel Valore variabile campo, inserisci il percorso in cui vuoi salvare il file di registro. In alternativa, puoi cliccare Sfoglia il file… per selezionare il percorso utilizzando il selettore file.
Se lo stai impostando come variabile di sistema, assicurati che il file sia accessibile a tutti gli utenti, oppure usa caratteri jolly. Ad esempio, potresti usare %USERPROFILE%\AppData\ssl-keys.log or C:\chiavi-ssl.log .
6. Al termine, fai clic su OK per applicare le modifiche e procedere con i passaggi successivi.
Configurazione SSLKEYLOGFILE su Linux o Mac #
Su Linux e Mac, dovrai impostare SSLKEYLOGFILE utilizzando la variabile di ambiente exportNello stesso terminale, puoi eseguire tcpdump e genererà il file di registro della chiave indicata quando viene rilevata una connessione SSL.
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump ...
Per mantenere una configurazione permanente delle variabili di ambiente, modifica il profilo utente con un editor di testo come nanoPer Linux, questa variabile è memorizzata in ~ / .bashrce su Mac viene creato in ~ / .bash_profile. Quindi, aggiungi il export comando per SSLKEYLOGFILE variabile alla fine del file e salvare le modifiche.
Cattura con tcpdump e verifica il file di registro #
Per verificare la generazione del file di log, prova ad aprire un browser, utilizzare tcpdump o eseguire un comando curl verso un server HTTPS per confermare che il file venga generato correttamente.
Ad esempio, nello stesso terminale in cui sono state create le variabili d'ambiente, verrà avviato il comando tcpdump per catturare il traffico e un comando curl verso un servizio HTTPS per la decrittazione:
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i qualsiasi porta 443 -w ~/capture.pcap & root@noid-01:~# curl https://(quindi, chiudi il comando tcpdump)
Verifica che il file di log ~/.ssl-key.log e la cattura del traffico in ~/capture.pcap siano stati generati. Infine, consulta l'ultimo passaggio per visualizzare il traffico crittografato con Wireshark.
Se apri il file ssl-key.log vedrai qualcosa di simile a questo:
root@noid-01:~# cat ~/.ssl-key.log CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0 SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1 CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4
Configurare Wireshark per la decrittazione SSL #
Una volta che il sistema di acquisizione registra le chiavi pre-master, è possibile utilizzare il file di registro delle chiavi insieme ai pacchetti acquisiti per decrittografare il traffico SSL in Wireshark.
1. Caricare il registro delle chiavi e i file di acquisizione nel sistema in cui è installato Wireshark.
2. Aprire il file di acquisizione del traffico con Wireshark.
3. Configurare il protocollo SSL. Fare clic su Modifica, Quindi seleziona Preferenze. Si aprirà la finestra di dialogo Preferenze, che mostra un elenco di elementi sulla sinistra. Espandi la protocolli sezione, scorri verso il basso e clicca su SSL. Nel SSL opzioni del protocollo, individuare il campo etichettato Nome file registro (Pre)-Master-SecretVai al file di registro impostato in precedenza oppure incolla il percorso direttamente in questo campo.
4. Applicare la Configurazione. Dopo aver impostato il Nome file registro (Pre)-Master-Secret, fare clic su OK per salvare le modifiche e tornare a Wireshark. Ora sei pronto per decifrare il traffico catturato. Quando selezioni un frame di dati crittografato, controlla la vista Packet byte. Sotto la vista, dovresti vedere una scheda per Dati SSL decriptati .
Se i dati della sessione risultano ancora illeggibili e non è possibile visualizzare alcun codice HTML, la causa potrebbe essere la compressione GZIP, comunemente utilizzata da server web come Apache. In questo caso, fare clic sulla scheda " Corpo dell'entità non compresso" , disponibile solo quando la decrittazione SSL è abilitata. Qui è possibile visualizzare il codice sorgente non compresso del sito, ad esempio l'elemento title della pagina predefinita di Apache in chiaro.
Utilizzo di una chiave RSA per decriptare SSL #
Wireshark offre una funzionalità che consente di caricare le chiavi RSA per decifrare il traffico SSL, ma nella pratica la decifratura delle chiavi RSA è diventata obsoleta.
Questo calo nell'utilizzo è dovuto all'adozione di Perfect Forward Secrecy (PFS), che ha reso obsoleta la decifrazione tradizionale della chiave RSA. Con PFS, le sessioni negoziate usando Diffie-Hellman non si basano direttamente sulla chiave RSA. Invece, generano una chiave monouso che viene memorizzata solo nella RAM e crittografata usando la chiave su disco.
Se in precedenza hai utilizzato una chiave RSA per decifrare il traffico e hai scoperto che non funziona più, è probabile che la macchina di destinazione utilizzi scambi di chiavi Diffie-Hellman. Puoi confermarlo abilitando la registrazione SSL in Wireshark.
Per abilitare la registrazione:
1. Fare clic su Modifica nel menu della barra degli strumenti e selezionare Preferenze.
2. espandere la protocolli sezione a sinistra, scorri verso il basso e clicca su SSL.
3. Imposta la posizione per il file di registro SSL facendo clic su Scopri la nostra gamma di prodotti pulsante.
Una volta abilitata la registrazione, cattura una sessione con il tuo host abilitato SSL e controlla i log. Cerca il frame di negoziazione dell'handshake TLS; probabilmente vedrai una voce DHE (o ECDHE, per chiavi a curva ellittica) nella stringa di cifratura, che indica che sono in uso scambi di chiavi Diffie-Hellman.
Se viene visualizzato un messaggio che indica che il master secret non è stato trovato e la decifratura della chiave RSA non riesce, sarà necessario passare al metodo pre-master secret per la decifratura.
Con la diffusione sempre maggiore del PFS, in particolare con l'avvento del TLS 1.3, la decifratura tradizionale della chiave RSA è diventata obsoleta e non ci si dovrebbe più basare su di essa.
Vedi qui per saperne di più #
Il formato SSLKEYLOGFILE per TLS #
Il formato SSLKEYLOGFILE è un file di testo utilizzato per memorizzare le chiavi segrete pre-master per la decrittazione delle connessioni TLS. Il file è codificato in UTF-8 e ogni riga contiene una chiave segreta identificata da un'etichetta, un valore casuale del client e la chiave segreta stessa, il tutto separato da spazi. Il formato accetta diverse terminazioni di riga (CRLF, CR, LF) e le righe che iniziano con # vengono trattate come commenti.
Per TLS 1.3, diverse etichette corrispondono a diverse fasi della pianificazione della chiave, come CLIENT_HANDSHAKE_TRAFFIC_SECRET e SERVER_TRAFFIC_SECRET_0. Per TLS 1.2 e versioni precedenti, l' etichetta CLIENT_RANDOM identifica il master secret.
Considerazioni sulla sicurezza:
Accesso al FILELOGCHIAVESSL consente la decifrazione del traffico TLS, ponendo un rischio significativo per la sicurezza. Controlli di accesso adeguati sono essenziali per impedire l'accesso non autorizzato o l'escalation dei privilegi. La registrazione dovrebbe essere abilitata solo da utenti autorizzati e dovrebbero essere applicate rigide autorizzazioni per i file. I segreti registrati non solo consentono la decifrazione, ma possono anche consentire agli aggressori di modificare o iniettare dati in connessioni attive e, in alcuni casi, impersonare endpoint o falsificare messaggi.
Come funziona un handshake SSL bidirezionale? #
Un handshake SSL bidirezionale autentica sia il server che il client. Ecco come si svolge il processo:
1. Cliente Ciao: Il client avvia l'handshake inviando un messaggio "Client Hello" al server. Questo messaggio include le suite di cifratura supportate dal client e le compatibilità della versione TLS.
2. Server Ciao: Il server risponde con un messaggio “Server Hello”, che contiene il certificato pubblico del server e una richiesta per il certificato del client.
3. Convalida del certificato client: Il client verifica il certificato del server. Se è valido, il client invia il proprio certificato al server.
4. Convalida del certificato del server: Il server controlla il certificato del client. Se il certificato del client è valido, la sessione viene stabilita, consentendo una comunicazione sicura tra entrambe le parti.
È possibile decifrare il traffico SSL/TLS sottoposto a sniffing passivo? #
Sì, è possibile decifrare il traffico SSL/TLS sniffato passivamente, ma per farlo avrai bisogno della chiave RSA. Questa chiave può essere ottenuta tramite mezzi legittimi con la dovuta autorizzazione o, meno eticamente, intercettandola tramite un attacco "man-in-the-middle".