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

157 lines
12 KiB
Markdown
Raw Normal View History

# iOS Testing Environment
{% 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 %}
## Apple Developer Program
Uma **identidade de provisionamento** é uma coleção de chaves públicas e privadas que estão associadas a uma conta de desenvolvedor da Apple. Para **assinar aplicativos**, você precisa pagar **99$/ano** para se registrar no **Apple Developer Program** 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 para fazer isso é usar um **dispositivo com jailbreak**.
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_ --> _Preferences_ --> _Accounts_ --> _+_ (Adicionar novo Apple ID com suas credenciais) --> _Clique no Apple ID criado_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
\_\_Então, para executar seu aplicativo no seu 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 _Settings_ --> _General_ --> _Profiles and Device Management_ --> Selecione o perfil não confiável e clique em "**Trust**".
Observe 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`**
## **Simulator**
{% hint style="info" %}
Observe que um **simulador não é o mesmo que um emulador**. O simulador apenas simula o comportamento do dispositivo e funções, mas não os utiliza realmente.
{% endhint %}
### **Simulator**
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 suportar um aplicativo iOS são **apenas oficialmente suportadas 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 de SDK** necessárias para construir e **testar** seu aplicativo.\
É altamente recomendável **baixar** o Xcode da **loja de aplicativos oficial**. 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_ --> _Open Developer tools_ --> _Simulator_\
\_\_Na imagem a seguir, clicando em "iPod touch \[...\]" você pode selecionar outro dispositivo para testar:
![](<../../.gitbook/assets/image (270).png>)
![](<../../.gitbook/assets/image (520).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 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 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 iOS disponível publicamente. É uma solução SaaS empresarial com um modelo de licença por usuário e não oferece nenhuma licença de teste.
## Sem Jailbreak necessário
Confira este post no blog sobre como fazer pentesting em um aplicativo iOS em um **dispositivo não jailbreakado**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## Jailbreaking
A Apple exige estritamente que o código executado no iPhone deve ser **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 é jailbreakado, a **verificação de integridade** que é responsável por verificar os aplicativos instalados é corrigida, então é **contornada**.
{% hint style="info" %}
Ao contrário do Android, **você não pode alternar para o "Modo Desenvolvedor"** no iOS para executar código não assinado/não confiável no dispositivo.
{% endhint %}
### Rooting Android vs. Jailbreaking iOS
Embora frequentemente comparados, **rooting** no Android e **jailbreaking** no iOS são processos fundamentalmente diferentes. O rooting de dispositivos Android pode envolver **instalar o binário `su`** ou **substituir o sistema por um ROM personalizado com root**, o que não requer necessariamente exploits se o bootloader estiver desbloqueado. **Flashing de ROMs personalizadas** substitui o sistema operacional do dispositivo após desbloquear o bootloader, às vezes exigindo um exploit.
Em contraste, dispositivos iOS não podem flashar ROMs personalizadas devido à restrição do bootloader de apenas inicializar imagens assinadas pela Apple. **Jailbreaking iOS** visa contornar as proteções de assinatura de código da Apple para executar código não assinado, um processo complicado pelas contínuas melhorias de segurança da Apple.
### Desafios do Jailbreaking
Jailbreaking iOS está se tornando cada vez mais difícil, pois a Apple corrige vulnerabilidades rapidamente. **Fazer downgrade do iOS** é possível apenas por um tempo limitado após um lançamento, tornando o jailbreaking uma questão sensível ao tempo. Dispositivos usados para testes de segurança não devem ser atualizados a menos que o re-jailbreaking seja garantido.
As atualizações do iOS são controladas por um **mecanismo de desafio-resposta** (blobs SHSH), permitindo a instalação apenas para respostas assinadas pela Apple. Este mecanismo, conhecido como "janela de assinatura", limita a capacidade de armazenar e usar posteriormente pacotes de firmware OTA. O [site de Downloads IPSW](https://ipsw.me) é um recurso para verificar as janelas de assinatura atuais.
### Variedades de Jailbreak
* **Jailbreaks tethered** requerem uma conexão com o computador para cada reinicialização.
* **Jailbreaks semi-tethered** permitem inicializar em modo não jailbreakado sem um computador.
* **Jailbreaks semi-untethered** requerem re-jailbreaking manual sem precisar de um computador.
* **Jailbreaks untethered** oferecem uma solução de jailbreak permanente sem a necessidade de reaplicação.
### Ferramentas e Recursos de Jailbreaking
As ferramentas de jailbreaking variam por versão do iOS e dispositivo. Recursos como [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) e [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) fornecem informações atualizadas. Exemplos incluem:
* [Checkra1n](https://checkra.in/) para dispositivos com chip A7-A11.
* [Palera1n](https://palera.in/) para dispositivos Checkm8 (A8-A11) no iOS 15.0-16.5.
* [Unc0ver](https://unc0ver.dev/) para versões do iOS até 14.8.
Modificar seu dispositivo traz riscos, e o jailbreaking deve ser abordado com cautela.
### Benefícios e Riscos do Jailbreaking
O jailbreaking **remove o sandboxing imposto pelo OS**, permitindo que os aplicativos acessem todo o sistema de arquivos. Essa liberdade permite a instalação de aplicativos não aprovados e acesso a mais APIs. No entanto, para usuários regulares, o jailbreaking **não é recomendado** devido a potenciais riscos de segurança e instabilidade do dispositivo.
### **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á jailbreakado e, nesse caso, o aplicativo não será executado**
* Após o jailbreak de um iOS, **arquivos e pastas geralmente são instalados**, estes podem ser pesquisados para determinar se o dispositivo está jailbreakado.
* Em um dispositivo jailbreakado, os aplicativos obtêm **acesso de leitura/gravação a novos arquivos** fora do sandbox.
* Algumas **chamadas de API** **comportar-se-ã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**
## **Bypass de 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/). Uma vez que o repositório é adicionado, o aplicativo deve aparecer na aba Search
## Referências
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<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">\
Aprenda e pratique Hacking GCP: <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>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
{% endhint %}