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.