# iOS Testing Environment {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * 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.
{% 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 suas 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//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>) ### Applications in the Simulator 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 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//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 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 jailbreak**: [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 é jailbreak, 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 mudar para "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 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. 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 jailbreak 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á jailbreak e, nesse caso, o aplicativo não será executado** * Após o jailbreak, **arquivos e pastas geralmente são instalados**, estes podem ser pesquisados para determinar se o dispositivo está jailbreak. * Em um dispositivo jailbreak, 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:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * 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.
{% endhint %}