mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 03:53:29 +00:00
175 lines
15 KiB
Markdown
175 lines
15 KiB
Markdown
# 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>
|