16 enero 2013

Control de certificados permitidos en IOS


Hace tiempo explicamos cómo se podía hacer análisis de seguridad de las peticiones web que hace una aplicación de iOS instalando una CA  en el propio móvil. Aunque en la  gran mayoría de casos el método funcionará, en otros el tráfico no será transmitido tal y como se espera, ya que la aplicación verificará que el certificado que recibe está firmado por una CA concreta, desconfiando de cualquier otro tipo de certificado recibido, sea o no válido.

Para llevar a cabo ese control (que roza la seguridad por oscuridad), se hace de dos formas distintas: definir exactamente el certificado que se espera recibir, sacando de la ecuación a la CA o limitando las firmas válidas a una CA determinada. 

Las funciones que se usan para trabajar con SSL son tres: NSStream, CFStream, NSURLConnection, siendo esta última la más usada. 

NSURLConnection usa varios métodos delegados para obtener los valores y poder hacer la comprobación de los parámetros, como didReceiveAuthenticationChallenge, canAuthenticateAgainstProtectionSpace o willSendRequestForAuthenticationChallenge.

Por ejemplo, twitter hace uso de este método para evitar ataques man in the middle, y se puede intuir el "pinado" del certificado en el volcado de su aplicación.
Volcado de class-dump-z de la aplicación de Twitter.

En esos casos, la estrategia debe ser distinta. Usar un debugger y cambiar el comportamiento, recompilar la aplicación o hookear esas funciones.

Con este objetivo iSEC Partners ha creado IOS SSL Kill Switch, un pequeño tweak de MobileSubstrate que realiza esta tarea. Para usarlo, como es obvio, se requiere que el teléfono tenga jailbreak.

La instalación es sencilla, se instala el paquete deb correspondiente y se reinicia el proceso de MobileSubstrate.

Instalación de IOS SSL Kill Switch

Una vez instalado, se aparecerá una nueva configuración dentro de los ajustes para habilitarlo o deshabilitarlo.

Ajustes de SSL Kill Switch

Actualización 10/2/2013:
Otra herramienta que parchea a un nivel más bajo: https://github.com/intrepidusgroup/trustme

Referencias:

2 comments :

Jorge dijo...

Perdonen mi ignorancia. Y esto para que puede servir ?

Alejandro Ramos dijo...

Para interceptar el tráfico (y manipularlo) de una aplicación móvil que verifica que el certificado del SSL es el que debe ser y no uno que se ha creado.