2016-03-26 7 views
6

Possiedo un'applicazione che utilizza OpenSSL 1.0.2 e vorrei esaminare il traffico con Wireshark. Wireshark può (presumibilmente) decrittografare le conversazioni di TLS a patto di fornirgli il segreto pre-master.Come estrarre il segreto pre-master utilizzando un client basato su OpenSSL?

Se utilizzo una suite di crittografia come TLS_RSA_WITH_AES_256_CBC_SHA256; qualcuno può dirmi come ottenere il segreto pre-master da una struttura SSL o SSL_CTX? Sto bene con l'hacking delle strutture opache all'interno dell'oggetto SSL - questo non è per niente che possa essere spedito in un prodotto; Voglio solo sapere come popolare un file segreto pre-master per Wireshark.

+1

Vedere anche [Estrarre le chiavi pre-master da un'applicazione OpenSSL] (http://security.stackexchange.com/q/80158/29925) su InfoSec.SE. – jww

+0

Probabilmente è degno di nota ora che OpenSSL 1.1.0 è stato rilasciato: molte strutture sono state rese opache, quindi probabilmente dovrai fare una discreta quantità di hacking. – jww

risposta

6

Si consiglia di utilizzare la chiave principale, che è più facile da ottenere. Per quanto ne so, la chiave pre-master esiste solo temporaneamente nello stack in OpenSSL. La chiave master è disponibile in ssl_session_st (definita in ssl.h nella diramazione 1.0.2 ma spostata in ssl_locl.h in una versione successiva). La variabile membro SSLsession è un puntatore al suo ssl_session_st (alias SSL_SESSION).

Wireshark può utilizzare la chiave master e la chiave pre-master per decodificare le connessioni. Here are the formats che Wireshark supporta partire da questa scrittura:

  • RSA xxxx yyyy Dove xxxx sono i primi 8 byte del criptato pre-master segreto (hex-codificati) Dove yyyy è il segreto pre-master in chiaro (HEX codificata) (questo è il formato originale introdotta con bug 4349)

  • RSA Session-ID:xxxx Master-Key:yyyy Dove xxxx è l'ID di sessione SSL (hex-encoded) Dove yyyy è la c leartext master secret (codifica esadecimale) (aggiunto per supportare l'uscita openssl s_client Master-Key) Questo è un po 'improprio perché non c'è nulla di specifico RSA su questo.

  • PMS_CLIENT_RANDOM xxxx yyyy Dove xxxx è la client_random dal ClientHello (hex-encoded) Dove yyyy è il testo in chiaro segreto pre-master (hex-codificati) (Questo formato consente connessioni SSL per essere decifrati, se un utente può catturare i PMS, ma non riusciva a recuperare la MS per una sessione specifica con un server SSL.)

  • CLIENT_RANDOM xxxx yyyy Dove xxxx è la client_random dal ClientHello (hex-codificati) Dove 012.326.è il segreto master in chiaro (hex-encoded) (Questo formato consente connessioni SSL non RSA per essere decifrati, cioè ECDHE-RSA.)

Nota che né la chiave pre-comandante e il maestro la chiave è la chiave simmetrica (il titolo della tua domanda implica che tu possa pensare che sia). La chiave simmetrica deriva dalla chiave principale e dai dati casuali client/server.

+0

rhashimoto: Sì! Questa è esattamente l'informazione di cui avevo bisogno. E hai ragione - ero confuso - pensavo che il segreto del pre-master fosse la chiave simmetrica. Ho intenzione di modificare il titolo per riflettere meglio questo per evitare di confondere nessuno. –

+1

FYI: OpenSSL 1.1.0 fornisce la funzione [SSL_SESSION_get_master_key()] (https://www.openssl.org/docs/man1.1.0/ssl/SSL_SESSION_get_master_key.html). –

Problemi correlati