iOS Pentesting without Jailbreak

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Ideia principal

Aplicativos assinados com a entitlement get_task_allow permitem que aplicativos de terceiros executem uma função chamada task_for_pid() com o ID do processo do aplicativo inicial como argumento para obter a porta da tarefa sobre ele (ser capaz de controlá-lo e acessar sua memória).

No entanto, não é tão fácil quanto apenas puxar o IPA, re-assiná-lo com a entitlement e reinstalá-lo no seu dispositivo. Isso se deve à proteção FairPlay. Quando a assinatura do aplicativo muda, a chave DRM (Digital Rights Management) é invalidada e o aplicativo não funcionará.

Com um dispositivo antigo com jailbreak, é possível instalar o IPA, descriptografá-lo usando sua ferramenta favorita (como Iridium ou frida-ios-dump) e retirá-lo do dispositivo. Embora, se possível, é recomendável pedir ao cliente o IPA descriptografado.

Obter IPA descriptografado

Obtenha da Apple

  1. Instale o aplicativo para pentest no iPhone
  2. Instale e inicie o Apple Configurator no seu macos
  3. Abra o Terminal no seu Mac e cd para /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps. O IPA aparecerá nesta pasta mais tarde.
  4. Você deve ver seu dispositivo iOS. Clique duas vezes nele e, em seguida, clique em Adicionar + → Apps na barra de menu superior.
  5. Após clicar em Adicionar, o Configurator fará o download do IPA da Apple e tentará enviá-lo para o seu dispositivo. Se você seguiu minha recomendação anterior e já instalou o IPA, um aviso pedindo para reinstalar o aplicativo aparecerá.
  6. O IPA deve ser baixado dentro de /Users/[username]/Library/Group\\ Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps, de onde você pode pegá-lo.

Verifique https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed para mais informações detalhadas sobre esse processo.

Descriptografando o aplicativo

Para descriptografar o IPA, vamos instalá-lo. No entanto, se você tiver um iPhone antigo com jailbreak, potencialmente sua versão não será suportada pelo aplicativo, pois geralmente os aplicativos só suportam as versões mais recentes.

Portanto, para instalá-lo, basta descompactar o IPA:

bash
unzip redacted.ipa -d unzipped

Verifique o Info.plist para a versão mínima suportada e, se o seu dispositivo for mais antigo do que isso, altere o valor para que seja suportado.

Compacte novamente o IPA:

bash
cd unzipped
zip -r ../no-min-version.ipa *

Então, instale o IPA, por exemplo, com:

bash
ideviceinstaller -i no-min-version.ipa -w

Note que você pode precisar do AppSync Unified tweak do Cydia para evitar erros de invalid signature.

Uma vez instalado, você pode usar o Iridium tweak do Cydia para obter o IPA descriptografado.

Patch de permissões & re-assinatura

Para re-assinar o aplicativo com a permissão get-task-allow, existem várias ferramentas disponíveis, como app-signer, codesign e iResign. O app-signer tem uma interface muito amigável que permite re-assinar um arquivo IPA de forma muito fácil, indicando o IPA a ser re-assinado, para colocá-lo como get-task-allow e o certificado e perfil de provisionamento a serem usados.

Quanto ao certificado e perfis de assinatura, a Apple oferece perfis de assinatura de desenvolvedor gratuitos para todas as contas através do Xcode. Basta criar um aplicativo e configurar um. Em seguida, configure o iPhone para confiar nos aplicativos do desenvolvedor navegando até SettingsPrivacy & Security, e clique em Developer Mode.

Com o IPA re-assinado, é hora de instalá-lo no dispositivo para pentestá-lo:

bash
ideviceinstaller -i resigned.ipa -w

Ativar o Modo Desenvolvedor (iOS 16+)

Desde o iOS 16, a Apple introduziu o Modo Desenvolvedor: qualquer binário que contenha get_task_allow ou que seja assinado com um certificado de desenvolvimento se recusará a iniciar até que o Modo Desenvolvedor esteja ativado no dispositivo. Você também não poderá anexar Frida/LLDB a menos que essa opção esteja ativada.

  1. Instale ou envie qualquer IPA assinada por desenvolvedor para o telefone.
  2. Navegue até Ajustes → Privacidade e Segurança → Modo Desenvolvedor e ative-o.
  3. O dispositivo será reiniciado; após inserir o código de acesso, você será solicitado a Ativar o Modo Desenvolvedor.

O Modo Desenvolvedor permanece ativo até que você o desative ou limpe o telefone, então este passo precisa ser realizado apenas uma vez por dispositivo. Documentação da Apple explica as implicações de segurança.

Opções modernas de sideloading

Agora existem várias maneiras maduras de sideload e manter IPAs re-assinadas atualizadas sem jailbreak:

FerramentaRequisitosPontos FortesLimitações
AltStore 2 / SideStoreCompanheiro macOS/Windows/Linux que re-assina a IPA a cada 7 dias com um perfil de desenvolvedor gratuitoRecarga automática via Wi-Fi, funciona até iOS 17Necessita de computador na mesma rede, limite de 3 aplicativos imposto pela Apple
TrollStore 1/2Dispositivo com iOS 14 – 15.4.1 vulnerável ao bug do CoreTrustAssinatura permanente (sem limite de 7 dias); nenhum computador necessário uma vez instaladoNão suportado no iOS 15.5+ (bug corrigido)

Para pentests rotineiros em versões atuais do iOS, Alt/Side-Store geralmente são a escolha mais prática.

Hooking / instrumentação dinâmica

Você pode hook seu aplicativo exatamente como em um dispositivo com jailbreak uma vez que ele esteja assinado com get_task_allow e o Modo Desenvolvedor esteja ativado:

bash
# Spawn & attach with objection
objection -g "com.example.target" explore

# Or plain Frida
frida -U -f com.example.target -l my_script.js --no-pause

Recentes lançamentos do Frida (>=16) lidam automaticamente com a autenticação de ponteiros e outras mitig ações do iOS 17, então a maioria dos scripts existentes funciona imediatamente.

Análise dinâmica automatizada com MobSF (sem jailbreak)

MobSF pode instrumentar um IPA assinado por desenvolvedor em um dispositivo real usando a mesma técnica (get_task_allow) e fornece uma interface web com navegador de sistema de arquivos, captura de tráfego e console do Frida【】. A maneira mais rápida é executar o MobSF no Docker e, em seguida, conectar seu iPhone via USB:

bash
docker pull opensecurity/mobile-security-framework-mobsf:latest
docker run -p 8000:8000 --privileged \
-v /var/run/usbmuxd:/var/run/usbmuxd \
opensecurity/mobile-security-framework-mobsf:latest
# Browse to http://127.0.0.1:8000 and upload your resigned IPA

MobSF irá implantar automaticamente o binário, habilitar um servidor Frida dentro do sandbox do aplicativo e gerar um relatório interativo.

iOS 17 & Avisos sobre o Modo de Bloqueio

  • Modo de Bloqueio (Configurações → Privacidade e Segurança) bloqueia o vinculador dinâmico de carregar bibliotecas dinâmicas não assinadas ou assinadas externamente. Ao testar dispositivos que podem ter este modo habilitado, certifique-se de que está desativado ou suas sessões Frida/objection serão encerradas imediatamente.
  • A Autenticação de Ponteiros (PAC) é aplicada em todo o sistema em dispositivos A12+. Frida ≥16 lida com a remoção de PAC de forma transparente — apenas mantenha tanto frida-server quanto a ferramenta Python/CLI atualizados quando uma nova versão principal do iOS for lançada.

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks