viernes, 7 de febrero de 2014

Exploit para iBoot en iPhone 4S con iOS 7.0.4

Desde hace una semanas, INCIDE cuenta con un nuevo pentester senior, José Selvi, valenciano y mejor persona. A raíz de la noticia que ha sacudido esta semana las redes sociales sobre el posible Jailbreak definitivo para cualquier dispositivo con procesador A5 de Appel, no ha podido esperar más para ver qué hay detrás de este demoledor anuncio. Os dejamos con su post. ¡Bienvenido Selvi!


   Hace unos pocos días pudimos ver en Twitter como un conocido Jailbreaker, iH8sn0w, comentaba haber encontrado una vulnerabilidad en los dispositivos con procesador A5 de Apple (iPhone 4S, por ejemplo).

   
   Según sus propias palabras, la vulnerabilidad se encontraría en el iBoot, una de las partes del arranque de los dispositivos de Apple que se ejecuta previamente a la ejecución del kernel del sistema operativo iOS.



   El arranque de un dispositivo iOS se realiza mediante la llamada "Secure Boot Chain", en la que cada etapa realiza sus acciones pertinentes y comprueba la firma de la siguiente etapa antes de otorgarle el control.

   La primera etapa de todas, el bootrom, se escribe en el dispositivo en el momento del ensamblaje, y no puede ser cambiada ni actualizada en toda la vida del mismo. Las vulnerabilidades en alguno de estos elementos del arranque, o en el propio kernel, permitirían evadir esta protección de la firma, y por lo tanto arrancar versiones modificadas del kernel, que es en lo que consiste un Jailbreak.

   No obstante, a pesar de que el propio iH8sn0w comenta que, a partir de ahora, los dispositivos A5 son "Jailbreakeables" de por vida, a priori únicamente las vulnerabilidades en el bootrom serían de este tipo, ya que al estar embebido en el propio hardware es el único elemento que no puede ser actualizado por Apple. El iBoot, elemento en el que parece existir la vulnerabilidad, se encuentra dentro de la imagen del sistema operativo iOS que descargamos en el momento de realizar una actualización, dentro del fichero IPSW, por lo que Apple podría corregir la vulnerabilidad en próximas releases.

   Dado que los detalles de la vulnerabilidad aún no han sido publicados y todavía no podemos ponernos a jugar con ella, vamos a descargar el IPSW de una versión vulnerable y a intentar extraer la imagen del iBoot. Para ello lo primero que vamos a hacer es descargar la imagen con la que vamos a trabajar, por ejemplo la versión 7.0.4 para iPhone 4S, de la conocida web ipswdownloader.com



   El fichero IPSW no es más que un ZIP al que se le ha cambiado la extensión, pero sus ficheros se encuentran cifrados mediante el algoritmo AES, empleando claves a priori desconocidas. Veamoslo:

$ file iPhone4,1_7.0.4_11B554a_Restore.ipsw
iPhone4,1_7.0.4_11B554a_Restore.ipsw: Zip archive data, at least v2.0 to extract
$ unzip iPhone4,1_7.0.4_11B554a_Restore.ipsw
Archive:  iPhone4,1_7.0.4_11B554a_Restore.ipsw
inflating: 058-1077-002.dmg       
inflating: 058-1108-002.dmg       
inflating: 058-1124-002.dmg       
inflating: BuildManifest.plist    
creating: Firmware/
creating: Firmware/all_flash/
creating: Firmware/all_flash/all_flash.n94ap.production/ 
inflating:
Firmware/all_flash/all_flash.n94ap.production/applelogo@2x~iphone.s5l8940x.img3 

inflating:
Firmware/all_flash/all_flash.n94ap.production/batterycharging0@2x~iphone.s5l8940x.img3 
inflating:
Firmware/all_flash/all_flash.n94ap.production/batterycharging1@2x~iphone.s5l8940x.img3 
inflating:
Firmware/all_flash/all_flash.n94ap.production/batteryfull@2x~iphone.s5l8940x.img3 

inflating:
Firmware/all_flash/all_flash.n94ap.production/batterylow0@2x~iphone.s5l8940x.img3 

inflating:
Firmware/all_flash/all_flash.n94ap.production/batterylow1@2x~iphone.s5l8940x.img3 

inflating:
Firmware/all_flash/all_flash.n94ap.production/DeviceTree.n94ap.img3 

inflating:
Firmware/all_flash/all_flash.n94ap.production/glyphplugin@2x~iphone-30pin.s5l8940x.img3 

inflating:
Firmware/all_flash/all_flash.n94ap.production/iBoot.n94ap.RELEASE.img3 

inflating:
Firmware/all_flash/all_flash.n94ap.production/LLB.n94ap.RELEASE.img3 

inflating: Firmware/all_flash/all_flash.n94ap.production/manifest 

inflating:
Firmware/all_flash/all_flash.n94ap.production/recoverymode@2x~iphone-30pin.s5l8940x.img3 

creating: Firmware/dfu/
inflating: Firmware/dfu/iBEC.n94ap.RELEASE.dfu 
inflating: Firmware/dfu/iBSS.n94ap.RELEASE.dfu 
inflating: Firmware/Trek-5.0.02.Release.bbfw 
inflating: Firmware/Trek-5.0.02.Release.plist 
creating: Firmware/usr/
creating: Firmware/usr/local/
creating: Firmware/usr/local/standalone/
inflating: kernelcache.release.n94 
inflating: Restore.plist
$ srch_strings Firmware/dfu/iBSS.n94ap.RELEASE.dfu | head -10
3gmI
ssbiEPYT
ssbi
ATAD
jnZf
UZ^_
[...]

   Como podemos ver, el formato de los ficheros no es reconocido, debido a que su contenido está cifrado. A pesar de que la clave de cifrado no se publica por Apple, los Jailbreakers las obtienen como parte de su trabajo de investigación, y van publicando aquellas que identifican, por ejemplo, en el iPhoneWiki.

   En este caso, el propio iH8sn0w ha colgado en su Twitter una de las claves que ha encontrado durante su trabajo: 



   Con esta información ya podemos extraer las imágenes del IPSW que acabamos de descargar. Imagino que podríamos hacerlo a mano con openssl, pero yo he preferido usar una versión modificada del script "kernel_patcher.py" de la suite iphone-dataprotection (que podéis descargar de AQUI). 

   Básicamente, en script es el mismo que el original pero eliminando las acciones de parcheo del kernel, dejando las imágenes tal cual se encuentran dentro del IPSW. Veamos si funciona:

$ ./ipsw_decrypt.py --iv 3a0fc879691a5a359973792bcd367277 --key
371e3aea9121d90b8106228bf2b5ee4c638a0b4837fefbd87a3c0aca646e5996
--binary iBSS iPhone4,1_7.0.4_11B554a_Restore.ipsw
Decrypting iBSS.n94ap.RELEASE.dfu
Decrypted kernel written to iBSS.n94ap.RELEASE.dfu.decrypt

   Parece que todo ha funcionado bien, así que solo nos queda ver si efectivamente lo que hay dentro tiene pinta de iBSS:

$ srch_strings iBSS.n94ap.RELEASE.dfu.decrypt
iBSS for n94ap, Copyright 2013, Apple Inc.
RELEASE
iBoot-1940.3.5
[...]

   Pues... todo apunta a que sí. Lamentablemente cada imagen está cifrada con una clave diferente y no podemos utilizar esta misma clave para descifrar el iBoot y ponernos a mirar, así que por el momento habrá que esperar a ver si son publicados más detalles sobre la vulnerabilidad. 



Jose Selvi es Pentester Senior en INCIDE.


¿Quieres leer más artículos de José Selvi? Visita su blog: www.pentester.es


No hay comentarios:

Publicar un comentario