07- Análisis forense iPhone – Parte VII – Accediendo con Ramdisk [iPhone < 4S, No Jailbreak]

Hoy voy a hablar sobre un método para acceder al iPhone (<= iPhone 4; a partir del Chip A5 sin el jailbreak no se puede) a través de un disco de arranque modificado. En un futuro Post intentaré realizar este método en un iPhone 4S con Jailbreak.

/******************************

1. Teoría sobre el RamDisk

2. Requisitos – Instalando dependencias

3. Construyendo el Ramdisk & Kernel

4. Ejecutanto el Ramdisk

******************************/

1. Teoría sobre el RamDisk

La idea de usar un RamDisk en concepto es muy similar a la de arrancar una disrtibución 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 través del puerto abierto introduciremos el sistema operativo “modificado”.

Cuando el iPhone arranca pasa a través de una cadena de elementos con firmas publico – privada (RSA) que verifican que su siguiente paso sea legítimo. El primer paso de la secuencia es el BootROM, una memoria de solo lectura que contiene todos los certificados raíz y verifica si el código es legítimo 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 vía Software.

Para entender más en profundida el funcionamiento, veremos los 3 métodos de arranque de que dispone iPhone: modo normal, modo DFU y modo restauración (todos ellos comienzan con el BootROM).

1.1 Modo normal

En este método, el BootROM inicializa y carga el low level bootloader (LLB) trás 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.

Arranque iPhone modo normal

1.2 Modo DFU (en este se realiza el ataque)

En este método 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.

arranque iPhone modo DFU

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 Recuperación

Aquí se muestra la secuencia de arranque en modo recuperación.

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.

arranque iPhone modo recuperación

2. Requisitos – Instalando dependencias

A continuación paso a describir tanto los requisitos como la instalación de librerías 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.

mac os X

2.2 Instalando dependencias:

He seguido las instrucciones que tiene el README de dataproteccion pero he tenido problemas con dependencias al instalar alguna aplicación. 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).

Después de instalar Xcode es necesario instalar un plugin. Para ello una vez arrancado pulsamos “cmd + ,” y damos al botón instalar en “Command Line Tools”

linea de comandos tools xcode

Installing dependencies iPhone-dataprotection (Mac OS X) V2 (update Sep. 2013)
Para coger experiencia usando el terminal vamos a hacer toda la instalación desde él.

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

#Descargamos ldid (programa para firmar código)
curl -O http://networkpx.googlecode.com/files/ldid
chmod +x ldid<br />sudo 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 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 ..

#Después 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 versión 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 versión de iphone-dataprotection del respositorio (hace mucho que no se actualiza pero es lo que hay). Podéis descargarlo a mano desde esta web.

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 versión de redsn0w que viene en el Readme pero se pueden usar versiones más recientes. Podéis descargarlo a manualmente desde esta web.

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 versión del firmware de iOS 5.0.0 para nuestro dispositivo desde aquí y 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 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. Podéis descargarlas desde aquí.

Estoy intentando

4. Ejecutanto el Ramdisk

Los pasos para ejecutar el Ramdisk son los siguientes:

4.1 Ejecutamos Redsn0w con nuestra imágen.

Vamos a ejecutar Redsn0w con el .iwsp correspondiente a nuestro iPhone, el fichero kernel_patched y el RamDisk mediante esta instrucción.

./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 teléfono al ordenador por cable usb

4.3 Apagamos el iPhone

4.4 Pulsamos en siguiente

redsn0w

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 versión de Redsnow se va mostrando por pantalla los botones que tenemos que ir pulsando.

redsn0w dfu

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.

iPhone ramdisk

4.6 Conectamos con tcpreplay

Damos permisos de ejecución a tcpreplay.sh que será la herramienta encargada de establecer conexión entre el teléfono y el ordenador.

Esta herramienta conecta el puerto 22 y 1999 del iPhone con el 2222 y 1999 respectivamente de nuestro ordenador.

tcpreplay.sh

4.7 Conectamos por SSH

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

conexión ssh iPhone puerto 2222

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 botón de bloqueo más el home unos segundos.

En próximos Post veremos las distintas cosas que podemos hacer con los scripts en python que vienen incluidos en la “suit”.

Carlos Rebollo – @CharlieSec

Carlos@highsec.es

Referencias:

1. Sogeti <- Las imágenes de las fases de arranque pertenecen a una presentación de Sogeti.

2. http://code.google.com/p/iphone-dataprotection/

3. http://resources.infosecinstitute.com/iphone-forensics/

4. http://www.blogtecnico.net/analisis-forense-en-iphone-1-parte-extraccion-directa-desde-el-iphone/ <- Versión traducida al Español de la anterior.

5. http://www.securitylearn.net/2012/01/10/iphone-forensics-on-ios-5/ <- Blog muy recomendable ;)

6. http://theiphonewiki.com/wiki/Firmware

Los comentarios están cerrados.