Pentesting iOS: IPA, Mach-O, jailbreak, class-dump y Frida
· 8 min de lectura
Aprende el stack del pentesting iOS: formato IPA y Mach-O, obtener binarios sin jailbreak, análisis con class-dump e Hopper, dynamic con Frida y Objection, bypass de jailbreak detection, Keychain, Data Protection.
Pentesting de aplicaciones iOS es, en muchos aspectos, más difícil que Android: el ecosistema es más cerrado, Apple firma todos los binarios, el jailbreak es inestable y específico por versión, el toolchain tradicional es macOS-only, y el modelo de seguridad incluye capas como Data Protection Classes, Secure Enclave y App Sandbox que no existen en Android. Al mismo tiempo, iOS sigue las mismas categorías de fallos de aplicación (OWASP MASVS aplica a los dos), y las técnicas conceptuales se trasladan: análisis estático del binario, instrumentación dinámica, intercepción de tráfico, bypass de controles.
Esta lección cubre el stack específico de iOS en 2026: formato IPA y binarios Mach-O, obtención del binario (App Store, o del device), class-dump / Hopper / Ghidra / IDA para estático, Frida y Objection para dinámico, bypass de jailbreak detection, lectura del Keychain y auditoría de Data Protection. Es la segunda lección del bloque mobile de la Tanda 5, continuación de la lección Android.
Prueba solo contra aplicaciones propias o bug bounty programs autorizados. Reverse engineering de apps comerciales iOS tiene restricciones adicionales por la DMCA y equivalentes.
El stack iOS#

Una aplicación iOS se empaqueta como IPA:
- IPA: es un ZIP. Dentro:
Payload/AppName.app/AppName(binario Mach-O)Info.plist: metadata.Assets.car: recursos (imágenes, strings).embedded.mobileprovision: provisioning profile.PlugIns/: extensiones (widgets, share, etc.).Frameworks/: librerías dinámicas.iTunesMetadata.plistMETA-INF/: firma.
El binario Mach-O es el formato ejecutable macOS/iOS, equivalente a ELF en Linux o PE en Windows. Suele venir cifrado por Apple (FairPlay DRM) cuando se descarga del App Store; hay que decrypted desde el device para analizarlo.
Obtener el IPA#
App Store#
Los IPAs del App Store están cifrados. Métodos:
- Device jailbroken: usar herramientas como frida-ios-dump, bfinject, Clutch para dumpear el binario decrypted.
- Apple Configurator 2 (macOS): descarga IPA con cert de developer.
- Websites como ipaarchive.com, IPAlibrary: mirrors con IPAs libres; verificar hash.
Developer build#
Si auditas una app propia, el .ipa sale directamente de Xcode (Archive → Export → Ad-Hoc).
Análisis estático#
class-dump#
Extrae declaraciones Objective-C del binario:
class-dump -H AppName -o headers/
# Genera .h con todas las clases, métodos, propiedades
Para apps en Swift, class-dump no es tan útil (Swift tiene mangling distinto). Hay forks como class-dump-z y class-dump-swift.
Hopper / Ghidra / IDA#
Decompiladores gráficos:
- Hopper ($129): barato, popular para iOS.
- Ghidra (free): NSA, buen soporte Mach-O desde 2020.
- IDA Pro ($$$): estándar profesional, decompilador Hex-Rays extra.
Workflow: cargar binario, buscar strings sospechosas, seguir funciones, identificar lógica de autenticación / crypto / API endpoints.
Strings y entitlements#
# Strings del binario
strings AppName | grep -iE "api|secret|password|key"
# Entitlements embebidos
codesign -d --entitlements :- AppName
# Incluye: keychain-access-groups, com.apple.*, custom entitlements
# Info.plist decodificado
plutil -convert xml1 Info.plist -o -
Entitlements revelan capacidades pedidas por la app (Keychain, iCloud, HealthKit). A veces revelan APIs internas no esperadas.
Jailbreak y sus alternativas#
Para análisis dinámico profundo necesitas jailbreak. Realidad en 2026:
- Checkra1n (hardware exploit checkm8): iPhone 5s a X, iOS 12-14. Persistente.
- Palera1n: igual que checkra1n extendido a iOS 15-16.
- Dopamine: jailbreak semi-tethered para A12-A14 con kfd.
- unc0ver, Taurine: para versiones antiguas.
- Jailbreaks nuevos aparecen meses tras releases nuevas.
Alternativas sin jailbreak:
- TrollStore: permite instalar IPAs sin firma, para iOS 14-15.
- Frida gadget inyectado + resign: funciona sin jailbreak pero requiere developer cert.
- Simulator: Xcode iOS Simulator, no sirve para arquitectura ARM real.
Dynamic con Frida y Objection#
Con device jailbroken y frida-server instalado:
# Instalar
# Cydia / Sileo → frida
# Desde laptop
frida-ps -U | grep AppName
frida -U -l hook.js com.target.app
Hook típico — bypass jailbreak detection:
if (ObjC.available) {
var NSFileManager = ObjC.classes.NSFileManager;
var oldImpl = NSFileManager["- fileExistsAtPath:"];
NSFileManager["- fileExistsAtPath:"].implementation = ObjC.implement(oldImpl, function(handle, selector, path) {
var p = ObjC.Object(path).toString();
if (p.indexOf("/Applications/Cydia.app") >= 0 || p.indexOf("/bin/bash") >= 0) {
return 0; // No existe
}
return oldImpl.call(this, path);
});
}
Objection otra vez wrapper cómodo:
objection -g com.target.app explore
> ios jailbreak disable
> ios sslpinning disable
> ios keychain dump
> ios plist cat Info.plist
Keychain y Data Protection#

Keychain es el almacenamiento seguro para secretos. Clases de accesibilidad:
- kSecAttrAccessibleWhenUnlocked: solo cuando device unlocked.
- kSecAttrAccessibleAfterFirstUnlock: tras primer unlock del boot.
- kSecAttrAccessibleAlways (deprecated): siempre.
- ThisDeviceOnly suffix: no sincroniza por iCloud.
Data Protection Classes para archivos:
- Complete Protection (NSFileProtectionComplete): inaccesible cuando device locked.
- Complete Unless Open: locked pero accessible si archivo ya abierto.
- Complete Until First Auth: tras primer unlock del boot.
- No Protection: siempre accessible.
Un auditor revisa qué clase usan los datos sensibles:
# Objection
> ios keychain dump --json
# Scripts específicos para extraer Keychain en jailbreak: Keychain-Dumper
Datos sensibles con clase No Protection son hallazgo. Keys criptográficas fuera de Secure Enclave son otro.
Intercepción de tráfico#
- Instalar cert CA de Burp en el device (Settings → VPN & Device Management).
- En iOS 10.3+ hay que habilitar manualmente full trust en el cert (Settings → About → Certificate Trust Settings).
- Si la app tiene ATS (App Transport Security) estricto o SSL pinning: hookear con Frida/Objection para bypass.
Alternativa sin jailbreak: MITMproxy con cert instalado, para tráfico que no fuerza pinning.
Vulnerabilidades típicas en iOS#
- Insecure Keychain: secretos con
kSecAttrAccessibleAlways. - URL schemes mal validados:
myapp://action/wipesin check. - Universal Links sin verify: validation incompleta.
- UIPasteboard con datos sensibles (passwords, tokens).
- Deep logs: NSLog con datos sensibles que quedan en system logs.
- Insecure WebView: UIWebView (deprecated) o WKWebView mal configurado.
- Swizzling de system frameworks: aplicaciones que swizzlean APIs sensibles por error.
- ATS wildcard exceptions: dominios que aceptan HTTP, downgrading TLS.
- Data en Documents/ o tmp/ sin Data Protection adecuado.
Herramientas específicas#
- class-dump, otool, nm, strings, codesign: Apple dev tools, básicos.
- Hopper / Ghidra / IDA: decompilación.
- Frida, Objection: dinámico.
- frida-ios-dump: decrypted binary de device.
- MobSF: también soporta iOS.
- Needle (MWR Labs): toolkit forense iOS.
- grapefruit: proyecto nuevo con instrumentación.
Mitigación defensiva#
- ATS stricto sin exceptions.
- Certificate pinning correcto.
- Keychain con WhenUnlocked + Secure Enclave para keys.
- Data Protection Complete para archivos sensibles.
- Jailbreak detection multi-método (archivos, sandbox escapes,
fork(), system call hooks) pero asumir que será bypasseada. - Code obfuscation como barrera (no seguridad real).
- Runtime integrity checks con DeviceCheck / App Attest de Apple.
- ASVS-MASVS MASVS-RESILIENCE controles.
iOS vs Android: comparación resumida#
Para quien viene de la lección Android:
| Aspecto | Android | iOS |
|---|---|---|
| Formato paquete | APK (ZIP) | IPA (ZIP) |
| Binario | DEX (bytecode) | Mach-O (nativo) |
| Lenguaje principal | Java/Kotlin | Objective-C/Swift |
| Elevación | Root | Jailbreak |
| Store | Play Store + alternativas | Solo App Store (y TestFlight) |
| Instalar sin store | Sideload fácil (APK) | Difícil (cert, TrollStore, dev) |
| Reverse engineering | jadx para decompilación clara | class-dump/Hopper, Swift mangling complica |
| Instrumentación | Frida/Objection | Frida/Objection (igual stack) |
| Modelo permisos | Runtime + manifest | Entitlements + sandbox estricto |
| Keychain equivalente | SharedPreferences cifrado | Keychain con accessibility |
| Toolchain host | Linux/macOS/Windows | Mayormente macOS |
Por diseño iOS es más cerrado: Apple firma, Apple valida, el usuario tiene menos libertad. Para el atacante masivo, iOS es un objetivo menor; para el targeted o APT, iOS tiene sus propios bugs.
Zero-click iOS attacks#
Un segmento especializado: exploits iOS que no requieren interacción del usuario. Un mensaje iMessage o email provoca RCE y compromiso completo sin que el usuario abra nada.
Casos famosos:
- Pegasus (NSO Group): ForcedEntry (2021) vía iMessage CoreGraphics bug.
- BlastPass (2023): PassKit + iMessage para zero-click en iOS 16.
- Operation Triangulation (Kaspersky 2023): zero-click largo tiempo sin descubrir.
El mercado gris de zero-click iOS paga millones por exploit funcional. Apple Security Research paga 2M USD por reportes legales equivalentes. Es territorio de élite técnica con pocas personas en el mundo capaces, y no es lo típico que encuentres en pentest corporativo.
Errores comunes#
- Jailbreak detection con solo
fileExistsAtPath:/Applications/Cydia.app(hookeable en una línea). - API keys en Info.plist (extraíbles con
plutil). - SSL pinning solo en frontend, backend API acepta cualquier origen.
- Guardar JWTs en NSUserDefaults (sin cifrado).
- Deeplinks con acción destructiva sin confirmación de usuario.
Preguntas frecuentes#
¿Necesito macOS para pentesting iOS?#
Técnicamente no, pero la mayoría del toolchain (class-dump, Xcode, Apple Configurator, codesign) es macOS. Linux puede cubrir con Ghidra + Frida, pero la experiencia es menos pulida.
¿App Store puede detectar jailbreak de developer?#
Con DeviceCheck / App Attest, Apple pasa un token a la app que indica integridad. Apps con eso implementado bloquean jailbroken devices.
¿Cómo manejo IPAs cifrados del App Store?#
Jailbreaked device + frida-ios-dump extrae decrypted binary. Es la ruta estándar. Sin device, trabajas con IPAs que ya fueron dumpeados por terceros.
¿Diferencias Swift vs Objective-C para reversing?#
Swift tiene name mangling complejo; class-dump clásico no funciona. Herramientas más modernas: class-dump-swift, swiftdump, IDA / Ghidra con plugins Swift. Objective-C es más fácil de leer: sintaxis parecida a C con dispatch dinámico.
¿Dónde practico?#
El laboratorio signinbleed de whoami-labs incluye un IPA de demo con jailbreak detection débil, SSL pinning weak, secretos en Info.plist. Practicas MobSF, Hopper/Ghidra, Frida, Objection.
¿Qué hay de los Apple Silicon Macs para desarrollo iOS?#
Los Mac M1+ pueden correr apps iOS directamente, lo que abre análisis sin device. Para pentesters significa que una buena parte del análisis estático y dinámico es viable en un Mac M1 moderno sin necesidad de device físico, salvo para pruebas de interacción real y de hardware específico.
¿Las App Clips cambian el modelo?#
App Clips son micro-aplicaciones (<10MB) descargables al instante desde QR o link. Comparten gran parte del modelo de seguridad de la app completa. Para pentesting: son un target reducido pero potencialmente más expuesto por su naturaleza instant-launch.
¿iOS tiene equivalente a Content Providers de Android?#
No directamente. iOS tiene App Extensions (share, intent, widgets) y URL schemes / Universal Links. El modelo es más restrictivo: cross-app communication es explícita y limitada, lo que reduce superficie pero no la elimina.
¿Jailbreak sigue siendo relevante en 2026?#
Para pentest profesional sí: análisis dinámico serio lo requiere. Para usuarios normales está en declive: Apple cierra bugs más rápido, los jailbreaks tardan meses y son semi-tethered (hay que re-jailbreakear tras reboot). Para testers, sigue siendo herramienta esencial del toolkit.
Resumen#
- iOS apps en formato IPA (ZIP) con binarios Mach-O.
- Obtener binario: jailbreak + frida-ios-dump, o Apple Configurator, o IPAs libres.
- Estático: class-dump, Hopper/Ghidra/IDA, strings, codesign.
- Dinámico: Frida, Objection con hooks típicos para jailbreak detection y SSL pinning.
- Keychain classes y Data Protection son controles específicos iOS a auditar.
- Vulns típicas: insecure Keychain, URL schemes, ATS exceptions, data en tmp sin protection.
- Toolchain mayormente macOS-only; Linux posible con esfuerzo.
Quien se especializa en pentesting iOS tiene un mercado estrecho pero bien pagado. Las empresas con apps críticas iOS (bancos, salud, defensa, gobierno) pagan premium por auditores con experiencia real en jailbreak, Frida avanzado y análisis detallado de Keychain. Es una carrera de nicho para quien disfruta del reverse engineering nativo de bajo nivel, maneja bien la línea de comandos macOS, y no se desalienta por el ecosistema cerrado de Apple con sus actualizaciones frecuentes y la consiguiente rotación constante de técnicas disponibles.
La próxima lección cubre DevSecOps y CI/CD, saliendo del mundo mobile para entrar en el de los pipelines de construcción de software, otra categoría que merece su propia disciplina de auditoría en el panorama corporativo moderno.