hacktricks/mobile-pentesting/ios-pentesting/ios-testing-environment.md

12 KiB

Entorno de Pruebas de iOS

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Programa de Desarrolladores de Apple

Una identidad de aprovisionamiento es una colección de claves públicas y privadas asociadas a una cuenta de desarrollador de Apple. Para firmar aplicaciones, 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 es usar un dispositivo con jailbreak.

A partir de Xcode 7.2, Apple ha proporcionado una opción para crear un perfil de aprovisionamiento de desarrollo de iOS gratuito que permite escribir y probar tu aplicación en un iPhone real. Ve a Xcode --> Preferencias --> Cuentas --> + (Agregar nuevo ID de aplicación con tus credenciales) --> Haz clic en el ID de Apple creado --> Gestionar Certificados --> + (Desarrollo de Apple) --> Hecho
__Luego, para ejecutar tu aplicación en tu iPhone, primero debes indicar al iPhone que confíe en la computadora. Luego, puedes intentar ejecutar la aplicación en el móvil desde Xcode, pero aparecerá un error. Entonces ve a Ajustes --> General --> Perfiles y Administración de Dispositivos --> Selecciona el perfil no confiable y haz clic en "Confiar".

Ten en cuenta que las aplicaciones firmadas por el mismo certificado de firma pueden compartir recursos de manera segura, como elementos del llavero.

Los perfiles de aprovisionamiento se almacenan dentro del teléfono en /Library/MobileDevice/ProvisioningProfiles

Simulador

{% hint style="info" %} 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 utiliza realmente. {% endhint %}

Simulador

Lo primero que debes saber es que realizar una prueba de penetración dentro de un simulador será mucho más limitado que hacerlo en un dispositivo con jailbreak.

Todas las herramientas necesarias para construir y soportar una aplicación de iOS solo son oficialmente compatibles en Mac OS.
La herramienta de facto de Apple para crear/depurar/instrumentar aplicaciones de iOS es Xcode. Se puede utilizar para descargar otros componentes como simuladores y diferentes versiones de SDK requeridas para construir y probar tu aplicación.
Es altamente recomendable descargar Xcode desde la tienda de aplicaciones oficial. Otras versiones pueden contener malware.

Los archivos del simulador se pueden encontrar en /Users/<nombredeusuario>/Library/Developer/CoreSimulator/Devices

Para abrir el simulador, ejecuta Xcode, luego presiona en la pestaña Xcode --> Abrir herramientas de desarrollador --> Simulador
__En la siguiente imagen, al hacer clic en "iPod touch [...]" puedes seleccionar otro dispositivo para probar:

Aplicaciones en el Simulador

Dentro de /Users/<nombredeusuario>/Library/Developer/CoreSimulator/Devices puedes encontrar todos los simuladores instalados. Si deseas 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 la app. 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 conozcas 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.

Emulador

Corellium es el único emulador de iOS disponible públicamente. Es una solución empresarial SaaS con un modelo de licencia por usuario y no ofrece ninguna licencia de prueba.

Jailbreak

Apple requiere estrictamente que el código que se ejecuta en el iPhone esté firmado por un certificado emitido por Apple. Jailbreaking es el proceso de eludir activamente tales restricciones y otros controles de seguridad establecidos por el sistema operativo. Por lo tanto, una vez que el dispositivo está jailbroken, la verificación de integridad que se encarga de verificar las aplicaciones instaladas se parchea para que sea burlada.

{% hint style="info" %} A diferencia de Android, no puedes cambiar a "Modo Desarrollador" en iOS para ejecutar código no firmado/no confiable en el dispositivo. {% endhint %}

Rooting en Android vs. Jailbreaking en iOS

Aunque a menudo se comparan, el rooting en Android y el jailbreaking en iOS son procesos fundamentalmente diferentes. El rooting de dispositivos Android puede implicar instalar el binario su o reemplazar el sistema con una ROM personalizada con root, lo que no necesariamente requiere exploits si el cargador de arranque está desbloqueado. Flashear ROMs personalizadas reemplaza el sistema operativo del dispositivo después de desbloquear el cargador de arranque, a veces requiriendo un exploit.

Por el contrario, los dispositivos iOS no pueden flashear ROMs personalizadas debido a la restricción del cargador de arranque de solo arrancar imágenes firmadas por Apple. Jailbreaking en 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.

Desafíos del Jailbreaking

Jailbreak en iOS es cada vez más difícil a medida que Apple parchea rápidamente las vulnerabilidades. Revertir a una versión anterior de iOS solo es posible durante un tiempo limitado después de su lanzamiento, lo que hace que el jailbreaking sea un asunto sensible al tiempo. Los dispositivos utilizados para pruebas de seguridad no deben actualizarse a menos que se garantice la posibilidad de volver a hacer jailbreak.

Las actualizaciones de iOS están controladas por un mecanismo de desafío-respuesta (blobs SHSH), permitiendo la instalación solo para respuestas firmadas por Apple. Este mecanismo, conocido como "ventana de firma", limita la capacidad de almacenar y luego usar paquetes de firmware OTA. El sitio web IPSW Downloads es un recurso para verificar las ventanas de firma actuales.

Variedades de Jailbreak

  • Los jailbreaks atados requieren una conexión a una computadora para cada reinicio.
  • Los jailbreaks semi-atados permiten arrancar en modo no jailbroken sin una computadora.
  • Los jailbreaks semi-untethered requieren hacer el jailbreak manualmente sin necesidad de una computadora.
  • Los jailbreaks untethered ofrecen una solución de jailbreak permanente sin necesidad de volver a aplicarlo.

Herramientas y Recursos de Jailbreaking

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 proporcionan información actualizada. Ejemplos incluyen:

  • Checkra1n para dispositivos con chips A7-A11.
  • Palera1n para dispositivos Checkm8 (A8-A11) en iOS 15.0-16.5.
  • Unc0ver para versiones de iOS hasta 14.8.

Modificar tu dispositivo conlleva riesgos, y el jailbreaking debe abordarse con precaución.

Beneficios y Riesgos del Jailbreaking

El jailbreaking elimina el aislamiento impuesto por el sistema operativo, permitiendo que las aplicaciones accedan a todo el sistema de archivos. Esta libertad permite la instalación de aplicaciones no aprobadas y el acceso a más APIs. Sin embargo, para usuarios regulares, no se recomienda el jailbreaking debido a posibles riesgos de seguridad e inestabilidad del dispositivo.

Después del Jailbreaking

{% content-ref url="basic-ios-testing-operations.md" %} basic-ios-testing-operations.md {% endcontent-ref %}

Detección de Jailbreak

Varias aplicaciones intentarán detectar si el móvil está jailbroken y, en ese caso, la aplicación no se ejecutará

  • Después de hacer jailbreak en un iOS, generalmente se instalan archivos y carpetas, los cuales se pueden buscar para determinar si el dispositivo está jailbroken.
  • En un dispositivo jailbroken, las aplicaciones obtienen acceso de lectura/escritura a nuevos archivos fuera del sandbox.
  • Algunas llamadas a API se comportarán de manera diferente.
  • La presencia del servicio OpenSSH.
  • Llamar a /bin/sh devolverá un 1 en lugar de un 0.

Más información sobre cómo detectar el jailbreaking aquí.

Puedes intentar evitar estas detecciones usando ios jailbreak disable de objection

Bypass de Detección de Jailbreak

  • Puedes intentar evitar estas detecciones usando ios jailbreak disable de objection
  • También podrías instalar la herramienta Liberty Lite (https://ryleyangus.com/repo/). Una vez que se añada el repositorio, la aplicación debería aparecer en la pestaña de 'Búsqueda'

Referencias

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: