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

136 lines
10 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><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 o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
## Programa de Desenvolvedor da 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 da 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 às suas credenciais) --> _Clique no ID Apple criado_ --> _Gerenciar Certificados_ --> _+_ (Desenvolvimento da 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 _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
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 %}
### **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.
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, 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 (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 dentro de 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 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.
## Jailbreaking
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 impostos 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 inicializar apenas 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 jailbreaking de um iOS, **arquivos e pastas geralmente são instalados**, os quais 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/)