Este documento presenta una guía sobre cómo auditar aplicaciones iOS. Explica los pasos clave de la auditoría, incluyendo el reversing para obtener los binarios, el análisis estático del código, el análisis dinámico interceptando tráfico de red y modificando código con Frida, y la elaboración de resultados. También cubre temas como la estructura de las aplicaciones iOS, jailbreaking, y las vulnerabilidades Spectre y Meltdown.
4. Auditando aplicaciones iOS 4
whoami
• Marc Fernández Antolín
• Trabajo en Wise Security
• En los últimos años me he especializado en móviles (por fin Windows
Phone ya no existe)
• Ingeniero informático (UPC)
• Master en Cybersecurity Management (UPC School)
• Datos de contacto:
• mfernandez@wsg127.com
• Telegram: @MarcFdez
6. Auditando aplicaciones iOS 6
Introducción a iOS
• Cifrado: Espacio de usuario cifrado
• Atributos de accesibilidad del Keychain
• kSecAttrAccessibleAlways:
• kSecAttrAccessibleAfterFirstUnlock:
• kSecAttrAccessibleWhenUnlocked:
• kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly:
https://www.apple.com/business/docs/iOS_Security_G
uide.pdf
7. Auditando aplicaciones iOS 7
Sandbox y Jailbreak
• Sandbox
• Las apps solamente pueden acceder a su propio espacio de aplicación
• Jailbreak
• Tipos
• Unthethered – Full equip
• Tethered – Necesitas contectarlo a un PC para poder usarlo
• Semi-tethered – Necesitas tethered boot para tener jailbreak
• Semi-untethered – Re-jailbreak (sin PC) al reiniciar; no se pierden datos
• Versiones con Jailbreak: https://www.theiphonewiki.com/wiki/Jailbreak
• Herramientas (algunas)
• Baidu
• Yalu
• Pangu
• Saïgon
• Electra – para iOS 11, no instala cydia
11. Auditando aplicaciones iOS 11
Reversing – Obtención de los binarios
• Obtención de binarios del dispositivo con Clutch (https://github.com/KJCracks/Clutch)
15. Auditando aplicaciones iOS 15
Análisis Estático – Conexiones / URLs en el código
X HTTP!!!
Validar en análisis dinámico
16. Auditando aplicaciones iOS 16
Análisis Estático – Controles de jailbreak
• Búsqueda de funciones tipo “isJailbroken”
• Búsqueda de strings que representan indicadores de compromiso
• Búsqueda de strings que representan indicadores de compromiso II
19. Auditando aplicaciones iOS 19
Análisis Dinámico – Intercepción de tráfico (I)
• Abrir el proxy y configurarlo para que escuche tráfico de otros dispositivos
20. Auditando aplicaciones iOS 20
Análisis Dinámico – Intercepción de tráfico (II)
• Saber que IP tiene nuestro proxy para:
• Configurar el proxy HTTP en el dispositivo
• Equipo: ifconfig
• iPhone: Ajustes -> WiFi -> Red X -> PROXY HTTP -> Manual
21. Auditando aplicaciones iOS 21
Análisis Dinámico – Intercepción de tráfico (III)
• Instalar el certificado de Burp: http://burp:8080
22. Auditando aplicaciones iOS 22
Análisis Dinámico – Intercepción de tráfico (IV)
• Analizar el tráfico de la aplicación
Podemos confirmar que la aplicación
NO utiliza HTTPS
23. Auditando aplicaciones iOS 23
Análisis Dinámico – Intercepción de tráfico (V)
• Analizar el tráfico de la aplicación en busca de
• Errores de autorización (file=3 -> file=4)
• Errores de autenticación (KO -> OK)
• SQLi
• XSS (¿se refleja en una web lo que se introduzca en la app? ¿WebView?)
• Transmisión de datos innecesarios o no validados (request: APP -> server)
• Transmisión de datos innecesarios o no validados (response: APP <- server)
25. Auditando aplicaciones iOS 25
Análisis Dinámico – Instrumentación de código (I)
• Para instrumentar el código de la aplicación utilizaremos FRIDA (https://www.frida.re )
• Modificar el comportamiento de los métodos que nos interesan.
• ¿Porqué nos puede interesar modificar los métodos de la aplicación?
• Evasión de controles
• Modificación de flujos de ejecución de la aplicación
• Cotillear resultados y parámetros de diferentes llamadas a una función (cifrado, construcción de
claves, etc…)
• Saber con qué atributo de accesibilidad se guarda en el keychain una contraseña
26. Auditando aplicaciones iOS 26
Análisis Dinámico – Instrumentación de código (II)
• Función: SendEmailViewController SendEmailWithCode
28. Auditando aplicaciones iOS 28
Análisis Dinámico – Identificación del espacio de la aplicación
• Identificación de la carpeta de la aplicación
• /private/var/containers/Bundle/Application/
Vs.
• /private/var/mobile/Containers/Data/Application/ -->
• Búsqueda de la carpeta
29. Auditando aplicaciones iOS 29
Análisis Dinámico – Extracción de la carpeta de la aplicación
• Mediante scp
30. Auditando aplicaciones iOS 30
Análisis Dinámico – Análisis de la información generada
• Análisis de BBDD(ojo a las extensiones de los ficheros), archivos .plist, etc.
• Persistencia de información sensible
• Caches
32. Auditando aplicaciones iOS 32
Análisis Dinámico – Localización y vaciado del diccionario del teclado
• Ruta en la que se almacena el diccionario del teclado:
• /private/var/mobile/Library/Keyboard/es_ES-dynamic-text.dat
• Restablecer valores de fábrica:
• Ajustes -> General -> Restablecer -> Restablecer diccionario del teclado
• ¿Porqué restaurar valores de fábrica?
• Para asegurar que la información ha sido almacenada por la aplicación que estamos
auditando.
33. Auditando aplicaciones iOS 33
Análisis Dinámico – Análisis del Diccionario del Teclado
• Ruta en la que se almacena el diccionario del teclado:
• /private/var/mobile/Library/Keyboard/es_ES-dynamic-text.dat
• Extracción del diccionario del teclado:
35. Auditando aplicaciones iOS 35
Análisis Dinámico – Información en los Snapshots del sistema
• En la función de multitasking, el sistema crea capturas de pantalla
• Se almacenan en el espacio de la aplicación
• Remediación: sobreescribir la función “applicationDidEnterBackground” para
ocultar contenido sensible
• Carpeta donde se almacenan los Snapshots
Library/Caches/Snapshots/me.joanbiscarri.amigoinvisible
37. Auditando aplicaciones iOS 37
Elaboración de resultados
• ¿Es la parte más importante? Sí y no
• ¿Para quién/es es el entregable? Cliente
• ¿Cuál es el objetivo de la revisión? Mejorar
• ¿Quién se ha dado cuenta (diapositiva 11)?