Configurar la solución de dos proxy con mitmproxy para la investigación de dispositivos móviles de Facebook

Cuando Meta implementó el protocolo TLS 1.3 en sus apps para celulares para aumentar la seguridad de extremo a extremo, algunos investigadores de seguridad descubrieron que ya no podían interceptar el tráfico de las apps para celulares de Meta, como Facebook, con Burp Suite, incluso cuando usaban la configuración de Whitehat. Mientras seguimos diagnosticando este problema (creemos que está relacionado con un error de JDK en el análisis de registros TLS), queríamos publicar una solución alternativa que permitiera a los investigadores usar Burp Suite para las pruebas de apps para celulares.

Usar mitmproxy como proxy alternativo

mitmproxy es un servidor proxy conocido que puede realizar muchas funciones útiles, como grabar el tráfico que pasa por el proxy, interceptar, asociar/reemplazar, manipular el tráfico, etc.

Durante nuestras pruebas, descubrimos que mitmproxy pudo transmitir el tráfico desde la app de Facebook para celulares con su configuración predeterminada, sin cambios especiales. Si bien solo sirve para inspeccionar el tráfico, mitmproxy es una buena opción para los investigadores que solo quieren supervisar el tráfico fuera de Burp Suite.

Sin embargo, sabemos que muchos investigadores se sienten a gusto con Burp Suite y utilizan el ecosistema de plugins para crear funciones de investigación avanzadas. Afortunadamente, mitmproxy puede ofrecer una solución a los investigadores mediante su configuración de proxy ascendente.

Usar mitmproxy con Burp como proxy ascendente

En esta configuración, usamos mitmproxy como una capa proxy que degradará el tráfico TLS 1.3 entrante a TLS 1.2 y, luego, lo reenviará a Burp. La cadena se ve así:

Imagen de cómo mitmproxy actúa como una capa proxy entre un dispositivo móvil y Facebook

Usaremos los siguientes puertos:

  • mitmproxy escuchará en el puerto 8645.
  • Burp Proxy escuchará en el puerto 8646.
  • El dispositivo móvil se conectará al proxy en el puerto 8645.

Ejecutaremos mitmproxy con los siguientes argumentos de línea de comandos. De esta manera, se configurará un agente de escucha en el puerto 8645 y se garantizará que el tráfico proxy que salga de mitmproxy use solo TLS 1.2 (el tráfico que se envía a Burp Proxy).

mitmproxy --mode upstream:http://127.0.0.1:8646 --set tls_version_server_min=TLS1_2 --set tls_version_server_max=TLS1_2 --ssl-insecure -p 8645

Configuraremos Burp Proxy en el puerto 8646 de la forma habitual.

Configuraremos la app de Facebook para celulares a través de la configuración de Whitehat para "Proxy para solicitudes de la API de la plataforma" en <lab machine IP>:8645 p. ej. 10.10.11.159:8645 y nos aseguraremos de que la fijación de certificados esté desactivada con la opción "Permitir certificados descargados por el usuario" activada. Ten en cuenta que, con esta configuración, la opción de TLS 1.3 no es relevante y se puede dejar en el valor predeterminado.

Imagen de cómo configurar la opción "Whitehat" en la app de Facebook para celulares

Asegúrate de instalar el certificado de CA de mitmproxy en el dispositivo según estas instrucciones.

Una vez reiniciada la app de Facebook, deberías ver el tráfico pasando tanto a mitmproxy como a Burp Suite.

Imagen que muestra el tráfico que fluye a mitmproxy y Burp Suite