Este framework proporciona una defensa en profundidad contra amenazas comunes en entornos iOS, tales como ingeniería inversa, manipulación de memoria e instrumentación dinámica. Implementa múltiples capas de seguridad para proteger la integridad de la aplicación.
El sistema se compone de 8 detectores independientes que resuelven vulnerabilidades específicas en código nativo:
| Módulo | Vulnerabilidad Detectada | Técnica Utilizada |
|---|---|---|
| DebuggerDetector | Depuradores activos (LLDB) | sysctl P_TRACED y ptrace PT_DENY_ATTACH. |
| JailbreakDetector | Dispositivo comprometido | Verificación de archivos (Cydia), permisos de escritura y URL Schemes. |
| EmulatorDetector | Simuladores/Emuladores | Verificación de variables de entorno y hardware del simulador. |
| IntegrityDetector | Inyección de librerías | Inspección de imágenes dyld en busca de firmas sospechosas. |
| TimingAnomalyDetector | Breakpoints / Code Stepping | Medición de latencia en operaciones matemáticas triviales. |
| EnvironmentDetector | Manipulación de entorno | Detección de variables DYLD_INSERT_LIBRARIES. |
| AntiTamperingProtector | Re-firmado y Clonación | Validación de Bundle ID y perfiles de aprovisionamiento. |
| FridaDetector | Instrumentación Dinámica | Escaneo de puertos (27042) y agentes Frida en memoria. |
| SwizzlingDetector | Method Swizzling | Verificación de implementaciones originales en tiempo de ejecución. |
El SecurityManager actúa como un orquestador central que invoca cada uno de los detectores de forma asíncrona o secuencial durante el ciclo de vida de la aplicación.
Se recomienda ejecutar la auditoría de seguridad lo antes posible para proteger el arranque de la app:
func application(_ application: UIApplication, didFinishLaunchingWithOptions ...) -> Bool {
// Iniciar auditoría de los 8 módulos
let isCompromised = SecurityManager.shared.runFullSecurityAudit()
if isCompromised {
// Respuesta ante amenaza: p. ej., limpiar datos y salir
SecurityManager.shared.terminateWithSecurityPolicy()
}
return true
}