Tal como hemos anunciado en el primer artículo de la serie “guía de pentesting en aplicaciones iOS”, hoy te acercamos toda la información necesaria y relativa al mundo del jailbreak para que puedas abordar el pentesting sobre aplicaciones iOS. Aunque esta serie de artículos no pretenden ser un curso de pentesting, es importante destacar algunos requisitos y generalidades sobre esta metodología en aplicaciones iOS.
En términos generales, podríamos decir que en la metodología de pentesting para aplicaciones se utilizan dos enfoques de análisis: el análisis estático y el análisis dinámico. Como podemos intuir, el análisis estático es aquel que cubre todas las pruebas mientras la aplicación no está en ejecución. En este enfoque, siempre que analicemos una aplicación iOS lo haremos desde su archivo IPA, del cual hablaremos con más detalles en otras entregas. En cuanto al análisis dinámico, como su nombre lo indica, refiere a pruebas que se realizan mientras que la aplicación está en ejecución. Lo cierto es que para analizar completamente (análisis estático/análisis dinámico) una aplicación iOS será necesario que dispongamos de una Pc Apple en cualquiera de sus variantes, conjuntamente con un AppleID que utilizaremos desde el IDE de Apple (Xcode), el cual nos provee muchas herramientas de análisis y sobre todo nos permite manipular nuestras aplicaciones dándonos la posibilidad de poder firmarlas (siempre que tengamos un AppleID con un porvisioning profile válido), sumado a un modelo de dispositivo (iPhone o iPad) para el cual exista una versión de jailbreak disponible y que aplique al SO que tenga instalado dicho dispositivo. Por otra parte, cabe destacar que es sumamente importante tener en cuenta que el dispositivo que seleccionamos para hacer el jailbreak y probar nuestras aplicaciones deberá ser utilizado únicamente para el uso de pruebas de auditoria y laboratorio y que no debemos pensar en utilizar para esto un dispositivo que contenga información personal.
Nota: Si bien se pueden utilizar otros sistemas operativos para analizar las aplicaciones que corren sobre iOS, en algún punto tendremos limitaciones y no podremos realizar un análisis completo de la aplicación.
Tabla de contenidos de este artículo:
¿Que es Jailbreak?
Tipos de Jailbreak existentes
¿Como hacer Jailbreak?
- Realizando Jailbreak con Checkra1n
- Realizando Jailbreak con Unc0ver y Cydia Impactor
- Realizando Jailbreak con Unc0ver y Xcode
- Checkra1n Vs Unc0ver
Conclusiones
¿Que es Jailbreak?
Como ya hemos anticipado en la primera entrega de esta serie, jailbreak es un proceso que nos permite elevar privilegios en los sistemas iOS dándonos la posibilidad de romper muchos de los mecanismos de seguridad. Sin dudas, jailbreak se lo puede comparar con el proceso de rootear en dispositivos que corren Android, aunque es importante destacar con respecto al jailbreak que el mismo refiere únicamente al proceso de romper los mecanismos de seguridad impuestos por Apple a fin de elevar privilegios sobre el sistema.
El primer método para realizar jailbreak fue lanzado en julio de 2007 e inicialmente permitía establecer cualquier archivo de música grabado en el dispositivo como tono para las llamadas y mensajes entrantes. Luego, en agosto de 2007, se lanzó el primer juego no aprobado por Apple para el iPhone y el iPod Touch. Y en octubre de ese mismo año, se descubrió otro método para realizar jailbreak. Vale la pena aclarar que no debe confundirse al jailbreak con las herramientas o exploits que se utilizan para ejecutar el proceso de jailbreak en sí. Por lo general, luego de un jailbreak exitoso el FileSystem del dispositivo deja de estar montado como ReadOnly (solo escritura) para pasar a Read-Write (lectura/escritura), lo que permite manipular archivos en el sistema e interactuar con el mismo como usuario root, desestimando por completo el uso del usuario mobile que iOS utiliza por defecto.
Como se pueden imaginar, el jailbreak se convierte desde el punto de vista del pentesting en una herramienta fundamental a la hora de realizar auditorías de seguridad, dado que una vez realizado el jailbreak podremos acceder a los directorios internos, al keychain, instalar herramientas de terceros , acceder al process memory, realizar Bypass TLS y realizar debugging en tiempo real, entre otras prestaciones que se convierten en herramientas fundamentales, sobre todo para llevar a cabo lo que refiere al análisis dinámico.
Tipos de Jailbreak existentes
Aunque a la hora de realizar jailbreak sobre un dispositivo se habla de “tipos” de jailbreak, podríamos decir más bien que cada uno de estos refiere a las virtudes y limitaciones que ofrecen las distintas herramientas y exploits disponibles para lograr realizar jailbreak en un dispositivo.
A continuación, podemos ver las distintas características y “tipos” de jailbreak disponibles. Como decíamos, dependen del tipo de herramientas y/o exploits que se utilicen, pudiendo ser estos últimos del tipo software (también conocidos como userland) o de tipo hardware (que operan sobre el firmware), como los que afectan a iBoot o al DFU.
Jailbreak Untethered
Normalmente, cuando se realiza jailbreak sobre un dispositivo el mismo se pierde al reiniciar el sistema. Cuando hablamos de jailbreak untethered ocurre lo contrario: no se pierde del jailbreack al reiniciar el teléfono. Esto quiere decir que el kernel se parchea sin la ayuda de una computadora o aplicación. El dispositivo permanece con el Jailbreak sin importar que se reinicie o se apague y es por esta ventaja que estos tipos de jailbreak son los más buscados, aunque son poco comunes y requieren una gran cantidad de ingeniería inversa para crearlos. Esto último a su vez hizo que sean cada vez menos populares, ya que ninguno es compatible con las versiones recientes de iOS.
Jailbreak Tethered
Es un tipo de jailbreak temporario que se pierde al reiniciar el dispositivo, dejándolo en un bootloop que requiere que el dispositivo sea conectado a una computadora para realizar jailbreak cada vez que este se reinicie.
Jailbreak Semi-Tethered
Se pierde el jailbreak al reiniciar el dispositivo, pero el equipo encenderá normalmente (funcionando las llamadas telefónicas, mensajes de texto y/o utilización de aplicaciones y AppStore), tan solo bastará con volver a ejecutar el jailbreak aunque con el dispositivo conectado a una computadora.
Jailbreak Semi-Untethered
Este tipo de jailbreak es similar al jailbreak semi-tethered, ya que cuando el dispositivo se reinicia se pierde el jailbreak, pero la diferencia clave es que el kernel se puede parchear sin usar una computadora. Generalmente se parchea usando una aplicación instalada en el dispositivo. En algunas ocasiones este tipo de jailbreak no requiere conectar el dispositivo a una PC.
Es lógico preguntarse cómo se han logrado los distintos tipos de jailbreak luego de tanto esfuerzo por parte de Apple para mejorar la seguridad de sus dispositivos. Lo cierto es que desde los inicios del jailbreak los desarrolladores y Apple han estado jugando al gato y al ratón. Y es que luego de varios años desde su nacimiento, el jailbreak sigue siendo un desafío para Apple. A lo largo del tiempo ha tenido que afrontar muchas veces situaciones irremediables, como fue cuando se dio el nacimiento de checkm8, un exploit de tipo bootrom (memoria de arranque de solo lectura grabada en el hardware) que se utiliza para ejecutar código sin firmar en dispositivos iOS y que imposibilita a Apple parchear estos defectos. Como resultado de esto muchos modelos de dispositivos quedaron permanentemente vulnerables obligando a sus usuarios a cambiar directamente sus equipos.
Por otra parte, cabe destacar que el jailbreak se considera absolutamete legal, puesto que los usuarios una vez obtenidos sus dispositivos tienen derecho a hacer lo que quieran con los mismos.
¿Como hacer Jailbreak?
Tal como hemos mencionado anteriormente, en principio será fundamental revisar la versión del dispositivo que utilizaremos y la versión del sistema operativo que este traiga consigo, pues no existen jailbreaks disponibles para todos los dispositivos o versiones de sistemas operativos. A continuación, compartimos una tabla en la que podemos encontrar algunos jailbreaks disponibles según las diferentes versiones existentes de iOS.
Versión iOS
|
Jailbreaks disponibles
|
---|---|
iOS 11.0 - 13.3
|
|
iOS 12 - 12.4
|
|
iOS 12.3 and up
|
En el sitio theiphonewiki podemos encontrar mucha información relevante relacionada a las distintas versiones de jailbreaks disponibles y temas afines.
Nota: Dado que los sitios relacionados al tema del jailbreak cambian constantemente, siempre será necesario validar las fuentes, ya que existen muchas páginas fraudulentas relacionadas con este tema que descargan malware.
Para nuestra prueba utilizaremos un dispositivo iPhone 6s con iOS 14.2. Para este modelo y versión vemos que existen algunos “tipos” de jailbreak disponibles, los cuales analizaremos a fin de tener diversas opciones disponibles. Nuestro primer caso será utilizando un jailbreak llamado Checkra1n, el cual no es ni más ni menos que un poderoso programa que a partir del exploit checkm8 nos permite crear un jailbreak de tipo Semi-tethered (ya que este exploit funciona aprovechando un desbordamiento de pila en la pila USB DFU), que por supuesto implica que el jailbreak se pierde al reiniciar el dispositivo y también obliga a disponer de una PC (en este caso no necesariamente Mac) para poder llevar acabo la ejecución del mismo.
Realizando Jailbreak con Checkra1n
Como decíamos, para nuestro primer caso la herramienta que utilizaremos será Checkra1n, la cual podemos descargar desde su sitio oficial.
Una vez descargado el instalador procedemos a instalar Checkra1n. Luego lo ejecutamos y conectamos nuestro dispositivo a la PC. Como podemos observar en la Imagen 3, checkra1n detectó nuestro dispositivo y nos ofrece un “wizard” para realizar todo el proceso de jailbreaking.
Hacemos clic en “start” y veremos que el proceso comienza colocando nuestro dispositivo en modo DFU (Device Firmware Update) para previnir cualquier problema que pueda surgir con el dispositivo.
Una vez iniciado el modo DFU el instalador nos indica la serie de pasos a seguir. Comenzamos haciendo clic en start, para luego mantener apretados los botones Home y Side (al mismo tiempo) de nuestro dispositivo durante cuatro segundos, y luego soltamos el boton Side dejando solamente oprimido el boton Home hasta que comience el proceso de instalacion y booteo del jailbreak.
Como podemos ver en la Imagen 6, mientras se lleva a cabo el proceso de booteo veremos en la pantalla de nuestro dispositivo como se realiza la ejecución del jailbreak.
Una vez finalizado este proceso, en la computadora veremos un mensaje de checkra1n que nos dice “All Done” y que indica que el proceso ha finalizado.
Tal como se aprecia en la Imagen 8, una vez iniciado el sistema veremos en nuestro dispositivo que se han incorporado a nuestro springboard dos aplicaciones, que son el propio “checkra1n” y “Cydia”. Esta última es instalada automáticamente por Checkra1n y nos guiará para verificar que nuestro jailbreak se ha desplegado correctamente.
Si abrimos Cydia y logramos ver su pantalla principal, tal como se muestra en la Imagen 9 a continuación, podemos considerar que el jailbreak se desplegó con éxito. Si al intentar abrir la aplicación esta se cierra automáticamente podemos considerar que el jailbreak no se realizó con éxito y será necesario volver a ejecutarlo.
Como podemos observar, si abrimos Cydia nos encontraremos con el menú del repositorio. Cuando llegue el momento, la idea aquí será que vayamos agregando diversas fuentes que nos permitirán instalar las distintas aplicaciones que necesitemos para realizar nuestras pruebas de seguridad.
Sin duda alguna, podemos decir que el proceso de jailbreak con checkra1n es muy sencillo. Realmente es una herramienta muy poderosa y estable que trae incorporada la instalación de un repositorio de terceros (Cydia), el cual tendríamos que instalar de modo manual si utilizamos otro tipo de software para realizar jailbreak.
Como hemos mencionado antes, es cierto que muchas veces al realizar jailbreak pueden existir diversos problemas que nos lleven a tener que realizar más de una vez el proceso hasta lograrlo, o en muchos casos incluso surgirá la necesidad de utilizar un jailbreak alternativo para lograr con éxito el proceso. Por eso, a continuación veremos cómo podemos utilizar un método alternativo a Checkra1n para realizar jailbreak. Según las prestaciones de nuestro dispositivo, utilizamos la herramienta Unc0ver, la cual nos permite instalar en nuestro dispositivo un jailbreak de tipo semi-untethered. La desventaja de esta herramienta es que la misma se presenta en formato IPA y nos obliga a tener que firmar este archivo para poder instalarlo en nuestro dispositivo, pero existen algunas alternativas que veremos a continuación que nos permitirán firmar e instalar este archivo en el equipo.
Realizando Jailbreak con Unc0ver y Cydia Impactor
En principio sabemos que vamos a contar con el archivo .ipa de Unc0ver y que necesitamos instalarlo en nuestro dispositivo. Para ello, el camino más sencillo podría ser apoyarnos en una herramienta llamada Cydia Impactor, la cual nos permitiría instalar el archivo .ipa de Unc0ver en nuestro dispositivo. Ahora bien, antes de trabajar con Cydia Impactor y Unc0ver sera necesario generar un AppleID, preferentemente con perfil de AppleDeveloper (que nos servirá para obtener los provisioning profile válidos para firmar nuestras aplicaciones), que podemos generar desde el siguiente enlace para luego, tal como se observa en las siguientes imágenes, acceder a las preferencias de seguridad de nuestro usuario AppleID y generar una contraseña de único uso que más tarde utilizaremos con Cydia Impactor.
Una vez creado y configurado nuestro AppleID necesitaremos descargar el sistema Cydia Impactor desde su sitio oficial y procedemos a instalarlo. Una vez instalado, conectamos nuestro dispositivo a la PC y abrimos Cydia Impactor que, como se observa a continuación, reconoce el dispositivo conectado.
Nota: es importante conectar nuestro dispositivo a la PC concediéndole permisos de acceso.
Una vez que tenemos Cydia Impactor instalado descargamos el archivo IPA de Unc0ver haciendo clic en el siguiente enlace, para luego ubicar el archivo descargado y arrastrarlo hacia Cydia Impactor.
Tal como se observa a continuación, Cydia Impactor nos solicitará nuestro AppleID y la contraseña de único uso que generamos anteriormente para dar comienzo a la instalación del archivo IPA (Unc0ver) en nuestro dispositivo.
Una vez terminado el proceso veremos que en el springboard de nuestro dispositivo se agrega el aplicativo de Unc0ver.
Abriremos el aplicativo de Unc0ver y, como se muestra a continuación, el menú nos advierte que serán necesarios realizar treinta pasos para el proceso de jailbreaking. Oprimimos el botón Jailbreak y observamos cómo se van completando todos los mismos.
Imagen 16. Proceso de jailbreak con Unc0ver desde nuestro dispositivo
Una vez terminados los 30 pasos de la instalación nuestro dispositivo se reinicia. Al iniciar el sistema veremos en nuestro springboard el repositorio Cydia instalado, al cual accederemos para verificar su correcta instalación y dar por terminado el proceso de jailbreaking.
Imagen 17. Cydia aparece instalado en nuestro equipo
Nota: Recordar que si abrimos Cydia y este se cierra automáticamente sin dar aviso debemos considerar que el proceso de jailbreak no se realizó correctamente y será necesario volver a ejecutarlo.
Como pudimos observar este método es un poco más engorroso que el de Checkra1n, pero es una alternativa que debemos manejar. Como hemos dicho, a la hora de hacer jailbreak siempre conviviremos con variables muy inestables que nos obligan a tener un as bajo la manga. Ahora bien, siguiendo con las distintas alternativas para realizar jailbreak según los recursos disponibles, a continuación veremos cómo instalar en nuestro dispositivo, mediante otro mecanismo, el archivo IPA (Unc0ver) a partir del uso del IDE Xcode y otras herramientas que veremos más adelante.
Realizando Jailbreak con Unc0ver y Xcode
En este caso vamos a necesitar otra vez de nuestro AppleID y la idea será crear un proyecto de prueba en Xcode configurando nuestro provisioning profile de desarrollador válido a fin de obtener el mobile provision que nos permitirá firmar nuestro archivo IPA para más tarde poder instalarlo en nuestro dispositivo.
En principio conectaremos nuestro dispositivo a la PC y como muestra la siguiente imagen, tendremos que verificar que la cuenta de nuestro AppleId este iniciada en nuestro equipo.
Luego abriremos Xcode y crearemos nuestro proyecto de prueba seleccionando la opción “Create a new Xcode Project” como lo muestra la siguiente imagen:
Como se muestra a continuación, completamos los pasos para generar el proyecto. En mi caso el nombre de proyecto es CreandoProvisioningCert. Al finalizar seleccionamos nuestro AppleID con perfil de desarrollo y completamos el resto de las preferencias para luego hacer clic en siguiente y así abrir nuestro proyecto recién creado.
Con nuestro proyecto creado nos queda obtener nuestro mobile provisioning para poder firmar nuestro archivo IPA . Como se muestra a continuación, Xcode reconoce nuestro dispositivo y hacemos clic en el botón play para instalar nuestro proyecto en el dispositivo y así generar el mobile provisioning.
Una vez que hacemos clic en play comienza el proceso de instalacion del proyecto en nuestro dispositivo y, como vemos en la Imagen 22, se agrega el icono del proyecto a nuestro springboard.
Nota: Dependiendo del versionado de tecnologías que se estén utilizando puede que, al correr el proyecto desde Xcode, el dispositivo solicite agregar el certificado de confianza. Esta situación la puedes ver en tu dispositivo desde el menú Configuración > General > Administración de dispositivos, donde verás el certificado, el cual puedes agregar como certificado de confianza.
Una vez instalado el proyecto estamos en condiciones de obtener nuestro mobile provisioning, por lo que necesitaremos ubicar en nuestro proyecto la carpeta Products (Imagen 23), ya que ahí veremos la aplicación de nuestro proyecto y le daremos boton derecho para seleccionar la opcion Show in Finder (mostrar en el finder), tal como se muestra en la siguiente imagen.
Luego, tal como se muestra a continuacion, se nos abrirá el directorio en el cual se encuentra la aplicación del proyecto y nuevamente le damos botón derecho a la misma para elegir la opción mostrar contenido de paquete.
En la siguiente imagen veremos que se abre el directorio de la aplicación y eureca, tenemos nuestro mobile provisioning que, en este caso, se identifica como embedded.mobile.provision y podremos hacer una copia del mismo en el directorio que deseemos.
Tal como lo hemos dicho antes, una vez obtenido nuestro mobile provisioning lo utilizaremos para poder firmar nuestro archivo IPA (Unc0ver). En este caso, para llevar a cabo este proceso nos ayudaremos de una herramienta llamada applesing, la cual utilizará el mobile provisioning que obtuvimos para llevar a cabo la firma del archivo IPA de Unc0ver y así más tarde podamos instalarlo.
Abrimos un terminal y colocamos la siguiente sintaxis:
./applesing.js -w -c -m embedded.mobileprovision Unc0ver_Relesae_6.1.2.ipa
Nota: en este caso tanto el mobile provisioning como el archivo ipa de Unc0ver se encuentran en el mismo directorio de applesing. Colocar las rutas adecuadas según sea vuestro caso.
Como vemos, en la salida del programa se genera un nuevo IPA llamado Unc0ver_Release_6.1.2-resigned.ipa, el cual representa la versión de nuestro Unc0ver firmado y listo para instalar en nuestro dispositivo, proceso que llevaremos acabo mediante la herramienta ideviceinstaller.
Con nuestro dispositivo desbloqueado, como se muestra en la siguiente imagen, ejecutaremos la siguiente sintaxis ideviceinstaller -i Unc0ver_Release_6.1.2-resigned.ipa que llevará a cabo el proceso de instalación del archivo IPA en nuestro dispositivo.
Una vez que el proceso finaliza veremos en el springboard de nuestro dispositivo la aplicación de Unc0ver instalada, la cual podremos ejecutar tal como hemos visto en el anterior caso.
Sin dudas, podemos resumir este último mecanismo como el más engorroso de todos los que hemos visto, aunque no menos necesario puesto que nos puede ayudar a instalar archivos IPA en nuestros dispositivos, tarea esencial que debemos manejar al momento de analizar aplicaciones.
Checkra1n Vs Unc0ver
Con respecto al uso de Checkra1n y Unc0ver, lo cierto es que ninguno es mejor que otro, ya que esto siempre dependerá del escenario de trabajo (modelo de dispositivo, versiones de sistemas operativos, etc.). Checkra1n es lo que llamamos un jailbreak Semi-tethered y Unc0ver uno semi-untethered.
Si bien ya hemos explicado al comienzo de esta publicación las diferencias, repasemos cuáles son. En el caso del jailbreak Semi-tethered sabemos que funciona con el dispositivo iOS conectado a una computadora y requiere ingresar al modo DFU y luego ejecutar una aplicación de computadora, mientras que el jailbreak semi-untethered funciona cargando una aplicación iOS dedicada en el dispositivo y simplemente basta con ejecutarla prescindiendo de una computadora, ya que los servicios de firma se podrían usar a través de un navegador web mobile para instalar la aplicación iOS, siendo esto realmente una ventaja.
Otra de las diferencias sustanciales entre estos “jailbreaks” es que, como mencionamos antes, checkra1n usa un exploit de tipo bootrom basado en hardware llamado checkm8, mientras que unc0ver usa una variedad de diferentes exploits tfp0 basados en software. Aquí la principal diferencia está en que los exploits que utilizan. La explotación de hardware, como sucede en checkra1n, no se pueden parchear, lo que significa también que Apple no puede parchear estos exploits con una actualización de software. Apple necesitaría recuperar físicamente todos los dispositivos afectados y soldar un nuevo hardware en la placa lógica de cada dispositivo para solucionar este problema y esencialmente los dispositivos afectados pueden ser liberados de por vida, independientemente del firmware que estén ejecutando. En cuanto al uso de tfp0 en Unc0ver, como dijimos antes, se trata del uso de una variedad y series de exploits que están basados en software, lo que significa que pueden ser parcheados por las actualizaciones de software de Apple. Por esta razón, en este caso Unc0ver debe agregar soporte para las nuevas versiones de iOS que vayan saliendo, situación que muchas veces genera que cada cierto tiempo nos quedemos sin soporte del jailbreak para muchas versiones de dispositivos y versiones de iOS dada la velocidad que maneja Apple para parchear sus vulnerabilidades.
Pese a estas diferencias también podemos decir que Checkra1n y Unc0ver comparten algunas características. Por ejemplo, ambos jailbreaks deben desplegarse nuevamente si se reinicia el dispositivo, y también ambos se pueden revertir con la restauración de rootFS o el sistema de restauración. Por otra parte, ambos reciben actualizaciones periódicas con nuevo soporte y correcciones de errores e instalan el gestor de paquetes Cydia por defecto, que tal como mencionamos, nos permitirá obtener las herramientas necesarias para realizar nuestras pruebas.
Conclusiones
Como vimos, existen diferentes caminos para llegar a un jailbreak exitoso. Más allá de cuál sea el camino que elijamos para hacer jailbreak, lo cierto es que este tipo de mecanismos siempre requieren mucha paciencia por parte del pentester y, como dijimos antes, siempre será necesario tener un as bajo la manga.
Es importante evitar aprender de memoria el uso de las herramientas y sus diferentes formas de ejecución y enfocarnos más bien en cómo funcionan realmente según sus características. Además, estar atentos a los detalles de cada una de las fases de la cadena de seguridad con la que tenemos que enfrentarnos cuando hacemos jailbreak a fin de ganar un campo estratégico más amplio y con muchos más recursos.
Sea como sea, lo cierto es que ya tenemos nuestro dispositivo con jailbreak y es natural que aparezcan preguntas tales como, ¿ahora qué debo hacer?, ¿cómo empiezo a analizar mis aplicaciones? Estas preguntas, entre otras relacionadas, serán abordadas en las próximas entregas de esta serie sobre pentesting en aplicaciones iOS.
Invitamos a leer el primer artículo de la serie “guía de pentesting en aplicaciones iOS”, titulado Arquitectura de Seguridad iOS: las bases del pentesting para este sistema operativo.