iOS Pentesting without Jailbreak

Reading time: 5 minutes

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

Idea principal

Las aplicaciones firmadas con el derecho get_task_allow permiten que aplicaciones de terceros ejecuten una función llamada task_for_pid() con el ID de proceso de la aplicación inicial como argumento para obtener el puerto de tarea sobre ella (poder controlarla y acceder a su memoria).

Sin embargo, no es tan fácil como simplemente extraer el IPA, volver a firmarlo con el derecho y cargarlo de nuevo en tu dispositivo. Esto se debe a la protección FairPlay. Cuando la firma de la aplicación cambia, la clave DRM (Gestión de Derechos Digitales) es invalidada y la aplicación no funcionará.

Con un dispositivo antiguo con jailbreak, es posible instalar el IPA, desencriptarlo usando tu herramienta favorita (como Iridium o frida-ios-dump) y extraerlo del dispositivo. Aunque, si es posible, se recomienda pedir al cliente el IPA desencriptado.

Obtener IPA desencriptado

Obtenerlo de Apple

  1. Instala la aplicación a pentest en el iPhone.
  2. Instala y lanza Apple Configurator en tu macos.
  3. Abre Terminal en tu Mac y navega a /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps. El IPA aparecerá en esta carpeta más tarde.
  4. Deberías ver tu dispositivo iOS. Haz doble clic en él y luego haz clic en Agregar + → Aplicaciones en la barra de menú superior.
  5. Después de hacer clic en Agregar, Configurator descargará el IPA de Apple e intentará enviarlo a tu dispositivo. Si seguiste mi recomendación anterior e instalaste el IPA ya, aparecerá un aviso pidiéndote que reinstales la aplicación.
  6. El IPA debería descargarse dentro de /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps desde donde puedes obtenerlo.

Consulta https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed para obtener información más detallada sobre este proceso.

Desencriptar la aplicación

Para desencriptar el IPA, vamos a instalarlo. Sin embargo, si tienes un iPhone antiguo con jailbreak, potencialmente su versión no será compatible con la aplicación, ya que generalmente las aplicaciones solo soportan las versiones más recientes.

Así que, para instalarlo, simplemente descomprime el IPA:

bash
unzip redacted.ipa -d unzipped

Verifica el Info.plist para la versión mínima soportada y si tu dispositivo es más antiguo que eso, cambia el valor para que sea compatible.

Comprime de nuevo el IPA:

bash
cd unzipped
zip -r ../no-min-version.ipa *

Luego, instala el IPA, por ejemplo, con:

bash
ideviceinstaller -i no-min-version.ipa -w

Nota que podrías necesitar AppSync Unified tweak de Cydia para prevenir cualquier error de firma inválida.

Una vez instalado, puedes usar Iridium tweak de Cydia para obtener el IPA descifrado.

Parchear derechos y volver a firmar

Para volver a firmar la aplicación con el derecho get-task-allow, hay varias herramientas disponibles como app-signer, codesign e iResign. app-signer tiene una interfaz muy amigable que permite volver a firmar un archivo IPA de manera muy sencilla, indicando el IPA a volver a firmar, ponerlo en get-task-allow y el certificado y perfil de aprovisionamiento a utilizar.

En cuanto al certificado y los perfiles de firma, Apple ofrece perfiles de firma de desarrollador gratuitos para todas las cuentas a través de Xcode. Solo crea una aplicación y configura uno. Luego, configura el iPhone para confiar en las aplicaciones de desarrollador navegando a SettingsPrivacy & Security, y haz clic en Developer Mode.

Con el IPA vuelto a firmar, es hora de instalarlo en el dispositivo para realizar la prueba de penetración:

bash
ideviceinstaller -i resigned.ipa -w

Hook

Podrías enganchar tu aplicación fácilmente usando herramientas comunes como frida y objection:

bash
objection -g [your app bundle ID] explore

Referencias

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