Come decifrare il traffico SSL con uno sniffer di pacchetti quando ho la chiave privata?

5

Come decifri i pacchetti ssl (traffico) con la chiave privata? Ho provato a farlo con ssldump e opensl, ma niente ha funzionato.

    
posta user104787 17.03.2016 - 19:33
fonte

3 risposte

4

Ssldump dovrebbe essere in grado di farlo, ma sembra essere non mantenuto (nell'archivio sorgente dell'ultima versione, la data dell'ultima modifica di tutti i file è nel 2002 o prima) quindi è del tutto possibile che non supporti SSL / TLS più recenti; in realtà, è altamente improbabile che un software del 2002 possa elaborare i nuovi formati di crittografia definiti in TLS 1.2 (AES / GCM). TLS 1.1 è stato pubblicato nel 2006 e TLS 1.2 nel 2008.

OpenSSL è una libreria che implementa il protocollo, ma non è pensata per analizzare una sessione registrata.

Potresti avere migliori possibilità con Wireshark , che ha un'ampia documentazione su come usarlo per decifrare le sessioni registrate.

C'è un parametro importante da ricordare: la decrittografia di una sessione passivamente registrata (con una copia della chiave privata del server) funziona solo se lo scambio di chiavi era di tipo RSA o statico DH; con le suite di crittografia "DHE" e "ECDHE", non sarà possibile decrittografare tale sessione, anche con la conoscenza della chiave privata del server. In tal caso, sarà necessario il "master secret" negoziato o utilizzare la chiave privata del server per intercettare attivamente la connessione (in un Man-in-the-middle setup).

    
risposta data 17.03.2016 - 19:55
fonte
1

Se hai accesso al lato client che effettua le connessioni e il browser è Firefox (o, credo, basato su NSS), puoi scaricare le chiavi effimere stabilite per qualsiasi sito. Per eseguire questa corsa:

$ export SSLKEYLOGFILE=/path/to/logfile.log
$ firefox

Troverai logfile.log contiene una serie di linee lungo le linee di CLIENT_RANDOM <hex> - puoi trovare queste documentate qui .

In wireshark, puoi quindi andare a Edit | Preferences | Protocols | SSL e impostare il "nome del file di log pre-master-secret" nel file che hai impostato sopra.

Tutte le connessioni tramite la sessione di navigazione Firefox verranno quindi decodificate e visibili, indipendentemente dall'host.

Come avvertimento, potresti non vedere più facilmente l'http di facile comprensione; Ho appena provato questo su google.com e ora sto usando apparentemente http / 2.

Sto presumendo che tu abbia un servizio abilitato a ssl e la tua chiave privata per questo e vorresti vedere la sessione non criptata - un esempio veramente utile di questo è vedere http / 2 in pratica, dato che raramente distribuito senza tls (la maggior parte dei browser non lo usa su http) e si stanno chiedendo perché non si può, in una configurazione moderna. Il problema, come dice Tom, è che ti servono le chiavi effimere.

    
risposta data 17.03.2016 - 20:34
fonte
0

Puoi provare il seguente comando con tshark (wiresharel basato sul terminale) per decodificare una sessione live:

tshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list:,443,http,./private_key.pem" -o "ssl.debug_file:rsa_private.log" -R "(tcp.port eq 443)" port 443

Si noti che questo non decrittografa i dati dell'applicazione.

    
risposta data 17.03.2016 - 20:42
fonte

Leggi altre domande sui tag