lunes septiembre 29, 2008
Otro tonto error de un programador
A finales de los 90 existían un sinfín de redes montadas con el Windows de turno mediante la creación de un 'Grupo de Trabajo' bajo el cual se compartían impresora y discos. Técnicamente se utilizaban los servicios NetBIOS de la implementación de Microsoft y las credenciales se obtenían con un simple nombre de usuario y su password.
Como no podía ser de otra manera, los hackers vieron un filón en todos aquellos 'share resources' llenos de interesante información, y no se tardó en encontrar el bug que permitía, mediante un cliente de NetBIOS modificado, tomar acceso a cualquier recurso compartido con un Windows 95. El bug permaneció en secreto varios años hasta que en el 2000 fué detectado y corregido por Microsoft.
El error era tan simple, que incluso se especulaba si no había sido introducido como 'puerta trasera'. Consistía básicamente en que a la hora de chequear si la password pasada era la correcta, no se hacía en base a la longitud del password bueno, sino que se tomaba el que se recibía del cliente. Si un cliente de NetBIOS modificado enviaba un password de 1 carácter, probando 64 veces se lograba dar con la primera letra del password bueno y conseguir estar autorizado.
La historia se repite, esta vez en la videoconsola de última generación de Nintendo, la Wii, la cual por diseño está provista de los más avanzados sistemas de seguridad y encriptación. En la máquina, a partir del primer boot-loader se establece una cadena de confianza mediante criptografía fuerte, para el boot1, el boot2, el IOS, los canales (juegos) y finalmente los juegos que se leen del DVD(1). Todo el software va debidamente encriptado y firmado, usándose SHA-1, MD5, RSA2048 y AES. Pero como decía Confuncio (no se si fue él), 'una cadena es tan resistente como lo sea el eslabón más débil'.
Para desespero de los ingenieros de la Wii, la rutina que comprueba la firma de un DVD, para asegurar que su contenido sea íntegro, en la comparación entre el hash SHA-1 calculado a partir del contenido y el que se graba en el propio DVD (y que obviamente va firmado con la clave RSA privada) se hace a nivel de string y no binaria, es decir, cuando encuentra un cero, dará por bueno el contenido del DVD modificado, por lo que únicamente se tendrá que forzar este valor (los detalles al final del post (2)).
He aquí el banner que utilizan los hackers de la Wii en su página HackMii.com..

(1) Para los que estén interesados en la secuencia de arranque de una Wii, la cosa va más o menos así. Al arrancar la máquina se ejecuta un código ROM que va embutido en el chip principal (Hollywood) , obviamente este código ni es leible exteriormente ni es modificable. La misión de este boot0 es cargar un boot1 de la memoria flash (NAND) y verificar mediante SHA-1 que su hash coincide con el que se ha escrito en el propio chip en una área PROM. El boot1 carga a su vez un boot2, verificando mediante una hash encriptada con RSA la integridad de sus estructuras. Este último software es el que se actualiza de tanto en tanto por Nintendo para corregir bugs y tapar los agujeros de seguridad que le van encontrando.
(2) El FakeSigning o Firmas Trucha, consiste en modificar el contenido de un DVD de tal manera que su hash SHA-1, de 20 bytes, empiece por cero, luego, como firma RSA ponemos ceros, que por las propiedades del RSA indicará que el SHA-1 que encripta es todo ceros. Al comparar el SHA-1 calculado y el que va en la firma, se verificarán dos strings de longitud 0, cuya comparación siempre dará true. Si la comparación fuese binaria, se compararían los 20 bytes y daría false, a no ser que tuviesemos un maquinón para generar un contenido que su hash SHA-1 fuese todo ceros, algo criptográficamente imposible.
Nota: Este contenido se presenta con la única finalidad de divulgar conocimientos técnicos.
Search This Site
Recent Entries
- HSPA USB Modem de MoviData
- Windows 7, el último S.O.
- Navegadores web en la Antártida
- En la tónica de hace 5 años
- Script para ordenar una tabla html print friendly (2/2)
- El definitivo script para ordenar una tabla html con javascript (1/2)
- Cuando la seguridad flaquea en sutilezas
- Recuperar los passwords de Firefox 3 (habiendo tenido FF2)
- Otro tonto error de un programador
- Incongruencias espacio temporales
- Día internacional del Software Libre
- Canon y la sopa boba
- Ideas y Buenas ideas
- Relanzamiento de cocoon.apache.org
- Wii con teclado USB
- Edicion en Roller off-line con w.bloggar
- Los términos mas buscados
- ¿Cuándo terminamos el proyecto?
- Recuperación de fotos (y II)
- Recuperar fotos borradas (I)