Análisis Forense a dispositivos iOS, Paso a Paso - Parte 2
Continuando con nuestra iniciativa de documentar paso a paso y en español el proceso de realizar el análisis forense a un dispositivos iOS, presentamos la segunda entrega de esta serie de artículos (ver primera parte), en esta entrega veremos como recuperar las contraseñas del llavero (keychain) de iOS, como realizar la copia bit a bit y la copia logica de los dispositivos moviles de apple.
Recuperando contraseñas del llavero en dispositivos iOS
Continuando con las herramientas que conforman el iPhone Data Protector, el script demo_bruteforce.py no se limita solamente a obtener el código de bloqueo del dispositivo. Después de tenerlo y ya “entrado en gastos” este script en python descarga el “llavero” o keychain del dispositivo, una base de datos en SQLite con nombre keychain-2.db donde se almacenan todas las contraseñas, certificados y datos personales que el usuario del dispositivo ha guardado en el, esta información se encuentra cifrada, pero podemos descifrarla fácilmente con la herramienta keychain_tool.py
keychain_tool.py puede extraer mucha información de interés del llavero, desde las contraseñas en texto plano almacenadas en él, pasando por los certificados que se han usado en el dispositivo e incluso los códigos de bloqueo anteriores utilizados en el equipo. Para que keychain_tool.py nos muestre la información que deseamos, sólo debemos ejecutarlo con el parámetro adecuado:
.
Parámetro | Función |
-h, --help | Muestra un mensaje de ayuda con las diferentes opciones del script y un ejemplo de uso |
-d, --display | Muestra todo el contenido del llavero decifrado en texto plano como una salida estandar de consola |
-s, --sanitize | Igual que -d sólo que ocultará las contraseñas con asteriscos (*) |
-p, --passwords | Guarda las contraseñas genéricas y de internet en un archivo CSV |
-c, --certs | Extrae todos los certificados y llaves |
-o, --old | Extrae utilizando fuerza bruta los códigos de bloqueo anteriores utilizados en el dispositivo |
Modo de uso | |
python python_scripts/keychain_tool.py -Parámetro ruta/keychain-2.db ruta/Manifest.plist |
.
Generando copia bit a bit, nuestro segundo original
La finalidad de crear un segundo original o imagen bit a bit, es tener una copia idéntica de la información contenida en el dispositivo iOS, para que la evidencia original no sea alterada en ningún momento, lo que nos da la posibilidad de manipular estos datos fácilmente con herramientas especializadas, para buscar información que nos permita resolver nuestro caso forense.
Pero antes de realizar la copia bit a bit, conectémonos vía SSH a nuestro dispositivo, para que observemos las particiones que contiene su disco. Para esto desde la consola y teniendo en segundo plano el script tcprelay.sh ejecutamos:
ssh -p 2222 -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null root@localhost
Cada vez que la conexión nos pregunte la clave de acceso, escribimos “alpine”, que es la contraseña por defecto del usuario root en iOS y por tanto elegida por los creadores del iPhone Data Protector para el servidor SSH de su disco RAM.
Con esto podemos ver que el disco del dispositivo está dividido en varias particiones, cada una de ellas con una función especifica dentro del sistema operativo. En la siguiente tabla podremos ver para qué utiliza iOS cada una de estas particiones.
.
Partición | Descripción |
/dev/rdisk0 | Contiene todo el disco duro, incluidas todas las particiones |
/dev/rdisk0s1 | Es la partición que contiene el firmware del equipo iOS |
/dev/rdisk0s1s1 | Es la partición que contiene la raiz del sistema |
/dev/rdisk0s1s2 | Es la partición que contiene los datos del usuario y sus aplicaciones |
.
Para versiones anteriores de iOS algunas particiones cambian de nombre, por ejemplo en las versiones de iOS 4.X la partición que contiene la raíz del sistema es /dev/rdisk0s1 y los datos del usuario se almacenan en /dev/rdisk0s2s1, para iOS 3.X la raíz del sistema se encuentra en /dev/rdisk0s1 y los datos de usuario en /dev/rdisk0s2. También hay particiones que sólo aparecen en algunos dispositivos, como es el caso de la partición /dev/rdisk0s2s1 que sólo se ve en el iPhone 3GS.
Ahora que conocemos cómo está conformado el disco duro del equipo y sabemos qué hace en cada una de sus particiones, vamos a realizar el segundo original, con el que trabajaremos a lo largo de toda nuestra investigación. Para realizar esta tarea iPhone Data Protector tiene un script llamado dump_data_partition.sh, que se encarga automáticamente de comunicarse vía SSH con nuestro dispositivo, generar una copia bit a bit con la famosa herramienta DD y guardarla en nuestro equipo con extensión .DMG para poderla montar fácilmente en nuestro sistema Mac OS X.
Por defecto el script dump_data_partition.sh inicia la copia bit a bit de la partición /dev/rdisk0s1s2, donde se encuentran los datos de usuarios en el sistema iOS, pero sí queremos hacer una copia de otra partición, sólo debemos editar este script y especificarle el nombre de la partición que deseamos adquirir.
Corriendo en segundo plano para mantener la conexión entre PC y dispositivo iOS. Normalmente con la partición /dev/rdisk0s1s2 (que contiene los datos de usuario), tenemos toda la información necesaria para llevar a un feliz término nuestra investigación, pero es bueno que sepas de la existencia de las otras particiones y lo que el sistema operativo guarda en ellas, ya que por ejemplo, las aplicaciones de terceros, instaladas con Cydia, pueden guardar información en la raíz u otras partes del iOS y no podrías verla si solamente copias los datos de usuario.
Finalmente para empezar a crear la imagen bit a bit debemos darle permisos de ejecución al script dump_data_partition.sh y ejecutarlo, teniendo en cuenta que el tcprelay.sh debe estar corriendo en segundo plano siempre que quieras mantener el puente entre tu PC y el dispositivo iOS.
Debes tener en cuenta que el tiempo total de la adquisición es directamente proporcional a la capacidad de almacenamiento del dispositivo, una vez terminado el proceso nos encontraremos con una copia exacta de la partición de datos del equipo iOS.
Lo primero que debemos hacer después de generada la imagen es firmarla digitalmente utilizando SHA-1 y MD5 (se recomienda el uso de los 2 hash ya que si se presentan problemas de colisión con una firma, la otra estaría de respaldo) tanto en el original como en la copia que guardaremos en el medio de almacenamiento previamente sanitizado.
Al abrir la imagen generada y examinar con cualquier editor de textos sus archivos, podrás darte cuenta de que toda la información contenida en ella está cifrada, de nuevo. iPhone Data Protector nos ofrece una solución a este problema con su script emf_decrypter.py.
emf_decrypter.py permite descifrar todos los archivos contenidos en la imagen .dmg que acabamos de generar. Debes tener cuidado ya que este script modifica la información de la imagen, por tanto, debes guardar una copia del original, volver a sacar la firma SHA-1 y MD5 a la imagen después de descifrar y documentarlo todo en la cadena de custodia, si sólo queremos probar su funcionamiento sin escribir sobre la imagen, sólo debemos ejecutarlo con el parámetro adecuado:
.
Parámetro | Función |
-h, --help | Muestra un mensaje de ayuda con las diferentes opciones del script y un ejemplo de uso |
-w, --nowrite | Deshabilita la escritura de los archivos descifrados, para realizar pruebas |
Modo de uso | |
python python_scripts/emf_decrypter.py -Parámetro ruta/imagen.dmg |
.
Después de lanzar el emf_decrypter.py, debemos firmar de nuevo la imagen adquirida, ya que esta ha sido modificada, la finalidad de este proceso es mantener la cadena de custodia, ya que cualquier persona que realice estos pasos a la misma imagen debe obtener como resultado siempre las mismas firmas en MD5 y SHA1 para poder demostrar que no se ha modificado la evidencia.
Dependiendo de la partición a la que le sacaste la copia bit a bit, ya sea /dev/rdisk0s1s1 que contiene la raíz del sistema o /dev/rdisk0s1s2 que contiene los datos del usuario y sus aplicaciones encontraras los archivos estructurados de diferentes formas.
En /dev/rdisk0s1s1 el árbol de directorios es muy similar a este (puede variar según la versión de iOS):
.
Directorio |
Descripcion |
Applications |
Es un enlace simbólico a -> /var/stash/Applications.pwn |
Developer |
Esta vacío |
Library |
Como en cualquier sistema Mac OS X, contiene los plugins, configuraciones, etc.. |
System |
Contiene las preferencias del sistema y del dispositivo |
User |
Es un enlace simbólico a -> /var/mobile |
bin |
Contiene los ejecutables del sistema |
boot |
Esta vacío |
cores |
Esta vacío |
dev |
Esta vacío |
etc |
Es un enlace simbólico a -> private/etc/ |
lib |
Esta vacío |
mnt |
Esta vacío |
private |
Contiene los directorios etc y var (aquí encontraremos los archivos fstab, passwd y muchos mas) |
sbin |
Contiene los ejecutables del sistema |
tmp |
Es un enlace simbólico a -> private/var/tmp/ |
usr |
Contiene los datos de zona horaria y ejecutables del sistema |
var |
Es un enlace simbólico a -> private/var/ |
.
Mientras que en la partición /dev/rdisk0s1s2, que esta configurada por defecto para la copia bit a bit en el iphone-dataprotector y es la partición que recomendamos adquirir, tiene una estructura similar a esta:
.
Directorio |
Descripcion |
audit |
Esta vacío |
backups |
Esta vacío |
cache |
Es utilizado por Cydia para almacenar temporalmente algunos paquetes |
db |
No hay datos relevantes |
ea |
Esta vacío |
empty |
Esta vacío |
keybags |
Almacena el archivo systembag.kb que esta vinculado al código de bloqueo del dispositivo, que puede ser descifrado usando el script demo_bruteforce.py |
Keychains |
Es el llavero de contraseñas en ios, contiene usuarios y passwords cifrados de varias aplicaciones, se puede descifrar usando el script keychain_tool.py |
lib |
Carpeta utilizada por Cydia, nos puede arrojar información sobre los repositorios y aplicaciones instaladas con esta tienda alternativa de aplicaciones |
local |
Esta vacío |
lock |
No hay datos relevantes |
log |
Contiene algunos logs de diagnostico y conexión que pueden ser de utilidad. |
logs |
En esta carpeta encontramos los logs generales del dispositivo, también los logs del código de bloqueo y de los fallos en las aplicaciones. |
Managed Preferences |
Esta vacío |
mobile |
Es la carpeta que contiene mas información, las aplicaciones instaladas y gran información del usuario, la describiremos en detalle mas adelante. |
MobileDevice |
Esta vacío |
MobileSoftwareUpdate |
Contiene log de la actualización de software |
msgs |
No hay datos relevantes |
preferences |
Encontramos una gran cantidad de información sobre la configuración del equipo, rangos de ips, información sobre las redes inalámbricas a las que se ha conectado, nombre del teléfono y mucha mas información. |
root |
Contiene información sobre la ubicación GPS del dispositivo, cookies almacenadas, además los certificados públicos y privados. |
run |
Encontraremos logs del sistema |
spool |
Esta vacío |
tmp |
Algunos archivos temporales |
vm |
Esta vacío |
wireless |
Encontraremos el historial de llamadas realizadas, además de los logs sobre las conexiones inalámbricas (3G, Bluetooht, WiFi) del dispositivo. |
.
Adquisición lógica del dispositivo iOS
Realizar el copiado bit a bit del dispositivo es el proceso recomendado para extraer la máxima cantidad de información de un equipo iOS, ya que nos permite recuperar incluso información borrada del equipo, pero no es la única forma de obtener la información almacenada, en algunos casos no tendremos acceso o permiso para acceder al dispositivo Apple que necesitamos analizar, pero si contamos con acceso a un equipo donde se ha sincronizado dicho dispositivo, por tanto podemos realizar una copia lógica y extraer información del backup almacenado por iTunes automáticamente.
Del backup de un dispositivo iOS, no solo se puede recuperar el código de bloqueo como vimos anteriormente, sino también una gran cantidad de información que nos puede servir para resolver una investigación, especialmente en esos casos donde no tenemos acceso físico al equipo involucrado.
La ubicación de la carpeta Backups donde se almacenan las copias de seguridad que se realizan a los dispositivos por medio de iTunes, varia según el sistema operativo y normalmente se encuentran en estas rutas respectivamente:
- Mac OS X: ~/Library/Application Support/MobileSync/Backup/
- Windows XP: ~\Documents and Settings\(usuario)\Application Data\Apple Computer\MobileSync\Backup\
- Windows Vista, Windows 7 y Windows 8: ~\Users\(usuario)\AppData\Roaming\Apple Computer\MobileSync\Backup\
En esta carpeta podemos encontrar varios backups de diferentes dispositivos cada uno de ellos en carpetas con el UUID del dispositivo como nombre, con una gran cantidad de archivos cuyos nombres corresponden a su respectivo hash en SHA-1 y los siguientes archivos con información valiosa sobre dicho backup:
.
Archivo |
Descripcion |
Status.plist |
Almacena el estado de la última sincronización, la fecha, el UUID del dispositivo y el tipo de backup realizado |
Manifest.plist y Manifest.mbdb |
Lista de todos los archivos que contiene la copia de seguridad, fecha de modificación y la firma de hash |
Info.plist |
Toda la información del iPhone, el Nombre, El número telefónico, el IMEI, versión de iOS, etc… |
.
Nota: El Identificador universalmente único (universally unique identifier o UUID) es un numero que identifica inequivocamente cada dispositivo,es un estandar realizado por la Open Software Foundation (OSF) que ha tomado Apple para diferenciar cada dispositivo.
Existen muchas herramientas para extraer la información de los backups de un dispositivo iOS, pero solo vamos a ver la mejor herramienta para cada sistema operativo, empezando por Mac OS X.
Extrayendo Backups de iTunes en Mac OS X
Para Mac OS X existe una herramienta grafica bastante simple pero igual de efectiva que nos permite extraer la información contenida en los backups de iTunes y organizarla de forma que podamos trabajar con ella mas fácilmente, su nombre es iPhone Backup Extractor y puede ser descargada de www.supercrazyawesome.com.
El funcionamiento del iPhone Backup Extractor es muy simple, lo primero que nos aparece es la interface donde podemos seleccionar la opción “Read Backups” para listar los backups almacenados en nuestro equipo, una vez seleccionado el Backup al que queremos extraerle la información, se nos muestra un listado con las aplicaciones que han guardado información en el backup de iTunes y la opción de extraer los “iOS Files” que contiene bastante información sobre el dispositivo iOS.
La mayor cantidad de información la sacaremos de “iOS Files” ya que contiene entre otras cosas la información de las aplicaciones por defecto que trae el sistema operativo iOS:
.
Directorio / Archivo |
Descripcion |
/keychain-backup.plist |
Backup del archivo “llavero” donde se almacenan las claves de algunas aplicaciones en iOS, esta cifrado pero como vimos anteriormente puede ser descifrado con la utilidad keychain_tool.py del iPhone Data Protector. |
/Library |
En esta carpeta podemos encontrar la información de casi todas las aplicaciones que integra iOS por defecto, entre ellas encontramos la agenda de contactos, el calendario, el historial de llamadas, las notas, las cuentas de correo, las notas de voz, la organización del SpringBoard, los marcadores e historial de safari, los diccionarios personalizados por el usuario (gran fuente de información) y un largo etc… |
/Media |
Encontraremos todas las fotos y grabaciones almacenadas en el dispositivo. |
/SystemConfiguration/ |
todos los archivos de configuración donde podemos encontrar desde las redes inalámbricas a las que se ha conectado hasta la hora en que se tenían configuradas las alarmas. |
/TrustStore.sqlite3, ocspcache.sqlite3 |
Base de datos donde esta almacenada la información de los certificados digitales en safari y la cache del estado de los certificados. |
.
Extrayendo Backups de iTunes en Microsoft Windows
Para Windows existe una herramienta de código abierto llamada iPhone Backup Browser que permite extraer la información de los backup realizados con iTunes en el sistema operativo de Microsoft, la podemos descargar de su pagina en Google Code http://code.google.com/p/iphonebackupbrowser/.
Su funcionamiento es muy simple, solo abrimos el programa y automáticamente este detectara los backups que tengamos guardados en nuestro equipo, si copiamos el backup de otro lugar, nos da la opción de examinar el disco para indicarle la ruta donde lo tenemos almacenado. Tan pronto seleccionamos el backup nos aparece en pantalla un listado con todos los archivos que contiene la copia de seguridad, siendo el mas importante el llamado ”System”, ya que contiene gran cantidad de información relacionada con el dispositivo iOS, pero además extrae archivos importantes de las aplicaciones instaladas.
Podemos exportar todos los archivos de backup a la carpeta c:\temp y como característica diferenciadora el iPhone Backup Browser permite exportar la lista de archivos en .csv.
Extrayendo Backups de iTunes en GNU/Linux
iTunes no tiene una versión para entornos GNU Linux, sin embargo podemos llevarnos la copia de seguridad de un dispositivo iOS a un equipo con sistema GNU Linux y extraer su información con herramientas de Windows como iPhone Backup Browser o iPhone Backup Extractor (www.iphonebackupextractor.com) haciendo uso de mono para correrlas en este sistema operativo.
Solo necesitas instalar la librería libmono-winforms2.0-cil con sus dependencias y ejecutar el software con mono “mono ejecutable.exe”.
Las herramientas enumeradas anteriormente funcionan perfectamente si el backup de iTunes no ha sido cifrado, pero cuando nos encontramos con un backup cifrado, es necesario recurrir a herramientas comerciales como iOS Forensic Toolkit, desarrollada por la empresa rusa Elcomsoft (www.elcomsoft.com/eift.html) o utilizar las funcionalidades que nos ofrece el iPhone Data Protector para esta función.
El iPhone Data Protector incluye dos utilidades llamadas demo_backup_keychan.py y backup_tools.py, diseñadas especialmente para ayudarnos a extraer la información de los backups cifrados, ambas herramientas se encuentran en la carpeta python_scripts del iPhone Data Protector, la primera nos ayudará a conseguir las contraseñas del llavero del dispositivo y la segunda nos permite extraer la información cifrada una vez le ingresemos la contraseña.
Para poder ejecutar la herramienta demo_backup_keychan.py debemos cumplir con todas sus dependencias, por tanto debemos instalar:
- Qt para Mac
- PyQt (necesita SIP)
Para sistemas Mac OS X, existe un instalador con asistente grafico para Qt, solo debemos descargarlo de qt-project.org/downloads e instalarlo siguiendo su asistente paso a paso.
Para las librerías SIP y PyQt debemos descargar los archivos fuente y compilarlos en nuestro equipo, empezaremos descargando y compilando SIP ya que es dependencia de la librería PyQt.
Para instalar SIP debemos descargar el código fuente escrito para nuestro sistema operativo del sitio www.riverbankcomputing.co.uk/software/pyqt/download/, una vez descargado, descomprimimos, configuramos (sudo python configure.py), compilamos (sudo make) e instalamos SIP en nuestro equipo (sudo make install).
Una vez instalado SIP, continuamos con la instalación de PyQt, de nuevo lo primero que haremos será bajar el código fuente para nuestro sistema operativo de la pagina oficial www.riverbankcomputing.co.uk/software/pyqt/download, una vez bajamos el archivo con los fuentes, lo desempaquetamos y desde una consola del sistema iniciamos la configuración pasándole con el parámetro -q la ruta donde quedo instalado el qmake (sudo python configure.py –q /User/-USUARIO-/QtSDK/Desktop/Qt/-VERSION-/gcc/bin/qmake), luego compilamos el código (sudo make) y finalmente instalamos el PyQt (sudo make install).
La compilación de PyQt puede tardar un poco dependiendo de las prestaciones que tenga tu equipo, espera que termine el proceso y cuando finalice podrás ejecutar la herramienta demo_backup_keychan.py, te saldrá un cuadro de dialogo para que busques la carpeta donde esta almacenado el backup de iTunes.
Si todo ha salido bien tendrás las contraseñas del dispositivo iOS almacenadas en el Backup de iTunes, más de un 70% de usuarios utiliza la misma contraseña para todo, por tanto con un poco de suerte alguna de las contraseñas almacenadas en el llavero será la utilizada por el usuario para cifrar su backup en iTunes.
Apple suele cambiar con cada nueva versión de iTunes el sistema de cifrado para los backups de sus dispositivos, por lo que es recomendable siempre estar pendiente de estos cambios y del proyecto iPhone Data Protector, que siempre esta al tanto de estos cambios y busca la manera de saltar las nuevas protecciones impuestas a los backups por la empresa de la manzana (code.google.com/p/iphone-dataprotection/).
Si ya contamos con el password utilizado para realizar el cifrado del backup, solo debemos utilizar la herramienta backup_tool.py para descifrar la información contenida en el backup de iTunes ejecutándola con los siguientes parámetros e introduciendo la contraseña de cifrado cuando nos sea solicitada:
.
Parámetro | Función |
Ruta Origen | Muestra un mensaje de ayuda con las diferentes opciones del script y un ejemplo de uso |
Ruta Destino | Deshabilita la escritura de los archivos descifrados, para realizar pruebas |
Modo de uso | |
python python_scripts/backup_tools.py /ruta/backupcifrado /ruta/destino/backupdescifrado |
.
El ultimo método de adquisición que documentaremos es la copia lógica del dispositivo iOS, a diferencia de los métodos anteriores donde no se manipulaban directamente los archivos del equipo iOS, este método es un poco mas intrusivo ya que requiere tener jailbreak e instalar desde Cydia el servicio AFC2 que nos permite total acceso al sistema de archivos del dispositivo, incluido la raíz del sistema.
Para realizar la copia lógica de un dispositivo iOS necesitamos el software Phone Disk de la empresa Macroplant (www.macroplant.com/phonedisk/), una excelente herramienta que nos permite montar nuestro equipo como un disco duro en nuestro sistema, lo primero que haremos será descargarla q instalarla siguiendo su asistente.
Una vez instalado el Phone Disk, debemos añadir en el dispositivo iOS por medio de Cydia, el servicio AFC2, que aparece en la tienda alternativa como afc2add, lo instalamos y configuramos el Phone Disk para acceder al verdadero root (click derecho en el icono de phone disk, preferencias y seleccionar “Alow Access to real root.”), después solo conectamos nuestro dispositivo y ya podemos navegar desde finder en el como si un disco externo se tratara.
Phone Disk esta disponible para entornos Mac OS X y Windows, por lo que en teoría podríamos utilizar herramientas como FTK Imager de AccessData para realizar la copia lógica de esta nueva partición en el sistema, pero en la practica el FTK Imager y similares son incompatibles con Phone Disk, por tanto utilizaremos la herramienta de copiado open source y multiplataforma llamada UltraCopier (ultracopier.first-world.info) que nos permitirá realizar la copia lógica del dispositivo iOS conservando las fechas y los permisos de los archivos.