Análisis de Apps iOS
El análisis de aplicaciones iOS es un proceso fundamental para identificar vulnerabilidades y evaluar la postura de seguridad de una app. Este análisis se divide en dos enfoques complementarios: análisis estático (sin ejecutar la aplicación) y análisis dinámico (durante la ejecución). Dominar ambos métodos es clave para un bug bounty hunter efectivo en iOS.
Preparación del Entorno de Testing
Requisitos del Sistema Host
macOS con privilegios administrativos (preferible)
Xcode y Xcode Command Line Tools instalados
Red Wi-Fi que permita comunicación cliente-a-cliente
Herramientas de proxy como Burp Suite, OWASP ZAP o Charles Proxy
Dispositivos de Testing
Dispositivo iOS jailbreakeado (recomendado para análisis completo)
iOS Simulator (limitado, solo para pruebas básicas)
Emulador Corellium (solución empresarial)
Herramientas Esenciales
Estático:
class-dump
,otool
,nm
,strings
, IDA Pro, Ghidra, HopperDinámico: Frida, LLDB, Cycript, Objection
Frameworks: MobSF, OWASP MASTG
Jailbreak: checkra1n, unc0ver
Análisis Estático de Apps iOS
El análisis estático examina el código y recursos de la aplicación sin ejecutarla, revelando información valiosa sobre su estructura interna.
Extracción del Archivo IPA
Los archivos .ipa
son esencialmente archivos ZIP que contienen el binario de la aplicación y sus recursos.
# Cambiar extensión y extraer
mv MyApp.ipa MyApp.zip
unzip MyApp.zip
cd Payload/MyApp.app/
Análisis de la Estructura del Binario
Verificar información básica del binario:
file MyApp
# Output: MyApp: Mach-O 64-bit executable arm64
Detectar si la app está encriptada (FairPlay DRM):
otool -l MyApp | grep crypt
# cryptid 1 = encriptada, cryptid 0 = no encriptada
Herramientas de Análisis Estático
class-dump
Extrae interfaces de clases Objective-C desde binarios Mach-O:
class-dump MyApp > classes.h
class-dump -H MyApp # Genera archivos .h separados
otool
Herramienta versátil para examinar binarios Mach-O:
# Listar librerías vinculadas
otool -L MyApp
# Buscar funciones criptográficas débiles
otool -tv MyApp | grep -E "(MD5|SHA1|DES)"
# Analizar segmentos y secciones
otool -l MyApp
nm
Muestra símbolos del binario:
# Mostrar todos los símbolos
nm MyApp
# Buscar funciones específicas
nm MyApp | grep -i "password\|token\|secret"
strings
Extrae cadenas de texto del binario:
strings MyApp | grep -E "(api|key|password|token)"
Análisis con MobSF
Mobile Security Framework automatiza gran parte del análisis estático:
Instalación y ejecución:
docker run -it --rm -p 8000:8000 opensecurity/mobsf:latest
Subir archivo IPA y ejecutar análisis automático
Revisar resultados buscando:
Esquemas URL inseguros
Configuraciones ATS incorrectas
Información sensible hardcodeada
Permisos excesivos
Análisis Dinámico de Apps iOS
El análisis dinámico permite observar el comportamiento de la aplicación en tiempo real, interceptar comunicaciones y manipular la ejecución.
Configuración en Dispositivo Jailbreakeado
Instalar herramientas básicas via Cydia:
# Repositorio necesario
http://apt.thebigboss.org/repofiles/cydia/
# Paquetes recomendados:
- OpenSSH
- Big Boss Recommended Tools (incluye otool)
- Darwin CC Tools
- Frida
Análisis con Frida
Frida es la herramienta más potente para instrumentación dinámica:
Instalación:
pip install frida-tools
Conexión al dispositivo:
# Listar aplicaciones
frida-ps -U
# Conectar a una app específica
frida -U "App Name"
Ejemplos de scripts Frida:
Bypass autenticación biométrica:
Java.perform(function() {
var LAContext = ObjC.classes.LAContext;
LAContext["- evaluatePolicy:localizedReason:reply:"].implementation = function(policy, reason, reply) {
console.log("[+] Biometric authentication bypassed");
var success = ObjC.classes.NSNumber.numberWithBool_(true);
reply(success, null);
};
});
Interceptar llamadas de red:
var NSURLRequest = ObjC.classes.NSURLRequest;
var originalMethod = NSURLRequest["- initWithURL:"];
originalMethod.implementation = function(url) {
console.log("[+] URL Request: " + url.toString());
return originalMethod.call(this, url);
};
Debugging con LLDB
Para análisis de bajo nivel y debugging:
# Conectar al proceso
debugserver *:2345 -a "MyApp"
# En el host
lldb
(lldb) process connect connect://device-ip:2345
# Establecer breakpoints
(lldb) b [ClassName methodName]
Runtime Analysis con Cycript
Cycript permite manipulación en tiempo real:
# Conectar al proceso
cycript -p "MyApp"
# Acceder al objeto UIApplication
UIApplication.sharedApplication
# Explorar jerarquía de vistas
UIApp.keyWindow.recursiveDescription().toString()
Análisis de Red y Comunicaciones
Configuración de Proxy
Instalar certificado Burp/ZAP:
Configurar proxy en dispositivo iOS
Navegar a
http://burp
o dirección del proxyDescargar e instalar certificado CA
Habilitar certificado en Configuración > General > Acerca de > Configuración de certificados
Bypass certificate pinning con Frida:
// Script para deshabilitar SSL pinning
setTimeout(function() {
Java.perform(function() {
// Implementación específica según el framework usado
var NSURLSession = ObjC.classes.NSURLSession;
// ... código de bypass
});
}, 1000);
Inspección del Sandbox
En dispositivos jailbreakeados, puedes acceder directamente al sandbox de la app:
# Localizar directorio de la app
find /var/mobile/Containers/Data/Application/ -name "*AppName*"
# Buscar datos sensibles
find /path/to/app/sandbox -type f -exec grep -l "password\|token\|key" {} \;
# Examinar archivos plist
plutil -p app.plist
# Revisar UserDefaults
defaults read /path/to/app/Library/Preferences/com.company.app.plist
Análisis Automatizado vs Manual
Ventajas del Análisis Automatizado
Rápido y eficiente para detección inicial
Cubre vulnerabilidades conocidas sistemáticamente
Genera informes estructurados
Ventajas del Análisis Manual
Mayor precisión en la detección
Capacidad de encontrar vulnerabilidades lógicas complejas
Análisis contextual detallado
Flujo de Trabajo Recomendado
Análisis automatizado inicial con MobSF u OWASP MASTG
Análisis estático manual con class-dump, otool, strings
Análisis dinámico con Frida para validar hallazgos
Testing de red con proxies para comunicaciones
Exploración del sandbox para verificar almacenamiento seguro
Casos de Uso Comunes
Búsqueda de Credenciales Hardcodeadas
strings MyApp | grep -E "(api_key|secret|password|token)" > sensitive_strings.txt
Detección de Librerías Vulnerables
otool -L MyApp | grep -v "/System/Library"
Identificación de Funciones Criptográficas Débiles
nm MyApp | grep -E "(MD5|SHA1|DES|RC4)"
Análisis de Entitlements
codesign -d --entitlements - MyApp
Mejores Prácticas
Combina siempre análisis estático y dinámico para obtener una visión completa
Usa dispositivos jailbreakeados para análisis profundo cuando sea posible
Documenta todos los hallazgos con evidencia reproducible
Verifica hallazgos automatizados manualmente antes de reportar
Mantén actualizadas las herramientas para detectar las últimas vulnerabilidades
El análisis efectivo de apps iOS requiere paciencia, metodología y uso combinado de múltiples herramientas. Esta base te permitirá identificar vulnerabilidades tanto obvias como sutiles en aplicaciones iOS.
Última actualización