Centralizar & Organizar los mejores artículos de Seguridad informática.
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.
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.
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.
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.
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”
#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
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.
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 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.
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 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
Publicaciones Anteriores
06- Análisis forense iPhone – Parte VI – Entendiendo la estructura de claves AES
Publicaciones Siguiente
Los comentarios están cerrados.