Parte: 13 — Seguridad móvil, IoT e inalámbrica · Fuente: OWASP MASTG y The Mobile Application Hacker's Handbook (Chell et al.) ⏱️ Duración estimada: 120 min · Nivel: Avanzado
Realizar una evaluación de seguridad de una app iOS sobre un dispositivo con jailbreak: descifrar y analizar el IPA, inspeccionar el almacenamiento y el Keychain, interceptar tráfico TLS evadiendo pinning, y saltar detección de jailbreak con Frida/objection. El alumno aprenderá a adaptar la metodología MASVS al ecosistema iOS, donde el code signing y el sandbox imponen restricciones ausentes en Android.
⚠️ Nota ética: solo sobre apps propias, apps deliberadamente vulnerables (DVIA-v2, MASTG apps) o con autorización escrita. Descifrar o redistribuir apps de terceros vulnera la ley y los términos de Apple.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Preparación del dispositivo jailbroken | Base para el análisis dinámico |
| 2 | Descifrado del IPA (FairPlay) | El binario de App Store está cifrado |
| 3 | Análisis estático de Mach-O | Revela lógica, cadenas y entitlements |
| 4 | Almacenamiento y Keychain | Fugas de datos sensibles frecuentes |
| 5 | Interceptación TLS y pinning | Ver el tráfico real de la app |
| 6 | Detección de jailbreak y bypass | Habilita el análisis dinámico |
| 7 | Reporte MASVS | Estandariza los hallazgos |
NSAllowsArbitraryLoads) debilitan la comunicación. Característica: hallazgo común de MASVS-NETWORK.ios keychain dump, ios sslpinning disable, ios jailbreak disable). Característica: automatiza tareas típicas.# Dispositivo propio jailbroken con OpenSSH y Frida
pip install frida-tools objection
frida-ps -Uai # listar apps instaladas por Frida (USB)
# Descifrar una app propia
git clone https://github.com/AloneMonkey/frida-ios-dump
python3 dump.py <nombre_app> # genera un .ipa descifrado
python3 dump.py DVIA-v2 y obtén el IPA descifrado.Info.plist con plutil -p, extrae entitlements (codesign -d --entitlements :-) y vuelca clases con class-dump.strings <binario> | grep -iE "http://|apikey|secret|token".env para localizar directorios, luego revisa Documents/, Library/Preferences/*.plist y bases SQLite.objection -g <app> explore → ios keychain dump y anota clases de accesibilidad.ios sslpinning disable. Verifica el tráfico en Burp.ios jailbreak disable o un script Frida, y documenta el bypass.otool -l que la sección LC_ENCRYPTION_INFO quedó a 0.Info.plist cualquier excepción ATS y evalúa su riesgo.Completa un pentest de una app iOS vulnerable y entrega evidencia de tres hallazgos de distinta categoría. Criterio de aceptación: demuestras interceptación exitosa del tráfico HTTPS tras evadir el pinning con una captura, e incluyes el volcado del Keychain señalando al menos un ítem con clase de accesibilidad demasiado permisiva.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
dump.py falla al conectar |
frida-server no corre en el dispositivo o versión distinta; alinea versiones |
| class-dump devuelve poco | App en Swift; usa Frida/Ghidra en su lugar |
| Burp sin tráfico | CA no confiado o pinning; confía el perfil y evade pinning |
| App se cierra al abrir | Jailbreak detection; usa objection para desactivarla |
codesign no muestra entitlements |
Binario cifrado; descífralo primero |
❓ ¿Por qué hay que descifrar el binario antes de analizarlo? Las apps de App Store se distribuyen con cifrado FairPlay; el RE estático solo es útil sobre el binario descifrado que se vuelca desde memoria.
❓ ¿Es más difícil hookear Swift que Objective-C? Sí: Swift no expone metadatos de runtime tan ricos como Objective-C, por lo que class-dump aporta menos y suele recurrirse a Frida y análisis del binario.
❓ ¿Puedo hacer el pentest en el simulador de Xcode? Parcialmente: el simulador usa binarios x86/arm no cifrados y facilita ciertas pruebas, pero no reproduce el Secure Enclave ni el comportamiento real del hardware.
Clase 263 — Seguridad de iOS: arquitectura