miércoles, marzo 08, 2017

¿Qué iPhone has pareado a tu Windows o tu macOS/OSX?

Con la resaca de DirtyTooth aún presente y con una nueva charla en RootedCON disfrutada, seguimos trabajando en ElevenPaths y LUCA D3 para innovar, investigar y jugar con la tecnología diariamente. La semana antes de la charla de DirtyTooth  Chema Alonso me pidió que mirase cómo se guarda el Trusted File que genera Apple iTunes por cada dispositivo iPhone que conectamos y el equipo Windows o macOS  al que se conecta.

Figura 1: ¿Qué iPhone has pareado a tu Windows o tu macOS/OSX?

Estos pareados pueden ser peligrosos para los terminales iPhone, que pueden ser atacados como se explica en el libro de Hacking iOS: iPhone & iPad desde el equipo Windows o macOS pareado, y Chema Alonso quería que trabajásemos en una herramienta de despareado seguro. En esta charla con casi medio millón de visualizaciones cuenta más detalles de estos riesgos de parear el terminal con un equipo.


Figura 2: Tu iPhone es tan (IN)Seguro como tu Windows

El fichero donde se almacena es de tipo PLIST, en el que se almacena información interesante y que permite que el programa Apple iTunes pueda acceder al contenido del iPhone al conectarlo al equipo después de que este haya sido pareado,  sin necesidad de generar un nuevo proceso de confianza o de introducir el passcode.

En otras palabras, cuando una aplicación de Apple iTunes es marcada como de confianza, el dispositivo conectado se dejará observar y manipular por este equipo. Si nosotros conectamos nuestro dispositivo 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.

Figura 3: Proceso de pareado con equipo y confianza con el mismo

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

¿Qué hay en esas rutas?

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 en 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.

Figura 4: Archivos en /var/db/lockdown

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 por medio de un troyano para iPhone.

¿Qué hay dentro de los archivos PLIST?

En estos archivos se puede encontrar información interesante como el UDID, visto anteriormente, la MAC Address de la tarjeta de red WiFi y, por consiguiente, la MAC de la tarjeta 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.

Figura 5: Sección de un fichero PLIST con información del pareado

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 para analizar los dispositivos iOS pareados

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  dirección MAC de la  tarjeta WiFi y la dirección MAC de la tarjeta BlueTooth, que es siempre suele ser un valor más en la dirección MAC de la WiFi.

Figura 6: Las direcciones MAC WiFI y MAC BlueTooth suelen diferir en un bit en los iOS 

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.

Figura 7: Script para parsear la dirección MAC de la WiFi en el fichero PLIST

Si lanzamos el script contra una máquina macOS/OSX 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.

Figura 8: Ejecución del script en Ruby para descubrir los terminales iOS pareados

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,  el boos me sugerió que lo hiciera para 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 migrar el script a 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 código ha sido migrado y logramos un comportamiento similar al anterior.

Figura 9: Ejecución de script para descubrir dispositivos iOS pareados en Metasploit

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.

Figura 10: Código del módulo de Metasploit de iPhone Pairing Detector

En la imagen, se puede ver un trozo de código del script. El funcionamiento del script de iPhone Pairing Detector 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 ficheros 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 asegurar el sistema 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 herramienta de fortificación.

Figura 11: Libro de Hacking iOS "iPhone & iPad"

En resumen, un nuevo módulo que ayuda a recopilar información sobre un equipo 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.

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell

1 comentario: