iPhone Pairing Detector: Detectando la confianza entre tu iOS y tu host

El fichero de confianza que genera iTunes es un plist que almacena información interesante y que permite que iTunes pueda acceder al contenido del iPhone al conectarlo al equipo, sin necesidad de generar confianza o de introducir el Passcode. En otras palabras, cuando un iTunes es marcado como de confianza, el dispositivo conectado se dejará observar y manipular por este iTunes. Si nosotros conectamos nuestro iPhone o iPad a un equipo de no confianza y confiamos en dicho equipo deberíamos tener en cuenta que, una vez desconecte el dispositivo, debería desparear o hacer perder dicha confianza entre mi iPhone y el equipo.

Lo primero que hice fue buscar la ruta dónde se almacena, tanto en OS X como en Windows, el fichero de confianza entre dispositivo y equipo. La ruta en Windows es %programdata%/Apple/Lockdown, mientras que en OS X la ruta es /var/db/lockdown.


En estas rutas encontraremos dos tipos de archivos. El primer tipo es denominado SystemConfiguration.plist. Este archivo contiene el SystemBUID.plist, el cual es un token que se comparte entre el equipo anfitrión y los dispositivos que se conectan y con los que se genera la confianza. El segundo tipo de archivo es el fichero de confianza por sí. Es almacenado con el siguiente nombre [UDID dispositivo].plist. Es decir, por cada dispositivo con el que se genera confianza se almacena un fichero en el que se indica el UDID del dispositivo y tiene extensión PLIST.

Con el UDID del dispositivo se pueden hacer cosas interesantes, ya que se podría preparar una aplicación para dicho dispositivo e intentar que la víctima instalara la aplicación. El UDID permite crear un provisioning profile, el cual si se instala en el equipo podría ejecutar dicha aplicación creada. Podemos ver el UDID de un dispositivo como un elemento interesante de cara a un APT.



En estos archivos se puede encontrar información interesante como el UDID, visto anteriormente, la Mac WiFi y, por consiguiente, la Mac Bluetooth del dispositivo y los certificados generados para dicha confianza. Otra de las pruebas a realizar es ver la posibilidad de copiar un fichero de confianza y llevarlo a otro equipo. Si esto funcionaría podríamos transferir la confianza entre dos equipos, sin que el dispositivo se diera cuenta. Esto es un problema, ya que se podría conseguir acceso al dispositivo, gracias a este tipo de archivos, por lo que, con acceso al equipo de un individuo, se podría acceder a la información del dispositivo.



Generando la PoC



Lo primero fue hacerse un script sencillo en Ruby que me permitiera listar los dispositivos iOS que hubieran sido conectados y generado confianza con ellos en un equipo. El objetivo era listarlos y sacar algunos datos de interés, por ejemplo, su MAC de la WiFi y su MAC del Bluetooth, que es siempre un valor más en la dirección MAC de la WiFi.

El corazón del script es realmente sencillo. En la imagen se puede ver la parte de parseo del PLIST, es decir, no es el script completo. Del nombre del fichero listado se obtiene el UDID y en el parseo del PLIST se puede obtener el resto de información, en este caso la dirección MAC de la WiFi.  



Si lanzamos el script contra una máquina OS X podemos observar que la máquina tiene una serie de dispositivos iOS de confianza almacenados. El script hace un parseo rápido y obtiene información de ellos. Además, se nos ocurrió la posibilidad de utilizar esta información para alertar al usuario y poder eliminar dicha información antes de desconectar su iPhone o iPad.


Metasploit y un nuevo módulo de Post-Explotación

Al ver el script en funcionamiento, Chema me comentó “Metasploit”. Es un claro ejemplo de módulo de Metasploit para la post-explotación de un sistema. ¿El usuario del sistema tiene dispositivos iOS? ¿Pueden ser un vector de ataque? ¿Tendrá accesible la información de confianza? Con un script de Meterpreter que permita localizar estos ficheros y parsear la información sería suficiente para aprovecharse de un sistema comprometido.

Al pasar el script a un script de Meterpreter, uno puede aprovecharse de algunas clases que Meterpreter ofrece y simplifican, en gran medida, el desarrollo y el potencial de los scripts. A continuación, se puede ver como el script ha sido migrado y logramos un comportamiento similar al anterior.


Además, podríamos incorporar de manera sencilla, mediante el uso del objeto client, la posibilidad de descargar automáticamente a nuestra máquina dichos ficheros, por ejemplo, con client.fs.dir.donwload(ruta fichero). El módulo puede encontrarse en mi Github, aunque se encuentra en versión beta y preliminar. Es realmente sencillo de modificar y ampliar funcionalidades.

En la imagen, se puede ver un trozo de código del script. El funcionamiento del script es sencillo:

·      Comprueba la plataforma. Aunque ahora mismo la versión subida, solo es para Windows, sería muy sencillo modificarlo para que en función de si es OS X o Windows se cargue una ruta u otra.
·      Una vez detecta que es Windows lista los ficheros que hay en la ruta dónde se almacenan los ficheros de confianza.
·      Se obtiene el UDID de los ficheros de confianza.
·      Se procesan los archivos y se obtiene el SystemBUID.

Ampliar la funcionalidad para que los ficheors con UDID se descarguen es sencilla, como se mencionó anteriormente. Por otro lado, también se podría promover el borrado de dicha información con el objetivo de fortificar y no dejar olvidado tu fichero de confianza, aunque esta funcionalidad, en este contexto, no tendría sentido y sí lo tendría en una tool de fortificación.

En resumen, un nuevo módulo que ayuda a recopilar información sobre un host en un proceso de post-explotación. Si quieres ampliar la funcionalidad, tienes disponible el módulo en mi fork de Metasploit en mi Github. En Eleven Paths hicimos una herramienta llamada iDevice Paired que permite detectar este tipo de ficheros en tu equipo y eliminarlos cuando desconectes tus iDevices. Puedes descargarla en el Github de Eleven Paths.