Curioseando tráfico HTTPS en aplicaciones Android

En la pasada Rooted, estuve hablando unos minutos con Sebastián Guerrero y le pregunté como hacía él para descifrar el tráfico cifrado que enviaban las aplicaciones. Me comentó que la forma más fácil para él, era modificar la aplicación para que mostrara las peticiones que se estaban enviando. Esta me parece una buena opción cuando se está analizando una aplicación en concreto, pero me parece un poco engorrosa si solo quieres curiosear que es lo que están enviando tus aplicaciones.

El problema en las aplicaciones de Android reside en que si intentas hacer un man-in-the-midle y el certificado no está firmado por una CA de confianza, no aparece ningún mensaje para que decidas confiar o no en ese certificado, sino que directamente no deja establecer la comunicación.

Con este problema, empecé a buscar alguna solución y encontré la pareja mitmproxy y proxydroid. La primera de ellas como bien indica su nombre, se trata de un proxy con capacidades de realizar ataques mitm. Es muy similar a Burp o ZAP, pero para línea de comandos. Está escrita en python y permite modificar tráfico automáticamente mediante scripts. La segunda es una aplicación que instalaremos en nuestro móvil y que añadirá reglas en el firewall para redirigir todo el tráfico HTTP/S hacia mitmproxy.

Para montar nuestro laboratorio, primero deberemos instalar en nuestra máquina mitmproxy. En Debian/Ubuntu se puede hacer con:

# apt-get install python-pip
# pip install mitmproxy

Una vez instalado, iniciamos mitmproxy para que nos genere la CA. Los certificados los podemos encontrar en /home/usuario/.mitmproxy/. En nuestro caso, nos interesa el archivo mitmproxy-ca-cert.cer que tendremos que copiar a nuestro dispositivo Android en la carpeta /sdcard/Downloads/. Una vez copiado el certificado en la memoria del teléfono, ya lo tenemos casi hecho. Para instalarlo en Android 4 (En otras versiones no debe diferir mucho) hay que ir a Ajustes -> Seguridad -> Instalar desde almac dispositivo. Nos aparecerá un popup con los datos y a partir de este momento podremos ver el certificado en el apartado Credenciales de confianza

Hecho esto, cuando mitmproxy genere los certificados para cada sitio, la CA que acabamos de instalar le garantizará al móvil que son confiables y podremos descifrar el tráfico.

Ahora solo nos queda redirigir todo el tráfico hacia nuestra máquina para analizar ese tráfico cómodamente. Para ello, utilizaremos proxydroid (necesitamos ser root), y lo configuraremos mínimamente con la dirección IP donde está corriendo el mitmproxy, el puerto y el tipo de proxy:

Ahora solo nos queda arrancar mitmproxy y empezar a jugar:

Para no arruinar la diversión, os remito a la web de mitmproxy.org para que veáis como se pueden modificar las peticiones a mano o con scripts.

Comments

  1. Buena entrada David y muy muy útil de cara a analizar aplicaciones desde móviles.

  2. http://David%20Lladro says

    Traslado aquí la pregunta que nos ha hecho David Echarri por Twitter:
    “¿Sabéis de algo similar para iphone/ipad?.Thx”

    En el caso de usar un iphone/ipad hay que instalar el certificado al igual que en Android. Aquí está la forma de hacerlo: http://mitmproxy.org/doc/certinstall/ios.html
    Luego habría que configurar el proxy del iphone/ipad para que apuntara al mitmproxy.

    Un saludo.

    P.D. Gracias Joaquín

  3. Muchas gracias por la entrada. Justamente estoy haciendo análisis de aplicaciones android y estaba buscando algo similar para poder visualizar el tráfico que envían las aplicaciones.

  4. http://alfredo says

    En mi galax 2 no puede abrir carpetas de https//mail.ferreyros.com. que aplicaciones me recomiendas para abrir mi correo

  5. Muy util pregunto si valdrá para detectar si tienes algún tipo de malware que esté monitoreando tu móvil.

  6. Descubri que tengo un sistema falso. Como hago para quitarlo e instalar el oficial. “Certificados de Confianza” totalmente falsos. He llevado tanto la tab y celular ambos Samsung Galaxy. Resultado: Nulo y lo que es peor, borraron todos mis documentos impirtantes