Los mensajes HTTP normalmente no se envían en texto sin formato en el mundo posterior a Snowden. En su lugar, el protocolo TLS se utiliza para proporcionar seguridad en las comunicaciones contra la manipulación y vigilancia de las comunicaciones basadas en el protocolo HTTP. TLS en sí mismo es un protocolo bastante complejo que consta de varios subprotocolos, pero pensemos en él como una capa cifrada y autenticada sobre la conexión TCP que también realiza una verificación del servidor (y, opcionalmente, del cliente) a través de la criptografía de clave pública.
En este blog, hemos discutido anteriormente la configuración de mitmproxy para interceptar las comunicaciones HTTPS entre las aplicaciones móviles y sus sistemas de back-end. Sin embargo, es posible que también queramos ver qué aplicaciones de escritorio se están comunicando. Además, es posible que queramos profundizar en la ingeniería inversa de API privadas para aplicaciones web y nos gustaría superar las limitaciones de Chrome DevTools. Aquí es donde recurrimos a Wireshark , una herramienta GUI para la detección y el análisis de paquetes. Podemos utilizar esta herramienta para profundizar en lo que hace exactamente una aplicación en la red.
Sin embargo, si tratamos de olfatear HTTPS sin ningún tipo de preparación, no podremos ir muy lejos, ya que el protocolo TLS está haciendo su trabajo para evitar que los adversarios lean el contenido de la comunicación oliendo la red.
Sin embargo, si controlamos uno de los puntos finales (es decir, el sistema de escritorio con un navegador web), podemos establecer SSLKEYLOGFILE
la variable de entorno en una ruta de archivo de texto al que podamos acceder. El software que implementa TLS generalmente (aunque no siempre) escribirá claves y otros secretos de TLS en este archivo. Esto se aplica a curl, Chrome, Firefox y muchas aplicaciones de escritorio que usan bibliotecas NSS/OpenSSL. Wireshark, si está configurado correctamente, podrá leer este archivo y descifrar los paquetes TLS interceptados. Esta es una captura del lado del cliente de claves de sesión.
¿Cómo establecemos exactamente la variable de entorno? Esto depende del sistema operativo y de si queremos o no cubrir todas las aplicaciones que están instaladas. En Linux/Unix que usa Bash, simplemente podríamos poner la siguiente línea en el archivo ~/.bashrc o ~/.bash_profile:
export SSLKEYLOGFILE=~/.sslkeyfile
Sin embargo, esto solo cubrirá el programa lanzado directamente desde el shell. En Linux, podríamos editar /etc/environment (o /etc/profile) y reiniciar para configurar la variable de entorno globalmente.
En macOS es algo más complicado. Primero, debemos verificar si existe el directorio ~/Library/LaunchAgents y crearlo bajo nuestro usuario habitual si no existe. Luego creamos un archivo de lista de propiedades (por ejemplo, tlskeylogger.plist) con los siguientes contenidos:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>sslkeylogger</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv SSLKEYLOGFILE ~/.sslkeyfile
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Para cargarlo en el próximo reinicio, ejecutamos el siguiente comando:
$ launchctl load ~/Library/LaunchAgents/tlskeylogger.plist
Para hacerlo inmediato, ejecutamos lo siguiente:
$ launchctl start ~/Library/LaunchAgents/tlskeylogger.plist
En Windows, puede configurar SSLKEYLOGFILE
la variable de entorno a través de la GUI buscando "Editar variables de entorno para su cuenta" en el menú de Windows y creando una nueva variable de entorno para el usuario actual.
Una vez hecho esto, debemos reiniciar el navegador y/u otro software que se comunique a través de HTTPS. Si todo está bien, el archivo debería comenzar a llenarse con líneas similares a las siguientes:
# SSL/TLS secrets log file, generated by NSS
CLIENT_HANDSHAKE_TRAFFIC_SECRET 7f6e75485ed674e16c83481963f9d65a072c113069d3349639018cdebe5ec154 8cc7626c1516d379e7ba10334b7161b1b95ee2b4455513289ee031d78c007038
SERVER_HANDSHAKE_TRAFFIC_SECRET 7f6e75485ed674e16c83481963f9d65a072c113069d3349639018cdebe5ec154 9cfb00bc3004427de3bbfe005fb32d835cf56ff3c24c3299f5c817f8c8774f0f
CLIENT_RANDOM bea906bf19bf67d0ef1ff7de604f470a73e4ad00a89f62c51adc903c78836342 aadd7d3defb78946d1a22992c9ede2b00a7a4f3add8ce2a3252000818c031887a044358e40665807d6ec813f2fb8d173
CLIENT_TRAFFIC_SECRET_0 7f6e75485ed674e16c83481963f9d65a072c113069d3349639018cdebe5ec154 da25a93b3167179088ebf35b8415bd4f48f0e558ee7db442ed83fba1e31693b9
SERVER_TRAFFIC_SECRET_0 7f6e75485ed674e16c83481963f9d65a072c113069d3349639018cdebe5ec154 4de128f1ab06148bb9faee99e3be590a1c9fd27261dc255de8ec7d59bfa2eccd
EXPORTER_SECRET 7f6e75485ed674e16c83481963f9d65a072c113069d3349639018cdebe5ec154 b1f5242bfe9853f78c41358e602ab6417864ca7fb05f3f5715a641bf263102bd
...
Estamos listos para configurar Wireshark ahora. Esto es bastante simple. Todo lo que tenemos que hacer es ir a (Editar ->) Preferencias -> Protocolos -> TLS y poner el valor de SSLKEYLOGFILE
en "(Pre-)Nombre de archivo de registro secreto maestro". También debe marcar las casillas de verificación sobre cómo volver a ensamblar los registros TLS y los datos de la aplicación.
Esa es una forma. Otra forma es comenzar a olfatear, hacer clic derecho en un paquete TLS, luego elegir "Preferencias de protocolo -> Seguridad de la capa de transporte -> (Pre-) Nombre de archivo de registro secreto maestro" y hacer clic en eso. Wireshark abrirá un campo de texto en la parte superior para permitirle ingresar una ruta al archivo que necesita leer para descifrarlo.
Ahora podemos ver los mensajes HTTPS descifrados. Esto incluye algunas llamadas a la API que Google Chrome realiza cuando vuelve a llamar a la nave nodriza, así como solicitudes al backend de Discord por parte de un cliente de escritorio de Discord.
Esto abre posibilidades no solo para la ingeniería inversa de las API privadas de aplicaciones web de una manera más profunda, sino también para hacer el mismo tipo de investigación contra las aplicaciones de escritorio para fines como el raspado de datos, la automatización, la investigación de vulnerabilidades y el análisis de privacidad.
Fuente: https://www.trickster.dev/post/decrypting-your-own-https-traffic-with-wireshark/
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
Buscador