seguridad en juegos de la nintendo ds

28
Ingeniería inversa. Seguridad en juegos de Nintendo DS Benito Palacios Sánchez Seguridad en Redes de Comunicación Universidad de Granada

Upload: benito-palacios-sanchez

Post on 12-Jul-2015

218 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Seguridad en juegos de la Nintendo DS

Ingeniería inversa.Seguridad en juegos de

Nintendo DS

Benito Palacios Sánchez

Seguridad en Redes de ComunicaciónUniversidad de Granada

Page 2: Seguridad en juegos de la Nintendo DS

Objetivo

● Introducción a la ingeniería inversa● ¿Qué es?● ¿Para qué sirve?● ¿Cómo?

● Implementaciones de seguridad en juegos● Integridad + confidencialidad en archivos● Seguridad en comunicaciones

Modificarlos

Servidor falso

Page 3: Seguridad en juegos de la Nintendo DS

¿¿¿Ingeniería inversa???

Ingeniería directa

Código fuente Compilador

Ingeniería inversa001011101011010011110100101101110000111101001010101100000111111000010101011110100101010001111101010100011100001111

Binario

001011101011010011110100101101110000111101001010101100000111111000010101011110100101010001111101010100011100001111

Binario

??? Funcionamiento

Page 4: Seguridad en juegos de la Nintendo DS

¿¿Ingeniería inversa??

Programa Tinke interpretando una imagen

Page 5: Seguridad en juegos de la Nintendo DS

¿Ingeniería inversa?

¿Para qué?

● Curiosidad / Diversión / Aprendizaje

● Análisis de seguridad

● Análisis de malware

● Black-hat

Page 6: Seguridad en juegos de la Nintendo DS

¿Ingeniería inversa?

Análisis de seguridad

Generación de contraseña de Whatsapp en iOS

Page 7: Seguridad en juegos de la Nintendo DS

Ingeniería inversa

Herramientas usadas

IDA Pro 6.1 + DeSmuME

Page 8: Seguridad en juegos de la Nintendo DS

Ni no kuniEl mago de las tinieblas

PokémonEdición Blanca

Juegos objetivos

Page 9: Seguridad en juegos de la Nintendo DS

Integridad en archivos

Partidas de guardado

Datos binarios de una partida

● 64 kB

Ni no kuni

● Logros ● No multijugador

Page 10: Seguridad en juegos de la Nintendo DS

Integridad en archivos

Partidas de guardado

Advertencia al iniciar el juego Intento de modificar la partida

Ni no kuni

Page 11: Seguridad en juegos de la Nintendo DS

Integridad en archivos

Partidas de guardadoNi no kuni

Comprueba constante de 8 bytes al final del archivo0212E8A4 LDR R0, =0xFFF8 ; Ptr de constante final0212E8A8 ADD R1, SP, #0x30+const_0 ; Donde se guardara la constante0212E8AC MOV R2, #8 ; Tamaño de la constante0212E8B0 STR R3, [SP,#0x30+var_20]0212E8B4 BL lee_partida0212E8B8 CMP R0, #0 ; Si ha habido error salir0212E8BC BEQ salida ; |0212E8C0 LDR R2, [SP,#0x30+const_0] ; Lee los primeros 4B de la const0212E8C4 LDR R3, [SP,#0x30+const_4] ; Lee los siguientes 4B de la const0212E8C8 LDR R1, =0x7D9A32EC ; Los compara con los valores del juego0212E8CC LDR R0, =0x84A53F0B ; |0212E8D0 CMP R3, R1 ; |0212E8D4 CMPEQ R2, R0 ; |

Comprueba constante de 2 bytes al inicio del archivo

Page 12: Seguridad en juegos de la Nintendo DS

Integridad en archivos

Partidas de guardadoNi no kuni

MAC con secreto “nnkn”0212EADC LDR R1, =0x2141D28 ; Obtiene dirección de contraseña (1)0212EAE0 MOV R5, R00212EAE4 LDR R0, [R1] ; | (1)0212EAE8 ADD R4, SP, #0x20+var_20 ; Dirección donde guardar el nuevo resumen (2)0212EAEC LDR R12, [R0,#-0x1D4] ; Obtiene la contraseña0212EAF0 ADD R3, R5, #0xC000 ; Obtiene dirección de escritura de contraseña0212EAF4 LDR R2, =0xFFE2 ; Número de bytes calcular el SHA10212EAF8 MOV R0, R4 ; | (2)0212EAFC ADD R1, R5, #2 ; Comienzo para calcular el SHA10212EB00 STR R12, [R3,#0x5EC] ; Escribe la contraseña0212EB04 BL calcula_sha10212EB08 ADD R1, R5, #0x3E4 ; Obtiene dirección del resumen original (3)0212EB0C MOV R0, R4 ; Dirección del nuevo resumen0212EB10 ADD R3, R5, #0xC000 ; Obtiene dirección de escritura de contraseña0212EB14 MOV R4, #0 ; Borra contraseña (4)0212EB18 ADD R1, R1, #0xFC00 ; | (3)0212EB1C MOV R2, #0x14 ; Número de bytes a comparar (los del resumen)0212EB20 STR R4, [R3,#0x5EC] ; | (4)0212EB24 BL compare0212EB28 CMP R0, #0 ; Comprueba si el resultado es que son iguales0212EB2C MOVEQ R4, #1 ; | ... en ese caso devuelve true (1)0212EB30 MOV R0, R4 ; | ... si no devuelve false (0)

Page 13: Seguridad en juegos de la Nintendo DS

Integridad en archivos

Archivos con códigoPokémon Blanco

● Archivos protegidos con algún algoritmo

● Sólo se comprueba si hay un bit del firmware activo● En DeSmuME deshabilitado por defecto

//firmware makes system think it's booted from card//-- EXTREMELY IMPORTANT!!! This is actually checked by some things. (which things?)//Thanks to cReDiAr_MMU_write08<ARMCPU_ARM7>(0x02FFFC40,0x1);

Línea 2305 del archivo NDSSystem.cpp

Page 14: Seguridad en juegos de la Nintendo DS

Integridad en archivos

Archivos con códigoPokémon Blanco

Analizando la rutina en ensamblador...HMAC

Page 15: Seguridad en juegos de la Nintendo DS

Cifrado en archivosNi no kuni

● Archivos con características de personajes

● Cifrados con operación NOT

NOT / XOR 0xFF

Page 16: Seguridad en juegos de la Nintendo DS

Cifrado en archivosNi no kuni

Archivos descargado con nuevas misiones

72 2B 41 8B 4C FB 9F 27 B2 1D 05 AF FB 2B 80 9F

RC4 Clave (siempre la misma)

Archivo descifrado

¡Código CRC32!

Page 17: Seguridad en juegos de la Nintendo DS

Comunicación Wi-Fi

Comunicación cifrada HTTPS

Procedimientos para obtener paquetes en plano

Page 18: Seguridad en juegos de la Nintendo DS

Comunicación Wi-Fi

Comunicación cifrada HTTPS

Procedimientos para obtener paquetes en plano

1) Punto de interrupción al inicio y fin de rutina RC4

+

Page 19: Seguridad en juegos de la Nintendo DS

Procedimientos para obtener paquetes en plano

Comunicación Wi-Fi

1) Punto de interrupción al inicio y fin de rutina RC4

Page 20: Seguridad en juegos de la Nintendo DS

2) Cambiar dirección hosts: “https://...” => “http://...”

Procedimientos para obtener paquetes en plano

Comunicación Wi-Fi

Page 21: Seguridad en juegos de la Nintendo DS

2) Cambiar dirección hosts: “https://...” => “http://...”

Procedimientos para obtener paquetes en plano

Comunicación Wi-Fi

Servidor de descargas “dls1.nintendowifi.net” puerto cerrado 80

Túnel SSL (servidor proxy)

ServidorDNS

ServidorDLC

Petición DNS

Servidorproxy

HTTP HTTPS

Page 22: Seguridad en juegos de la Nintendo DS

Comunicación Wi-Fi

Mensajes intercambiados

action=login gsbrcd= sdkver=005003 userid=7881986029631 passwd=297

bssid=00f01a2b3c4d apinfo=02:0000000-00 gamecd=B2KJ makercd=HF unitcd=0

macadr=0016568331f9 lang=05 birth=070c devtime=140427122205 devname=PaRaDoX

Page 23: Seguridad en juegos de la Nintendo DS

Comunicación Wi-Fi

Mensajes intercambiados

MD5 de challenge AC48 espacios seguidostoken de ACchallenge generadochallenge actualMD5 de challenge AC

MD5 de la siguiente cadena:

Page 24: Seguridad en juegos de la Nintendo DS

Comunicación Wi-Fi

Mensajes intercambiados

¡Se listan todos los DLC disponibles!

Comunicación de acción list

Page 25: Seguridad en juegos de la Nintendo DS

Comunicación Wi-Fi

Comprobación de certificado

Autoridad de Certificación

No haya expirado

No hay errores al leer el certificado

Firma correcta

No comprueba el host

Parte de la CA de Nintendo

1 x Nintendo3 x CyberTrust2 x GlobalSign

2 x VeriSign2 x Thawte

Page 26: Seguridad en juegos de la Nintendo DS

Conclusiones

Ingeniería inversa => Análisis de seguridad

Técnicas de cifrado e integridad para evitar modificaciones

Aspectos de seguridad en comunicación Wi-Fi

Page 28: Seguridad en juegos de la Nintendo DS

Benito Palacios Sánchez

Seguridad en Redes de ComunicaciónUniversidad de Granada

Ingeniería inversa.Seguridad en juegos de

Nintendo DS