hacktricks/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md

413 lines
26 KiB
Markdown
Raw Normal View History

# Operaciones Básicas de Pruebas en iOS
<details>
<summary><strong>Aprende a hackear AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Obtener el UDID de un dispositivo iOS
2023-06-05 20:33:24 +02:00
{% hint style="info" %}
Realiza estas acciones teniendo el dispositivo **conectado** al ordenador vía **USB** y con el **dispositivo** **desbloqueado**.
2023-06-05 20:33:24 +02:00
{% endhint %}
El UDID es una secuencia única de 40 dígitos de letras y números para identificar un dispositivo iOS. Puedes encontrar el UDID de tu dispositivo iOS en macOS Catalina en adelante en la **aplicación Finder**, ya que iTunes ya no está disponible en Catalina. Simplemente selecciona el dispositivo iOS conectado en Finder y **haz clic en la información debajo del nombre del dispositivo iOS** para iterar a través de ella. Además del UDID, puedes encontrar el número de serie, IMEI y otra información útil.
2023-06-05 20:33:24 +02:00
![](<../../.gitbook/assets/image (471).png>)
Si estás utilizando una versión de macOS anterior a Catalina, puedes encontrar el [UDID de tu dispositivo iOS a través de iTunes](http://www.iclarified.com/52179/how-to-find-your-iphones-udid), seleccionando tu dispositivo y haciendo clic en "Número de serie" en la pestaña de resumen. Al hacer clic en esto iterarás a través de diferentes metadatos del dispositivo iOS incluyendo su UDID.
2023-06-05 20:33:24 +02:00
También es posible obtener el UDID a través de varias herramientas de línea de comandos en macOS mientras el dispositivo está conectado vía USB:
2023-06-05 20:33:24 +02:00
* Utilizando la herramienta [I/O Registry Explorer](https://developer.apple.com/library/archive/documentation/DeviceDrivers/Conceptual/IOKitFundamentals/TheRegistry/TheRegistry.html) `ioreg`:
2023-06-05 20:33:24 +02:00
```bash
$ ioreg -p IOUSB -l | grep "USB Serial"
| "USB Serial Number" = "9e8ada44246cee813e2f8c1407520bf2f84849ec"
```
* Utilizando [ideviceinstaller](https://github.com/libimobiledevice/ideviceinstaller) (también disponible en Linux):
2023-06-05 20:33:24 +02:00
```bash
$ brew install ideviceinstaller
$ idevice_id -l
316f01bd160932d2bf2f95f1f142bc29b1c62dbc
```
* Utilizando system\_profiler:
2023-06-05 20:33:24 +02:00
```bash
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
2019-09-08 10:18:03.920 system_profiler[13251:1050356] SPUSBDevice: IOCreatePlugInInterfaceForService failed 0xe00002be
Serial Number: 64655621de6ef5e56a874d63f1e1bdd14f7103b1
```
* Utilizando instruments:
2023-06-05 20:33:24 +02:00
```bash
$ instruments -s devices
```
2023-06-05 20:33:24 +02:00
## Accediendo a la Shell del Dispositivo
2023-06-05 20:33:24 +02:00
Después de hacer jailbreak al dispositivo deberías haber instalado algún nuevo gestor de aplicaciones como **Cydia**.
2023-06-05 20:33:24 +02:00
### SSH
2023-06-05 20:33:24 +02:00
Para habilitar el acceso SSH a tu dispositivo iOS puedes instalar el **paquete OpenSSH**. Una vez instalado, puedes acceder a tu dispositivo vía ssh ejecutando `ssh root@<dirección_ip_del_dispositivo>`, lo que te permitirá iniciar sesión como usuario root:
2023-06-05 20:33:24 +02:00
```bash
$ ssh root@192.168.197.234
root@192.168.197.234's password:
iPhone:~ root#
```
Al acceder a tu dispositivo iOS vía SSH, considera lo siguiente:
2023-06-05 20:33:24 +02:00
* Los **usuarios predeterminados son `root` y `mobile`**.
* La **contraseña** predeterminada para ambos es **`alpine`**.
2023-06-05 20:33:24 +02:00
> Recuerda cambiar la contraseña predeterminada para ambos usuarios `root` y `mobile`, ya que cualquiera en la misma red puede encontrar la dirección IP de tu dispositivo y conectarse a través de la conocida contraseña predeterminada, lo que les dará acceso root a tu dispositivo.
2023-06-05 20:33:24 +02:00
### **Conectar a un Dispositivo vía SSH sobre USB**
2023-06-05 20:33:24 +02:00
Durante una prueba de caja negra real, puede que no haya una conexión Wi-Fi confiable disponible. En esta situación, puedes usar usbmuxd para conectarte al servidor SSH de tu dispositivo a través de USB.
2023-06-05 20:33:24 +02:00
Conecta macOS a un dispositivo iOS instalando e iniciando iproxy:
2023-06-05 20:33:24 +02:00
```bash
$ brew install libimobiledevice
$ iproxy 2222 22
waiting for connection
```
El comando anterior mapea el puerto `22` en el dispositivo iOS al puerto `2222` en localhost. También puedes [hacer que iproxy se ejecute automáticamente en segundo plano](https://iphonedevwiki.net/index.php/SSH\_Over\_USB) si no quieres ejecutar el binario cada vez que quieras usar SSH a través de USB.
2023-06-05 20:33:24 +02:00
Con el siguiente comando en una nueva ventana de terminal, puedes conectarte al dispositivo:
```bash
$ ssh -p 2222 root@localhost
root@localhost's password:
iPhone:~ root#
```
> Pequeña nota sobre el USB de un iDevice: en un dispositivo iOS no se pueden realizar conexiones de datos después de 1 hora de estar en estado bloqueado, a menos que lo desbloquees nuevamente debido al Modo Restringido de USB, que se introdujo con iOS 11.4.1
2023-06-05 20:33:24 +02:00
### Aplicación Shell en el Dispositivo
2023-06-05 20:33:24 +02:00
Aunque generalmente usar una **shell en el dispositivo** (emulador de terminal) puede ser muy tedioso en comparación con una shell remota, puede ser útil para depuración en caso de, por ejemplo, problemas de red o para verificar alguna configuración. Por ejemplo, puedes instalar [NewTerm 2](https://repo.chariz.io/package/ws.hbang.newterm2/) a través de Cydia para este propósito (es compatible con iOS 6.0 hasta 12.1.2 en el momento de escribir esto).
2023-06-05 20:33:24 +02:00
Además, hay algunos jailbreaks que explícitamente desactivan el SSH entrante _por razones de seguridad_. En esos casos, es muy conveniente tener una aplicación shell en el dispositivo, que puedes usar para primero realizar un SSH fuera del dispositivo con un shell inverso, y luego conectar desde tu computadora anfitriona a él.
2023-06-05 20:33:24 +02:00
Abrir un shell inverso a través de SSH se puede hacer ejecutando el comando `ssh -R <remote_port>:localhost:22 <username>@<host_computer_ip>`.
2023-06-05 20:33:24 +02:00
En la aplicación shell en el dispositivo ejecuta el siguiente comando y, cuando se te pida, introduce la contraseña del usuario `mstg` de la computadora anfitriona:
2023-06-05 20:33:24 +02:00
```bash
ssh -R 2222:localhost:22 mstg@192.168.197.235
```
En tu computadora anfitriona ejecuta el siguiente comando y, cuando se te pida, ingresa la contraseña del usuario `root` del dispositivo iOS:
2023-06-05 20:33:24 +02:00
```bash
$ ssh -p 2222 root@localhost
```
### **Contraseña Olvidada**
2023-06-05 20:33:24 +02:00
Si olvidas tu contraseña y quieres restablecerla al valor predeterminado **`alpine`**:
2023-06-05 20:33:24 +02:00
1. Edita el archivo `/private/etc/master.passwd` en tu dispositivo iOS con jailbreak utilizando un **terminal** en el dispositivo o aplicaciones como **Filza** o **iFile**
2023-06-05 20:33:24 +02:00
2. Encuentra las líneas:
```bash
root:xxxxxxxxx:0:0::0:0:Administrador del Sistema:/var/root:/bin/sh
mobile:xxxxxxxxx:501:501::0:0:Usuario Móvil:/var/mobile:/bin/sh
```
3. Cambia `xxxxxxxxx` por `/smx7MYTQIi2M` (que es la contraseña hasheada `alpine`)
4. Guarda y sal de la edición
2023-06-05 20:33:24 +02:00
## Transferencia de Datos
2023-06-05 20:33:24 +02:00
### Copiando Archivos de Datos de Aplicaciones vía SSH y SCP
2023-06-05 20:33:24 +02:00
Como sabemos ahora, los archivos de nuestra aplicación se almacenan en el directorio de Datos. Ahora puedes simplemente archivar el directorio de Datos con `tar` y extraerlo del dispositivo con `scp`:
2023-06-05 20:33:24 +02:00
```bash
iPhone:~ root# tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
iPhone:~ root# exit
$ scp -P 2222 root@localhost:/tmp/data.tgz .
```
### Usando iFunbox
2023-06-05 20:33:24 +02:00
[**iFunbox**](https://www.i-funbox.com/en/page-download.html) es una aplicación con interfaz gráfica que puede usarse para varias cosas (entre ellas subir y descargar archivos).\
Otra herramienta con interfaz gráfica para este propósito es [**iExplorer**](https://macroplant.com/iexplorer).
2023-06-05 20:33:24 +02:00
{% hint style="info" %}
A partir de la versión 8.4 de iOS, Apple ha **restringido el acceso de los gestores de terceros al sandbox de las aplicaciones**, por lo que herramientas como iFunbox e iExplorer ya no muestran ni recuperan archivos de las aplicaciones instaladas en el dispositivo si este no está jailbroken.
2023-06-05 20:33:24 +02:00
{% endhint %}
### Usando Objection
2023-06-05 20:33:24 +02:00
Cuando inicias objection (`objection --gadget com.apple.mobilesafari explorer`), encontrarás el prompt dentro del directorio Bundle.
2023-06-05 20:33:24 +02:00
```bash
org.owasp.MSTG on (iPhone: 10.3.3) [usb] # pwd print
Current directory: /var/containers/Bundle/Application/DABF849D-493E-464C-B66B-B8B6C53A4E76/org.owasp.MSTG.app
```
Utiliza el comando `env` para obtener los directorios de la app y navega al directorio Documents.
2023-06-05 20:33:24 +02:00
```bash
org.owasp.MSTG on (iPhone: 10.3.3) [usb] # cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
/var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
```
Con el comando `file download <filename>` puedes descargar un archivo del dispositivo iOS a tu computadora anfitriona y analizarlo posteriormente.
2023-06-05 20:33:24 +02:00
```bash
org.owasp.MSTG on (iPhone: 10.3.3) [usb] # file download .com.apple.mobile_container_manager.metadata.plist
Downloading /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/.com.apple.mobile_container_manager.metadata.plist to .com.apple.mobile_container_manager.metadata.plist
Streaming file from device...
Writing bytes to destination...
Successfully downloaded /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/.com.apple.mobile_container_manager.metadata.plist to .com.apple.mobile_container_manager.metadata.plist
```
También puedes subir archivos al dispositivo iOS con `file upload <local_file_path>`.
2023-06-05 20:33:24 +02:00
## Obtención y Extracción de Aplicaciones
2023-06-05 20:33:24 +02:00
### Obtener el Archivo IPA de un Enlace de Distribución OTA
2023-06-05 20:33:24 +02:00
Durante el desarrollo, a veces se proporcionan aplicaciones a los probadores a través de la distribución over-the-air (OTA). En esa situación, recibirás un enlace de itms-services, como el siguiente:
2023-06-05 20:33:24 +02:00
```
itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist
```
Puedes usar la herramienta [ITMS services asset downloader](https://www.npmjs.com/package/itms-services) para descargar el IPA de una URL de distribución OTA. Instálalo a través de npm:
2023-06-05 20:33:24 +02:00
```bash
$ npm install -g itms-services
```
Guarde el archivo IPA localmente con el siguiente comando:
2023-06-05 20:33:24 +02:00
```bash
# itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
```
### Adquisición del Binario de la App
2023-06-05 20:33:24 +02:00
1. **Desde un IPA**:
Si tienes el IPA (probablemente incluyendo un binario de la app ya desencriptado), descomprímelo y estarás listo para continuar. El binario de la app se encuentra en el directorio principal del paquete (.app), por ejemplo, `Payload/Telegram X.app/Telegram X`. Consulta la siguiente subsección para obtener detalles sobre la extracción de las listas de propiedades.
2023-06-05 20:33:24 +02:00
> En el Finder de macOS, los directorios .app se abren haciendo clic derecho y seleccionando "Mostrar contenido del paquete". En la terminal, puedes simplemente usar `cd` para entrar en ellos.
2. Desde un **dispositivo con Jailbreak**:
2023-06-05 20:33:24 +02:00
Si no tienes el IPA original, entonces necesitas un dispositivo con jailbreak donde **instalarás la app** (por ejemplo, a través de App Store). Una vez instalada, necesitas **extraer el binario de la app de la memoria y reconstruir el archivo IPA**. Debido a DRM, el archivo binario de la app está encriptado cuando se almacena en el dispositivo iOS, por lo que simplemente extraerlo del Bundle (ya sea a través de SSH u Objection) no será suficiente para ingeniería inversa (lee la siguiente sección).
2023-06-05 20:33:24 +02:00
### Desencriptación (Manual)
2023-06-05 20:33:24 +02:00
A diferencia de una Aplicación Android, el binario de una app iOS **solo puede ser desensamblado** y no decompilado.\
Cuando una aplicación se envía a la app store, Apple primero verifica la conducta de la app y antes de lanzarla a la app-store, **Apple encripta el binario usando** [**FairPlay**](https://developer.apple.com/streaming/fps/). Así que el binario descargado de la app store está encriptado complicando las tareas de ingeniería inversa.
2023-06-05 20:33:24 +02:00
Sin embargo, ten en cuenta que hay otros **software de terceros que se pueden usar para ofuscar** los binarios resultantes.
2023-06-05 20:33:24 +02:00
Para ejecutar el binario encriptado, el dispositivo necesita desencriptarlo en memoria. Entonces, es posible **volcar el binario desencriptado de la memoria**.
2023-06-05 20:33:24 +02:00
Primero, verifica si el binario está compilado con la bandera PIE (Código Independiente de la Posición):
2023-06-05 20:33:24 +02:00
```bash
otool -Vh Original_App #Check the last word of the last line of this code
Home:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
2023-06-05 20:33:24 +02:00
MH_MAGIC_64 X86_64 ALL 0x00 EXECUTE 47 6080 NOUNDEFS DYLDLINK TWOLEVEL PIE
```
Si está configurado, puedes usar el script [`change_macho_flags.py`](https://chromium.googlesource.com/chromium/src/+/49.0.2623.110/build/mac/change\_mach\_o\_flags.py) para eliminarlo con python2:
2023-06-05 20:33:24 +02:00
```bash
python change_mach_o_flags.py --no-pie Original_App
otool -Vh Hello_World
Hello_World:
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC ARM V7 0x00 EXECUTE 22 2356 NOUNDEFS DYLDLINK TWOLEVEL MH_NO_HEAP_EXECUTION
2023-06-05 20:33:24 +02:00
```
Ahora que la bandera PIE no está establecida, el sistema operativo cargará el programa en una **ubicación de inicio fija** cada vez. Para encontrar esta **ubicación** puedes usar:
2023-06-05 20:33:24 +02:00
```bash
otool -l Original_App | grep -A 3 LC_SEGMENT | grep -A 1 __TEXT
segname __TEXT
vmaddr 0x00004000
2023-06-05 20:33:24 +02:00
```
Entonces, es necesario extraer el rango de memoria que necesita ser volcado:
2023-06-05 20:33:24 +02:00
```bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
cmd LC_ENCRYPTION_INFO
cmdsize 20
cryptoff 16384
cryptsize 17416192
cryptid 0
2023-06-05 20:33:24 +02:00
```
El valor de **`cryptoff`** indica la dirección inicial del contenido cifrado y **`cryptsize`** indica el tamaño del contenido cifrado.
2023-06-05 20:33:24 +02:00
Por lo tanto, la `dirección de inicio` para volcar será `vmaddr + cryptoff` y la `dirección final` será `dirección de inicio + cryptsize`\
En este caso: `start_address = 0x4000 + 0x4000 = 0x8000` \_\_ y `end_address = 0x8000 + 0x109c000 = 0x10a4000`
2023-06-05 20:33:24 +02:00
Con esta información, solo es necesario ejecutar la aplicación en el dispositivo con jailbreak, adjuntarse al proceso con gdb (`gdb -p <pid>`) y volcar la memoria:
```bash
dump memory dump.bin 0x8000 0x10a4000
```
¡Felicidades! Has descifrado la sección encriptada en dump.bin. Ahora **transfiere este volcado a tu computadora y sobrescribe la sección encriptada con la descifrada**:
2023-06-05 20:33:24 +02:00
```bash
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
```
Hay un paso más por completar. La aplicación todavía **indica** en sus metadatos que está **encriptada**, pero **no lo está**. Entonces, al ejecutarse, el dispositivo intentará desencriptar la sección ya desencriptada y fallará.
Sin embargo, puedes usar herramientas como [**MachOView**](https://sourceforge.net/projects/machoview/) para cambiar esta información. Solo abre el binario y establece el **cryptid** en 0:
2023-06-05 20:33:24 +02:00
![](<../../.gitbook/assets/image (470).png>)
### Descifrado (Automático)
2023-06-05 20:33:24 +02:00
#### frida-ios-dump
2023-06-05 20:33:24 +02:00
Puedes usar herramientas como [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) para **eliminar automáticamente la encriptación de una app**.
2023-06-05 20:33:24 +02:00
Primero, asegúrate de que la configuración en **Frida-ios-dump** `dump.py` esté establecida en localhost con el puerto 2222 cuando uses **iproxy**, o en la dirección IP real y puerto del dispositivo desde el cual quieres volcar el binario.
2023-06-05 20:33:24 +02:00
Ahora puedes usar la herramienta de forma segura para **enumerar** las **aplicaciones** **instaladas**:
2023-06-05 20:33:24 +02:00
```bash
$ python dump.py -l
PID Name Identifier
2023-06-05 20:33:24 +02:00
---- --------------- -------------------------------------
860 Cydia com.saurik.Cydia
2023-06-05 20:33:24 +02:00
1130 Settings com.apple.Preferences
685 Mail com.apple.mobilemail
834 Telegram ph.telegra.Telegraph
- Stocks com.apple.stocks
...
2023-06-05 20:33:24 +02:00
```
y puedes **volcar** **uno** de los binarios listados:
2023-06-05 20:33:24 +02:00
```bash
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
Start the target app ph.telegra.Telegraph
Dumping Telegram to /var/folders/qw/gz47_8_n6xx1c_lwq7pq5k040000gn/T
[frida-ios-dump]: HockeySDK.framework has been loaded.
[frida-ios-dump]: Load Postbox.framework success.
[frida-ios-dump]: libswiftContacts.dylib has been dlopen.
...
start dump /private/var/containers/Bundle/Application/14002D30-B113-4FDF-BD25-1BF740383149/Telegram.app/Frameworks/libswiftsimd.dylib
libswiftsimd.dylib.fid: 100%|██████████| 343k/343k [00:00<00:00, 1.54MB/s]
start dump /private/var/containers/Bundle/Application/14002D30-B113-4FDF-BD25-1BF740383149/Telegram.app/Frameworks/libswiftCoreData.dylib
libswiftCoreData.dylib.fid: 100%|██████████| 82.5k/82.5k [00:00<00:00, 477kB/s]
5.m4a: 80.9MB [00:14, 5.85MB/s]
0.00B [00:00, ?B/s]Generating "Telegram.ipa"
```
Después de esto, se creará el archivo `Telegram.ipa` en tu directorio actual. Puedes validar el éxito del volcado eliminando la aplicación y reinstalándola (por ejemplo, usando [**ios-deploy**](https://github.com/ios-control/ios-deploy) `ios-deploy -b Telegram.ipa`). Ten en cuenta que esto solo funcionará en dispositivos con jailbreak, ya que de lo contrario la firma no será válida.
2023-06-05 20:33:24 +02:00
#### flexdecrypt
2023-06-05 20:33:24 +02:00
Para **obtener el archivo ipa** de una aplicación instalada también puedes usar la herramienta [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt) o un envoltorio de la herramienta llamado [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac)**.**\
En cualquier caso, necesitarás **instalar flexdecrypt en el dispositivo** ejecutando algo como:
2023-06-05 20:33:24 +02:00
```markup
wget https://github.com/JohnCoates/flexdecrypt/releases/download/1.1/flexdecrypt.deb
dpkg -i flexdecrypt.deb
rm flexdecrypt.deb
```
y para usar **flexdump**:
```bash
apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list #List apps
flexdump dump Twitter.app #Create .ipa file from app
```
#### bagbak
Otro descifrador de aplicaciones basado en frida. Requiere dispositivo iOS con jailbreak y [frida.re](https://www.frida.re/)
```bash
bagbak --raw Chrome
```
#### r2flutch
2023-06-05 20:33:24 +02:00
[**r2flutch**](https://github.com/as0ler/r2flutch) es una herramienta que utiliza **radare** y **frida** para **descifrar** y **volcar aplicaciones de iOS**.
2023-06-05 20:33:24 +02:00
Consulta el **github** para más información.
2023-06-05 20:33:24 +02:00
## Instalación de Aplicaciones
2023-06-05 20:33:24 +02:00
Cuando instalas una aplicación sin usar la App Store de Apple, esto se llama **sideloading**. Hay varias formas de sideloading que se describen a continuación. En el dispositivo iOS, el proceso de instalación real es manejado por el **daemon installd**, que **desempaquetará** e **instalará** la aplicación. Para integrar servicios de aplicaciones o ser instaladas en un dispositivo iOS, todas las **aplicaciones deben estar firmadas con un certificado emitido por Apple**. Esto significa que la aplicación solo puede ser instalada después de una verificación exitosa de la firma de código. Sin embargo, en un teléfono con jailbreak, puedes **eludir esta característica de seguridad con** [**AppSync**](http://repo.hackyouriphone.org/appsyncunified), un paquete disponible en la tienda Cydia. Contiene numerosas aplicaciones útiles que aprovechan los privilegios de root proporcionados por el jailbreak para ejecutar funcionalidades avanzadas. **AppSync es un tweak que parchea installd**, permitiendo la instalación de paquetes IPA con firma falsa.
2023-06-05 20:33:24 +02:00
Existen diferentes métodos para instalar un paquete IPA en un dispositivo iOS, que se describen en detalle a continuación.
> Ten en cuenta que iTunes ya no está disponible en macOS Catalina. Si estás utilizando una versión anterior de macOS, iTunes sigue disponible pero desde iTunes 12.7 no es posible instalar aplicaciones.
2023-06-05 20:33:24 +02:00
#### Cydia Impactor
2023-06-05 20:33:24 +02:00
[Cydia Impactor](http://www.cydiaimpactor.com) fue originalmente creado para hacer jailbreak a iPhones, pero ha sido reescrito para firmar e instalar paquetes IPA en dispositivos iOS a través de sideloading (e incluso archivos APK en dispositivos Android). Cydia Impactor está disponible para Windows, macOS y Linux. Una [guía paso a paso y pasos para la resolución de problemas están disponibles en yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
2023-06-05 20:33:24 +02:00
#### libimobiledevice
2023-06-05 20:33:24 +02:00
En Linux y también en macOS, alternativamente puedes usar [libimobiledevice](https://www.libimobiledevice.org), una biblioteca de protocolo de software multiplataforma y un conjunto de herramientas para la comunicación nativa con dispositivos iOS. Esto te permite instalar aplicaciones a través de una conexión USB ejecutando ideviceinstaller. La conexión se implementa con el daemon de multiplexación USB [usbmuxd](https://www.theiphonewiki.com/wiki/Usbmux), que proporciona un túnel TCP sobre USB.
2023-06-05 20:33:24 +02:00
El paquete para libimobiledevice estará disponible en tu gestor de paquetes de Linux. En macOS puedes instalar libimobiledevice a través de brew:
2023-06-05 20:33:24 +02:00
```bash
$ brew install libimobiledevice
$ brew install ideviceinstaller
```
Después de la instalación, tienes varias nuevas herramientas de línea de comandos disponibles, como `ideviceinfo`, `ideviceinstaller` o `idevicedebug`.
2023-06-05 20:33:24 +02:00
```bash
# The following command will show detailed information about the iOS device connected via USB.
$ ideviceinfo
# The following command will install the IPA to your iOS device.
$ ideviceinstaller -i iGoat-Swift_v1.0-frida-codesigned.ipa
...
Install: Complete
# The following command will start the app in debug mode, by providing the bundle name. The bundle name can be found in the previous command after "Installing".
$ idevicedebug -d run OWASP.iGoat-Swift
```
#### ipainstaller
2023-06-05 20:33:24 +02:00
El IPA también puede ser instalado directamente en el dispositivo iOS a través de la línea de comandos con [ipainstaller](https://github.com/autopear/ipainstaller). Después de copiar el archivo en el dispositivo, por ejemplo mediante scp, puedes ejecutar ipainstaller con el nombre del archivo IPA:
2023-06-05 20:33:24 +02:00
```bash
$ ipainstaller App_name.ipa
```
#### ios-deploy
2023-06-05 20:33:24 +02:00
En macOS también puedes usar la herramienta **ios-deploy** para instalar aplicaciones de iOS desde la línea de comandos. Necesitarás descomprimir tu IPA ya que ios-deploy utiliza los paquetes de aplicaciones para instalar aplicaciones.
2023-06-05 20:33:24 +02:00
```bash
$ unzip Name.ipa
$ ios-deploy --bundle 'Payload/Name.app' -W -d -v
```
Después de que la app esté instalada en el dispositivo iOS, puedes simplemente iniciarla añadiendo la bandera `-m` la cual iniciará directamente la depuración sin instalar la app de nuevo.
2023-06-05 20:33:24 +02:00
```bash
$ ios-deploy --bundle 'Payload/Name.app' -W -d -v -m
```
#### Xcode
2023-06-05 20:33:24 +02:00
También es posible usar el IDE de Xcode para instalar aplicaciones iOS siguiendo estos pasos:
2023-06-05 20:33:24 +02:00
1. Iniciar Xcode
2. Seleccionar **Window/Devices and Simulators**
3. Seleccionar el dispositivo iOS conectado y hacer clic en el signo **+** en **Installed Apps**.
2023-06-05 20:33:24 +02:00
#### Permitir la instalación de aplicaciones en un dispositivo que no es iPad
2023-06-05 20:33:24 +02:00
A veces, una aplicación puede requerir ser utilizada en un dispositivo iPad. Si solo tienes dispositivos iPhone o iPod touch, entonces puedes forzar a la aplicación a aceptar ser instalada y utilizada en estos tipos de dispositivos. Puedes hacer esto cambiando el valor de la propiedad **UIDeviceFamily** al valor **1** en el archivo **Info.plist**.
2023-06-05 20:33:24 +02:00
```markup
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
</array>
2023-06-05 20:33:24 +02:00
</dict>
</plist>
```
Es importante señalar que cambiar este valor romperá la firma original del archivo IPA, por lo que necesitarás volver a firmar el IPA, después de la actualización, para poder instalarlo en un dispositivo en el que no se haya desactivado la validación de la firma.
2023-06-05 20:33:24 +02:00
Este bypass podría no funcionar si la aplicación requiere capacidades específicas de iPads modernos mientras que tu iPhone o iPod es un poco más antiguo.
2023-06-05 20:33:24 +02:00
Los posibles valores para la propiedad [UIDeviceFamily](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW11) se pueden encontrar en la documentación de Apple Developer.
2023-06-05 20:33:24 +02:00
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
2023-06-05 20:33:24 +02:00
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 20:33:24 +02:00
</details>