10 KiB
Apple Developer Program
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 Desenvolvedores 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 da Apple criado --> Gerenciar certificados --> + (Desenvolvimento da Apple) --> Concluído
__Em seguida, para executar seu aplicativo no 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á. Então vá para Configurações --> Geral --> Perfis e Gerenciamento de Dispositivos --> Selecione o perfil não confiável e clique em "Confiar".
Observe que aplicativos assinados pelo mesmo certificado de assinatura podem compartilhar recursos de maneira segura, como itens de chaveiro.
Os perfis de provisionamento são armazenados dentro do telefone em /Library/MobileDevice/ProvisioningProfiles
Simulador
{% hint style="info" %} Observe que um simulador não é o mesmo que um emulador. O simulador apenas simula o comportamento do dispositivo e das funções, mas não os usa de fato. {% endhint %}
O simulador do SDK iOS oferece uma simulação de nível superior de um dispositivo iOS. Mais importante, os binários do emulador são compilados em código x86 em vez de código ARM. Os aplicativos compilados para um dispositivo real não são executados, 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 com jailbreak.
Todas as ferramentas necessárias para criar e dar suporte a um aplicativo iOS são apenas oficialmente suportadas no Mac OS.
A ferramenta de facto da Apple para criar/debbugar/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 aplicativo.
É altamente recomendável baixar o Xcode da loja de aplicativos oficial. Outras versões podem estar carregando malware.
Os arquivos do simulador podem ser encontrados em /Users/<username>/Library/Developer/CoreSimulator/Devices
Para abrir o simulador, execute o Xcode e pressione na guia Xcode --> Abrir ferramentas de desenvolvedor --> Simulador
__Na imagem a seguir, clicando em "iPod touch [...]" você pode selecionar outro dispositivo para testar:
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 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ê sabe 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 circunvenção ativa dessas restrições e outros controles de segurança colocados pelo sistema operacional. Portanto, uma vez que o dispositivo é jailbroken, a verificação de integridade que é responsável por verificar os aplicativos instalados é corrigida para que seja 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 o Root no Android
O jailbreaking do iOS é frequentemente comparado ao root do Android, mas o processo é realmente bastante diferente. Para explicar a diferença, primeiro revisaremos os conceitos de "rooting" e "flashing" no Android.
- Rooting: Isso geralmente envolve a instalação do binário
su
no sistema ou a substituição de todo o sistema por uma ROM personalizada com root. Não são necessários exploits para obter acesso root, desde que o bootloader seja acessível. - Flashing de ROMs personalizadas: Isso permite que você substitua o sistema operacional que está sendo executado no dispositivo depois de desbloquear o bootloader. O bootloader pode exigir um exploit para desbloqueá-lo.
Nos dispositivos iOS, é impossível instalar uma ROM personalizada porque o bootloader do iOS só permite que imagens assinadas pela Apple sejam iniciadas e instaladas. É por isso que mesmo as imagens iOS oficiais não podem ser instaladas se não forem assinadas pela Apple, e isso torna as versões anteriores 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 qualquer código não assinado arbitrário 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 a ferramentas tudo-em-um que automatizam o processo de desativação.
Considerações sobre o Jailbreaking
Jailbreaking de um dispositivo iOS está se tornando cada vez mais complicado porque a Apple continua a endurecer o sistema e corrigir as vulnerabilidades exploradas. O jailbreaking se tornou um procedimento muito sensível ao tempo porque a Apple para de assinar essas versões vulneráveis relativamente logo após o lançamento de uma correção (a menos que o jailbreak se beneficie de vulnerabilidades baseadas em hardware, como o exploit limera1n afetando o BootROM do iPhone 4 e iPad 1). Isso significa que você não pode rebaixar para uma versão específica do iOS depois que a Apple para de assinar o firmware.
Se você tem um dispositivo jailbroken que usa para testes de segurança, mantenha-o como está, a menos que esteja 100% certo de que pode re-jailbreak após a atualização 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 somente 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 você baixou e carregá-lo no dispositivo sempre que quiser. Durante as atualizações menores 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 rebaixar o dispositivo iOS. Você pode verificar a janela de assinatura atual e baixar o firmware OTA do site de downloads IPSW.
{% hint style="danger" %} Atualizar o sistema operacional remove o efeito do jailbreaking. {% endhint %}
Tipos de Jailbreak
- Jailbreaks Tethered não persistem através de reinicializações, então reaplicar jailbreaks requer que o dispositivo esteja conectado (tethered) a um computador durante cada reinicialização. O dispositivo pode não 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 inicializar no modo não jailbroken por conta própria.
- Jailbreaks Semi-untethered permitem que o dispositivo inicialize por conta própria, mas os patches do kernel (ou modificações do usuário-land) para desativar a assinatura de código não são aplicados automaticamente. O usuário deve re-jailbreak o dispositivo iniciando um aplicativo ou visitando um site (não requer uma conexão com um computador, daí o termo untethered).
- Jailbreaks Untethered são a escolha mais popular para usuários finais porque precisam ser aplicados apenas uma vez, após o qual o dispositivo será permanentemente jailbroken.
Ferramentas de Jailbreaking
Diferentes versões do iOS requerem técnicas de jailbreaking diferentes. Determine se um jailbreak público está disponível para sua versão do iOS. Cuidado com ferramentas falsas e spyware, que muitas vezes estão escondidos atrás de nomes de domínio semelhantes ao nome do grupo/autor do jailbreaking.
A cena de jailbreak do iOS evolui tão rapidamente que fornecer instruções atualizadas é difícil. No entanto, podemos apontar para algumas fontes que são atualmente confiáveis.
Observe que qualquer modificação que você fizer em seu dispositivo é por sua conta e risco. Embora o jailbreaking seja geralmente