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

194 lines
13 KiB
Markdown
Raw Normal View History

# iOS Basic Testing Operations
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## **Resumen de la Identificación y Acceso de Dispositivos iOS**
2023-06-05 18:33:24 +00:00
### **Identificación del UDID de un Dispositivo iOS**
2023-06-05 18:33:24 +00:00
Para identificar un dispositivo iOS de manera única, se utiliza una secuencia de 40 dígitos conocida como UDID. En macOS Catalina o versiones más recientes, esto se puede encontrar en la **aplicación Finder**, ya que iTunes ya no está presente. El dispositivo, una vez conectado por USB y seleccionado en Finder, revela su UDID entre otra información cuando se hace clic en los detalles bajo su nombre.
2023-06-05 18:33:24 +00:00
Para versiones de macOS anteriores a Catalina, iTunes facilita el descubrimiento del UDID. Instrucciones detalladas se pueden encontrar [aquí](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
2023-06-05 18:33:24 +00:00
Las herramientas de línea de comandos ofrecen métodos alternativos para recuperar el UDID:
2023-06-05 18:33:24 +00:00
* **Usando la herramienta I/O Registry Explorer `ioreg`:**
```bash
$ ioreg -p IOUSB -l | grep "USB Serial"
```
* **Usando `ideviceinstaller` para macOS (y Linux):**
```bash
$ brew install ideviceinstaller
$ idevice_id -l
```
* **Utilizando `system_profiler`:**
```bash
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
```
* **Empleando `instruments` para listar dispositivos:**
```bash
$ instruments -s devices
```
### **Accediendo al Shell del Dispositivo**
2023-06-05 18:33:24 +00:00
El **acceso SSH** se habilita al instalar el **paquete OpenSSH** después del jailbreak, permitiendo conexiones a través de `ssh root@<device_ip_address>`. Es crucial cambiar las contraseñas predeterminadas (`alpine`) para los usuarios `root` y `mobile` para asegurar el dispositivo.
2023-06-05 18:33:24 +00:00
**SSH a través de USB** se vuelve necesario en ausencia de Wi-Fi, utilizando `iproxy` para mapear los puertos del dispositivo para conexiones SSH. Esta configuración permite el acceso SSH a través de USB ejecutando:
2023-06-05 18:33:24 +00:00
```bash
$ iproxy 2222 22
$ ssh -p 2222 root@localhost
```
**Las aplicaciones de shell en el dispositivo**, como NewTerm 2, facilitan la interacción directa con el dispositivo, especialmente útil para la solución de problemas. **Las shells SSH inversas** también se pueden establecer para el acceso remoto desde la computadora host.
2023-06-05 18:33:24 +00:00
### **Restablecimiento de Contraseñas Olvidadas**
2023-06-05 18:33:24 +00:00
Para restablecer una contraseña olvidada a la predeterminada (`alpine`), es necesario editar el archivo `/private/etc/master.passwd`. Esto implica reemplazar el hash existente con el hash para `alpine` junto a las entradas de usuario `root` y `mobile`.
2023-06-05 18:33:24 +00:00
## **Técnicas de Transferencia de Datos**
2023-06-05 18:33:24 +00:00
### **Transferencia de Archivos de Datos de la Aplicación**
2023-06-05 18:33:24 +00:00
**Archivado y Recuperación a través de SSH y SCP:** Es sencillo archivar el directorio Data de la aplicación usando `tar` y luego transferirlo usando `scp`. El comando a continuación archiva el directorio Data en un archivo .tgz, que luego se extrae del dispositivo:
2023-06-05 18:33:24 +00:00
```bash
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .
2023-06-05 18:33:24 +00:00
```
### **Herramientas de Interfaz Gráfica de Usuario**
2023-06-05 18:33:24 +00:00
**Usando iFunbox e iExplorer:** Estas herramientas GUI son útiles para gestionar archivos en dispositivos iOS. Sin embargo, a partir de iOS 8.4, Apple restringió el acceso de estas herramientas al sandbox de la aplicación a menos que el dispositivo esté jailbroken.
2023-06-05 18:33:24 +00:00
### **Usando Objection para la Gestión de Archivos**
2023-06-05 18:33:24 +00:00
**Shell Interactiva con Objection:** Lanzar objection proporciona acceso al directorio Bundle de una aplicación. Desde aquí, puedes navegar al directorio Documents de la aplicación y gestionar archivos, incluyendo descargarlos y subirlos hacia y desde el dispositivo iOS.
```bash
objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>
```
## **Obtención y Extracción de Aplicaciones**
2023-06-05 18:33:24 +00:00
### **Adquisición del Archivo IPA**
2023-06-05 18:33:24 +00:00
**Enlace de Distribución Over-The-Air (OTA):** Las aplicaciones distribuidas para pruebas a través de OTA se pueden descargar utilizando la herramienta de descarga de activos de servicios ITMS, que se instala a través de npm y se utiliza para guardar el archivo IPA localmente.
2023-06-05 18:33:24 +00:00
```bash
npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
2023-06-05 18:33:24 +00:00
```
### **Extracción del Binario de la Aplicación**
2023-06-05 18:33:24 +00:00
1. **Desde un IPA:** Descomprime el IPA para acceder al binario de la aplicación descifrado.
2. **Desde un Dispositivo Jailbroken:** Instala la aplicación y extrae el binario descifrado de la memoria.
2023-06-05 18:33:24 +00:00
### **Proceso de Descifrado**
2023-06-05 18:33:24 +00:00
**Descripción General del Descifrado Manual:** Los binarios de aplicaciones de iOS están cifrados por Apple utilizando FairPlay. Para realizar ingeniería inversa, se debe volcar el binario descifrado de la memoria. El proceso de descifrado implica verificar la bandera PIE, ajustar las banderas de memoria, identificar la sección cifrada y luego volcar y reemplazar esta sección con su forma descifrada.
2023-06-05 18:33:24 +00:00
**Verificación y Modificación de la Bandera PIE:**
2023-06-05 18:33:24 +00:00
```bash
otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
2023-06-05 18:33:24 +00:00
otool -Vh Hello_World
```
**Identificación de la Sección Encriptada y Volcado de Memoria:**
2023-06-05 18:33:24 +00:00
Determine las direcciones de inicio y fin de la sección encriptada utilizando `otool` y volcar la memoria desde el dispositivo con jailbreak usando gdb.
2023-06-05 18:33:24 +00:00
```bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
2023-06-05 18:33:24 +00:00
dump memory dump.bin 0x8000 0x10a4000
```
**Sobrescribiendo la Sección Encriptada:**
Reemplace la sección encriptada en el binario original de la aplicación con el volcado desencriptado.
2023-06-05 18:33:24 +00:00
```bash
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
```
**Finalizando la Desencriptación:** Modifica los metadatos del binario para indicar la ausencia de encriptación utilizando herramientas como **MachOView**, estableciendo `cryptid` en 0.
2023-06-05 18:33:24 +00:00
### **Desencriptación (Automáticamente)**
2023-06-05 18:33:24 +00:00
#### **frida-ios-dump**
La herramienta [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) se emplea para **desencriptar y extraer aplicaciones automáticamente** de dispositivos iOS. Inicialmente, se debe configurar `dump.py` para conectarse al dispositivo iOS, lo que se puede hacer a través de localhost en el puerto 2222 mediante **iproxy** o directamente a través de la dirección IP del dispositivo y el puerto.
2023-06-05 18:33:24 +00:00
Las aplicaciones instaladas en el dispositivo se pueden listar con el comando:
2023-06-05 18:33:24 +00:00
```bash
$ python dump.py -l
```
Para volcar una aplicación específica, como Telegram, se utiliza el siguiente comando:
2023-06-05 18:33:24 +00:00
```bash
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
```
Este comando inicia el volcado de la aplicación, lo que resulta en la creación de un archivo `Telegram.ipa` en el directorio actual. Este proceso es adecuado para dispositivos con jailbreak, ya que las aplicaciones no firmadas o falsamente firmadas pueden reinstalarse utilizando herramientas como [**ios-deploy**](https://github.com/ios-control/ios-deploy).
2023-06-05 18:33:24 +00:00
#### **flexdecrypt**
La herramienta [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), junto con su envoltura [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), permite la extracción de archivos IPA de aplicaciones instaladas. Los comandos de instalación para **flexdecrypt** en el dispositivo incluyen la descarga e instalación del paquete `.deb`. **flexdump** se puede usar para listar y volcar aplicaciones, como se muestra en los comandos a continuación:
2023-06-05 18:33:24 +00:00
```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
flexdump dump Twitter.app
2023-06-05 18:33:24 +00:00
```
#### **bagbak**
[**bagbak**](https://github.com/ChiChou/bagbak), otra herramienta basada en Frida, requiere un dispositivo con jailbreak para la decryption de aplicaciones:
```bash
bagbak --raw Chrome
```
#### **r2flutch**
**r2flutch**, utilizando tanto radare como frida, sirve para la decryption y dumping de aplicaciones. Más información se puede encontrar en su [**página de GitHub**](https://github.com/as0ler/r2flutch).
2023-06-05 18:33:24 +00:00
### **Instalación de Aplicaciones**
2023-06-05 18:33:24 +00:00
**Sideloading** se refiere a la instalación de aplicaciones fuera de la App Store oficial. Este proceso es manejado por el **installd daemon** y requiere que las aplicaciones estén firmadas con un certificado emitido por Apple. Los dispositivos con jailbreak pueden eludir esto a través de **AppSync**, permitiendo la instalación de paquetes IPA falsamente firmados.
2023-06-05 18:33:24 +00:00
#### **Herramientas de Sideloading**
2023-06-05 18:33:24 +00:00
- **Cydia Impactor**: Una herramienta para firmar e instalar archivos IPA en iOS y archivos APK en Android. Guías y solución de problemas se pueden encontrar en [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
2023-06-05 18:33:24 +00:00
- **libimobiledevice**: Una biblioteca para Linux y macOS para comunicarse con dispositivos iOS. Se proporcionan comandos de instalación y ejemplos de uso para ideviceinstaller para instalar aplicaciones a través de USB.
2023-06-05 18:33:24 +00:00
- **ipainstaller**: Esta herramienta de línea de comandos permite la instalación directa de aplicaciones en dispositivos iOS.
2023-06-05 18:33:24 +00:00
- **ios-deploy**: Para usuarios de macOS, ios-deploy instala aplicaciones de iOS desde la línea de comandos. Descomprimir el IPA y usar la bandera `-m` para el lanzamiento directo de la aplicación son parte del proceso.
2023-06-05 18:33:24 +00:00
- **Xcode**: Utiliza Xcode para instalar aplicaciones navegando a **Window/Devices and Simulators** y añadiendo la aplicación a **Installed Apps**.
2023-06-05 18:33:24 +00:00
#### **Permitir la Instalación de Aplicaciones en Dispositivos que No Son iPad**
Para instalar aplicaciones específicas de iPad en dispositivos iPhone o iPod touch, el valor **UIDeviceFamily** en el archivo **Info.plist** debe cambiarse a **1**. Sin embargo, esta modificación requiere volver a firmar el archivo IPA debido a las verificaciones de validación de firma.
2023-06-05 18:33:24 +00:00
**Nota**: Este método puede fallar si la aplicación exige capacidades exclusivas de modelos de iPad más nuevos mientras se utiliza un iPhone o iPod touch más antiguo.
2023-06-05 18:33:24 +00:00
## Referencias
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/)
2023-06-05 18:33:24 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2023-06-05 18:33:24 +00:00
<details>
<summary>Support HackTricks</summary>
2023-06-05 18:33:24 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2023-06-05 18:33:24 +00:00
</details>
{% endhint %}