Arquitectura de iOS
Comprender la arquitectura de iOS es fundamental para cualquier investigación de seguridad o bug bounty. Este conocimiento permite identificar posibles vectores de ataque, comprender cómo están protegidas las aplicaciones y saber en qué puntos puede fallar el sistema.
Kernel Darwin y XNU
iOS está basado en Darwin, un sistema operativo de código abierto que combina elementos de FreeBSD con el kernel XNU (X is Not Unix). El kernel XNU es híbrido y se compone de:
OSFMK 7.3 (Mach Kernel): proporciona multitarea y comunicación entre procesos.
Elementos de FreeBSD: gestionan procesos, permisos y el stack de red.
I/O Kit: framework basado en C++ para controladores de dispositivos.
Arquitectura ARM64
Desde el iPhone 5s (2013), todos los dispositivos iOS utilizan procesadores ARM64 (ARMv8 / AArch64). Apple eliminó el soporte a 32 bits a partir de iOS 11 (2017).
Implicaciones para el bug bounty:
Cualquier exploit o herramienta debe estar compilada para ARM64.
Los binarios de App Store solo contienen la arquitectura necesaria, ya no empaquetan múltiples versiones.
El análisis con herramientas como
lipo
ayuda a extraer arquitecturas específicas.
Capas de la Arquitectura iOS
La arquitectura se organiza en capas jerárquicas que van desde el nivel más bajo hasta el más cercano al usuario:
Kernel Darwin → base del sistema operativo.
Core OS → servicios de bajo nivel como acceso a hardware, hilos y comunicación.
Core Services → servicios comunes como networking, bases de datos o seguridad.
Media Layer → frameworks multimedia (gráficos, audio, video).
Cocoa Touch → APIs y frameworks de interacción con apps.
Core Services
En esta capa se encuentran varios frameworks esenciales para el análisis de seguridad:
Foundation Framework: gestión de memoria y programación orientada a objetos.
Core Foundation: API de bajo nivel en C.
CFNetwork: gestión de enlaces de red (HTTP/HTTPS).
Security Framework: criptografía, certificados y autenticación.
SQLite: base de datos embebida en muchas apps.
Modelo de Seguridad de iOS
Sandboxing
Cada aplicación funciona en un entorno aislado con su propio contenedor.
Usa el Mandatory Access Control Framework (MACF) en el kernel.
El módulo Sandbox.kext valida permisos antes de permitir syscalls.
Entitlements
Definen qué recursos del sistema puede usar una app.
Se especifican en un archivo plist dentro de la firma del binario.
Controlan acceso a iCloud, Siri, notificaciones push, etc.
Validados en tiempo de ejecución con AppleMobileFileIntegrity.kext.
Code Signing
Toda app debe estar firmada digitalmente.
Garantiza integridad del código y define los entitlements.
Previene modificaciones tras la instalación.
Formato Binario: Mach-O
Todas las apps iOS se ejecutan en binarios Mach-O (Mach Object).
Estructura
Header: contiene tipo de CPU, flags, comandos de carga.
Load Commands: información sobre librerías dinámicas, encriptación y firmas.
Segments/Data: dividen código y datos en memoria.
Características
Soporte para FAT binaries (múltiples arquitecturas).
El App Store solo distribuye la necesaria para el dispositivo.
Se pueden extraer o modificar con lipo.
Runtime de Objective-C
Aunque Swift es dominante, el runtime de Objective-C se sigue utilizando:
Method Swizzling: permite reemplazar métodos en tiempo de ejecución.
Introspección: examinar clases y métodos dinámicamente.
Posibles vulnerabilidades por acceso a métodos/variables privadas.
Comunicación Inter-Proceso (IPC)
Mach IPC
Base de la comunicación en iOS.
Usa
mach_sendmsg
para pasar mensajes entre procesos.MIG (Mach Interface Generator) simplifica interfaces.
XPC
Capa de abstracción sobre Mach IPC.
Serializa objetos y los pasa entre procesos.
Usado en muchos frameworks y servicios de sistema.
Herramienta de análisis: xpcspy.
Mecanismos de Seguridad Críticos
ASLR (Address Space Layout Randomization): aleatoriza la memoria en cada ejecución.
SIP (System Integrity Protection / rootless): protege ficheros y procesos del sistema.
Secure Enclave: chip interno que hace operaciones criptográficas sensibles.
Boot ROM: solo permite cargar kernels firmados.
Conclusión
La arquitectura de iOS combina capas rígidas de seguridad con mecanismos en hardware y software. Para bug bounty hunting, entender estas capas es esencial:
El sandbox y entitlements son claves al analizar limitaciones de apps.
Mach-O, runtime Objective-C y XPC son puntos comunes de entrada para vulnerabilidades.
El conocimiento de ARM64 y del kernel Darwin/XNU es indispensable al analizar exploits.
Estudiar estos fundamentos permitirá identificar dónde buscar errores de configuración, vulnerabilidades lógicas o bugs de memoria explotables en iOS.
Última actualización