Entorno de pruebas iOS
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Programa de Desarrolladores de Apple
Una identidad de aprovisionamiento (provisioning identity) es una colección de claves públicas y privadas que están asociadas a una cuenta de desarrollador de Apple. Para firmar apps necesitas pagar 99$/año para registrarte en el Programa de Desarrolladores de Apple y obtener tu identidad de aprovisionamiento. Sin esto no podrás ejecutar aplicaciones desde el código fuente en un dispositivo físico. Otra opción para hacer esto es usar un jailbroken device.
A partir de Xcode 7.2 Apple ha proporcionado una opción para crear un perfil de aprovisionamiento de desarrollo iOS gratuito que permite escribir y probar tu aplicación en un iPhone real. Ve a Xcode –> Preferences –> Accounts –> + (Agrega nuevo Apple ID con tus credenciales) –> Click on the Apple ID created –> Manage Certificates –> + (Apple Development) –> Done
__Luego, para ejecutar tu aplicación en tu iPhone primero necesitas indicar al iPhone que confíe en el ordenador. Después, puedes intentar ejecutar la aplicación en el móvil desde Xcode, pero aparecerá un error. Así que ve a Settings –> General –> Profiles and Device Management –> Selecciona el perfil no confiable y haz click en “Trust”.
En iOS 16+, también debe habilitarse el Developer Mode en el dispositivo antes de que las aplicaciones instaladas localmente y firmadas para desarrollo (o apps re-firmadas con get-task-allow) se ejecuten. Esta opción solo aparece después de emparejar el dispositivo con Xcode o después de instalar una app firmada para desarrollo al menos una vez. El flujo es: empareja el dispositivo, inicia una instalación desde Xcode, luego habilita Settings –> Privacy & Security –> Developer Mode, reinicia y confirma el aviso tras desbloquear.
Ten en cuenta que las aplicaciones firmadas por el mismo certificado de firma pueden compartir recursos de forma segura, como keychain items.
Los perfiles de aprovisionamiento se almacenan dentro del teléfono en /Library/MobileDevice/ProvisioningProfiles
Herramientas modernas del lado del host para dispositivos
Para las pruebas iOS actuales, las herramientas en el host están cada vez más divididas entre:
xcrun simctlpara la gestión del simuladorxcrun xctrace list devicespara enumerar simuladores y dispositivos físicosxcrun devicectl(Xcode 15+) para interactuar con dispositivos físicos emparejados desde la línea de comandos
Ejemplos útiles:
# List booted simulators
xcrun simctl list | grep Booted
# List all visible devices/simulators
xcrun xctrace list devices
# List paired physical devices (Xcode 15+)
xcrun devicectl list devices
devicectl es especialmente útil en pipelines de automatización donde necesitas instalar o lanzar una build de prueba sin abrir Xcode:
xcrun devicectl device install app --device <udid> <path_to_app_or_ipa>
xcrun devicectl device launch app --terminate-existing --device <udid> <bundle_id>
Mantén Xcode actualizado cuando pruebes dispositivos con iOS 17+. Apple movió los servicios de desarrollo al stack CoreDevice y también cambió cómo se manejan las Developer Disk Images, por lo que las herramientas del host desactualizadas con frecuencia fallan con errores de emparejamiento, montaje de imágenes o lanzamiento de apps.
Simulador
Tip
Ten en cuenta que un simulador no es lo mismo que un emulador. El simulador solo simula el comportamiento del dispositivo y sus funciones, pero no las usa realmente.
Simulador
Lo primero que debes saber es que realizar un pentest dentro de un simulador será mucho más limitado que hacerlo en un dispositivo jailbroken.
Todas las herramientas necesarias para compilar y dar soporte a una app iOS están oficialmente soportadas solo en Mac OS.
La herramienta de facto de Apple para crear/depurar/instrumentar aplicaciones iOS es Xcode. Se puede usar para descargar otros componentes como simuladores y diferentes versiones del SDK necesarias para compilar y probar tu app.
Se recomienda encarecidamente descargar Xcode desde la App Store oficial. Otras versiones pueden contener malware.
Los archivos del simulador se encuentran en /Users/<username>/Library/Developer/CoreSimulator/Devices
El simulador sigue siendo muy útil para probar rápidamente artefactos del sistema de ficheros, NSUserDefaults, parsing de plist, esquemas de URL personalizados y instrumentación básica en tiempo de ejecución. Sin embargo, ten en cuenta que no emula varias propiedades de seguridad del dispositivo físico que suelen ser relevantes durante un pentest, como el Secure Enclave, la baseband, ciertos comportamientos de control de acceso del keychain, flujos biométricos realistas y condiciones de ejecución específicas de jailbreak.
Para abrir el Simulator, ejecuta Xcode, luego pulsa en la Xcode tab –> Open Developer tools –> Simulator
__En la siguiente imagen al hacer clic en “iPod touch […]” puedes seleccionar otro dispositivo para probar en:
.png)
.png)
Aplicaciones en el simulador
Dentro de /Users/<username>/Library/Developer/CoreSimulator/Devices puedes encontrar todos los simuladores instalados. Si quieres acceder a los archivos de una aplicación creada dentro de uno de los emuladores, puede ser difícil saber en cuál está instalada. Una forma rápida de encontrar el UID correcto es ejecutar la app en el simulador y ejecutar:
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
Una vez que conoces el UID, las aplicaciones instaladas dentro de él se pueden encontrar en /Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application
Sin embargo, sorprendentemente no encontrarás la aplicación aquí. Necesitas acceder a /Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/
Y en esta carpeta puedes encontrar el paquete de la aplicación.
Emulator
Corellium es el único emulador de iOS disponible públicamente. Es una solución SaaS empresarial con un modelo de licencia por usuario y no ofrece ninguna licencia de prueba.
No Jailbreak necesario
Consulta esta entrada de blog sobre cómo pentestear una aplicación iOS en un dispositivo no jailbroken:
iOS Pentesting withuot Jailbreak
Jailbreaking
Apple exige estrictamente que el código que se ejecuta en el iPhone debe estar firmado por un certificado emitido por Apple. Jailbreaking es el proceso de eludir activamente dichas restricciones y otros controles de seguridad implementados por el SO. Por lo tanto, una vez que el dispositivo está jailbroken, la comprobación de integridad responsable de verificar las apps instaladas se parchea para que sea omitida.
Tip
A diferencia de Android, no puedes cambiar a “Developer Mode” en iOS para ejecutar código no firmado/no confiable en el dispositivo.
Android Rooting vs. iOS Jailbreaking
Aunque a menudo se comparan, rooting en Android y jailbreaking en iOS son procesos fundamentalmente diferentes. Rootear dispositivos Android puede implicar instalar el binario su o reemplazar el sistema con una ROM personalizada rooteada, lo cual no necesariamente requiere exploits si el bootloader está desbloqueado. Flashing custom ROMs reemplaza el sistema operativo del dispositivo después de desbloquear el bootloader, a veces requiriendo un exploit.
En contraste, los dispositivos iOS no pueden flashear ROMs personalizadas debido a la restricción del bootloader de solo arrancar imágenes firmadas por Apple. Jailbreaking iOS tiene como objetivo eludir las protecciones de firma de código de Apple para ejecutar código no firmado, un proceso complicado por las continuas mejoras de seguridad de Apple.
Jailbreaking Challenges
Hacer jailbreaking en iOS es cada vez más difícil porque Apple parchea las vulnerabilidades rápidamente. Downgrading iOS solo es posible por un tiempo limitado tras una versión, lo que hace que el jailbreaking sea sensible al factor tiempo. Los dispositivos usados para pruebas de seguridad no deberían actualizarse salvo que se garantice poder re-jailbreakearlos.
Las actualizaciones de iOS están controladas por un mecanismo de challenge-response (SHSH blobs), que permite la instalación solo con respuestas firmadas por Apple. Este mecanismo, conocido como “signing window”, limita la capacidad de almacenar y usar posteriormente paquetes OTA de firmware. El sitio IPSW Downloads es un recurso para comprobar las ventanas de firma actuales.
Jailbreak Varieties
- Tethered jailbreaks requieren conexión a un ordenador para cada reinicio.
- Semi-tethered jailbreaks permiten arrancar en modo no jailbroken sin un ordenador.
- Semi-untethered jailbreaks requieren re-jailbreaking manual sin necesidad de un ordenador.
- Untethered jailbreaks ofrecen una solución de jailbreak permanente sin necesidad de reaplicarlo.
Jailbreaking Tools and Resources
Las herramientas de jailbreaking varían según la versión de iOS y el dispositivo. Recursos como Can I Jailbreak?, The iPhone Wiki y Reddit Jailbreak ofrecen información actualizada. Ejemplos incluyen:
- Checkra1n para dispositivos de investigación A7-A11/era iOS 12-14.
- Palera1n para dispositivos compatibles con checkm8 (A8-A11) en iOS/iPadOS 15+.
- Dopamine para muchos dispositivos arm64/arm64e en iOS 15/16 usando un jailbreak moderno rootless.
- Unc0ver sigue siendo relevante principalmente para versiones antiguas de iOS hasta la 14.8.
Modificar tu dispositivo conlleva riesgos, y el jailbreaking debe abordarse con precaución.
Rootless jailbreaks
Los jailbreaks modernos para iOS 15+ suelen ser rootless en lugar de rootful. Desde la perspectiva de un tester, esto importa porque muchas guías antiguas aún asumen que los archivos de jailbreak viven directamente bajo / o /Library/..., lo cual ya no es cierto en muchas configuraciones actuales.
- Los rootless jailbreaks evitan modificar directamente el sealed system volume.
- En palera1n, los archivos del jailbreak suelen almacenarse bajo una ruta aleatoria en
/private/preboot/...y se exponen mediante el symlink estable/var/jb. - Los tweaks, launch daemons y binarios auxiliares pueden por tanto existir bajo
/var/jben lugar de las ubicaciones legacy rootful.
Esto tiene un impacto directo en la validación del entorno, la configuración de Frida, y la evasión de detección de jailbreak:
- Al comprobar si tus herramientas se instalaron correctamente, inspecciona tanto las rutas legacy como
/var/jb. - Al revisar la lógica de detección de jailbreak en una app, recuerda que las comprobaciones modernas a menudo buscan artefactos rootless y symlinks además de indicadores clásicos como
Cydia.app. - Si un script o tweak de terceros asume un layout de sistema rootful, puede fallar silenciosamente en un dispositivo rootless.
Jailbreaking Benefits and Risks
El jailbreaking elimina el sandboxing impuesto por el SO, permitiendo que las aplicaciones accedan a todo el sistema de ficheros. Esta libertad posibilita la instalación de apps no aprobadas y el acceso a más APIs. Sin embargo, para usuarios habituales, el jailbreaking no se recomienda debido a posibles riesgos de seguridad e inestabilidad del dispositivo.
After Jailbreaking
Jailbreak Detection
Varias aplicaciones intentarán detectar si el móvil está jailbroken y, en tal caso, la aplicación no se ejecutará
- Tras hacer jailbreak, en iOS normalmente se instalan archivos y carpetas, estos pueden buscarse para determinar si el dispositivo está jailbroken.
- En jailbreaks modernos rootless, esos archivos pueden aparecer bajo
/var/jbo resolverse mediante symlinks en/private/preboot/...en lugar de solo en las ubicaciones clásicas rootful. - En un dispositivo jailbroken las aplicaciones obtienen acceso de lectura/escritura a nuevos ficheros fuera del sandbox.
- Algunas llamadas a APIs se comportarán de forma diferente.
- La presencia del servicio OpenSSH.
- Llamar a
/bin/shdevolverá 1 en lugar de 0.
Más información sobre cómo detectar jailbreak aquí.
Puedes intentar evitar estas detecciones usando objection’s ios jailbreak disable
Jailbreak Detection Bypass
- Puedes intentar evitar estas detecciones usando objection’s
ios jailbreak disable - También puedes instalar la herramienta Liberty Lite (https://ryleyangus.com/repo/). Una vez añadida la repo, la app debería aparecer en la pestaña ‘Search’
References
- https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/
- https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device
- https://docs.palera.in/docs/reference/environment-types/
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


