Skip to main content
mario1

Pequeña explicación sobre el twilight hack y derivados.

Hace poco tuve que hacer un pequeño trabajo sobre vulnerabilidades y me apeteció centrarme en la consola Wii y uno de sus trabajos más conocidos en el mundillo del hacking como es el Twilight Hack hecho por el Team Twiizers.

mario1

Viendo que la vulnerabilidad que se aprovecha en este caso no tiene ningún tipo de advisory y su documentación está un poco desperdigada por internet, creo que podrá resultar útil esta entrada para los que simplemente quieran curiosear sobre estos temas.

Sin más, voy a empezar con la explicación:

La wii es una consola que a lo largo de su vida ha tenido numerosos agujeros de seguridad o fallos de programación que han sabido aprovecharse para usos diferentes a los que nintendo planeaba.

Uno de estos fallos es el hecho de que la consola no comprueba ciertos límites a la hora de escribir en buffers, lo que sumado a la capacidad de los sceners de renombre de poder modificar archivos de guardado hace que sea bastante sencillo el hecho de modificar el contenido de algunas variables para poder explotar esta vulnerabilidad.

 En un inicio este fallo se explotó con el juego The legend of Zelda:Twilight princess. En este caso fue el nombre del caballo del protagonista lo que se modificó, de una forma tal que incluso se consiguió meter un pequeño programa cargador de archivos .elf en su interior.

Al leer el juego el nombre del caballo, la videoconsola sincronizaba los datos del archivo de guardado con una pila preparada para ello situada en la memoria principal. Si el nombre del caballo no estuviese modificado, el juego continuaría su ejecución con normalidad pero en este caso no es así, ya que se han conseguido sobreescribir las direcciones de memoria adyacentes al lugar donde tendría que haberse guardado el nombre en cuestión.

 Para poder ejecutar código casero en un sistema cerrado como una consola no basta con simplemente sobreescribir ciertas direcciones de memoria. En este caso particular, hay que conseguir el control de un registro utilizado por los procesadores de arquitectura PowerPC (como el de la wii) conocido como CTR.

CTR o Count Register contiene un contador que decrementa su valor en ciertas operaciones branch. Pero en el caso particular de este exploit, se utiliza otra peculiaridad del registro CTR que es la de poder saltar a la dirección contenida dentro de este registro mediante la instrucción en ensamblador BCTR.

De esta parte, se puede sacar como conclusión que si consigues escribir en CTR un valor al que a ti te interese saltar y consigues ejecutar una BCTR, vas a poder ejecutar código diferente al que la ejecución normal del programa esperaría.

 Como poner todo el código fuente sería bastante denso y además complicado de leer por estar en ensamblador, he preferido poner la parte interesante de éste, que es donde se sincronizan los datos con la pila en memoria, donde se hace MTCTR para mover un valor interesante a CTR y por último BCTR que es donde se hace el salto:

 li 0,0×0400 ; mtctr 0 ; mr 5,3

dcbst 0,5 ; sync ; icbi 0,5 ; addi 5,5,0×20 ; bdnz 0b

sync ; isync

 // En este trozo se han sincronizado las cachés sobrecargando una de ellas.

mtctr 3 ; bctr

//aquí se escribe en CTR y se hace la BCTR

Pero en el caso particular de este exploit para la wii, también hace falta saber cómo modificar los archivos de guardado. Los archivos de guardado en la wii se cifran con una clave conocida como sd-key.

Esta clave junto con su IV (vector de inicialización) es igual para todas las consolas:

 ab01b9d8e1622b08afbad84dbfc2a55d, IV: 216712e6aa1f689f95c5a22324dc6a9

 Esta clave consiguió sacarse a través de un despiste de los programadores de nintendo. La wii es una consola con dos modos diferentes de trabajo. El modo wii y el modo de retrocompatibilidad con la gamecube. En el modo wii se usan 88 MB de ram mientras que en el modo gamecube el tamaño está limitado a 24MB de ram y el resto de la memoria sería teóricamente inaccesible.

Un grupo de sceners puenteó el chip de memoria para poder hacer un dump de direcciones de memoria teóricamente inaccesibles en modo gamecube (Twiizer Attack), y después de estudiar ese dump se dieron cuenta de que la consola guardaba allí mismo claves tan importantes como la clave pública (igual para todas las consolas, clave con la que se cifran por ejemplo los juegos en formato físico) la privada (clave con la que se cifran datos particulares de cada consola como juegos descargables) o un blanqueador MD5 (se utiliza para manejar cabeceras de los archivos de guardado).

Teniendo ya todas las claves, sólo era cuestión de tiempo que esta gente consiguiese modificar ciertos elementos de la consola como en este caso los archivos de guardado de juegos.

¿Qué relación guardan con el Twilight hack los otros juegos con archivos de guardado modificado?

Pues una relación muy simple. El Twilight hack dejó de funcionar en una actualización del menú del sistema de la wii, la cual comprobaba si el archivo de guardado del Zelda Twilight princess se había modificado. Comprobaba este archivo de guardado y sólo este archivo de guardado, con lo que el Team Twiizers no tuvo más que coger otros juegos y modificar nombres de otros objetos o personajes para acabar utilizando el mismo exploit sin necesitar el Zelda Twilight princess.

Desde nintendo parece que ya no hay interés en mejorar el sistema comprobaciones de archivos de guardado modificados y es por esto que a día de hoy siguen funcionando exploits derivados del Twilight hack en juegos como el Lego Indiana Jones, el Lego Batman o el Lego Star Wars.

 En resumen, lo que se hace con este exploit es sobreescribir memoria adyacente a la pila en la que se guarda el nombre que se quiere modificar para conseguir con ello ejecutar código casero. Para ello se ha modificado el archivo de guardado del juego y se ha cambiado el nombre por datos de interés para el exploit. Una vez explotada la vulnerabilidad, en este caso se ejecuta un cargador de archivos .elf que permite cargar o instalar en la consola aplicaciones homebrew.

Si después de esto tienes más ganas de curiosear, voy a dejar aquí la bibliografía que estuve consultando para recopilar la información:

Charla de Héctor Martín (Marcan) en la Euskal Encounter sobre la seguridad de la wii:

 http://marcansoft.com/uploads/euskal16-wiihacking/wiihax/wiihax.html

 Wiki de Elotrolado:

 http://www.elotrolado.net/wiki/Twilight_Chainloader_Hack

 Código fuente de los diferentes exploits derivados del Twilight hack:

 http://wien.tomnetworks.com/gitweb/?p=savezelda.git

 Wiibrew

 http://wiibrew.org/wiki/Indiana_Pwns

 Blog de Tmbinc:

 http://debugmo.de/2008/01/wiihackedit/

 Hackmii (en los comentarios de este artículo hay una bonita charla entre Bushing y otra gente):

 http://hackmii.com/2008/06/wiimenutphackkilleranalysis/

 Explicaciones de lenguaje ensamblador PowerPC:

 http://devpit.org/wiki/Debugging_PowerPC_ELF_Binaries

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.