¿Cómo descifrar el tráfico SSL con un rastreador de paquetes cuando tengo la clave privada?

5

¿Cómo descifras los paquetes SSL (tráfico) con la clave privada? Intenté hacer esto con ssldump y openssl pero nada funcionó.

    
pregunta user104787 17.03.2016 - 19:33
fuente

3 respuestas

4

Ssldump se supone que puede hacer eso, pero parece que no se mantiene (en el archivo fuente de la última versión, la fecha de la última modificación de todos los archivos es en 2002 o antes, por lo que es muy posible que no admita SSL / TLS más reciente; en realidad, es altamente improbable que un software de 2002 pueda procesar los nuevos formatos de cifrado definidos en TLS 1.2 (AES / GCM). TLS 1.1 se publicó en 2006, y TLS 1.2 en 2008.

OpenSSL es una biblioteca que implementa el protocolo, pero no está diseñado para analizar una sesión grabada.

Es posible que tengas más oportunidades con Wireshark , que tiene amplia documentación sobre cómo usarlo para descifrar las sesiones grabadas.

Hay que tener en cuenta un parámetro importante: el descifrado de una sesión grabada pasivamente (con una copia de la clave privada del servidor) solo funciona si el intercambio de claves fue del tipo RSA o DH estático; con las suites de cifrado "DHE" y "ECDHE", no podrá descifrar tal sesión, incluso con el conocimiento de la clave privada del servidor. En ese caso, necesitará el "secreto maestro" negociado o utilizar la clave privada del servidor para interceptar activamente la conexión (en un Man-in-the-Middle configuración).

    
respondido por el Tom Leek 17.03.2016 - 19:55
fuente
1

Si tiene acceso al lado del cliente que realiza las conexiones y el navegador es Firefox (o, creo, basado en NSS), puede volcar las claves efímeras establecidas para cualquier sitio. Para hacer esto ejecute:

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

Encontrará que logfile.log contiene una serie de líneas a lo largo de las líneas de CLIENT_RANDOM <hex> - puede encontrar estas documentadas here .

En wireshark, puedes ir a Edit | Preferences | Protocols | SSL y establecer el "nombre de archivo de registro pre-maestro-secreto" en el archivo que configuraste anteriormente.

Todas las conexiones a través de la sesión de navegación de Firefox serán descifradas y visibles, independientemente del host.

Como advertencia, es posible que no necesariamente veas http fácil de entender por más tiempo; Acabo de probar esto contra google.com y aparentemente ahora uso http / 2.

Supongo que aquí tiene un servicio habilitado para SSL y su propia clave privada para esto y desea ver la sesión sin cifrar. Un ejemplo realmente útil es ver http / 2 en la práctica, ya que rara vez implementado sin tls (la mayoría de los navegadores no lo usarán en http) y se preguntan por qué no puede hacerlo, en una configuración moderna. El problema, como dice Tom, es que necesitas las claves efímeras.

    
respondido por el diagprov 17.03.2016 - 20:34
fuente
0

Puedes probar el siguiente comando con tshark (wirehark basado en terminal) para descifrar una sesión en vivo:

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

Tenga en cuenta que esto no descifra los datos de la aplicación.

    
respondido por el Rahul 17.03.2016 - 20:42
fuente

Lea otras preguntas en las etiquetas