Páginas

13 septiembre, 2017

Descifrar tráfico SSL/TLS con Wireshark teniendo la clave privada del servidor

Para poder descifrar tráfico SSL/TLS necesitamos la clave privada sin passphrase del certificado digital del servidor. No se trata de ningún "hack mágico" con el que podremos descifrar el tráfico SSL/TLS.

Si necesitamos analizar el tráfico de un servidor al que tenemos un acceso legítimo, este es un método que nos permitirá poder ver en texto plano todo el tráfico cifrado que pasa por el servidor con el fin de detectar posibles anomalías en un red local.

Una vez obtenida la clave privada podremos añadirla en un sniffer de red como Wireshark, de ese modo analizar el tráfico HTTPS como si de un paquete HTTP se tratase.

Al intentar hacer un seguimiento de un cifrado HTTPS este se muestra como un paquete TCP. Haciendo un "Follow > TCP Stream" en Wireshark veremos el tráfico cifrado, como se muestra en la siguiente captura.

Figura 1: Paquete de tráfico TCP cifrado con SSL

Exportamos el certificado con la clave privada del servidor. Una vez tenemos exportado el certificado en formato .pfx con OpenSSL lo convertimos en formato .pem que el formato que Wireshark reconoce. Primero extraemos la clave privada del certificado y después eliminamos la contraseña de la clave privada extraída.

Extraemos la clave privada del certificado y la convertimos a formato .pem.
openssl pkcs12 in certificado.pfx -out claveprivada.pem -nocerts -nodes
Eliminamos la passphrase de la clave privada extraída anteriormente.
openssl rsa -in claveprivada.pem -out claveprivadasinpass.pem
Figura 2: Conversión y extracción de la clave privada del certificado digital .pfx.

Añadir la clave privada .pem sin passphrase extraída del certificado .pfx en Wireshark: "Edit > Preferences... > Protocols > SSL". (Si no vemos el protocolo SSL, en las nuevas versiones de Wireshark será el equivalente a protocolo TLS). Editamos para cargar la clave privada.
  • IP Address: IP del servidor.
  • Port: 443
  • Protocol: HTTP
  • Key File: Path del fichero de la clave privada .pem.
  • Password: Podremos dejar en blanco este espacio ya que el .pem de la clave privada está sin passphrase.
Figura 3: Añadir la clave privada .pem en Wireshark.

Podremos establecer un fichero de log "SSL debug file". En el que se almacenará en texto plano todos los paquetes cifrados, también podremos analizar desde otra perspectiva el tráfico cifrado desde el fichero log.

Figura 4: Fichero log debug SSL de Wireshark.

Una vez cargada la clave privada .pem reiniciamos Wireshark para actualizar los cambios. Los paquetes TCP cifrados anteriormente serán ahora paquetes HTTP en texto plano y se podrán seguir: "Follow > SSL Stream".

Figura 5: Seguimiento SSL Stream de paquetes HTTP descifrados

En la siguiente captura de pantalla se puede ver el seguimiento del SSL stream en texto plano en paquetes HTTP. En este caso se trata del mismo seguimiento de paquetes TCP referenciados en la "Figura 1".

Figura 6: SSL Stream en texto plano de paquetes HTTP.

Aunque por seguridad, en la generación de cualquier certificado se debería marcar la opción como no exportable para la clave privada, con el fin de minimizar riesgos en la organización. Ya que si alguien no autorizado consiguiese acceso al servidor este podría exportar un certificado PKCS#12 con la clave privada y generar su propia passphrase.

Saludos!

4 comentarios

  1. disculpa sabes que estaba revisando en mi wireskar ultima version pero no aparece pa opcion de protocolo ssl ni https

    ResponderEliminar
    Respuestas
    1. Hola,

      En las nuevas versiones por lo que veo cambio a TLS. (Preferences > Protocols > TLS).

      Saludos!

      Eliminar
  2. Hola, "verla"?, si te refieres a ver una credenciales de acceso a un sitio web, tendría que capturar el momento de inicio de sesión, siempre cuando tengas el certificado en un entorno controlado (o corporativo controlado). Si esas credenciales tienen un 2FA podrías capturar el código pero tendría que ser todo tan rápido antes de que expire, lo cual sería prácticamente imposible que repliques un inicio de sesión simultaneo.

    Ahora bien, lo que si puedes capturar en plano serían las cookies de sesión, quizás podrías tirar por ahí, aunque esto dependerá mucho de como esté desarrollado y la forma del tratamiento de cookies de sitio web.

    Un saludo.

    ResponderEliminar
  3. Hola. Mi nombre es Sergio Scazzola. Tengo un certificado pfx que utilizo para emitir factura electronica (AFIP) y quiero utilizarlo para el mismo sistema que estoy desarrollando en Java. En Java tengo que utilizar un certificado p12. Pregunta : cómo hago para transformarlo. Tengo entendido que son casi lo mismo.

    ResponderEliminar

Entradas Populares