06 febrero 2012

Interceptar con un proxy peticiones SSL de un iPhone


Como hemos repetido incansables veces, una de las partes más importantes de auditar aplicaciones móviles es auditar los servicios web con los que interactuan. Si la comunicación se hace utilizando HTTPS, no basta con configurar el proxy en el móvil, ya que las aplicaciones nativas hacen llamadas a la API exigiendo que el certificado sea válido.

La forma más sencilla de interceptar estas comunicaciones es añadiendo un certificado de confianza siguiendo los pasos que se describen a continuación:

1.- Se arranca el servidor proxy, en este caso "burp" y configurado para que genere certificados SSL:

Opciones del proxy Burp
2.- Usando Firefox se visita cualquier página en https para que muestre error de certificado y se pueda exportar mediante la opción de añadir una excepción, ver, pestaña detalles,  y pulsando sobre PortSwigger CA , darle a Exportar. El fichero generado ha de tener extensión ".cer" para luego ser importado en el móvil.

Exportar certificado de PortSwigger CA con Firefox
3a.- Una vez exportado se puede importar de tres formas distintas. La primera y más sencilla es mandar un correo adjuntando el archivo a nuestra propia dirección y cuando se reciba, abrir el adjunto para instalarlo tal y como se muestra en las tres capturas siguientes.

Correo electrónico con certificado adjunto

Propiedades del certificado previa instalación

Certificado finalmente instalado
3b.- Otra opción alternativa para añadir el certificado es utilizar la utilidad de Apple "Iphone Configuration Utility", añadiendo un nuevo perfil.


3c.- La última opción es colgar el certificado en un servidor web y acceder mediante Safari para descargarlo, lo que proporcionará el menú de instalación igual a la primera opción.


4.- Una vez instalado el certificado, se configura el proxy en los ajustes de la Wifi:


Una vez terminado el trabajo, se elimina desde Ajustes->General->Perfil->Eliminar.

Ajustes generales

3 comments :

Rodolfo dijo...

Otra vez muy buen tutorial, dan ganas de ponerse a fedellar con el iphone!

Anonymous dijo...

Realmente bueno.

Gracias.

vierito5 dijo...

Faltan unos cuantos casos interesantes:

1: Cuando es una aplicación diseñada para no obedecer al proxy: aquí el truco es redigir el destino siempre a localhost siempre (con el fichero hosts o una regla de iptables) y luego poner proxies transparentes escuchando en localhost en cada puerto (donde haces el MITM) y luego redireccionarlos a los hosts que deberían ir.

2: Cuando la aplicación comprueba el certificado en concreto de servidor que espera y solo acepta ese. Dependiendo de como funcione esa app varía, igual lo más sencillo es parchear las funciones, o igual cambiar los valores del certificado si va hardcodeado y tiene la misma longitud (para no liarla con offsets del binario) o modificar los resources que usa el programa y reempaquetarlo, etc. Y bueno, si es una auditoría de código, pues te compilas tu propia versión con tu certificado.