chiavi di sessione del browser SSL

3

Sto tentando di esportare / scrivere il master secret SSL e le chiavi in un file dal browser chromium. Sarei grato se qualcuno potesse consigliarmi come farlo.

Per scrivere il segreto premaster possiamo semplicemente esportare la variabile SSLKEYLOGFILE nell'ambiente. I segreti premaster possono essere utilizzati da wireshark per decrittografare una sessione HTTPS.

Il segreto premaster viene utilizzato per calcolare il master secret che viene ulteriormente utilizzato per creare 6 chiavi: CLIENT_WRITE_MAC CLIENT_IV CLIENT_WRITE e altre 3 per il server.

Voglio produrre queste chiavi su un file invece del segreto premaster.

Ho pensato che se potessi usare il codice wireshark per renderlo semplicemente in uscita, ma questo è più complesso, credo che il codice per wireshark che gestisce i pacchetti SSL e che usi il segreto premaster sia qui. github.com/boundary/wireshark/blob/master/epan/dissectors/packet-ssl-utils.c

Un altro modo per procedere è apportare modifiche al browser chromium e compilarlo. Penso che i cambiamenti debbano essere fatti qui. link

Stavo passando più codice sorgente e ho trovato questo file correlato.

link

Guardando il codice sopra ho notato che ci sono più variabili d'ambiente che possono essere impostate. Qualcuno sa se l'ambiente SSLDEBUG può essere impostato nello stesso modo della variabile SSLKEYLOG. Qualsiasi altro modo o tecnica per fare ciò aiuterebbe anche

Non sono stato in grado di esportare correttamente le chiavi finora.

    
posta Choi 07.04.2016 - 06:58
fonte

2 risposte

0

L'ho capito.
Per fare ciò, è necessario scaricare l'ultima versione del codice sorgente di Wireshark. Ho eseguito il mio test su Wireshark 2.0.1

È necessario apportare modifiche al file - /epan/dissectors/packet-ssl-utils.c nella cartella di origine di Wireshark.

Stampa le variabili in un file dalla riga 3179 - 3194.
È possibile trovare la chiave di scrittura del client, la chiave di scrittura del server, la chiave MAC del client, la chiave MAC del server, il client IV e il server IV)

Per scrivere in un file in C usa questo

File: *fptr; fptr = fopen("directory you want to open a file in", "a+");

fprintf("data"); // this will write data to the file

Nota: per farlo in modo più obiettivo, modifica e crea le seguenti funzioni

void custom_ssl_print_data(const gchar* name, const guchar* data, size_t len){

//Write the following lines 

File *ssl_debug_file;

ssl_debug_file=fopen("directory you want to open the file in","a+");

//Copy original functionality from line 4927

}


void custom_ssl_print_string(const gchar* name, const StringInfo* data){

//Copy original functionality from line 4953
}

Ora usa queste funzioni per esportare le tue chiavi in un file.

Vai alla cartella principale di wireshark.
Run:

./autogen.sh
./configure
sudo make
sudo make install

ed esegui Wireshark nel terminale. (È comunque necessario alimentare i file wireshark del file segreto premaster esportando la variabile di ambiente SSLKEYLOGFILE)

    
risposta data 09.04.2016 - 00:43
fonte
1

Le sei chiavi sono derivate dal master secret, dal client random e dal server random. È possibile ottenere il master secret e il client casuali da SSLKEYLOGFILE. Suppongo che tu possa annusare casualmente il server con Wireshark dal messaggio di scambio chiavi del server.

Se ne hai, puoi chiamare la funzione di libreria oppure script su di essi per ottenere le sei chiavi.

Il modo in cui funziona è che un HMAC viene calcolato sui numeri casuali e sul master secret e il risultato viene tagliato in parti per ottenere i sei segreti:

To generate the key material, compute

  key_block = PRF(SecurityParameters.master_secret,
                  "key expansion",
                  SecurityParameters.server_random +
                  SecurityParameters.client_random);

until enough output has been generated. Then, the key_block is
partitioned as follows:

  client_write_MAC_key[SecurityParameters.mac_key_length]
  server_write_MAC_key[SecurityParameters.mac_key_length]
  client_write_key[SecurityParameters.enc_key_length]
  server_write_key[SecurityParameters.enc_key_length]
  client_write_IV[SecurityParameters.fixed_iv_length]
  server_write_IV[SecurityParameters.fixed_iv_length]

Altre informazioni:

risposta data 07.04.2016 - 10:22
fonte

Leggi altre domande sui tag