jueves, 24 de febrero de 2011

Mi primer análisis forense: recuperando fotos borradas de un iPhone


Estos días me he enfrentado con un amigo a un reto apasionante a la vez que estresante. Alguien había borrado unas fotos importantes de un iPhone 4, y necesitaba recuperarlas. La historia ha sido toda una odisea, aquí os cuento los pasos que dimos (se hizo todo en cuatro tardes/noches, no teníamos más tiempo e íbamos contra-reloj).

Fase 1: Jailbreak y Dump de disco
Lo primero que se hizo fue un Backup del iPhone utilizando iTunes, por si se perdían el resto de datos intentando recuperar las fotos borradas.
Después de investigar sobre el tema, se decidió proceder a realizar un jailbreak del iPhone, para intentar volcar todo el contenido de su disco interno y así tratar de recuperar las fotos.
Se realizó el jailbreak utilizando cynthia y nos conectamos a él según se indica aquí, es decir, montando un servidor ssh en el iPhone y conectándonos a él por Wifi (aquí está bien explicado, la password de root es alpine).
Como no conseguimos volcar toda la imagen de disco por Wifi (se desconectaba cuando llevaba unas megas), realizamos un tunnel para conseguir el volcado a través de USB.
Con esto se consiguió volcar el contenido de la partición de usuario (unos 15 Gb) a una imagen iso, y aquí comenzó la segunda fase.

Fase 2: Abrir la imagen de la partición e intentar recuperar las fotos
Una vez que teníamos la imagen de la partición, estuvimos viendo cómo poder abrirla e intentar recuperar las fotos. Después de investigar bastante, descubrimos que la partición está en formato HFS+, por lo que puede montarse en un Linux y tratar de recuperar los datos de ahí.
Probamos decenas de utilidades para tratar de recuperar las fotos borradas, pero ninguna era capaz de hacerlo. Entre otras muchas, probamos con photorecsleuthkit y autopsy, pero lo más que conseguimos fue sacar los ficheros ya existentes. También conseguimos sacar archivos existentes utilizando HFSExplorer en Windows, montando la imagen como si fuese un disco. Sin embargo, al examinar alguno de los ficheros que habíamos sacado (fotos que no se habían borrado), vimos que no se podían abrir. Hicimos también una aplicación en Java que fuese mirando sector a sector (cada 512 bytes), buscando la cabecera típica de los archivos JPG, pero no encontramos nada. Y no encontramos nada por lo mismo que no se podían abrir los archivos que extrajimos con autopsy o HFSExplorer, y es que el iPhone 4 encripta por hardware el contenido de todos los ficheros que almacena en el disco, por lo que aunque consigas sacarlos no hay manera de desencriptarlos. Se explica así en este thread, en el que se dice que tiene que ver con un sistema de encriptado hardware, y un archivo llamado "".
En este momento desistimos de tratar de recuperar las fotos borradas, porque aunque fuésemos capaces de extraerlas de la imagen del disco que habíamos hecho, no habría forma de desencriptarlas. ¿Y ahora qué?

Fase 3: Recuperar los thumbnails de las fotos
Como no podíamos recuperar las fotos borradas, pensamos que tal vez pudiésemos recuperar los thumbnails (las miniaturas) de las fotos que almacena el iPhone en su caché, y que milagrosamente no hubiese refrescado estas miniaturas después de borrar las fotos (se apagó el teléfono justo después de borrarlas). Buscando con el HFSExplorer en la imagen de la partición de usuario, encontramos dos archivos que podrían contener lo que buscábamos, los ficheros "120x120.ithmb" y "158x158.ithmb", además del fichero "thumbnailconfiguration" según se muestra en esta imagen:
Recuperamos esos tres ficheros de la imagen, pero al igual que el resto de ficheros que habíamos logrado extraer estaban encriptados. Sin embargo ya sabíamos dónde estaban los ficheros que queríamos, así que pensamos que tal vez conectándonos por ssh al iPhone y utilizando scp para traernos los ficheros, el iPhone se encargase de dárnoslos ya desencriptados. Y así fue, ya que trayendo los ficheros de los thumbnails por ssh vimos que el fichero thumbnailconfiguration estaba en formato legible (xml), y contenía esto:
¿Pero en qué formato estaban los archivos con extensión ithmb?

Fase 4: Recuperar las fotos a partir de los thumbnails
Buscamos en cientos de sitios para saber cómo convertir el fichero ithmb a jpg o a algún formato de fotos legible, pero no hubo manera (ni siquiera con aquellos programas como iThmbConv.exe que prometían hacerlo). ¿Y ahora qué? ¿En qué formato está un archivo con extensión ithmb y cómo conseguimos abrirlo para ver las fotos?. La pista nos la dio este post en el que un tipo prometía que había conseguido abrir un fichero de thumbnails con photoshop, tratándolo como un fichero raw con 16 bits de profundidad de color.
Hicimos una primera prueba, intentando abrir el archivo "158x158.ithmb" con las siguientes opciones:
Parece que nos íbamos acercando, porque aunque no se veía mucho, en lo que apareció se podía distinguir una imagen desplazada:
Parecía claro que el ancho no era 158, pero se aproximaba. Después de muchas otras pruebas abrimos la imagen con 160 píxels de ancho y apareció ante nosotros la primera imagen visible. ¿Y dónde estaban las otras?. Cambiamos el alto a 10000 pixels y empezaron a aparecer el resto de imágenes, unas debajo de otras, pero aparecían cada vez más desplazadas hacia la derecha:
Nos dimos cuenta de que esto era porque entre imagen e imagen parecía haber una cabecera, que era lo que hacía que la siguiente foto apareciese desplazada. Entonces hicimos un programa en Java para tratar el fichero ithmb y quitarle esas cabeceras. Después de mucha prueba y error (y de mucho visor hexadecimal para tratar de ver los patrones entre fotos) conseguimos eliminar las cabeceras con este pequeño programa en Java:


Y así, después de procesar el fichero raw con este programa, conseguimos quitar el ruido de los thumbnails y abrir el archivo con Photoshop, que por fin nos mostró todas las fotos colocadas unas debajo de las otras:


Y con esto, por fin, conseguimos recuperar las (miniaturas de) las fotos que se habían borrado. Fue suficiente con las miniaturas, pues tienen un tamaño de 158x158 pixels, con lo que se apreciaba bastante bien el contenido de las fotos:

Toda una odisea, pero después de muchos quebraderos de cabeza, dos noches casi sin dormir, cerca de treinta herramientas probadas, dos programas en java y un entendimiento preciso del sistema de ficheros HFS+... PRUEBA SUPERADA!

5 comentarios:

Dec dijo...

158x158.ithmb and 120x120.ithmb have RGB555 color mode. Try my iThmb Converter (http://www.ithmbconverter.com/) and you will see images with correct colors.

Manuel Pereira dijo...

Great!
It does work pretty well.
Thanks a lot.

Anónimo dijo...

hola, podrias ayudarme con los comando del DD para hacer laimagen, ya tengo el tunel.

Tratare de trabajar sobre el cifrado y la forma de romperlo. tienes alguna actualizacion de tu documento?

Saludos
Jesus Consuelos

Manuel Pereira dijo...

Hola Jesús, hace tiempo que hicimos el dump y no lo recuerdo exáctamente. Aquí tienes una página en la que se explica con detalle:

http://modmyi.com/forums/file-mods/237321-how-iphone-data-recovery.html

Parece que el comando es:
dd if=/dev/disk0 | ssh @ 'dd of=iphone-dump.img'

Un saludo.

CHRISOHC dijo...

Todo eso se puede hacer muuucho mas rapido con un simple gesto:
http://blogs.deperu.com/todo-apple-en-peru/visualiza-en-miniatura-tus-fotos-borradas-en-el-ipad-o-iphone/

Y la gilipollez esta funciona que lo he probado