hacktricks/src/mobile-pentesting/ios-pentesting/ios-pentesting-without-jailbreak.md

119 lines
8.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# iOS Pentesting without Jailbreak
{{#include ../../banners/hacktricks-training.md}}
## 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](https://apps.apple.com/au/app/apple-configurator/id1037126344?mt=12) 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](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é `Settings``Privacy & 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](https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device) 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:
| Ferramenta | Requisitos | Pontos Fortes | Limitações |
|------------|------------|---------------|------------|
| **AltStore 2 / SideStore** | Companheiro macOS/Windows/Linux que re-assina a IPA a cada 7 dias com um perfil de desenvolvedor gratuito | Recarga automática via Wi-Fi, funciona até iOS 17 | Necessita de computador na mesma rede, limite de 3 aplicativos imposto pela Apple |
| **TrollStore 1/2** | Dispositivo com iOS 14 15.4.1 vulnerável ao bug do CoreTrust | Assinatura *permanente* (sem limite de 7 dias); nenhum computador necessário uma vez instalado | Nã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](https://mobsf.github.io/Mobile-Security-Framework-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
- [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
- Documentação do desenvolvedor da Apple Habilitando o Modo de Desenvolvedor em um dispositivo: <https://developer.apple.com/documentation/xcode/enabling-developer-mode-on-a-device>
- Mobile Security Framework (MobSF): <https://mobsf.github.io/Mobile-Security-Framework-MobSF/>
{{#include ../../banners/hacktricks-training.md}}