jueves, 18 de diciembre de 2014

Como capturar tráfico en dispositivos iOS

Buscando información de como instalar aplicaciones en iOS, e indagando un poco sobre el funcionamiento del Jailbreak y los posibles fallos de seguridad del propio sistema de apple para dispositivos, encontré la manera de poder capturar el tráfico en sistemas iOS.
¿Qué es lo que se consigue capturando el tráfico en un iPhone/iPad? Ver todos los los paquetes de las conexiones que se realizan sin necesidad de tener que emular el sistema Operativo como tal desde un entorno de desarrollo como Xcode.
Por lo general cuando queremos hacer pruebas de seguridad en dispositivos móviles lo que se suele hacer es, o bien emular el propio iOS a partir del Xcode, o bien cambiar el User Agent del navegador o de la herramienta de turno.
De la manera que voy a explicar, lo que se va hacer es capturar todo el tráfico real del dispositivo físico. Con todo lo que conlleva eso.

Para poder capturar el tráfico de cualquier dispositivo iOS necesitamos los siguientes requisitos:
  • Tener instalado xcode
  • Tener instalado las Command Line Tools
Para instalar xcode basta con descargarlo de la propia AppStore (es gratis).
Y en el caso de la instalación de las Command Line Tools necesitamos ejecutar el siguiente comando en el terminal xcode-select --install.
En versiones anteriores las Command Line Tools se podían descargar desde la propia página de Developers de apple. Actualmente para instalarlas hay que ejecutar ese comando tras haber instalado previamente xcode. El propio asistente de OS X descargará las CLT de los servidores de Apple y lo instalará. 

Eso sí, para que todo funcione correctamente debemos aceptar la licencia de políticas de Apple, basta con abrir una sola vez xcode para que nos muestre dicha licencia, aceptamos, y listo.

Una vez hecho todo esto tendremos alguna que otra herramienta pensada para desarrolladores que nos puede venir bien.

En concreto nosotros utilizaremos la herramienta rvictl instalada con CLT, con la que podremos crear un interafece virtual.

Antes de comenzar a explicar parámetros y comandos, voy a comentar cual será todo el proceso a realizar para que se entienda perfectamente lo que estamos haciendo.

Lo que haremos para poder capturar el tráfico será conectar el dispositivo a nuestro Mac mediante USB, posteriormente crearemos una interface virtual, y através de ésta esnifaremos el trafico que pase por ella. Que será el propio de las conexiones que realiza el iOS.

Para poder crear una interface virtual de nuestro dispositivos debemos identificar su UDID. esto lo podmeos obtener desde el propio iTunes

Img 1: UDID del dispositivo. A través de iTunes

Una vez que lo tenemos, utilizamos rvictl (Remote Virtual Interface Tools), para crear una interface virtual con el siguiente comando rvictl -s <UDID>.
Esto creará una nueva interface del tipo rvix

Img 2: Interface nueva creada con rvictl

rcictl nos mostrará un mensaje indicando que la interface se creó correctamente. Nosotros podemos comprobarlo lanzando un ifconfig donde se mostrarán todas las interface instaladas en nuestro sistema OS X.

Img 3: Salida del ifconfig. Mostrando la nueva interface rvi0

Ahora que ya tenemos la interface creada, podemos imaginarnos que si cogemos cualquier programa para esnifar tráfico, podremos ver los paquetes que circulan por dicha interface.

Un claro ejemplo de esto puede ser utilizar TCPDUMP que ya viene instalado por defecto en OS X o utilizar wireshark. Ambas han de ejectarse con permisos root.

Img 4: Captura de tráfico del iPhone con Tcpdump

Bien, sabiendo esto, podemos probar a ver qe tipos de conexiones hace iOS. Por ejemplo, podemos probar a ver que tipo de conexiones realiza cuando se realiza una conexión OTA. Otro ejemplo es ver a qué servidores se conecta nuestro dispositivo cuando se abren aplicaciones del tipo Navegación GPS.
No es lo mismo emularlo, que verlo en real.

La información principal la saqué del blog del desarrollador @kharrison. Él es el encargado de descubrir esta fabulosa manera de capturar el tráfico.