# Ambiente de Teste iOS
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! 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).
## 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//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//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//Library/Developer/CoreSimulator/Devices/{UID}/data/Containers/Data/Application` No entanto, surpreendentemente, você não encontrará o aplicativo aqui. Você precisa acessar `/Users//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’
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! 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).