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

150 lines
12 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 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** Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Obtenha 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 o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</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 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_ --> _Preferências_ --> _Contas_ --> _+_ (Adicionar novo ID de Aplicativo com suas credenciais) --> _Clique no ID Apple criado_ --> _Gerenciar Certificados_ --> _+_ (Desenvolvimento Apple) --> _Concluído_\
\_\_Então, para executar seu aplicativo em seu 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 _Ajustes_ --> _Geral_ --> _Perfis e Gerenciamento de Dispositivos_ --> Selecione o perfil não confiável e clique em "**Confiar**".
Observe que **aplicativos assinados pelo mesmo certificado de assinatura podem compartilhar recursos de maneira segura, como itens de chaveiro**.
Os perfis de provisionamento são armazenados dentro do telefone em **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulador**
{% 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 de fato.
{% endhint %}
### **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 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 padrão da Apple para criar/depurar/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 **App Store 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, em seguida, clique na aba _Xcode_ --> _Abrir Ferramentas de Desenvolvedor_ --> _Simulador_\
\_\_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ê deseja 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ê saiba 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 publicamente disponível. É uma solução SaaS empresarial com um modelo de licença por usuário e não oferece nenhum teste gratuito.
## Jailbreak
A Apple exige estritamente que o código em execução 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 implementados pelo sistema operacional. Portanto, uma vez que o dispositivo é jailbroken, a **verificação de integridade** responsável por verificar os aplicativos instalados é 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 confiável/não assinado no dispositivo.
{% endhint %}
### Rooting no Android vs. Jailbreaking no iOS
Embora frequentemente comparados, **rooting** no Android e **jailbreaking** no iOS são processos fundamentalmente diferentes. O rooting de dispositivos Android pode envolver **a instalação do binário `su`** ou **a substituição do sistema por uma ROM personalizada com root**, o que não necessariamente requer 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.
Por outro lado, dispositivos iOS não podem fazer flash de ROMs personalizadas devido à restrição do bootloader de apenas inicializar imagens assinadas pela Apple. **Jailbreaking no 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 no iOS está se tornando cada vez mais difícil à medida que a Apple corrige rapidamente as vulnerabilidades. **Rebaixar o 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. Esse mecanismo, conhecido como "janela de assinatura", limita a capacidade de armazenar e posteriormente usar pacotes de firmware OTA. O site [IPSW Downloads](https://ipsw.me) é um recurso para verificar as janelas de assinatura atuais.
### Variedades de Jailbreak
* **Jailbreaks tethered** exigem uma conexão com o computador para cada reinicialização.
* **Jailbreaks semi-tethered** permitem a inicialização no modo não jailbroken sem um computador.
* **Jailbreaks semi-untethered** exigem re-jailbreaking manual sem a necessidade 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 de acordo com a versão do iOS e o 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 apresenta riscos, e o jailbreaking deve ser abordado com cautela.
### Benefícios e Riscos do Jailbreaking
O jailbreaking **remove o isolamento imposto pelo sistema operacional**, permitindo que os aplicativos acessem todo o sistema de arquivos. Essa liberdade possibilita a instalação de aplicativos não aprovados e o acesso a mais APIs. No entanto, para usuários comuns, o jailbreaking **não é recomendado** devido aos possíveis 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árias aplicações tentarão detectar se o dispositivo móvel está jailbroken 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á jailbroken.
* Em um dispositivo jailbroken, os aplicativos obtêm **acesso de leitura/escrita a novos arquivos** fora do sandbox
* Algumas **chamadas de API** se **comportarão de forma diferente**
* A presença do serviço **OpenSSH**
* Chamar `/bin/sh` irá **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 `ios jailbreak disable` do **objection**
## **Bypass de Detecção de Jailbreak**
* Você pode tentar evitar essas detecções usando `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 Pesquisar
## Referências
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
<details>
<summary><strong>Aprenda hacking AWS do zero ao hero 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)!
* Obtenha 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 o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>