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

171 lines
16 KiB
Markdown
Raw Normal View History

# Ambiente de Teste iOS
2021-05-14 22:25:03 +00:00
<details>
2021-05-14 22:25:03 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* 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)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Programa de Desenvolvedor Apple
Uma **identidade de provisionamento** é uma coleção de chaves públicas e privadas associadas a uma conta de desenvolvedor da Apple. Para **assinar aplicativos**, você precisa pagar **99$/ano** para se registrar no **Programa de Desenvolvedor Apple** e obter sua identidade de provisionamento. 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 com jailbreak**.
A partir do Xcode 7.2, a Apple disponibilizou 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 de Aplicativo com suas credenciais) --> _Clique no ID de Aplicativo criado_ --> _Gerenciar Certificados_ --> _+_ (Desenvolvimento Apple) --> _Concluído_\
\_\_Em seguida, para executar seu aplicativo no iPhone, você precisa primeiro **indicar ao iPhone que confie no computador**. Em seguida, você pode tentar **executar o aplicativo no celular a partir do Xcode**, mas um erro aparecerá. Portanto, vá para _Configurações_ --> _Geral_ --> _Perfis e Gerenciamento de Dispositivos_ --> Selecione o perfil não confiável e clique em "**Confiar**".
2021-05-14 22:25:03 +00:00
2023-06-06 18:56:34 +00:00
Observe que **aplicativos assinados pelo mesmo certificado de assinatura podem compartilhar recursos de maneira segura, como itens de chaveiro**.
2021-05-14 22:25:03 +00:00
2023-06-06 18:56:34 +00:00
Os perfis de provisionamento são armazenados dentro do telefone em **`/Library/MobileDevice/ProvisioningProfiles`**
2021-05-14 22:25:03 +00:00
## **Simulador**
{% hint style="info" %}
Observe que um **simulador não é o mesmo que um emulador**. O simulador apenas simula o comportamento do dispositivo e suas funções, mas não as utiliza de fato.
{% endhint %}
O simulador do iOS SDK oferece uma _simulação_ de alto nível de um dispositivo iOS. Mais importante, os binários do emulador são compilados para código x86 em vez de código ARM. Os aplicativos compilados para um dispositivo real não são executados, tornando o simulador inútil para análise de caixa preta e engenharia reversa.
### **Simulador**
2023-06-06 18:56:34 +00:00
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 com jailbreak**.
Todas as ferramentas necessárias para construir e dar suporte a um aplicativo iOS são **oficialmente suportadas apenas no Mac OS**.\
A ferramenta de fato da Apple para criar/debbugar/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 aplicativo.\
É altamente recomendado **baixar** o Xcode da **loja de aplicativos oficial**. Outras versões podem conter malware.
2023-06-06 18:56:34 +00:00
Os arquivos do simulador podem ser encontrados em `/Users/<username>/Library/Developer/CoreSimulator/Devices`
Para abrir o simulador, execute o Xcode e, em seguida, clique na guia _Xcode_ --> _Abrir ferramentas de desenvolvedor_ --> _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ê deseja acessar os arquivos de um aplicativo criado em um dos emuladores, pode ser difícil saber **em qual deles o aplicativo está instalado**. Uma maneira rápida de **encontrar o UID correto** é executar o aplicativo 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 nele podem ser encontrados em `/Users/<username>/Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application`
2023-06-06 18:56:34 +00:00
No entanto, surpreendentemente, você não encontrará o aplicativo aqui. Você precisa acessar `/Users/<username>/Library/Developer/Xcode/DerivedData/{Application}/Build/Products/Debug-iphonesimulator/`
2023-06-06 18:56:34 +00:00
E nesta pasta você pode **encontrar o pacote do aplicativo**.
## Emulador
Corellium é o único emulador iOS disponível publicamente. É uma solução SaaS empresarial com um modelo de licença por usuário e não oferece nenhum teste gratuito.
## 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 essas restrições** e outros controles de segurança implementados pelo sistema operacional. Portanto, uma vez que o dispositivo é jailbroken, a **verificação de integridade**, que é responsável por verificar os aplicativos instalados, é corrigida para ser **burlada**.
{% hint style="info" %}
Ao contrário do Android, **você não pode alternar para o "Modo de Desenvolvedor"** no iOS para executar código não assinado/não confiável no dispositivo.
{% endhint %}
### Comparação com o Root no Android
O jailbreaking do iOS é frequentemente **comparado ao root no Android**, mas o processo é realmente bastante **diferente**. Para explicar a diferença, vamos primeiro revisar os conceitos de "root" e "flashing" no Android.
* **Root**: Isso geralmente envolve a instalação do binário `su` no sistema ou a substituição de todo o sistema por uma ROM personalizada com root. Não são necessários exploits para obter acesso root, desde que o bootloader seja acessível.
* **Flashing de ROMs personalizadas**: Isso permite substituir o sistema operacional que está sendo executado no dispositivo depois de desbloquear o bootloader. O bootloader pode exigir um exploit para ser desbloqueado.
**Nos dispositivos iOS, é impossível fazer o flashing de uma ROM personalizada** porque o bootloader do iOS **permite apenas a inicialização e o flashing de imagens assinadas pela Apple**. É por isso que mesmo **imagens oficiais do iOS não podem ser instaladas se não forem assinadas pela Apple, e isso torna downgrades do iOS possíveis apenas enquanto a versão anterior do iOS ainda estiver assinada**.
O objetivo do jailbreaking é **desabilitar as proteções do iOS** (principalmente os mecanismos de assinatura de código da Apple) para que **código não assinado arbitrário 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 a ferramentas que automatizam o processo de desabilitação.
### Considerações sobre o Jailbreaking
Jailbreak em um dispositivo iOS está se tornando cada vez mais **complicado** porque a Apple continua fortalecendo o sistema e corrigindo as vulnerabilidades exploradas. O jailbreak se tornou um procedimento muito sensível ao tempo porque a Apple para de assinar essas versões vulneráveis relativamente pouco tempo depois de 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 iPad 1). Isso significa que **você não pode fazer o downgrade para uma versão específica do iOS assim que a Apple parar de assinar o firmware**.
Se você tiver um dispositivo jailbroken que usa para testes de segurança, **mantenha-o** como está, a menos que você tenha certeza de que pode fazer o 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 você baixou e carregá-lo no dispositivo sempre que quiser**. Durante atualizações menores do iOS, duas versões podem ser assinadas pela Apple (a mais recente e a versão anterior do iOS). Essa é a única situação em que você pode fazer o 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 jailbreak**.
{% endhint %}
### Tipos de Jailbreak
* **Jailbreaks tethered** não persistem após reinicializações, portanto, 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 inicializar no modo não jailbroken por conta própria.
* **Jailbreaks semi-untethered** permitem que o dispositivo inicialize por conta própria, mas os patches do kernel (ou modificações no espaço do usuário) para desabilitar a assinatura de código não são aplicados automaticamente. O usuário deve fazer o jailbreak novamente iniciando um aplicativo ou visitando um site (não requer uma conexão com um computador, daí o termo untethered).
* **Jailbreaks untethered** são a escolha mais popular para os usuários finais, pois precisam ser aplicados apenas uma vez, após o qual o dispositivo ficará permanentemente jailbroken.
### Ferramentas de Jailbreak
Diferentes versões do iOS requerem **técnicas de jailbreak diferentes**. [Verifique se há um jailbreak público disponível para a sua versão do iOS](https://canijailbreak.com). Cuidado com ferramentas falsas e spyware, que muitas vezes se escondem por trá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 mais recentes, como o iPhone 5S até o 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, pois a Apple corrigiu as falhas que permitiam a execução do Unc0ver.
A cena de jailbreak do iOS evolui tão rapidamente que fornecer instruções atualizadas é difícil. No entanto, podemos indicar algumas fontes que são atualmente confiáveis:
2022-04-05 22:24:52 +00:00
* [**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ê fizer em seu dispositivo é por sua conta e risco. Embora o jailbreak seja geralmente seguro, as coisas podem dar errado e você pode acabar danificando 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 implementado pelo sistema operacional**. Portanto, qualquer **aplicativo no dispositivo pode ler qualquer arquivo** no sistema de arquivos, incluindo arquivos de outros aplicativos, cookies e chaveiro.
Um dispositivo com Jailbreak permite aos usuários **instalar aplicativos não aprovados** e aproveitar **mais APIs**, que de outra forma não seriam acessíveis.
{% hint style="warning" %}
**Não é recomendado fazer Jailbreak no dispositivo móvel para usuários comuns**
{% endhint %}
### **Após o Jailbreak**
{% 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 dispositivo móvel está com Jailbreak e, nesse caso, o aplicativo não será executado**
* Após o Jailbreak de um iOS, **arquivos e pastas geralmente são instalados**, que 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 Jailbreak** [**aqui**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
Você pode tentar evitar essas detecções usando o comando `ios jailbreak disable` do **objection**.
## **Burlando a Detecção de Jailbreak**
* Você pode tentar evitar essas detecções usando o comando `ios jailbreak disable` do **objection**.
* Você também pode instalar a ferramenta **Liberty Lite** (https://ryleyangus.com/repo/). Depois de adicionar o repositório, o aplicativo deve aparecer na guia 'Pesquisar'
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* 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)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>