Examinando tráfico HTTPS

Hola

SSL se inventó para proteger el tráfico HTTP de miradas indiscretas y malintencionadas. Al igual que pasa con el cada día más utilizado SIP, no es necesario tener demasiados conocimientos ni herramientas muy complejas para saber qué información se está intercambiando simplemente echando una ojeada a las tramas en texto claro.

SSL es un ejemplo clásico de doble cifrado en el que el intercambio de la clave simétrica que se utilizará para cifrar el flujo de datos se protege a su vez con cifrado asimétrico. Aquí está muy bien explicado:

https://support.microsoft.com/kb/257591/en-us

Me ha dado por contar esto por dos razones. La primera es porque SSL es un engorro a la hora de diagnosticar problemas u obtener información acerca del intercambio de datos entre cliente y servidor, ya que el clásico método de capturar el tráfico de red es inútil al estar los datos cifrados. La segunda es porque esto que voy a contar es una de las cosas que una pieza de malware para obtener datos privados y enviarlos a aquel a quien sirve.

Por lo general esto mismo de suele hacer mediante herramientas que usan técnicas de "man in the middle", que falsean el certificado que presenta el servidor al cliente, permitiendo el descifrado y cifrado del flujo de datos en tiempo real y que permiten a la herramienta. Sin embargo, lo que hacen las herramientas que vamos a utilizar es inyectar una dll en el proceso que va a utilizar SSL, de manera que se interceptan las llamadas a EncryptMessage y DecryptMessage (secur32.dll) además de algunas otras de Windows Sockets (ws2_32.dll / wsock32.dll) y se guardan en un log. Esto permite sacar los datos de la conversación cifrada no solamente de Internet Explorer, sino de cualquier otro navegador, aplicación o servicio que usen SSL.

Estas herramientas son STRACE y HTTPREPLAY, desarrolladas por Emmanuel Boersma, y que se pueden descargar gratuitamente de la web de Microsoft. Solo están soportadas para x86 y al instalarlas simplemente se copian los ficheros necesarios en  %ProgramFiles%\STRACE y %ProgramFiles%\HTTPREPLAY respectivamente. En ambos casos hay un Readme.txt con las instrucciones detalladas.

Para capturar el tráfico, hay que hacer lo siguiente (dependiendo del entorno, es posible que tengamos que usar STRACE.dll_IE6 en ligar de STRACE.dll_IE7):

  • Si queremos utilizar IE: Ejecutar el script STRACE.CMD
  • Si queremos usar Firefox: Ejecutar el script STRACE_FIREFOX.CMD
  • Si queremos usar una aplicación que usa SSL: withdll /d:STRACE.dll_IE7 MYAPPLICATION.EXE
  • Si queremos inyectar la DLL en un proceso ya existente: injdll /p:PID /d:STRACE.dll_IE7

Esto nos generará automáticamente un LOG en el escritorio con todo el tráfico en texto claro, bastante incómodo de interpretar. Es aquí donde entra en juego HTTPREPLAY, cuya misión es la de "recrear" el tráfico generado sin que el servidor web esté presente y sin necesidad de tener que montar uno alternativo. Aqui solamente lo vamos a utilizar para echar un vistazo al tráfico almacenado en el log de una manera más amigable:

  • HTTPREPLAY.CMD %userprofile%\desktop\STRACE_IEXPLORE_PID_10032.log

En este ejemplo he intentado hacer login en Live.com con una cuenta de passport, obviamente falsa:

image

Simplemente haciendo clic sobre los métodos se ve la información completa de la traza, y lo mismo con el status para ver las respuestas. Por ejemplo, el usuario y la contraseña utilizados en el formulario están en el POST:

SSL-Live

Por último, algunos temas relacionados con esto:

Saludos

David Cervigón

Technorati tags: Emmanuel Boersma, SSL, STRACE, HTTPREPLAY