Pentesting iOS
iOS es más cerrado que Android: el sandboxing es estricto, el sistema de ficheros está más protegido y, sin jailbreak, el acceso es limitado. Las apps se distribuyen como IPA (un ZIP con el binario Mach-O cifrado por la App Store, recursos y Info.plist). Aun así, con un dispositivo con jailbreak (o técnicas sin jailbreak) y Frida, se puede inspeccionar, instrumentar y auditar una app iOS siguiendo el mismo MASVS.
El IPA y sus piezas
Sección titulada «El IPA y sus piezas»IPA = ZIP con Payload/App.app/: <binario Mach-O> el ejecutable (cifrado por FairPlay si viene de la App Store) Info.plist configuración, URL schemes (deeplinks), ATS, permisos embedded.mobileprovision perfil de aprovisionamiento _CodeSignature/ firma recursos (.plist, .db, assets)El reto del cifrado FairPlay
Sección titulada «El reto del cifrado FairPlay»Las apps de la App Store vienen cifradas; para análisis estático del binario hay que descifrarlo primero (dump desde memoria con el dispositivo):
# en dispositivo con jailbreak, volcar el binario descifradofrida-ios-dump # extrae el IPA descifrado# o Clutch / bagbak# luego análisis estático del Mach-OEntorno de pruebas
Sección titulada «Entorno de pruebas»# con jailbreak (acceso completo)checkra1n / palera1n / unc0ver según versión de iOS# acceso por SSH al dispositivo, Cydia/Sileo para herramientas# sin jailbreak (más limitado)# re-firmar la app con Frida gadget inyectado (objection patchipa), sideloadAnálisis estático
Sección titulada «Análisis estático»# el binario Mach-O descifradoclass-dump / otool -l # clases, métodos, Objective-C/Swift metadatastrings binario | grep -iE 'http|key|secret|password' # endpoints, secretosplutil -p Info.plist # URL schemes (deeplinks), ATS, permisos# buscar NSAllowsArbitraryLoads (ATS deshabilitado -> HTTP permitido)Análisis dinámico
Sección titulada «Análisis dinámico»# instrumentación con Frida (ver mob-frida)frida -U -f com.target.app -l script.jsobjection -g com.target.app explore # explorar, bypass, dump# bypass de jailbreak detection y SSL pinning (mob-ssl)objection --gadget com.target.app explore -s "ios sslpinning disable"Vectores de ataque típicos
Sección titulada «Vectores de ataque típicos»# almacenamiento inseguro (ver mob-storage)# Keychain: objection ios keychain dump# ficheros de la app en /var/mobile/Containers/Data/Application/<UUID>/# NSUserDefaults (.plist), bases de datos SQLite, caché# URL schemes / Universal Links (deeplinks -> mob-deeplinks)# jailbreak detection evitable (no es seguridad real)# pasteboard, capturas de pantalla en background, logs# backend/API (el objetivo real -> sección Web)Keychain y datos sensibles
Sección titulada «Keychain y datos sensibles»El Keychain de iOS es el lugar “correcto” para secretos, pero con jailbreak se puede volcar:
objection -g com.target.app exploreios keychain dump # contenido del Keychain de la app# revisar clases de protección de datos (kSecAttrAccessible...) -> ¿accesible sin desbloquear?Para la defensa
Sección titulada «Para la defensa»- Secretos en el Keychain con la clase de protección adecuada (no en plist/NSUserDefaults/código).
- ATS activado (no
NSAllowsArbitraryLoads); TLS + pinning (SSL pinning y bypass). - Data Protection (cifrado ligado al desbloqueo) para ficheros sensibles; limpiar caché/pasteboard.
- Jailbreak detection / anti-debug / ofuscación (RESILIENCE) elevan el coste, no sustituyen la seguridad.
- Validar URL schemes y Universal Links; toda la seguridad crítica en el backend.
Checklist de prueba
Sección titulada «Checklist de prueba»- Obtener y descifrar el IPA (frida-ios-dump)
- Entorno: jailbreak o Frida gadget (sin jailbreak)
- Estático: class-dump, strings, Info.plist (URL schemes, ATS)
- Dinámico: Frida/Objection, bypass jailbreak detection
- Keychain dump y almacenamiento (Almacenamiento inseguro)
- SSL pinning bypass (SSL pinning y bypass)
- Deeplinks / Universal Links (Deeplinks e IPC)
- Backend/API (sección Web)