suloku escribió:No, a ver, os cuento la naturaleza del exploit.
La ps2 tiene un renderizado de graficos de psx.
Cuando metes un juego de psx la ps2 busca el title.db en la mc0, en donde hay datos sobre el renderizado este.
Esto produce un desbordamiento de buffer...co lo cual se puede cargar codigo arbitrario.
Ese codigo arbitrario lo que hace es cambiar el color de la pantalla y cargar un archivo ELF de una ruta (BRDATA-SYSTEM en la mc0) que varia segun la region de la consola mediante una comprobacion de la region de la consola en un modulo de la rom0.
Bueno, el codigo del title.db esta disponible, lo que ha echo ha sido añadir mas rutas de busqueda, la carga e inclusion en el title.db del modulo usb y lo que hay que hacer para cargar desde hdd es incluir los modulos necesarios para manejar el hdd y una vez montada la particion donde se encuentra el elf cargarlo.
La verdad es que pensandolo bien, quizas esos modulos de manejo del hdd ocupan mas que el ulaunchelf...para eso casi que me meto el ule
Eso es. El title.db no es mas que la base de datos que guarda la configuración sobre los parámetros del renderizado de juegos de PSX que podemos cambiar en el menu de la PS2 (las opciones de suavizar las texturas y la de acelerar la velocidad de carga).
En cuanto metemos un juego de PSX, la PS2 busca este archivo para saber como debe mostrar el juego en pantalla (el renderizado, vamos).
Cual fue el error de Sony?
Pues no ponerle al programa que lee ese title.db un strncpy (lo de que la memoria no tenga separación entre la dedicada a datos y la dedicada a programas no es un fallo, claro está), con lo que no se valida el tamaño de los datos de entrada. Ese title.db tiene que ser escrito en un buffer (no es mas que una representación de la memoria) limitado, claro, por lo que un overflow está mas a huevo que nunca.
Da la casualidad que el programa que lee el title.db tiene acceso a los máximos privilegios que da la consola, es decir, permite cargar binarios de PS2.
El overflow se carga los datos de otros buffers posteriores (metiendo chorizos de 0s que son ignorados por el programa a lo que le sigue el código del exploit. Supongo que el buffer será de tipo string) al que le corresponde al title.db y sique ejecutando lo que ve, en este caso el shellcode que carga el elf que queramos.
Cualquiera de nosotros podría hacerse un shell script para el bash de linux o un fichero por lotes para MS-DOS que creara un desbordamiento del buffer sin problemas. Es la "lacra" de los sistemas informáticos de la últimas dos décadas y lo seguirá siendo (en PS3 el contador ya se puso en marcha. Tic tac Sony, tic tac
).
Salu2.