miércoles, 24 de octubre de 2012

From JailBreakMe to Jail0wnMe

Tal y como le comentaba a Chema Alonso en la entrevista que me ha hecho en su blog con motivo del quinto aniversario de Pentester.Es, pensé en liberar el "exploit" (por llamarlo de alguna manera) del Jail0wnMe que presenté en las Conferencias No cON Name el año pasado, pero fue una de esas cosas que te quedas con que ya lo has hecho, y en realidad solo pensaste hacerlas :P

Como más vale tarde que nunca, acabo de colgar en TOOLS.PENTESTER.ES los scripts que utilicé. No solo el que convierte el PDF de JailBreakMe a Jail0wnMe, sino también los Payloads que utilicé. Ahora hay más Payloads por ahí, pero en su momento, cuando lo tuve que hacer, no encontré ninguno que me encajara, así que me los programé yo mismo. Os los dejo para que podáis reaprovechar el trabajo: PINCHA AQUÍ.

Además de colgar los scripts como tal, os voy a explicar un poco qué es lo que hacen ¿Por qué? Pues porque siempre es útil saber como funcionan las herramientas por debajo, y porque lo que he colgado no es una herramienta como tal, sino un script que me hice parar solucionar un problema que me surgió durante un Pentest, así que no está probado más que con los dispositivos que me encontré. Si os encontráis con algún problema en algún otro dispositivo, quizá tengáis que hacer pequeños cambios.

¡VAMOS ALLÁ!

Lo primero de todo es conseguir el PDF de JailBreakMe para el dispositivo y versión que queremos explotar. Parar ello únicamente hay que visitar la web de JailBreakMe 3.0 y descargarlo, pero... tenemos un problemilla, y es que la web nos va a dar el PDF adecuado en función de la versión que detecte en nuestro User-Agent, con lo cual no vamos a poder descargarlo empleando un navegado "normal", y tampoco usando un iPhone o iPad de la versión adecuada (si disponemos de uno) porque se ejecutaría el exploit, así que la solución que empleé fue usar la extensión de Firefox User Agent Switcher, con la que podemos hacer creer a la web que somos la versión del dispositivo que queremos explotar:


Una vez que hemos conseguido bajar el PDF, si le pegamos un vistazo dentro con cualquier editor, veremos que mayoritariamente es texto, pero que hay un stream que está encodeado. Si lo extraemos y decodificamos tendremos algo así:


$ file pfb.raw 
pfb.raw: PostScript Type 1 font program data

¡MUCHO OJO! No hagáis un "cat" del fichero, porque dentro el cachondo de Comex (el autor del exploit original) ha puesto esto:


En otros sistemas no sé que pasará, pero en mi MacBook son dos combinaciones que hace que la ventana se minimice y se maximice, por eso lo llama "Terminal Fun" el muy .... xDDDD Cuidado con esto si no queréis terminar matando vuestro terminal o esperando un par de horas a que acabe de divertirse :P

Volviendo a nuestro caso, como sabéis la vulnerabilidades está en el parseo de las fuentes, así que vamos por buen camino. Si miramos dentro de la fuente veremos que tenemos texto y trozos que, al igual que estaba la fuente antes, están comprimidos. Si buscamos entre ellos (los scripts que os he pasado ya van a por el adecuado) nos encontramos uno que, al descomprimirlo, es algo así:



$ file binary.raw 
binary.raw: Mach-O executable arm


¿Un binario de Apple para plataforma ARM DENTRO de un PDF? ¡Eso tiene pinta de ser algo!
Efectivamente, es un binario que se ejecuta en nuestro dispositivo iOS y que se trae de la web de JailBreakMe todo lo necesario para realizar el JailBreak.

¿Qué pasa ahora si cambiamos este binario por uno de nuestro elección? Pues básicamente es lo que hacen los scripts que acabo de colgar:

  1. Coge el binario que le hayáis pasado.
  2. Lo comprime y lo rellena de basura para que ocupe el mismo espacio que el original.
  3. Lo coloca substituyendo al original y vuelve a construir el PFB.
  4. Lo comprime y lo vuelve a colocar substituyendo al PFB original dentro del PDF.
  5. Os crea un PDF nuevo con estas modificaciones.

Si miráis el código veréis que "la búsqueda" de todo esto es un poco rudimentaria, pero creo que con lo que os explico en este post tenéis suficiente para rehacerlo si fuera necesario.

También tenéis, como os he dicho, ejemplos de Payloads y un par de shellscripts con los comandos GCC que utilicé yo para compilar desde mi MacBook.

Por último, os dejo el video de la demostración que hice en NcN el año pasado.
Disfrutadlo con salud ;)


8 comentarios:

Anónimo dijo...

y esto vale para alguna de las versiones actuales de ios?

Jose Selvi dijo...

@Anónimo: Este fallo no, fue corregido en la versión 4.3.4 de iOS, pero se puede seguir un proceso similar con cualquier exploit remoto que se utilice para hacer JailBreak.

Precisamente no lo publiqué cuando lo presenté porque aún había mucho iOS 4.3.3, y no quería hacerlo tan fácil. Hoy en día yo diría que ya poca gente usa esta versión. Aún así, alguno te encontrarás, sobretodo usuarios que se compraron su iPhone/iPad hace tiempo y no lo han conectado a un iTunes en la vida.

Óscar Marín dijo...

Y los PDFs de jailbreakme se pueden sacar de aquí:
http://www.jailbreakme.com/_/
;)

Jose Selvi dijo...

@Oscar: De eso me di cuenta después de conseguir los PDF que necesitaba xDDDD

De todas maneras, no sé si estarán todos los que soporta el exploit, y que coño! Obtenerlos de la otra manera mola más ;)

Jose Selvi dijo...

Posteriormente también publicó Comex el código fuente con el que generaba los PDFs, pero con algunos errores de codificación. Al final resultaba más fácil hacerlo directamente del PDF, y además es un buen ejercicio porque no siempre vamos a tener acceso al código del exploit.

Óscar Marín dijo...

@Jose: Toda la razón... Más divertido con los UserAgent, a partir de ahí he sacado la URL...

También hay otra http://www.jailbreakme.com/saffron/_/ que aparte de PDFs contiene los ejecutables de los que hablas para hacer el jailbreak.

Enhorabuena por el curro!!!

Pedro Sánchez dijo...

Enhorabuena por el post. Me ha gustado mucho.

Jose Selvi dijo...

Gracias @Pedro :)