Post on 12-Jul-2015
Ingeniería inversa.Seguridad en juegos de
Nintendo DS
Benito Palacios Sánchez
Seguridad en Redes de ComunicaciónUniversidad de Granada
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
¿¿¿Ingeniería inversa???
Ingeniería directa
Código fuente Compilador
Ingeniería inversa001011101011010011110100101101110000111101001010101100000111111000010101011110100101010001111101010100011100001111
Binario
001011101011010011110100101101110000111101001010101100000111111000010101011110100101010001111101010100011100001111
Binario
??? Funcionamiento
¿¿Ingeniería inversa??
Programa Tinke interpretando una imagen
¿Ingeniería inversa?
¿Para qué?
● Curiosidad / Diversión / Aprendizaje
● Análisis de seguridad
● Análisis de malware
● Black-hat
¿Ingeniería inversa?
Análisis de seguridad
Generación de contraseña de Whatsapp en iOS
Ingeniería inversa
Herramientas usadas
IDA Pro 6.1 + DeSmuME
Ni no kuniEl mago de las tinieblas
PokémonEdición Blanca
Juegos objetivos
Integridad en archivos
Partidas de guardado
Datos binarios de una partida
● 64 kB
Ni no kuni
● Logros ● No multijugador
Integridad en archivos
Partidas de guardado
Advertencia al iniciar el juego Intento de modificar la partida
Ni no kuni
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
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)
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
Integridad en archivos
Archivos con códigoPokémon Blanco
Analizando la rutina en ensamblador...HMAC
Cifrado en archivosNi no kuni
● Archivos con características de personajes
● Cifrados con operación NOT
NOT / XOR 0xFF
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!
Comunicación Wi-Fi
Comunicación cifrada HTTPS
Procedimientos para obtener paquetes en plano
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
+
Procedimientos para obtener paquetes en plano
Comunicación Wi-Fi
1) Punto de interrupción al inicio y fin de rutina RC4
2) Cambiar dirección hosts: “https://...” => “http://...”
Procedimientos para obtener paquetes en plano
Comunicación Wi-Fi
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
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
Comunicación Wi-Fi
Mensajes intercambiados
MD5 de challenge AC48 espacios seguidostoken de ACchallenge generadochallenge actualMD5 de challenge AC
MD5 de la siguiente cadena:
Comunicación Wi-Fi
Mensajes intercambiados
¡Se listan todos los DLC disponibles!
Comunicación de acción list
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
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
● Reversing iOS apps for fun and profit
● Whatsapp – iOS password generation
● Save Nintendo WiFi
● DWC Network Server Emulator
● Simple HTTPS server in Python + Create CA and Certs
Referencias
Benito Palacios Sánchez
Seguridad en Redes de ComunicaciónUniversidad de Granada
Ingeniería inversa.Seguridad en juegos de
Nintendo DS