SlideShare une entreprise Scribd logo
1  sur  70
¿Qué falló en Playstation 3?Piratería, seguridad informática y el mercado de las videoconsolas Marco Antonio Gómezy Federico PeinadoMáster en Desarrollo de Videojuegos Universidad Complutense de Madridwww.videojuegos-ucm.es www.gueim.org
El apagón de PlayStation Network Suspensión total del servicio en el mundo20 de abril de 2011 – Actualidad Más de 77 millones de usuarios Afectando incluso a algunos juegos offline Pérdidas de cientos de miles o incluso millones de dólares a empresas (Capcom)  Suspensión relacionada de plataforma PC 2 de mayo de 2011 – Actualidad  Sony Online Entertainment (MMOGs) Más de 24 millones de usuarios(aunque casi sin afectar a tarjetas de crédito) Motivo: Intrusiones externas Del 16 al 19 de abril de 2011  Datos comprometidos de identificación personal, contraseñas y tarjetas de crédito Continúa la investigación…
Copiar o no copiar Contenidos digitales: ¡llega la copia sin pérdida! Sistemas anticopia Hardware (libros de claves, cartuchos, “mochilas”, etc.) Software (errores esperados, número de copias, SecuROM y otros DRMs, etc.) Internet y la Web Descargas masivas, difusión del homebrew, etc. Activación remota, rootkits, contenido en la nube, etc.
La caída de la PS3 erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1Briv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4Dpub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8DDa: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70 Lanzamiento (Japón)11 de noviembre de 2006 Modelo “slim” sin Linux1 de septiembre de 2009 Exploit de GeoHot usando Linux26 de enero de 2010 Firmware 3.21: Todos sin Linux28 de marzo de 2010 PS JailBreak: 1er Cargador USB18 de agosto de 2010 EpicFail: Anuncio de carga sin USB y firmado de ejecutables29 de diciembre de 2010 GeoHot hace pública la clave raíz3 de enero de 2011 Y la historia continúa…
La caída de la PS3 erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1Briv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4Dpub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8DDa: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70 Lanzamiento (Japón)11 de noviembre de 2006 Modelo “slim” sin Linux1 de septiembre de 2009 Exploit de GeoHot usando Linux26 de enero de 2010 Firmware 3.21: Todos sin Linux28 de marzo de 2010 PS JailBreak: 1er Cargador USB18 de agosto de 2010 EpicFail: Anuncio de carga sin USB y firmado de ejecutables29 de diciembre de 2010 GeoHot hace pública la clave raíz3 de enero de 2011 Y la historia continúa… La mayoría de las transparencias que siguen son directamente las de esta charla
La caída de la PS3 erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1Briv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4Dpub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8DDa: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70 Lanzamiento (Japón)11 de noviembre de 2006 Modelo “slim” sin Linux1 de septiembre de 2009 Exploit de GeoHot usando Linux26 de enero de 2010 Firmware 3.21: Todos sin Linux28 de marzo de 2010 PS JailBreak: 1er Cargador USB18 de agosto de 2010 EpicFail: Anuncio de carga sin USB y firmado de ejecutables29 de diciembre de 2010 GeoHot hace pública la clave raíz3 de enero de 2011 Y la historia continúa…
Arquitectura de la PS3
Conocimientos técnicos necesarios
Conocimientos previos Buffer overflow Protocolo USB Arbitraje centralizado por el host Tamaño de paquetes variable Marcado por el host Solicitado por el dispositivo Configuraciones, interfaces y endpoints
PSJailbreak (y clones) Buffer overflow en lv2 Consigue ejecutar código a nivel del kernel No W^X en lv2 HV da páginas ejecutables “con alegría”
PSJailbreak (y clones) Resultado: GameOS comprometido LV1 no comprometido SPE para seguridad no comprometido Pero tenemos piratería Rompiendo el 20% del sistema de seguridad, tenemos el 100% de lo que Sony quería evitar
Fallo de seguridad LV1 no se encarga de asegurar a LV2 la integridad del juego Con acceso a LV2 podemos quitar la protección
PSJailbreak Análisis que sigue usando principalmente PSGroove Dos fases Conseguir acceso al SO Cambiar su comportamiento
PSJailbreak: accediendo a lv2 // Descriptor del dispositivo USB. Es el primero que // se envía. const uint8_t PROGMEM HUB_Device_Descriptor[] = {   0x12, // Longitud del paquete (18 bytes)   0x01, // Identificador cte: "device descriptor"   0x00, 0x02, // Versión de usb soportada: 02.00 (BCD)   0x09, // Deviceclass (usb.org) -> HUB         // http://www.usb.org/developers/defined_class/#BaseClass09h   0x00, // Devicesubclass (usb.org) br />  0x01, // Codigo protocolo (usb.org)/i-speedhubwith single TT   0x08, // Tam. máximo de paquete del zeroendpoint   0xAA, 0xAA, // Vendor id (supuestamente asignado por usb.org)   0xCC, 0xCC, // Product id (supuestamente asignado por usb.org)   0x00, 0x01, // Devicereleasenumber 01.00 (BCD)   0x00, // Index of ManufacturerString Descriptor   0x00, // Index of ProductString Descriptor   0x00, // Index of Serial NumberString Descriptor   0x01, // Number of PossibleConfigurations };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM HUB_Config_Descriptor[] = {   // Config   0x09, // Long de la parte de configuración   0x02, // Constante indicando lo que somos   0x19, 0x00 // Tamaño total de toda la info, incluyendo interfaz y endpoint   0x01, // Numero de interfaces   0x01, // id de esta configuracion   0x00, // indice a la cadena que la describe (no hay)   0xe0, // Atributos: selfpowered y wakeup   0x32, // Consumo máximo 0x32*2mA = 100mA   // Interface   0x09, // long de la descr. del interfaz   0x04, // cte.   0x00, // número de interfaz   0x00, // valor para alternatesetting :?   0x01, // número de endpoints   0x09, 0x00, 0x00, // classcode, subclasscode, protocolcode                     // este es "Full speedHub"   0x00, // index of String Descriptor Describingthis interface   // Endpoint (interrupt in) ID 1 (el id 0 es siempre de control)   0x07, // long   0x05, // cte.    0x81, // mapa bits: dirección "IN", id 1   0x03, // mapa bits: tipo de transmisión por interrupción   0x01, 0x00, // tammaximo del paquete que manejamos   0x0c, // intervalo de tiempo para polling en frame-time (125micro secs.)         // => 1500microsecs. };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM HUB_Hub_Descriptor[] = {   0x09, // Longitud   0x29, // Cte.   0x06, // Número de puertos del HUB: 6   0xa9, 0x00 // Flags. 10101001b:         //  D1,D0 (01) Indican el powerswitching de los dispostivos         //     que se conectan => Individual portpowerswitching.         //  D2 (0): Hubisnotpart of a compounddevice.         //  D4:D3 (01): Individual portover-currentprotection.         //     El hub controla problemas de corriente de cada puerto         //     de forma individual         //  D15:D5: reservados   0x05, //  Tiempo (en 2ms intervals) que tarda la secuencia power-on de         //  un dispositivo conectado desde que éste tiene corriente.         //  Básicamante indica el retardo que sufre la corriente en llegar         //  al puerto/dispositivo conectado.   0x64, // Corriente máxima necesitada por el controlador del HUB.   0x00, // Flags, un bit por puerto posible: todos los puertos son         // desenganchables (es decir, es un hub de verdad, no un hub en         // un dispositivo integrado que tiene varios dispositivos "en uno")   0xff, // En usb 2.0 mantener a 0xFF este valor. };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port1_device_descriptor[] = {   0x12, // Long del paquete (18)   0x01, // Constante (01 = device descriptor)   0x00, 0x02, // USB 2.0 compliant (BCD)   0x00, // Classcode. 0 indica que cada interfaz dará el suyo   0x00, 0x00, // Subclase y protocolo   0x08, // Max packetsize   0xAA, 0xAA, // Vendor ID   0x55, 0x55, // Product id   0x00, 0x00, // Devicereleasenumber   0x00, // Index of ManufacturerString Descriptor   0x00, // Index of ProductString Descriptor   0x00, // Index of Serial NumberString Descriptor   PORT1_NUM_CONFIGS, // 4 };
PSJailbreak: accediendo a lv2 // Primera contestación de la configuración del port1. La utilizaremos // cuando en la petición sólo podemos contestar con 8 bytes // y le diremos que necesitamos muchos más (las dos // constantes). El host contestará tras pedir esa memoria y // utilizaremos entonces port1_config_descriptor. const uint8_t PROGMEM port1_short_config_descriptor[] = {   // Config   0x09, // Longitud del paquete   0x02, // Constante 0x02: configurationdescription   PORT1_DESC_LEN_LO, PORT1_DESC_LEN_HI, // Bytes totales devueltos         // (o que necesitamos...) que incluyen el resto de información         // (interfaces y endpoints)   0x01, // Número de interfaces   0x00, // id de esta configuración (¿no habría que cambiarla?)   0x00, // id cadena explicativa   0x80, // bitmap: notselfpowered, notremotewakeup   0xfa, // max consumo energia (* 2mA = 500mA)   // Y aquí vendrían interface y endpoint };
PSJailbreak: accediendo a lv2 // Versión "larga" de la configuración, distinta de la corta // para el exploit const uint8_t PROGMEM port1_config_descriptor[] = {   // Config   0x09, // Longitud del paquete   0x02, // Constante   0x12, 0x00, // Tamaño total que enviamos. ¡EXPLOIT!    ...   // Interfaz   0x09, // Longitu del paquete   0x04, // Cte. de protocolo   0x00, // Número de interfaz   0x00, // Alternatesetting...   0x00, // Endpoints disponibles: 0. No hay más info después   0xfe, 0x01, 0x02, // Clase - subclase - protocolo. Tiene que ver con 		    // firmware updates, pero el 0x02 no tiene 		    // sentido.   0x00, // String explicativa   // TODO ESTO ES OVERFLOW QUE NOS GUARDARÁ LA PS3 PARA USAR LUEGO   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // padding 	MAGIC_NUMBER, default_payload_macro, };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port2_device_descriptor[] = {   0x12, 0x01, // Longitud y constante   0x00, 0x02, // USB 2.0   0x00, 0x00, 0x00, // Class, subclass, protocol   0x08, // maxpacketsize   0xAA, 0xAA, 0xBB, 0xBB, // Vendor y product id   0x00, 0x00, // Releasenumber   0x00, 0x00, 0x00, // Indices a 3 stringdescriptors   0x01, // Número de configuraciones };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port2_config_descriptor[] = {   // config   0x09, // Longitud de la configuración.   0x02, // Cte.   0x16, 0x00 // Longitud total, incluyendo interfaz etc. Se dice que 	     // son 22 bytes, aunque la info real según el protocolo 	     // son 18. Le metemos 4 más que harán un trabajo importante...   0x01, // Número interfaces   0x01, // id de la configuración   0x00, // stringindex   0x80, // notselfpowered, notremotewakeup   0x01, // maxpower 2mA.   // interface   0x09, 0x04, // Long y cte.   0x00, // número de interfaz   0x00, // alternatesetting   0x00, // Número de endpoints   0xFE, 0x01, 0x02, // Classcode, subclass y protocolo.   0x00, // String descriptor.   // extra   0x04, 0x21, 0xb4, 0x2f, };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port3_device_descriptor[] = {   0x12, 0x01, // Longitud y constante   0x00, 0x02, // USB 2.0   0x00, 0x00, 0x00, // Class, subclass, protocol   0x08, // maxpacketsize   0xAA, 0xAA, 0x55, 0x55, // Vendor y product id   0x00, 0x00, // Releasenumber   0x00, 0x00, 0x00, // Indices a 3 stringdescriptors   0x02, // Número de configuraciones };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port3_config_descriptor[] = {   0x09, 0x02, 0x4d, 0x0a, 0x01, 0x01, 0x00, 0x80, 0x01,   0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00,   0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00,    … (más de 2Kb después…)  0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00,   0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfe, 0x01, 0x02, 0x00,   0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, };
PSJailbreak: accediendo a lv2 Desconexióndeldispositivo 2… … y seguimos
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_device_descriptor[] = {   0x12, 0x01, // Longitud y constante   0x00, 0x02, // USB 2.0   0x00, 0x00, 0x00, // Class, subclass, protocol   0x08, // max packet size   0xAA, 0xAA, 0x55, 0x55, // Vendor y product id   0x00, 0x00, // Release number   0x00, 0x00, 0x00, // Indices a 3 string descriptors   0x03, // Número de configuraciones };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_config_descriptor_1[] = {   // Config   0x09, // Longituddelpaquete   0x02, // Constante   0x12, 0x00, // Tamaño total que enviamos.   0x01, // Número de interfaces   0x01, // id de estaconfiguración   0x00, // id de cadenaexplicativa...   0x80, // bitmap: not self powered, not remotewakeup   0x01, // Consumomáximo, 2mA   // Interfaz   0x09, // Longitudelpaquete   0x04, // Cte. de protocolo   0x00, // Número de interfaz   0x00, // Alternate setting...   0x00, // Endpoints disponibles: 0. No haymás info después   0xfe, 0x01, 0x02, // Clase - subclase – protocolo   0x00, // String explicativa };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_short_config_descriptor_2[] = { 	// config   0x09, // Long delpaquete   0x02, // Cte.   0x12, 0x00, // Tamaño total que enviamos; no entra, así que nos 	      // pedirán la config otravezcuandotenganhueco.   0x01, // Número de interfaces   0x01, // id de esta config   0x00, // id la cadena   0x80, // not self powered, not remotewakeup   // y se acabó; deberían venir más, peroenviamos solo 8. };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_config_descriptor_2[] = {   // config   0x09,  // Long delpaquete   0x02, // Cte.   0x00, 0x00, // ¡EXPLOIT! ¡Ahora le decimos que no vamos a enviar 	      // nada! (esto es el tamaño total que enviamos, según 	      // debeinterpretarlo el protocolo USB.)   0x01, // Número de interfaces   0x01, // id de la configuracion   0x00, // id de la cadena   0x80, // Not self powered, not remotewakeup   0x01, // Consumomáximo, 2mA   // interface   0x09, // Longitudelpaquete   0x04, // Ctedelprotocolo   0x00, // número de interfaz   0x00, // alternate setting   0x00, // endpoints disponibles (0, no viene nada luego)   0xfe, 0x01, 0x02, // Clase - subclase - protocolo (DFU)   0x00, // String explicativo };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_config_descriptor_3[] = {   // config 	0x09, 0x02, 0x30, 0x00, 0x01, 0x01, 0x00, 0x80, 0x01,  	// interface 	0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00,  	// extra 	0x3e, 0x21, 0x00, 0x00, 0x00, 0x00, // padding 	MAGIC_NUMBER, /* magicnumber to look for in the start of the page */ 	SHELLCODE_PAGE, /* Initial data searchptr */ 	SHELLCODE_DESTINATION, /* destination ptr for heap structure (jigresponse) */ };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port5_device_descriptor[] = {   0x12, 0x01, // Longitud y constante   0x00, 0x02, // USB 2.0   0x00, 0x00, 0x00, // Class, subclass, protocol   0x08, // max packet size   0x4c, 0x05, // Vendor id: Sony Corp   0xeb, 0x02, // Product id: JIG. No publicado   0x00, 0x00, // Release number   0x00, 0x00, 0x00, // Indices a 3 string descriptors   0x01, // Número de configuraciones };
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port5_config_descriptor[] = { 	// config 	0x09, 0x02, 0x20, 0x00, 0x01, 0x00, 0x00, 0x80, 	0x01, 	// interface 	0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0x00, 0x00, 	0x00, 	// endpoint 	0x07, 0x05, 0x02, 0x02, 0x08, 0x00, 0x00, 	// endpoint 	0x07, 0x05, 0x81, 0x02, 0x08, 0x00, 0x00, }
PSJailbreak: accediendo a lv2 const uint8_t PROGMEM jig_response[64] = { 	SHELLCODE_PTR, 	SHELLCODE_ADDRESS, 	RTOC_TABLE, default_shellcode_macro, };
PSJailbreak: accediendo a lv2 Y desenganchamos el dispositivo 3… ; shellcode / egghunter  ROM:00000018                 ld      %r4, -0x10(%r3)  ROM:0000001C                 ld      %r3, -8(%r3)  ROM:00000020  ROM:00000020 loc_20:  ROM:00000020                 ld      %r5, 0x18(%r3)  ROM:00000024                 addi    %r3, %r3, 0x1000  ROM:00000028                 cmpw    %r4, %r5  ROM:0000002C                 bne     loc_20  ROM:00000030                 addi    %r6, %r3, -0xFE0  ROM:00000034                 mtctr   %r6  ROM:00000038                 bctr
PSJailbreak: cambiando el SO Payload Translación a zona de memoria segura Copia de parte del payload a zona residente Instalación de un driver de USB: “prueba”, “inicialización”, “desconexión”. Syscall 36 Hooks Hook_open
PSJailbreak: cambiando el SO “Guerra” de payloads Clones de PSJailbreak Backup managers Aplicaciones homebrew …
Conclusiones Con la clave privada puedes firmar cosas… Homebrew sin payload Actualizaciones …
Wanna dance? Marco Antonio Gómez y Federico Peinado www.gueim.org

Contenu connexe

Tendances

Preguntas ultima diapositiva
Preguntas ultima diapositivaPreguntas ultima diapositiva
Preguntas ultima diapositivaJERSON STIVEN
 
características de la motherboard y componentes principales1
características de la motherboard y componentes principales1características de la motherboard y componentes principales1
características de la motherboard y componentes principales1Diover Castrillon
 
Inventario equipo 9
Inventario equipo 9Inventario equipo 9
Inventario equipo 9jessidi
 
Catalogo de distribuidora
Catalogo de distribuidoraCatalogo de distribuidora
Catalogo de distribuidoraraulgomez30011
 
Reparacion de pc en informatica
Reparacion de pc en informaticaReparacion de pc en informatica
Reparacion de pc en informaticadvalletru
 
Tipos de sockets para microprocesadores
Tipos de sockets para microprocesadoresTipos de sockets para microprocesadores
Tipos de sockets para microprocesadoresGermoo
 
Fase1 configuración pc
Fase1 configuración pcFase1 configuración pc
Fase1 configuración pcjpolo69
 
MICROPROCESADORES Y SOCKETS
MICROPROCESADORES Y SOCKETSMICROPROCESADORES Y SOCKETS
MICROPROCESADORES Y SOCKETSGeOvanni FloRes
 
Trabajo manual board
Trabajo manual boardTrabajo manual board
Trabajo manual boardmariavitalia
 
Hardware pc armando_suarez
Hardware pc armando_suarezHardware pc armando_suarez
Hardware pc armando_suarezJesusD_15
 
2011 02-18 plan de-sesion_integrado -esp-
2011 02-18 plan de-sesion_integrado -esp-2011 02-18 plan de-sesion_integrado -esp-
2011 02-18 plan de-sesion_integrado -esp-Alberto Vargas
 
Diapositivas
DiapositivasDiapositivas
Diapositivasjharddex
 
Ficha técnica motherboard as rock z68 extreme7 gen3
Ficha técnica motherboard as rock z68 extreme7 gen3Ficha técnica motherboard as rock z68 extreme7 gen3
Ficha técnica motherboard as rock z68 extreme7 gen3RaGaZoMe
 
T fase1 103380_grupo103380_44
T fase1 103380_grupo103380_44T fase1 103380_grupo103380_44
T fase1 103380_grupo103380_44Jonathan Mora
 
Ficha técnica mother board intel dx58s02
Ficha técnica mother board intel dx58s02Ficha técnica mother board intel dx58s02
Ficha técnica mother board intel dx58s02RaGaZoMe
 

Tendances (18)

Preguntas ultima diapositiva
Preguntas ultima diapositivaPreguntas ultima diapositiva
Preguntas ultima diapositiva
 
características de la motherboard y componentes principales1
características de la motherboard y componentes principales1características de la motherboard y componentes principales1
características de la motherboard y componentes principales1
 
Inventario equipo 9
Inventario equipo 9Inventario equipo 9
Inventario equipo 9
 
Catalogo de distribuidora
Catalogo de distribuidoraCatalogo de distribuidora
Catalogo de distribuidora
 
Reparacion de pc en informatica
Reparacion de pc en informaticaReparacion de pc en informatica
Reparacion de pc en informatica
 
Tipos de sockets para microprocesadores
Tipos de sockets para microprocesadoresTipos de sockets para microprocesadores
Tipos de sockets para microprocesadores
 
Fase1 configuración pc
Fase1 configuración pcFase1 configuración pc
Fase1 configuración pc
 
MICROPROCESADORES Y SOCKETS
MICROPROCESADORES Y SOCKETSMICROPROCESADORES Y SOCKETS
MICROPROCESADORES Y SOCKETS
 
Trabajo manual board
Trabajo manual boardTrabajo manual board
Trabajo manual board
 
Hardware pc armando_suarez
Hardware pc armando_suarezHardware pc armando_suarez
Hardware pc armando_suarez
 
T fase1 103380_grupo52
T fase1 103380_grupo52T fase1 103380_grupo52
T fase1 103380_grupo52
 
Punto 3
Punto 3Punto 3
Punto 3
 
2011 02-18 plan de-sesion_integrado -esp-
2011 02-18 plan de-sesion_integrado -esp-2011 02-18 plan de-sesion_integrado -esp-
2011 02-18 plan de-sesion_integrado -esp-
 
Diapositivas
DiapositivasDiapositivas
Diapositivas
 
Ficha técnica motherboard as rock z68 extreme7 gen3
Ficha técnica motherboard as rock z68 extreme7 gen3Ficha técnica motherboard as rock z68 extreme7 gen3
Ficha técnica motherboard as rock z68 extreme7 gen3
 
T fase1 103380_grupo103380_44
T fase1 103380_grupo103380_44T fase1 103380_grupo103380_44
T fase1 103380_grupo103380_44
 
Ficha técnica mother board intel dx58s02
Ficha técnica mother board intel dx58s02Ficha técnica mother board intel dx58s02
Ficha técnica mother board intel dx58s02
 
Nombre de componente2
Nombre de componente2Nombre de componente2
Nombre de componente2
 

En vedette

Videojuegos y prensa
Videojuegos y prensaVideojuegos y prensa
Videojuegos y prensaGUEIM
 
Lineage 2
Lineage 2Lineage 2
Lineage 2GUEIM
 
Arte y videojuegos
Arte y videojuegosArte y videojuegos
Arte y videojuegosGUEIM
 
Casual games
Casual gamesCasual games
Casual gamesGUEIM
 
Desmontando Grim Fandango
Desmontando Grim FandangoDesmontando Grim Fandango
Desmontando Grim FandangoGUEIM
 
Neverwinter nights
Neverwinter nightsNeverwinter nights
Neverwinter nightsGUEIM
 
Quiero hacer videojuegos
Quiero hacer videojuegosQuiero hacer videojuegos
Quiero hacer videojuegosGUEIM
 
App Store - Jornadas MDV-GUEIM 2011
App Store - Jornadas MDV-GUEIM 2011App Store - Jornadas MDV-GUEIM 2011
App Store - Jornadas MDV-GUEIM 2011GUEIM
 
Taller casa de software
Taller casa de softwareTaller casa de software
Taller casa de softwareLuis Arellano
 

En vedette (9)

Videojuegos y prensa
Videojuegos y prensaVideojuegos y prensa
Videojuegos y prensa
 
Lineage 2
Lineage 2Lineage 2
Lineage 2
 
Arte y videojuegos
Arte y videojuegosArte y videojuegos
Arte y videojuegos
 
Casual games
Casual gamesCasual games
Casual games
 
Desmontando Grim Fandango
Desmontando Grim FandangoDesmontando Grim Fandango
Desmontando Grim Fandango
 
Neverwinter nights
Neverwinter nightsNeverwinter nights
Neverwinter nights
 
Quiero hacer videojuegos
Quiero hacer videojuegosQuiero hacer videojuegos
Quiero hacer videojuegos
 
App Store - Jornadas MDV-GUEIM 2011
App Store - Jornadas MDV-GUEIM 2011App Store - Jornadas MDV-GUEIM 2011
App Store - Jornadas MDV-GUEIM 2011
 
Taller casa de software
Taller casa de softwareTaller casa de software
Taller casa de software
 

Similaire à ¿Que falló en Playstation 3?

Similaire à ¿Que falló en Playstation 3? (20)

Guía Laboratorio 6.pdf
Guía Laboratorio 6.pdfGuía Laboratorio 6.pdf
Guía Laboratorio 6.pdf
 
Ensamble y manto fase 1
Ensamble y manto fase 1Ensamble y manto fase 1
Ensamble y manto fase 1
 
inventario de PC
inventario de PCinventario de PC
inventario de PC
 
Plantilla fase1
Plantilla fase1Plantilla fase1
Plantilla fase1
 
Everest home edition
Everest home editionEverest home edition
Everest home edition
 
Everest home edition
Everest home editionEverest home edition
Everest home edition
 
Everest home edition
Everest home editionEverest home edition
Everest home edition
 
ARQUITECTURA Y ENSAMBLE DE UNA COMPUTADORA
ARQUITECTURA Y ENSAMBLE DE UNA COMPUTADORAARQUITECTURA Y ENSAMBLE DE UNA COMPUTADORA
ARQUITECTURA Y ENSAMBLE DE UNA COMPUTADORA
 
T fase1 103380_grupo79
T fase1 103380_grupo79T fase1 103380_grupo79
T fase1 103380_grupo79
 
Laboratorio 1 juan_pinzon
Laboratorio 1 juan_pinzonLaboratorio 1 juan_pinzon
Laboratorio 1 juan_pinzon
 
Fase1 daniel castro-grupo9
Fase1 daniel castro-grupo9Fase1 daniel castro-grupo9
Fase1 daniel castro-grupo9
 
Fichas lab[1]
Fichas lab[1]Fichas lab[1]
Fichas lab[1]
 
Fichas tecnicas de los lab
Fichas tecnicas de los labFichas tecnicas de los lab
Fichas tecnicas de los lab
 
Fichas laboratorios
Fichas laboratoriosFichas laboratorios
Fichas laboratorios
 
T fase1
T fase1 T fase1
T fase1
 
Plantilla fase1
Plantilla fase1Plantilla fase1
Plantilla fase1
 
Taller. lisseth buritica
Taller. lisseth buriticaTaller. lisseth buritica
Taller. lisseth buritica
 
Taller. lisseth buritica
Taller. lisseth buriticaTaller. lisseth buritica
Taller. lisseth buritica
 
Macc
MaccMacc
Macc
 
Curro Sánchez Toscano - Repaso T1.pdf
Curro Sánchez Toscano - Repaso T1.pdfCurro Sánchez Toscano - Repaso T1.pdf
Curro Sánchez Toscano - Repaso T1.pdf
 

Plus de GUEIM

Brett spielwelt
Brett spielweltBrett spielwelt
Brett spielweltGUEIM
 
Prince of persia
Prince of persiaPrince of persia
Prince of persiaGUEIM
 
World of warcraft 2005
World of warcraft 2005World of warcraft 2005
World of warcraft 2005GUEIM
 
Taller programación videojuegos
Taller programación videojuegosTaller programación videojuegos
Taller programación videojuegosGUEIM
 
Metal gear solid
Metal gear solidMetal gear solid
Metal gear solidGUEIM
 
Halo
HaloHalo
HaloGUEIM
 
Psp vs ds
Psp vs dsPsp vs ds
Psp vs dsGUEIM
 
Myst
MystMyst
MystGUEIM
 
Survival horror
Survival horrorSurvival horror
Survival horrorGUEIM
 
Scrapland
ScraplandScrapland
ScraplandGUEIM
 
Monkey island
Monkey islandMonkey island
Monkey islandGUEIM
 
Max payne
Max payneMax payne
Max payneGUEIM
 
Final fantasy
Final fantasyFinal fantasy
Final fantasyGUEIM
 
Máquina recreativa
Máquina recreativaMáquina recreativa
Máquina recreativaGUEIM
 
Resident evil
Resident evilResident evil
Resident evilGUEIM
 
The shadow of the colossus
The shadow of the colossusThe shadow of the colossus
The shadow of the colossusGUEIM
 
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...GUEIM
 
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...GUEIM
 

Plus de GUEIM (19)

Brett spielwelt
Brett spielweltBrett spielwelt
Brett spielwelt
 
Prince of persia
Prince of persiaPrince of persia
Prince of persia
 
World of warcraft 2005
World of warcraft 2005World of warcraft 2005
World of warcraft 2005
 
Taller programación videojuegos
Taller programación videojuegosTaller programación videojuegos
Taller programación videojuegos
 
Metal gear solid
Metal gear solidMetal gear solid
Metal gear solid
 
Halo
HaloHalo
Halo
 
Psp vs ds
Psp vs dsPsp vs ds
Psp vs ds
 
Myst
MystMyst
Myst
 
Survival horror
Survival horrorSurvival horror
Survival horror
 
Scrapland
ScraplandScrapland
Scrapland
 
Monkey island
Monkey islandMonkey island
Monkey island
 
Max payne
Max payneMax payne
Max payne
 
Final fantasy
Final fantasyFinal fantasy
Final fantasy
 
Máquina recreativa
Máquina recreativaMáquina recreativa
Máquina recreativa
 
Wii
WiiWii
Wii
 
Resident evil
Resident evilResident evil
Resident evil
 
The shadow of the colossus
The shadow of the colossusThe shadow of the colossus
The shadow of the colossus
 
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
 
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
e-Adventure: La aventura de hacer tus propios juegos. El curioso caso de Game...
 

Dernier

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 

Dernier (10)

POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 

¿Que falló en Playstation 3?

  • 1. ¿Qué falló en Playstation 3?Piratería, seguridad informática y el mercado de las videoconsolas Marco Antonio Gómezy Federico PeinadoMáster en Desarrollo de Videojuegos Universidad Complutense de Madridwww.videojuegos-ucm.es www.gueim.org
  • 2.
  • 3. El apagón de PlayStation Network Suspensión total del servicio en el mundo20 de abril de 2011 – Actualidad Más de 77 millones de usuarios Afectando incluso a algunos juegos offline Pérdidas de cientos de miles o incluso millones de dólares a empresas (Capcom) Suspensión relacionada de plataforma PC 2 de mayo de 2011 – Actualidad Sony Online Entertainment (MMOGs) Más de 24 millones de usuarios(aunque casi sin afectar a tarjetas de crédito) Motivo: Intrusiones externas Del 16 al 19 de abril de 2011 Datos comprometidos de identificación personal, contraseñas y tarjetas de crédito Continúa la investigación…
  • 4. Copiar o no copiar Contenidos digitales: ¡llega la copia sin pérdida! Sistemas anticopia Hardware (libros de claves, cartuchos, “mochilas”, etc.) Software (errores esperados, número de copias, SecuROM y otros DRMs, etc.) Internet y la Web Descargas masivas, difusión del homebrew, etc. Activación remota, rootkits, contenido en la nube, etc.
  • 5. La caída de la PS3 erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1Briv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4Dpub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8DDa: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70 Lanzamiento (Japón)11 de noviembre de 2006 Modelo “slim” sin Linux1 de septiembre de 2009 Exploit de GeoHot usando Linux26 de enero de 2010 Firmware 3.21: Todos sin Linux28 de marzo de 2010 PS JailBreak: 1er Cargador USB18 de agosto de 2010 EpicFail: Anuncio de carga sin USB y firmado de ejecutables29 de diciembre de 2010 GeoHot hace pública la clave raíz3 de enero de 2011 Y la historia continúa…
  • 6. La caída de la PS3 erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1Briv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4Dpub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8DDa: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70 Lanzamiento (Japón)11 de noviembre de 2006 Modelo “slim” sin Linux1 de septiembre de 2009 Exploit de GeoHot usando Linux26 de enero de 2010 Firmware 3.21: Todos sin Linux28 de marzo de 2010 PS JailBreak: 1er Cargador USB18 de agosto de 2010 EpicFail: Anuncio de carga sin USB y firmado de ejecutables29 de diciembre de 2010 GeoHot hace pública la clave raíz3 de enero de 2011 Y la historia continúa… La mayoría de las transparencias que siguen son directamente las de esta charla
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17. La caída de la PS3 erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1Briv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4Dpub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8DDa: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70 Lanzamiento (Japón)11 de noviembre de 2006 Modelo “slim” sin Linux1 de septiembre de 2009 Exploit de GeoHot usando Linux26 de enero de 2010 Firmware 3.21: Todos sin Linux28 de marzo de 2010 PS JailBreak: 1er Cargador USB18 de agosto de 2010 EpicFail: Anuncio de carga sin USB y firmado de ejecutables29 de diciembre de 2010 GeoHot hace pública la clave raíz3 de enero de 2011 Y la historia continúa…
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 29.
  • 30.
  • 31.
  • 33. Conocimientos previos Buffer overflow Protocolo USB Arbitraje centralizado por el host Tamaño de paquetes variable Marcado por el host Solicitado por el dispositivo Configuraciones, interfaces y endpoints
  • 34. PSJailbreak (y clones) Buffer overflow en lv2 Consigue ejecutar código a nivel del kernel No W^X en lv2 HV da páginas ejecutables “con alegría”
  • 35. PSJailbreak (y clones) Resultado: GameOS comprometido LV1 no comprometido SPE para seguridad no comprometido Pero tenemos piratería Rompiendo el 20% del sistema de seguridad, tenemos el 100% de lo que Sony quería evitar
  • 36. Fallo de seguridad LV1 no se encarga de asegurar a LV2 la integridad del juego Con acceso a LV2 podemos quitar la protección
  • 37. PSJailbreak Análisis que sigue usando principalmente PSGroove Dos fases Conseguir acceso al SO Cambiar su comportamiento
  • 38. PSJailbreak: accediendo a lv2 // Descriptor del dispositivo USB. Es el primero que // se envía. const uint8_t PROGMEM HUB_Device_Descriptor[] = { 0x12, // Longitud del paquete (18 bytes) 0x01, // Identificador cte: "device descriptor" 0x00, 0x02, // Versión de usb soportada: 02.00 (BCD) 0x09, // Deviceclass (usb.org) -> HUB // http://www.usb.org/developers/defined_class/#BaseClass09h 0x00, // Devicesubclass (usb.org) br /> 0x01, // Codigo protocolo (usb.org)/i-speedhubwith single TT 0x08, // Tam. máximo de paquete del zeroendpoint 0xAA, 0xAA, // Vendor id (supuestamente asignado por usb.org) 0xCC, 0xCC, // Product id (supuestamente asignado por usb.org) 0x00, 0x01, // Devicereleasenumber 01.00 (BCD) 0x00, // Index of ManufacturerString Descriptor 0x00, // Index of ProductString Descriptor 0x00, // Index of Serial NumberString Descriptor 0x01, // Number of PossibleConfigurations };
  • 39. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM HUB_Config_Descriptor[] = { // Config 0x09, // Long de la parte de configuración 0x02, // Constante indicando lo que somos 0x19, 0x00 // Tamaño total de toda la info, incluyendo interfaz y endpoint 0x01, // Numero de interfaces 0x01, // id de esta configuracion 0x00, // indice a la cadena que la describe (no hay) 0xe0, // Atributos: selfpowered y wakeup 0x32, // Consumo máximo 0x32*2mA = 100mA // Interface 0x09, // long de la descr. del interfaz 0x04, // cte. 0x00, // número de interfaz 0x00, // valor para alternatesetting :? 0x01, // número de endpoints 0x09, 0x00, 0x00, // classcode, subclasscode, protocolcode // este es "Full speedHub" 0x00, // index of String Descriptor Describingthis interface // Endpoint (interrupt in) ID 1 (el id 0 es siempre de control) 0x07, // long 0x05, // cte. 0x81, // mapa bits: dirección "IN", id 1 0x03, // mapa bits: tipo de transmisión por interrupción 0x01, 0x00, // tammaximo del paquete que manejamos 0x0c, // intervalo de tiempo para polling en frame-time (125micro secs.) // => 1500microsecs. };
  • 40. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM HUB_Hub_Descriptor[] = { 0x09, // Longitud 0x29, // Cte. 0x06, // Número de puertos del HUB: 6 0xa9, 0x00 // Flags. 10101001b: // D1,D0 (01) Indican el powerswitching de los dispostivos // que se conectan => Individual portpowerswitching. // D2 (0): Hubisnotpart of a compounddevice. // D4:D3 (01): Individual portover-currentprotection. // El hub controla problemas de corriente de cada puerto // de forma individual // D15:D5: reservados 0x05, // Tiempo (en 2ms intervals) que tarda la secuencia power-on de // un dispositivo conectado desde que éste tiene corriente. // Básicamante indica el retardo que sufre la corriente en llegar // al puerto/dispositivo conectado. 0x64, // Corriente máxima necesitada por el controlador del HUB. 0x00, // Flags, un bit por puerto posible: todos los puertos son // desenganchables (es decir, es un hub de verdad, no un hub en // un dispositivo integrado que tiene varios dispositivos "en uno") 0xff, // En usb 2.0 mantener a 0xFF este valor. };
  • 41. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port1_device_descriptor[] = { 0x12, // Long del paquete (18) 0x01, // Constante (01 = device descriptor) 0x00, 0x02, // USB 2.0 compliant (BCD) 0x00, // Classcode. 0 indica que cada interfaz dará el suyo 0x00, 0x00, // Subclase y protocolo 0x08, // Max packetsize 0xAA, 0xAA, // Vendor ID 0x55, 0x55, // Product id 0x00, 0x00, // Devicereleasenumber 0x00, // Index of ManufacturerString Descriptor 0x00, // Index of ProductString Descriptor 0x00, // Index of Serial NumberString Descriptor PORT1_NUM_CONFIGS, // 4 };
  • 42. PSJailbreak: accediendo a lv2 // Primera contestación de la configuración del port1. La utilizaremos // cuando en la petición sólo podemos contestar con 8 bytes // y le diremos que necesitamos muchos más (las dos // constantes). El host contestará tras pedir esa memoria y // utilizaremos entonces port1_config_descriptor. const uint8_t PROGMEM port1_short_config_descriptor[] = { // Config 0x09, // Longitud del paquete 0x02, // Constante 0x02: configurationdescription PORT1_DESC_LEN_LO, PORT1_DESC_LEN_HI, // Bytes totales devueltos // (o que necesitamos...) que incluyen el resto de información // (interfaces y endpoints) 0x01, // Número de interfaces 0x00, // id de esta configuración (¿no habría que cambiarla?) 0x00, // id cadena explicativa 0x80, // bitmap: notselfpowered, notremotewakeup 0xfa, // max consumo energia (* 2mA = 500mA) // Y aquí vendrían interface y endpoint };
  • 43. PSJailbreak: accediendo a lv2 // Versión "larga" de la configuración, distinta de la corta // para el exploit const uint8_t PROGMEM port1_config_descriptor[] = { // Config 0x09, // Longitud del paquete 0x02, // Constante 0x12, 0x00, // Tamaño total que enviamos. ¡EXPLOIT! ... // Interfaz 0x09, // Longitu del paquete 0x04, // Cte. de protocolo 0x00, // Número de interfaz 0x00, // Alternatesetting... 0x00, // Endpoints disponibles: 0. No hay más info después 0xfe, 0x01, 0x02, // Clase - subclase - protocolo. Tiene que ver con // firmware updates, pero el 0x02 no tiene // sentido. 0x00, // String explicativa // TODO ESTO ES OVERFLOW QUE NOS GUARDARÁ LA PS3 PARA USAR LUEGO 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // padding MAGIC_NUMBER, default_payload_macro, };
  • 44. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port2_device_descriptor[] = { 0x12, 0x01, // Longitud y constante 0x00, 0x02, // USB 2.0 0x00, 0x00, 0x00, // Class, subclass, protocol 0x08, // maxpacketsize 0xAA, 0xAA, 0xBB, 0xBB, // Vendor y product id 0x00, 0x00, // Releasenumber 0x00, 0x00, 0x00, // Indices a 3 stringdescriptors 0x01, // Número de configuraciones };
  • 45. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port2_config_descriptor[] = { // config 0x09, // Longitud de la configuración. 0x02, // Cte. 0x16, 0x00 // Longitud total, incluyendo interfaz etc. Se dice que // son 22 bytes, aunque la info real según el protocolo // son 18. Le metemos 4 más que harán un trabajo importante... 0x01, // Número interfaces 0x01, // id de la configuración 0x00, // stringindex 0x80, // notselfpowered, notremotewakeup 0x01, // maxpower 2mA. // interface 0x09, 0x04, // Long y cte. 0x00, // número de interfaz 0x00, // alternatesetting 0x00, // Número de endpoints 0xFE, 0x01, 0x02, // Classcode, subclass y protocolo. 0x00, // String descriptor. // extra 0x04, 0x21, 0xb4, 0x2f, };
  • 46. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port3_device_descriptor[] = { 0x12, 0x01, // Longitud y constante 0x00, 0x02, // USB 2.0 0x00, 0x00, 0x00, // Class, subclass, protocol 0x08, // maxpacketsize 0xAA, 0xAA, 0x55, 0x55, // Vendor y product id 0x00, 0x00, // Releasenumber 0x00, 0x00, 0x00, // Indices a 3 stringdescriptors 0x02, // Número de configuraciones };
  • 47. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port3_config_descriptor[] = { 0x09, 0x02, 0x4d, 0x0a, 0x01, 0x01, 0x00, 0x80, 0x01, 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00, 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00, … (más de 2Kb después…) 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00, 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfe, 0x01, 0x02, 0x00, 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, };
  • 48. PSJailbreak: accediendo a lv2 Desconexióndeldispositivo 2… … y seguimos
  • 49. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_device_descriptor[] = { 0x12, 0x01, // Longitud y constante 0x00, 0x02, // USB 2.0 0x00, 0x00, 0x00, // Class, subclass, protocol 0x08, // max packet size 0xAA, 0xAA, 0x55, 0x55, // Vendor y product id 0x00, 0x00, // Release number 0x00, 0x00, 0x00, // Indices a 3 string descriptors 0x03, // Número de configuraciones };
  • 50. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_config_descriptor_1[] = { // Config 0x09, // Longituddelpaquete 0x02, // Constante 0x12, 0x00, // Tamaño total que enviamos. 0x01, // Número de interfaces 0x01, // id de estaconfiguración 0x00, // id de cadenaexplicativa... 0x80, // bitmap: not self powered, not remotewakeup 0x01, // Consumomáximo, 2mA // Interfaz 0x09, // Longitudelpaquete 0x04, // Cte. de protocolo 0x00, // Número de interfaz 0x00, // Alternate setting... 0x00, // Endpoints disponibles: 0. No haymás info después 0xfe, 0x01, 0x02, // Clase - subclase – protocolo 0x00, // String explicativa };
  • 51. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_short_config_descriptor_2[] = { // config 0x09, // Long delpaquete 0x02, // Cte. 0x12, 0x00, // Tamaño total que enviamos; no entra, así que nos // pedirán la config otravezcuandotenganhueco. 0x01, // Número de interfaces 0x01, // id de esta config 0x00, // id la cadena 0x80, // not self powered, not remotewakeup // y se acabó; deberían venir más, peroenviamos solo 8. };
  • 52. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_config_descriptor_2[] = { // config 0x09, // Long delpaquete 0x02, // Cte. 0x00, 0x00, // ¡EXPLOIT! ¡Ahora le decimos que no vamos a enviar // nada! (esto es el tamaño total que enviamos, según // debeinterpretarlo el protocolo USB.) 0x01, // Número de interfaces 0x01, // id de la configuracion 0x00, // id de la cadena 0x80, // Not self powered, not remotewakeup 0x01, // Consumomáximo, 2mA // interface 0x09, // Longitudelpaquete 0x04, // Ctedelprotocolo 0x00, // número de interfaz 0x00, // alternate setting 0x00, // endpoints disponibles (0, no viene nada luego) 0xfe, 0x01, 0x02, // Clase - subclase - protocolo (DFU) 0x00, // String explicativo };
  • 53. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port4_config_descriptor_3[] = { // config 0x09, 0x02, 0x30, 0x00, 0x01, 0x01, 0x00, 0x80, 0x01, // interface 0x09, 0x04, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x02, 0x00, // extra 0x3e, 0x21, 0x00, 0x00, 0x00, 0x00, // padding MAGIC_NUMBER, /* magicnumber to look for in the start of the page */ SHELLCODE_PAGE, /* Initial data searchptr */ SHELLCODE_DESTINATION, /* destination ptr for heap structure (jigresponse) */ };
  • 54. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port5_device_descriptor[] = { 0x12, 0x01, // Longitud y constante 0x00, 0x02, // USB 2.0 0x00, 0x00, 0x00, // Class, subclass, protocol 0x08, // max packet size 0x4c, 0x05, // Vendor id: Sony Corp 0xeb, 0x02, // Product id: JIG. No publicado 0x00, 0x00, // Release number 0x00, 0x00, 0x00, // Indices a 3 string descriptors 0x01, // Número de configuraciones };
  • 55. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM port5_config_descriptor[] = { // config 0x09, 0x02, 0x20, 0x00, 0x01, 0x00, 0x00, 0x80, 0x01, // interface 0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00, // endpoint 0x07, 0x05, 0x02, 0x02, 0x08, 0x00, 0x00, // endpoint 0x07, 0x05, 0x81, 0x02, 0x08, 0x00, 0x00, }
  • 56. PSJailbreak: accediendo a lv2 const uint8_t PROGMEM jig_response[64] = { SHELLCODE_PTR, SHELLCODE_ADDRESS, RTOC_TABLE, default_shellcode_macro, };
  • 57. PSJailbreak: accediendo a lv2 Y desenganchamos el dispositivo 3… ; shellcode / egghunter ROM:00000018 ld %r4, -0x10(%r3) ROM:0000001C ld %r3, -8(%r3) ROM:00000020 ROM:00000020 loc_20: ROM:00000020 ld %r5, 0x18(%r3) ROM:00000024 addi %r3, %r3, 0x1000 ROM:00000028 cmpw %r4, %r5 ROM:0000002C bne loc_20 ROM:00000030 addi %r6, %r3, -0xFE0 ROM:00000034 mtctr %r6 ROM:00000038 bctr
  • 58. PSJailbreak: cambiando el SO Payload Translación a zona de memoria segura Copia de parte del payload a zona residente Instalación de un driver de USB: “prueba”, “inicialización”, “desconexión”. Syscall 36 Hooks Hook_open
  • 59. PSJailbreak: cambiando el SO “Guerra” de payloads Clones de PSJailbreak Backup managers Aplicaciones homebrew …
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69. Conclusiones Con la clave privada puedes firmar cosas… Homebrew sin payload Actualizaciones …
  • 70. Wanna dance? Marco Antonio Gómez y Federico Peinado www.gueim.org