Articles

TLS

Transport Layer Security (TLS) fornisce sicurezza nella comunicazione tra due host. Fornisce integrità, autenticazione e riservatezza. È usato più comunemente nei browser Web, ma può essere utilizzato con qualsiasi protocollo che utilizza TCP come livello di trasporto.

Secure Sockets Layer (SSL) è il predecessore del protocollo TLS. Questi nomi sono spesso usati in modo intercambiabile, il che può portare a una certa confusione:

  • Una configurazione che utilizza il protocollo SSL (SSLv2/SSLv3) non è sicura. Il protocollo TLS dovrebbe essere usato invece.

  • I certificati X. 509 per l’autenticazione sono talvolta chiamati anche Certificati SSL.

  • Alcune applicazioni (come la posta elettronica) utilizzano una singola porta sia per le sessioni non crittografate che crittografate. Per passare da non crittografato a crittografato, viene utilizzato (START)TLS. Quando una singola porta utilizza direttamente il protocollo TLS, viene spesso definito SSL.

  • Per ragioni storiche, il software (Wireshark incluso) si riferisce a SSL o SSL/TLS mentre in realtà significa il protocollo TLS poiché è oggigiorno ciò che tutti usano.

Dipendenze del protocollo

  • TCP: In genere, TLS utilizza TCP come protocollo di trasporto.

Dissezione TLS in Wireshark

Il dissettore TLS è completamente funzionale e supporta anche funzionalità avanzate come la decrittografia di TLS se vengono forniti segreti appropriati (#TLS_Decryption).

Da Wireshark 3.0, il dissettore TLS è stato rinominato da SSL a TLS. L’uso del filtro di visualizzazione ssl emetterà un avviso.

Decrittografia TLS

Wireshark supporta la decrittografia TLS quando vengono forniti segreti appropriati. I due metodi disponibili sono:

  • File di registro chiave che utilizza i segreti per sessione (#Using_the_.28Pre.29-Master-Segreto).

  • Decrittografia utilizzando una chiave privata RSA.

Un file di registro delle chiavi è un meccanismo universale che consente sempre la decrittografia, anche se è in uso uno scambio di chiavi Diffie-Hellman (DH). La chiave privata RSA funziona solo in un numero limitato di casi.

Il file di registro delle chiavi è un file di testo generato da applicazioni come Firefox, Chrome e curl quando viene impostata la variabile d’ambiente SSLKEYLOGFILE. Per essere precisi, la loro libreria sottostante (NSS, OpenSSL o boringssl) scrive i segreti richiesti per sessione in un file. Questo file può essere successivamente configurato in Wireshark (#Using_the_.28Pre.29-Master-Segreto).

Il file della chiave privata RSA può essere utilizzato solo nelle seguenti circostanze:

  • La suite di cifratura selezionata dal server non utilizza (EC)DHE.
  • La versione del protocollo è SSLv3, (D)TLS 1.0-1.2. Non funziona con TLS 1.3.

  • La chiave privata corrisponde al certificato del server. Non funziona con il certificato client, né con il certificato dell’autorità di certificazione (CA).

  • La sessione non è stata ripresa. L’handshake deve includere il messaggio di handshake ClientKeyExchange.

Il file di registro delle chiavi è generalmente raccomandato poiché funziona in tutti i casi, ma richiede la capacità continua di esportare i segreti dall’applicazione client o server. L’unico vantaggio della chiave privata RSA è che deve essere configurata solo una volta in Wireshark per abilitare la decrittografia, fatte salve le limitazioni di cui sopra.

Impostazioni delle preferenze

Vai a Modifica – > Preferenze. Aprire l’albero dei protocolli e selezionare TLS. In alternativa, selezionare un pacchetto TLS nell’elenco dei pacchetti, fare clic con il pulsante destro del mouse sul livello TLS nella vista Dettagli pacchetto e aprire il menu Preferenze protocollo.

Le preferenze del protocollo TLS notevoli sono:

  • (Pre)-Master-Secret log filename (tls.keylog_file): percorso per leggere il file di registro delle chiavi TLS per la decrittografia.
  • Elenco chiavi RSA: apre una finestra di dialogo per configurare le chiavi private RSA per la decrittografia. Deprecato a favore delle Preferenze – > Finestra di dialogo Chiavi RSA.

  • Pre-Shared-Key: utilizzato per configurare la chiave di decrittazione per le suite di cifratura PSK. Non generalmente utilizzato.
  • File di debug TLS (tls.debug_logfile): percorso per scrivere dettagli interni sul processo di decrittografia. Conterrà i risultati della decrittografia e le chiavi che sono state utilizzate in questo processo. Questo può essere usato per diagnosticare perché la decrittografia non riesce.

Per abilitare la decrittografia TLS sono necessarie anche le seguenti preferenze del protocollo TCP:

  • Consenti a subdissector di riassemblare i flussi TCP. Abilitato per impostazione predefinita.
  • Riassemblare i segmenti fuori ordine (da Wireshark 3.0, disabilitato per impostazione predefinita).

A partire da Wireshark 3.0, una nuova finestra di dialogo delle chiavi RSA può essere trovata in Modifica- > Preferenze – > Chiavi RSA. In questa finestra di dialogo, usa Aggiungi nuovo file chiave… pulsante per selezionare un file. Ti verrà richiesta una password, se necessario. Il Aggiungi nuovo token… il pulsante può essere utilizzato per aggiungere chiavi da un HSM che potrebbe richiedere l’utilizzo di Aggiungi nuovo provider… per selezionare selezionare un file DLL/. so e ulteriori configurazioni specifiche del fornitore.

Il file della chiave RSA può essere una chiave privata in formato PEM o un keystore PKCS#12 (in genere un file con un .pfx o .p12 estensione). La chiave PKCS#12 è un file binario, ma il formato PEM è un file di testo simile a questo:

  • -----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDReQzlKVeAK8b5TRcRBhSi9IYwHX8Nqc8K4HeDRvN7HiBQQP3bhUkVekdoXpRLYVuc7A8h1BLr93Qw...KOi8FZl+jhG+p8vtpK5ZAIyp-----END PRIVATE KEY-----

La finestra di dialogo elenco chiavi RSA deprecata può essere rimossa ad un certo punto. Per configurare le chiavi, utilizzare invece la finestra di dialogo Chiavi RSA. Per modificare il protocollo per i dati di rete decrittografati, fare clic con il pulsante destro del mouse su un pacchetto TLS e utilizzare Decode As per modificare il protocollo corrente per la porta TLS. I campi Indirizzo IP e Porta non sono utilizzati.

File di acquisizione di esempio

Vedere anche SampleCaptures#SSL_with_decryption_keys.

  • dump.pcapng TLSv1.2 cattura con 73 suite di cifratura, è necessario questo premaster.file txt per decifrare il traffico. (collegato da https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9144)

  • tls12-dsb.pcapng – TLS 1.2 traccia con chiavi di decrittazione incorporati.
  • https://github.com/wireshark/wireshark/blob/master/test/captures – La suite di test contiene varie tracce TLS.

Filtro di visualizzazione

Un elenco completo dei campi del filtro di visualizzazione TLS può essere trovato nel riferimento del filtro di visualizzazione

Mostra solo il traffico basato su TLS:

  • tls

Filtro di acquisizione

Non è possibile filtrare direttamente i protocolli TLS durante l’acquisizione. Tuttavia, se si conosce la porta TCP utilizzata (vedi sopra), è possibile filtrare su quella, ad esempio utilizzando la porta tcp 443.

Utilizzando il (Pre)-Master-Secret

Il master secret consente la decrittografia TLS in Wireshark e può essere fornito tramite il file di registro delle chiavi. Il segreto pre-master è il risultato dello scambio di chiavi e può essere convertito in un segreto master da Wireshark. Questo segreto pre-master può essere ottenuto quando viene fornita una chiave privata RSA ed è in uso uno scambio di chiavi RSA.

Istruzioni passo-passo per decifrare il traffico TLS da Chrome o Firefox in Wireshark:

  1. Chiudi completamente il browser (controlla il tuo task manager solo per essere sicuro).
  2. Imposta la variabile d’ambiente SSLKEYLOGFILE sul percorso assoluto di un file scrivibile.

  3. Avviare il browser.
  4. Verificare che sia stata creata la posizione dal passaggio 2.
  5. In Wireshark, andare a Preferenze- > Protocolli- > TLS, e modificare la preferenza (Pre)-Master-Secret log filename al percorso dal passaggio 2.

  6. Avvia la cattura Wireshark.
  7. Aprire un sito web, ad esempiohttps://www.wireshark.org/

  8. Verificare che i dati decrittografati siano visibili. Ad esempio, utilizzando il filtro tls e (http o http2).

Per Windows, una variabile di ambiente può essere impostata globalmente come descritto in questa procedura dettagliata, ma questo non è raccomandato in quanto è facile da dimenticare e può essere un problema di sicurezza in quanto consente la decrittografia di tutto il traffico TLS. Un modo migliore per impostare la variabile d’ambiente è tramite un file batch. Creare un file start-fx.cmd con:

  • @echo offset SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txtopen firefox

Modificare il percorso SSLKEYLOGFILE, se necessario, e sostituire firefox con Chrome per Google Chrome. Questo meccanismo attualmente (2019) non funziona per Safari, Microsoft Edge e altri poiché le loro librerie TLS (Microsoft SChannel/Apple SecureTransport) non supportano questo meccanismo. Questo meccanismo funziona anche per applicazioni diverse dai browser Web, ma dipende dalla libreria TLS utilizzata dall’applicazione.

Esempi di altre applicazioni:

  • Le applicazioni che utilizzano OpenSSL potrebbero utilizzare un GDB o un trucco LD_PRELOAD per estrarre i segreti. Questo include Python.

    • Per una procedura dettagliata per il server HTTP Apache che utilizza questo libsslkeylog.so biblioteca, vedere questo post.

  • Per i programmi Java, i segreti possono essere estratti dalla preferenza del registro di debug TLS o emessi direttamente nel formato richiesto da Wireshark tramite un agente Java. Due progetti simili:
    • jSSLKeyLog:http://jsslkeylog.sourceforge.net/

    • extract-tls-secrets:https://github.com/neykov/extract-tls-secrets

  • Gli script Python possono essere modificati per scaricare anche le chiavi.

Per un’indagine sulle applicazioni e librerie TLS supportate, vedere anche pagina 19 della presentazione UE di Peter Wu SSL / TLS Decryption SharkFest’18.

Incorporare i segreti di decrittografia in un file pcapng

Da Wireshark 3.0 è possibile incorporare il file di registro delle chiavi TLS in un file pcapng. Questo rende molto più facile distribuire i file di cattura con segreti di decrittografia, e rende il passaggio tra i file di cattura più facile dal momento che la preferenza del protocollo TLS non deve essere aggiornato. Per aggiungere il contenuto delle chiavi del file di registro chiave.txt per catturare il file in.pcap e scrivi il risultato su out-dsb.pcapng:

  • editcap inject inject-secrets tls,keys.txt in.pcap out-dsb.pcapng

Il suffisso dsb sta per Decryption Secrets Block (DSB) ed è parte della specifica pcapng.

Un file di registro delle chiavi potrebbe contenere chiavi non correlate a un file di acquisizione. Per garantire che le chiavi non necessarie non siano trapelate, è possibile utilizzare il inject-tls-secrets.py script da https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 per filtrare il file di registro delle chiavi e aggiungere i segreti richiesti a un file di acquisizione. Lo script di shell è stato testato con Linux e macOS, ma una versione Python 3 è disponibile anche per tutte le piattaforme, tra cui Windows. Esempio:

  • git clone https://gist.github.com/Lekensteyn/f64ba6d6d2c6229d6ec444647979ea24 ~/its~/its/inject-tls-secrets.py keys.txt some.pcap

Vedi anche

Alcuni altri protocolli sono derivati da TLS. Ciò include:

  • DTLS è basato sullo standard TLS e viene eseguito su UDP come protocollo di trasporto.

  • QUIC è un protocollo in sviluppo che utilizza TLS per la sua crittografia, lo stato di Wireshark può essere monitorato su https://github.com/quicwg/base-drafts/wiki/Tools#wireshark.

  • https://en.wikipedia.org/wiki/Transport_Layer_Security articolo di Wikipedia per TLS

  • https://sharkfesteurope.wireshark.org/assets/presentations16eu/07.pdf SharkFest’16 UE presentazione da Amor di Blok sulla risoluzione dei problemi di SSL con Wireshark/Tshark (o guarda il video della presentazione al https://youtu.be/oDaDY9QCnXk)

  • https://lekensteyn.nl/files/wireshark-ssl-tls-decryption-secrets-sharkfest18eu.pdf SharkFest’18 UE presentazione a cura di Pietro Wu su TLS decifrazione (video prima di parlare, in Asia https://youtu.be/bwJEBwgoeBg)

  • https://lekensteyn.nl/files/wireshark-tls-debugging-sharkfest19us.pdf SharkFest’19 US presentazione a cura di Pietro Wu descrivere TLS decodifica e l’uso di embedded decrittografia segreti (https://youtu.be/Ha4SLHceF6w).

  • Come funziona SSL / TLS? – Information Security Stack Exchange

  • Keyless SSL: I dettagli tecnici Nitty Gritty con una buona introduzione in TLS

  • PolarProxy da Netresec è un proxy SSL/TLS trasparente creato per i risponditori di incidenti e ricercatori di malware che è stato progettato principalmente per intercettare e decifrare il traffico crittografato TLS da malware. PolarProxy decrittografa e ri-crittografa il traffico TLS, salvando anche il traffico decifrato in un file PCAP che può essere caricato in Wireshark o in un sistema di rilevamento delle intrusioni (IDS).

  • CategoryHowTo

Lascia un commento

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