mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-26 13:03:37 +00:00
193 lines
13 KiB
Markdown
193 lines
13 KiB
Markdown
# Operações Básicas de Teste no iOS
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
## **Resumo da Identificação e Acesso de Dispositivos iOS**
|
|
|
|
### **Identificando o UDID de um Dispositivo iOS**
|
|
|
|
Para identificar um dispositivo iOS de forma única, é usado uma sequência de 40 dígitos conhecida como UDID. No macOS Catalina ou mais recente, isso pode ser encontrado no aplicativo **Finder**, pois o iTunes não está mais presente. O dispositivo, uma vez conectado via USB e selecionado no Finder, revela seu UDID, entre outras informações, quando os detalhes sob seu nome são clicados.
|
|
|
|
Para versões do macOS anteriores ao Catalina, o iTunes facilita a descoberta do UDID. Instruções detalhadas podem ser encontradas [aqui](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
|
|
|
|
Ferramentas de linha de comando oferecem métodos alternativos para recuperar o UDID:
|
|
|
|
* **Usando a ferramenta I/O Registry Explorer `ioreg`:**
|
|
```bash
|
|
$ ioreg -p IOUSB -l | grep "USB Serial"
|
|
```
|
|
* **Usando `ideviceinstaller` no macOS (e 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:"
|
|
```
|
|
* **Utilizando `instruments` para listar dispositivos:**
|
|
```bash
|
|
$ instruments -s devices
|
|
```
|
|
### **Acessando o Shell do Dispositivo**
|
|
|
|
O acesso **SSH** é habilitado instalando o pacote **OpenSSH** pós-jailbreak, permitindo conexões via `ssh root@<device_ip_address>`. É crucial alterar as senhas padrão (`alpine`) para os usuários `root` e `mobile` para garantir a segurança do dispositivo.
|
|
|
|
O **SSH via USB** se torna necessário na ausência de Wi-Fi, utilizando `iproxy` para mapear as portas do dispositivo para conexões SSH. Essa configuração permite o acesso SSH através de USB executando:
|
|
```bash
|
|
$ iproxy 2222 22
|
|
$ ssh -p 2222 root@localhost
|
|
```
|
|
**Aplicativos de shell no dispositivo**, como o NewTerm 2, facilitam a interação direta com o dispositivo, especialmente útil para solução de problemas. As **conchas SSH reversas** também podem ser estabelecidas para acesso remoto a partir do computador host.
|
|
|
|
### **Redefinindo Senhas Esquecidas**
|
|
|
|
Para redefinir uma senha esquecida de volta para o padrão (`alpine`), é necessário editar o arquivo `/private/etc/master.passwd`. Isso envolve substituir o hash existente pelo hash para `alpine` ao lado das entradas de usuário `root` e `mobile`.
|
|
|
|
## **Técnicas de Transferência de Dados**
|
|
|
|
### **Transferindo Arquivos de Dados do Aplicativo**
|
|
|
|
**Arquivamento e Recuperação via SSH e SCP:** É simples arquivar o diretório de Dados do aplicativo usando `tar` e depois transferi-lo usando `scp`. O comando abaixo arquiva o diretório de Dados em um arquivo .tgz, que é então transferido do dispositivo:
|
|
```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 .
|
|
```
|
|
### **Ferramentas de Interface Gráfica do Usuário**
|
|
|
|
**Usando iFunbox e iExplorer:** Essas ferramentas de GUI são úteis para gerenciar arquivos em dispositivos iOS. No entanto, a partir do iOS 8.4, a Apple restringiu o acesso dessas ferramentas ao sandbox do aplicativo, a menos que o dispositivo esteja jailbroken.
|
|
|
|
### **Usando Objection para Gerenciamento de Arquivos**
|
|
|
|
**Shell Interativo com Objection:** Iniciar o objection fornece acesso ao diretório Bundle de um aplicativo. A partir daqui, você pode navegar até o diretório Documents do aplicativo e gerenciar arquivos, incluindo o download e upload deles de e para o dispositivo iOS.
|
|
```bash
|
|
objection --gadget com.apple.mobilesafari explorer
|
|
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
|
|
file download <filename>
|
|
```
|
|
## **Obtaining and Extracting Apps**
|
|
|
|
### **Obtaining the IPA File**
|
|
|
|
**Link de Distribuição Over-The-Air (OTA):** Apps distribuídos para teste via OTA podem ser baixados usando a ferramenta de download de ativos de serviços ITMS, que é instalada via npm e usada para salvar o arquivo IPA localmente.
|
|
```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
|
|
```
|
|
### **Extraindo o Binário do Aplicativo**
|
|
|
|
1. **De um IPA:** Descompacte o IPA para acessar o binário do aplicativo descriptografado.
|
|
2. **De um Dispositivo com Jailbreak:** Instale o aplicativo e extraia o binário descriptografado da memória.
|
|
|
|
### **Processo de Descriptografia**
|
|
|
|
**Visão Geral da Descriptografia Manual:** Os binários de aplicativos iOS são criptografados pela Apple usando o FairPlay. Para fazer engenharia reversa, é necessário extrair o binário descriptografado da memória. O processo de descriptografia envolve verificar a flag PIE, ajustar as flags de memória, identificar a seção criptografada e, em seguida, extrair e substituir essa seção por sua forma descriptografada.
|
|
|
|
**Verificando e Modificando a Flag PIE:**
|
|
```bash
|
|
otool -Vh Original_App
|
|
python change_macho_flags.py --no-pie Original_App
|
|
otool -Vh Hello_World
|
|
```
|
|
**Identificação da Seção Criptografada e Despejo de Memória:**
|
|
|
|
Determine o início e o fim dos endereços da seção criptografada usando `otool` e faça o despejo da memória do dispositivo com jailbreak usando gdb.
|
|
```bash
|
|
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
|
|
dump memory dump.bin 0x8000 0x10a4000
|
|
```
|
|
**Sobrescrevendo a Seção Criptografada:**
|
|
|
|
Substitua a seção criptografada no binário do aplicativo original pelo despejo descriptografado.
|
|
```bash
|
|
dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
|
|
```
|
|
**Finalizando a Descriptografia:** Modifique os metadados do binário para indicar a ausência de criptografia usando ferramentas como **MachOView**, definindo o `cryptid` como 0.
|
|
|
|
### **Descriptografia (Automaticamente)**
|
|
|
|
#### **frida-ios-dump**
|
|
A ferramenta [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) é utilizada para **descriptografar e extrair aplicativos automaticamente** de dispositivos iOS. Inicialmente, é necessário configurar o `dump.py` para se conectar ao dispositivo iOS, o que pode ser feito através do localhost na porta 2222 via **iproxy** ou diretamente através do endereço IP e porta do dispositivo.
|
|
|
|
As aplicações instaladas no dispositivo podem ser listadas com o comando:
|
|
```bash
|
|
$ python dump.py -l
|
|
```
|
|
Para fazer dump de um aplicativo específico, como o Telegram, o seguinte comando é utilizado:
|
|
```bash
|
|
$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph
|
|
```
|
|
Este comando inicia o despejo do aplicativo, resultando na criação de um arquivo `Telegram.ipa` no diretório atual. Este processo é adequado para dispositivos com jailbreak, pois aplicativos não assinados ou falsamente assinados podem ser reinstalados usando ferramentas como [**ios-deploy**](https://github.com/ios-control/ios-deploy).
|
|
|
|
#### **flexdecrypt**
|
|
A ferramenta [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), juntamente com seu wrapper [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), permite a extração de arquivos IPA de aplicativos instalados. Os comandos de instalação para o **flexdecrypt** no dispositivo incluem o download e a instalação do pacote `.deb`. O **flexdump** pode ser usado para listar e despejar aplicativos, conforme mostrado nos comandos abaixo:
|
|
```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
|
|
```
|
|
#### **bagbak**
|
|
[**bagbak**](https://github.com/ChiChou/bagbak), outra ferramenta baseada em Frida, requer um dispositivo com jailbreak para descriptografia de aplicativos:
|
|
```bash
|
|
bagbak --raw Chrome
|
|
```
|
|
#### **r2flutch**
|
|
**r2flutch**, utilizando tanto o radare quanto o frida, serve para descriptografar e extrair aplicativos. Mais informações podem ser encontradas em sua [**página do GitHub**](https://github.com/as0ler/r2flutch).
|
|
|
|
### **Instalando Aplicativos**
|
|
|
|
**Sideloading** refere-se à instalação de aplicativos fora da App Store oficial. Esse processo é gerenciado pelo **daemon installd** e requer que os aplicativos sejam assinados com um certificado emitido pela Apple. Dispositivos com jailbreak podem contornar isso através do **AppSync**, permitindo a instalação de pacotes IPA falsamente assinados.
|
|
|
|
#### **Ferramentas de Sideloading**
|
|
|
|
- **Cydia Impactor**: Uma ferramenta para assinar e instalar arquivos IPA no iOS e arquivos APK no Android. Guias e solução de problemas podem ser encontrados em [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
|
|
|
|
- **libimobiledevice**: Uma biblioteca para Linux e macOS para se comunicar com dispositivos iOS. Comandos de instalação e exemplos de uso para ideviceinstaller são fornecidos para instalar aplicativos via USB.
|
|
|
|
- **ipainstaller**: Esta ferramenta de linha de comando permite a instalação direta de aplicativos em dispositivos iOS.
|
|
|
|
- **ios-deploy**: Para usuários do macOS, o ios-deploy instala aplicativos iOS a partir da linha de comando. Descompactar o IPA e usar a flag `-m` para o lançamento direto do aplicativo fazem parte do processo.
|
|
|
|
- **Xcode**: Utilize o Xcode para instalar aplicativos navegando até **Window/Devices and Simulators** e adicionando o aplicativo em **Installed Apps**.
|
|
|
|
#### **Permitir a Instalação de Aplicativos em Dispositivos Não-iPad**
|
|
Para instalar aplicativos específicos para iPad em dispositivos iPhone ou iPod touch, o valor **UIDeviceFamily** no arquivo **Info.plist** precisa ser alterado para **1**. Essa modificação, no entanto, requer a reassinatura do arquivo IPA devido às verificações de validação de assinatura.
|
|
|
|
**Nota**: Este método pode falhar se o aplicativo exigir capacidades exclusivas de modelos de iPad mais recentes ao usar um iPhone ou iPod touch mais antigo.
|
|
|
|
|
|
|
|
## Referências
|
|
* [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/)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras formas de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
|
|
|
|
</details>
|