« Arquitectura de la Wii (index)

Arquitectura de la Wii

Chapter 10: Antipiratería y Homebrew


Tabla de contenidos

  1. Protección de copia
  2. Cifrado del sistema
    1. Cifrado compartido
    2. Cadena de confianza
    3. Cadena del Starlet
    4. Más claves
    5. Observaciones
  3. La caída del cifrado
  4. Los albores del Homebrew
  5. Un estado permanente
  6. La respuesta de Nintendo

Creo que la cantidad de características que ofrecía esta consola la hacía muy atractiva para la piratería, ya que descifrar el sistema de seguridad permitiría a los desarrolladores caseros tener en sus manos las capacidades de la consola sin tener que pasar por las verificaciones de Nintendo. Sea como fuere, la Wii acabó teniendo una fantástica biblioteca Homebrew.

Protección de copia

Empecemos con la víctima común: la unidad de disco.

Los discos de Wii incluyen la mencionada zona de "burst cutting", inaccesible para los lectores convencionales. Por lo tanto, en ausencia de esto, el lector siempre se negará a leer el contenido.

Image
La unidad de disco no permitirá que nadie pase esta pantalla hasta que se inserte un disco válido.

Los desarrolladores de modchip descubrieron que la unidad contenía una interfaz de depuración llamada "Serial Writer" , aunque este puerto está bloqueado hasta que se introduce una clave secreta. Aun así, era cuestión de tiempo que se descubriera la clave. Una vez ocurrido esto, los modders pudieron desactivar la protección anti-copia y posteriormente desarrollaron un modchip que automatizaba este proceso.

Matsushita lanzó nuevas revisiones de esta unidad ofuscando la interfaz de depuración, sin embargo, se descubrieron otros fallos en el lector que volvieron a habilitarlo.

Cabe mencionar que el principal beneficio de los modchips era la piratería pura y dura, ya que el contenido del disco sigue estando cifrado, por lo que se necesitaban más investigaciones y herramientas para ejecutar código personalizado.

El homebrew de la GameCube, por su parte, ya era posible de ejecutar siguiendo exploits previos descubiertos en la predecesora.

Cifrado del sistema

Esta es probablemente la sección más compleja de esta consola, pero su incesante investigación abrió la puerta a montones de desarrolladores con talento y programas asombrosos.

La Wii diseñó su seguridad interna en torno a un par de cifrados criptográficos (AES, RSA, ECC, SHA-1 y HMAC). Para facilitar las explicaciones, veamos cada grupo por separado:

Cifrado compartido

La comunicación entre muchos componentes (NAND, disco de juego y tarjeta SD) está encriptada para evitar su manipulación. Nintendo eligió un sistema de clave simétrica para protegerla , lo que significa que la Wii utiliza la misma clave para cifrar y descifrar sus datos.

El Starlet tiene tres claves AES de 128 bits almacenadas en su memoria OTP , estas se escriben una vez durante la fabricación:

Con esto, podemos ver que el Starlet se encarga del cifrado/descifrado de contenido sensible, es por esto que esta CPU es la única que tiene acceso a datos confidenciales.

Cadena de confianza

Los títulos contienen otra capa de seguridad, RSA-2048. Se trata de un cifrado asimétrico, lo que significa que necesitamos una clave para cifrar el contenido y otra para descifrarlo. En pocas palabras, esto permite a Nintendo cifrar los títulos utilizando una clave no revelada (llamada "clave privada"), mientras que la Wii los descifra utilizando una "clave pública", que se almacena en la consola. Si los piratas informáticos obtuvieran la clave pública, no sería suficiente para descifrar el sistema de seguridad, ya que se espera que los datos sigan cifrándose con la clave privada, que sólo Nintendo conoce.

Además, RSA no sólo se utiliza para cifrar contenidos, sino también para comprobar la integridad de dicho cifrado. Verás, Nintendo utiliza múltiples claves que se usan para firmar (cifrar) datos ya cifrados, formando una cadena de cifrado con el único propósito de asegurarse de lo siguiente:

Permítanme darles un ejemplo de cómo funciona esto:

  1. Nintendo crea una clave llamada x.
  2. Nintendo programa el Starlet para que sólo confíe en los contenidos firmados con la clave x.
  3. Si el Starlet tiene que descifrar un título con la clave y, solo procederá si y ha sido firmado con la clave x.

Esto se denomina cadena de confianza. Fuera de la Wii, esta técnica se utiliza habitualmente para proteger la mayoría de nuestras comunicaciones en todo el mundo (por ejemplo, los navegadores web que utilizan HTTPS se basan en "certificados raíz" para validar la autenticidad de certificados desconocidos).

Cadena del Starlet

La OTP del Starlet almacena claves públicas (lo que significa que, para nuestros propósitos, sólo puede descifrar y verificar la firma del contenido). Su cadena de confianza está formada por las siguientes claves :

Como ves, todo esto permite a Nintendo ser el único distribuidor de contenido, lo que puede ser positivo para los estudios de juegos preocupados por la piratería.

Más claves

Este sistema también contiene un par de claves privadas y públicas de la ECC. La criptografía de curva elíptica (ECC) es otro algoritmo similar al RSA. En este caso, sólo se utiliza para firmar el contenido transferido a través de la tarjeta SD. Esto es lo que impide que los contenidos copiados de una Wii se utilicen en otra.

La clave ECC está firmada por otra clave pública RSA llamada MS, que permitirá al Starlet confiar en la clave ECC.

La última clave utilizada por esta consola es la clave HMAC, que utiliza otro algoritmo que combina hashes SHA-1 y HMAC. Durante el proceso de arranque, el Starlet comprueba que la NAND no haya sido alterada por hardware de terceros. Para ello, calcula el hash SHA-1 de NAND y lo compara con un hash fijo para comprobar si coinciden. Además, el hash guardado se firma con la clave HMAC para garantizar su autenticidad.

Como nota final, la clave HMAC se almacena en SEEPROM (fuera del Starlet), no en OTP.

Observaciones

Después de todo esto, cabe mencionar que cuando el sistema ejecuta juegos de GameCube, no se utiliza ninguno de los métodos de cifrado mencionados. En su lugar, el Starlet sólo comprobará que el juego sólo accede a sus posiciones de memoria designadas. Esto se debe a que 1/4 de la RAM GDDR3 está asignada para simular la antigua ARAM.

La caída del cifrado

Empecemos con las claves AES, el algoritmo puede ser difícil de descifrar, pero si las claves se extraen de alguna manera (especialmente la clave común), esa capa de seguridad quedaría anulada al instante. Por lo tanto, el principal reto es cómo extraerlas.

Image
Diagrama de seguridad del Starlet.

Pues bien, un grupo de hackers llamado Team Twiizers descubrió que la falta de firmas en el modo GameCube puede ser una prometedora zona de ataque . No solo descubrieron que 3/4 de esa RAM GDDR3 no se inicializaban tras ejecutar un programa GC, sino también que puenteando algunos puntos de dirección de la placa base (usando, eso sí, unas pinzas) podían intercambiar los bancos seleccionados de RAM GDDR3, permitiendo el acceso a zonas restringidas. Y he aquí, se descubrieron las claves AES residían allí.

No olvidemos que esto sólo permite descifrar la "primera capa" de seguridad, pero para poder ejecutar programas sin firmar (Homebrew), también hay que crackear RSA. Por desgracia, esto puede ser computacionalmente imposible... A menos que haya fallos en su aplicación. Pues bien, Team Twizzers no se detuvo ahí, así que empezó a invertir la forma en que se codificaba IOS, centrándose en sus funciones de verificación de firmas.

La verificación de firmas RSA, sin entrar en demasiados detalles, funciona comparando el hash de la operación RSA calculada con la firma descifrada. Después de algunas manipulaciones, el grupo descubrió algo gracioso: Nintendo implementó esta función usando strncmp (la comparación de "cadenas" de C).

Para la gente no familiarizada con C, strncmp es una rutina utilizada para comprobar si dos cadenas son iguales. Este método recibe tres parámetros: dos cadenas y un número entero, este último indica el número de caracteres que hay que comparar. Después, strncmp comienza a comparar cada carácter hasta que se alcanza el final de cualquier cadena (o el contador de caracteres). Las cadenas en C son solo una cadena de caracteres terminada en un carácter \0, esto significa que strncmp deja de compararse una vez que cualquier cadena llega a \0. Por lo tanto, al componer un título de Wii de forma que su hash contenga \0 al principio, los cálculos RSA del Starlet se encontrarán comparando hashes muy cortos (o incluso vacíos) con sustanciales posibilidades de colisión (datos diferentes que producen el mismo valor hash). En última instancia, utilizando una cantidad factible de fuerza bruta, esto permitió que la comparación arrojara igual... ¡El título está firmado!

Por si fuera poco, este fallo se descubrió en múltiples versiones de IOS, ¡e incluso en rutinas encontradas en el boot1 y el boot2!

Los albores del Homebrew

Después de esto, sólo quedaba una cosa: hacer que el exploit fuera permanente e implementar una herramienta "fácil de usar", para que pudiera ejecutar programas personalizados sin problemas.

Image
La ejecución de aplicaciones de terceros se realizaba inicialmente mediante una partida guardada falsificada.

Hasta ahora, estos exploits requerían el uso de hardware adicional, por lo que no todos los usuarios podían aprovecharlos... Hasta que Team Twizzers descubrió otro exploit: un desbordamiento del búfer del juego.

Me refiero al famoso The Legend of Zelda: Twilight Princess (un juego de Nintendo, por cierto). TT descubrió que el archivo de guardado del juego podía modificarse para desbordar el número de caracteres utilizados para dar nombre al caballo del jugador. Así, cuando el jugador intenta leer el nombre desbordado, se desencadenaría una reacción en cadena que terminaría en la ejecución de código arbitrario. Esto podría usarse para ejecutar, digamos, un cargador de programas.

Como ahora se podían falsificar las firmas, este archivo guardado manipulado se distribuía fácilmente por la red para que otras personas lo utilizaran. Como resultado, la comunidad homebrew ahora podía ejecutar su software personalizado.

Un estado permanente

Al seguir revirtiendo IOS, se descubrió que las firmas sólo se comprueban durante la instalación de los títulos, no durante su ejecución.

Image Image El Canal Homebrew no oficial (2008).
Probablemente el hack más fácil de usar de todos los tiempos.

Por lo tanto, TT lo hizo de nuevo. Forjaron cuidadosamente un canal instalable que podía cargar programas arbitrarios desde la tarjeta SD. Si este canal se instalara antes de que Nintendo hubiera tomado medidas para mitigar los problemas de seguridad, la Wii disfrutaría de homebrew de forma permanente (independientemente de que Nintendo parcheara los fallos de su firma en el futuro, como así hizo).

El Canal Homebrew fue el resultado de esto, este título permitía a cualquier usuario poner en marcha programas homebrew que se beneficiaban del control total de este sistema (con todas las implicaciones que esto significa).

La respuesta de Nintendo

Por razones obvias, Nintendo emitió varias actualizaciones de sistema que corregían los exploits de firma en múltiples versiones de IOS, también se ocuparon de sus etapas de arranque defectuosas enviando nuevas revisiones de hardware.

Image
Muchas de estas están llegando.

Sin embargo, todavía se descubrieron fallos fundamentales en este sistema:

Por lo tanto, para resolver esto, lo único que quedaba era sólo el juego del gato y el ratón. Durante los meses siguientes, se descubrieron diferentes exploits y Nintendo intentó parchearlos uno tras otro. Este "juego" continuó hasta que la consola llegó al final de su vida útil y no se publicaron más actualizaciones. Podemos asumir que el ratón ganó esta vez.

En el momento de escribir estas líneas, los exploits mencionados en este artículo ya han sido parcheados, pero también sustituidos por otros que funcionan actualmente.

Supongo que no se puede discutir acerca del impacto que tuvo la hacking scene en este sistema, y quién puede olvidar la enorme cantidad de homebrew que se puso a disposición (había incluso una "tienda" de homebrew, que era más rápida y libre que el "Canal Tienda Wii" oficial).


Previous: 9. Juegos

Next: 11. Eso es todo amigos


Rodrigo Copetti © 2026 RSS Feed

Ir a la edición moderna

Inicio · Escritos · Soporte · Acerca del autor · Acerca del sitio web