claves de sesión del navegador SSL

3

Estoy tratando de exportar / escribir el secreto maestro SSL y las claves a un archivo desde el navegador de cromo. Agradecería que alguien me aconsejara cómo hacerlo.

Para escribir el secreto de premaster podemos simplemente exportar la variable SSLKEYLOGFILE en el entorno. Wirehark puede utilizar los secretos del maestro de la máscara para descifrar una sesión HTTPS.

El secreto de premaster se usa para calcular el secreto maestro, que se usa para crear 6 claves: CLIENT_WRITE_MAC CLIENT_IV CLIENT_WRITE y 3 más para el servidor.

Quiero enviar estas claves a un archivo en lugar del secreto premaster.

Me di cuenta de que si pudiera usar el código de wireshark para simplemente emitirlo, pero esto es más complejo. Creo que el código para el manejo de los paquetes de SSL y el secreto de premaster está aquí. github.com/boundary/wireshark/blob/master/epan/dissectors/packet-ssl-utils.c

Otra forma de proceder es realizar cambios en el navegador de cromo y compilarlo. Creo que los cambios deben hacerse aquí. enlace

Estaba revisando más código fuente y encontré que este archivo está relacionado.

enlace

Al observar el código anterior, observo que hay más variables de entorno que se pueden establecer. ¿Alguien sabe si el entorno SSLDEBUG se puede configurar de la misma manera que la variable SSLKEYLOG? Cualquier otra forma o técnica para hacer esto ayudaría también

No he podido exportar las claves con éxito hasta ahora.

    
pregunta Choi 07.04.2016 - 06:58
fuente

2 respuestas

0

Lo descubrí.
Para hacer esto, necesita descargar la última versión del código fuente de Wireshark. Corrí mi prueba en Wireshark 2.0.1

Es necesario realizar cambios en el archivo: /epan/dissectors/packet-ssl-utils.c en la carpeta de origen de Wireshark.

Imprima las variables en un archivo de la línea 3179 - 3194.
Puede encontrar la clave de escritura del cliente, la clave de escritura del servidor, la clave MAC del cliente, la clave MAC del servidor, el cliente IV y el servidor IV)

Para escribir en un archivo en C usa esto

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

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

Nota: para hacerlo de una manera más objetiva, cambie y cree las siguientes funciones

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
}

Ahora use estas funciones para exportar sus claves a un archivo.

Vaya a la carpeta de origen de wireshark principal.
Ejecutar:

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

y ejecuta Wireshark en la terminal. (Aún debe alimentar wirehark el archivo secreto de premaster exportando la variable de entorno SSLKEYLOGFILE)

    
respondido por el Choi 09.04.2016 - 00:43
fuente
1

Las seis claves se derivan del secreto maestro, el cliente al azar y el servidor al azar. Puede obtener el secreto maestro y el cliente al azar desde SSLKEYLOGFILE. Supongo que puede rastrear el servidor al azar con Wireshark desde el mensaje de intercambio de claves del servidor.

Si tiene esos, puede llamar a algunos función de biblioteca o script en ellos para obtener las seis claves.

La forma en que funciona es que un HMAC se calcula sobre los números aleatorios y el secreto maestro y el resultado se corta en partes para obtener los seis secretos:

  

Para generar el material clave, computar

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

hasta que se haya generado suficiente salida. Entonces, el key_block es
  particionado de la siguiente manera:

  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]

Más información:

respondido por el Sjoerd 07.04.2016 - 10:22
fuente

Lea otras preguntas en las etiquetas