12 KiB
iOS Testing Environment
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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/<username>/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:
Applications in the Simulator
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 aplicativo está instalado. Uma maneira rápida de encontrar o UID correto é executar o aplicativo no simulador e executar:
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 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
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 é 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?, The iPhone Wiki e Reddit Jailbreak fornecem informações atualizadas. Exemplos incluem:
- Checkra1n para dispositivos com chip A7-A11.
- Palera1n para dispositivos Checkm8 (A8-A11) no iOS 15.0-16.5.
- Unc0ver 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 {% 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.
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
{% hint style="success" %}
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.