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

175 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Ambiente de Teste iOS
<details>
<summary><strong>Aprenda hacking no 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ê quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Programa de Desenvolvedor Apple
Uma **provisioning identity** é um conjunto de chaves públicas e privadas associadas a uma conta de desenvolvedor Apple. Para **assinar apps**, é necessário pagar **99$/ano** para se registrar no **Programa de Desenvolvedor Apple** e obter sua provisioning identity. Sem isso, você não poderá executar aplicativos a partir do código-fonte em um dispositivo físico. Outra opção é usar um **dispositivo jailbroken**.
A partir do Xcode 7.2, a Apple forneceu uma opção para criar um **perfil de provisionamento de desenvolvimento iOS gratuito** que permite escrever e testar seu aplicativo em um iPhone real. Vá para _Xcode_ --> _Preferências_ --> _Contas_ --> _+_ (Adicionar novo ID Apple às suas credenciais) --> _Clique no Apple ID criado_ --> _Gerenciar Certificados_ --> _+_ (Desenvolvimento Apple) --> _Concluído_\
\_\_Então, para executar seu aplicativo no iPhone, você precisa primeiro **indicar ao iPhone para confiar no computador.** Depois, você pode tentar **executar o aplicativo no celular a partir do Xcode,** mas um erro aparecerá. Então vá para _Ajustes_ --> _Geral_ --> _Gerenciamento de Perfis e Dispositivos_ --> Selecione o perfil não confiável e clique em "**Confiar**".
Note que **aplicativos assinados pelo mesmo certificado de assinatura podem compartilhar recursos de maneira segura, como itens do keychain**.
Os perfis de provisionamento são armazenados dentro do telefone em **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulador**
{% hint style="info" %}
Note que um **simulador não é o mesmo que um emulador**. O simulador apenas simula o comportamento do dispositivo e funções, mas não as utiliza de fato.
{% endhint %}
**O** simulador do SDK iOS oferece uma _simulação_ de nível superior de um dispositivo iOS. O mais importante é que os binários do emulador são compilados para código x86 em vez de código ARM. Apps compilados para um dispositivo real não funcionam, tornando o simulador inútil para análise de caixa preta e engenharia reversa.
### **Simulador**
A primeira coisa que você precisa saber é que **realizar um pentest dentro de um simulador será muito mais limitado do que fazê-lo em um dispositivo jailbroken**.
Todas as ferramentas necessárias para construir e dar suporte a um app iOS são **oficialmente suportadas apenas no Mac OS**.\
A ferramenta de fato da Apple para criar/debugar/instrumentar aplicativos iOS é o **Xcode**. Ele pode ser usado para baixar outros componentes como **simuladores** e diferentes **versões do SDK** necessárias para construir e **testar** seu app.\
É altamente recomendável **baixar** o Xcode da **loja oficial de aplicativos**. Outras versões podem conter malware.
Os arquivos do simulador podem ser encontrados em `/Users/<username>/Library/Developer/CoreSimulator/Devices`
Para abrir o simulador, execute o Xcode, depois pressione na aba _Xcode_ --> _Ferramentas do Desenvolvedor Abertas_ --> _Simulador_\
\_\_Na imagem a seguir, clicando em "iPod touch \[...]" você pode selecionar outro dispositivo para testar:
![](<../../.gitbook/assets/image (457).png>)
![](<../../.gitbook/assets/image (458).png>)
### Aplicativos no Simulador
Dentro de `/Users/<username>/Library/Developer/CoreSimulator/Devices`, você pode encontrar todos os **simuladores instalados**. Se você quiser acessar os arquivos de um aplicativo criado dentro de um dos emuladores, pode ser difícil saber **em qual deles o app está instalado**. Uma maneira rápida de **encontrar o UID correto** é executar o app no simulador e executar:
```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
```
Uma vez que você conhece o UID, os aplicativos instalados dentro dele podem ser encontrados em `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application`
No entanto, surpreendentemente, você não encontrará o aplicativo aqui. Você precisa acessar `/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`
E nesta pasta você pode **encontrar o pacote do aplicativo.**
## Emulador
Corellium é o único emulador de iOS disponível publicamente. É uma solução empresarial SaaS com um modelo de licença por usuário e não oferece nenhuma licença de teste.
## Jailbreaking
A Apple exige estritamente que o código executado no iPhone seja **assinado por um certificado emitido pela Apple**. **Jailbreaking** é o processo de **contornar ativamente tais restrições** e outros controles de segurança impostos pelo sistema operacional. Portanto, uma vez que o dispositivo está com jailbreak, a **verificação de integridade**, responsável por checar os aplicativos sendo instalados, é corrigida para ser **burlada**.
{% hint style="info" %}
Ao contrário do Android, **você não pode mudar para o "Modo Desenvolvedor"** no iOS para executar código não assinado/não confiável no dispositivo.
{% endhint %}
### Comparação com Root no Android
O jailbreaking do iOS é frequentemente **comparado ao root no Android**, mas o processo é na verdade bastante **diferente**. Para explicar a diferença, primeiro revisaremos os conceitos de "rooting" e "flashing" no Android.
* **Rooting**: Isso normalmente envolve instalar o binário `su` no sistema ou substituir todo o sistema por uma ROM customizada com root. Exploits não são necessários para obter acesso root, desde que o bootloader seja acessível.
* **Flashing de ROMs customizadas**: Isso permite substituir o sistema operacional que está rodando no dispositivo depois de desbloquear o bootloader. O bootloader pode exigir um exploit para ser desbloqueado.
**Nos dispositivos iOS, flashar uma ROM customizada é impossível** porque o bootloader do iOS **permite apenas imagens assinadas pela Apple** para serem iniciadas e flashadas. É por isso que até mesmo **imagens oficiais do iOS não podem ser instaladas se não estiverem assinadas pela Apple, e isso torna os downgrades do iOS possíveis apenas enquanto a versão anterior do iOS ainda estiver assinada.**
O objetivo do jailbreaking é **desativar as proteções do iOS** (mecanismos de assinatura de código da Apple, em particular) para que **código arbitrário não assinado possa ser executado no dispositivo** (por exemplo, código personalizado ou baixado de lojas de aplicativos alternativas, como Cydia ou Sileo). A palavra "jailbreak" é uma referência coloquial às ferramentas all-in-one que automatizam o processo de desativação.
### Considerações sobre Jailbreaking
Fazer jailbreak em um dispositivo iOS está se tornando cada vez mais **complicado** porque a Apple continua reforçando o sistema e corrigindo as vulnerabilidades exploradas. Jailbreaking tornou-se um procedimento muito sensível ao tempo porque **a Apple para de assinar essas versões vulneráveis relativamente logo após lançar uma correção** (a menos que o jailbreak se beneficie de vulnerabilidades baseadas em hardware, como o [exploit limera1n](https://www.theiphonewiki.com/wiki/Limera1n) que afeta o BootROM do iPhone 4 e do iPad 1). Isso significa que **você não pode fazer downgrade para uma versão específica do iOS uma vez que a Apple para de assinar o firmware**.
Se você tem um dispositivo com jailbreak que usa para testes de segurança, **mantenha-o** como está, a menos que você esteja 100% certo de que pode fazer jailbreak novamente após atualizar para a versão mais recente do iOS.
As atualizações do iOS são baseadas em um processo de desafio-resposta (gerando os chamados blobs SHSH como resultado). O dispositivo permitirá a instalação do sistema operacional apenas se a resposta ao desafio for assinada pela Apple. Isso é o que os pesquisadores chamam de "janela de assinatura", e é a razão **pela qual você não pode simplesmente armazenar o pacote de firmware OTA que baixou e carregá-lo no dispositivo sempre que quiser**. Durante pequenas atualizações do iOS, duas versões podem ser assinadas pela Apple (a mais recente e a versão anterior do iOS). Esta é a única situação em que você pode fazer downgrade do dispositivo iOS. Você pode **verificar a janela de assinatura atual e baixar o firmware OTA do site** [**IPSW Downloads**](https://ipsw.me).
{% hint style="danger" %}
**Atualizar o sistema operacional remove o efeito do jailbreaking.**
{% endhint %}
### Tipos de Jailbreak
* **Jailbreaks tethered** não persistem após reinicializações, então reaplicar o jailbreak requer que o dispositivo esteja conectado (tethered) a um computador durante cada reinicialização. O dispositivo pode nem reiniciar se o computador não estiver conectado.
* **Jailbreaks semi-tethered** não podem ser reaplicados a menos que o dispositivo esteja conectado a um computador durante a reinicialização. O dispositivo também pode iniciar em modo não jailbroken por conta própria.
* **Jailbreaks semi-untethered** permitem que o dispositivo inicie por conta própria, mas os patches do kernel (ou modificações no espaço do usuário) para desativar a assinatura de código não são aplicados automaticamente. O usuário deve fazer jailbreak novamente no dispositivo iniciando um aplicativo ou visitando um site (não requerendo conexão com um computador, daí o termo untethered).
* **Jailbreaks untethered** são a escolha mais popular para os usuários finais porque precisam ser aplicados apenas uma vez, após o qual o dispositivo permanecerá permanentemente com jailbreak.
### Ferramentas de Jailbreaking
Versões diferentes do iOS requerem **técnicas diferentes de jailbreaking**. [Determine se um jailbreak público está disponível para a sua versão do iOS](https://canijailbreak.com). Cuidado com ferramentas falsas e spyware, que muitas vezes se escondem atrás de nomes de domínio semelhantes ao nome do grupo/autor do jailbreak.
Exemplos de versões:
* [Checkra1n](https://checkra.in/): Funciona em dispositivos com o chip A7 e tão novos quanto o chip A11, por exemplo, iPhone 5S até iPhone X.
* [Palera1n](https://palera.in/): Dispositivos Checkm8 (A8-A11) no iOS 15.0-16.5.
* [Unc0ver](https://checkra.in/): Funciona apenas para versões do iOS até 14.8, já que a Apple corrigiu os problemas que permitiam a execução do Unc0ver.
A cena do jailbreak do iOS evolui tão rapidamente que fornecer instruções atualizadas é difícil. No entanto, podemos indicar algumas fontes que atualmente são confiáveis:
* [**Can I Jailbreak?**](https://canijailbreak.com)
* [**The iPhone Wiki**](https://www.theiphonewiki.com)
* [**Redmond Pie**](https://www.redmondpie.com)
* [**Reddit Jailbreak**](https://www.reddit.com/r/jailbreak/)
* [**https://checkra.in/**](https://checkra.in)
> Observe que qualquer modificação que você faça em seu dispositivo é por sua própria conta e risco. Embora o jailbreaking seja geralmente seguro, as coisas podem dar errado e você pode acabar brickando seu dispositivo. Nenhuma outra parte, exceto você mesmo, pode ser responsabilizada por qualquer dano.
### Benefícios
O efeito colateral mais importante do Jailbreaking é que ele **remove qualquer sandboxing imposto pelo sistema operacional**. Portanto, qualquer **aplicativo no dispositivo pode ler qualquer arquivo** no sistema de arquivos, incluindo arquivos de outros aplicativos, cookies e keychain.
Um dispositivo com jailbreak permite que os usuários **instalem aplicativos não aprovados** e utilizem **mais APIs**, que de outra forma não seriam acessíveis.
{% hint style="warning" %}
**Não é recomendado fazer jailbreak no celular para usuários regulares**
{% endhint %}
### **Após o Jailbreaking**
{% content-ref url="basic-ios-testing-operations.md" %}
[basic-ios-testing-operations.md](basic-ios-testing-operations.md)
{% endcontent-ref %}
### **Detecção de Jailbreak**
**Vários aplicativos tentarão detectar se o celular está com jailbreak e, nesse caso, o aplicativo não funcionará**
* Após o jailbreaking, **arquivos e pastas são geralmente instalados**, estes podem ser pesquisados para determinar se o dispositivo está com jailbreak.
* Em um dispositivo com jailbreak, os aplicativos obtêm **acesso de leitura/escrita a novos arquivos** fora da sandbox
* Algumas **chamadas de API** se **comportarão de maneira diferente**
* A presença do serviço **OpenSSH**
* Chamar `/bin/sh` **retornará 1** em vez de 0
**Mais informações sobre como detectar jailbreaking** [**aqui**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
Você pode tentar evitar essas detecções usando o `ios jailbreak disable` do **objection**
## **Bypass de Detecção de Jailbreak**
* Você pode tentar evitar essas detecções usando o `ios jailbreak disable` do **objection**
* Você também pode instalar a ferramenta **Liberty Lite** (https://ryleyangus.com/repo/). Uma vez adicionado o repositório, o aplicativo deve aparecer na aba Search
<details>
<summary><strong>Aprenda hacking no 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ê quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**merchandising oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas dicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>