hacktricks/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md

13 KiB

Operações Básicas de Teste no iOS

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Resumo da Identificação e Acesso de Dispositivos iOS

Identificando o UDID de um Dispositivo iOS

Para identificar um dispositivo iOS de forma única, é usado uma sequência de 40 dígitos conhecida como UDID. No macOS Catalina ou mais recente, isso pode ser encontrado no aplicativo Finder, pois o iTunes não está mais presente. O dispositivo, uma vez conectado via USB e selecionado no Finder, revela seu UDID, entre outras informações, quando os detalhes sob seu nome são clicados.

Para versões do macOS anteriores ao Catalina, o iTunes facilita a descoberta do UDID. Instruções detalhadas podem ser encontradas aqui.

Ferramentas de linha de comando oferecem métodos alternativos para recuperar o UDID:

  • Usando a ferramenta I/O Registry Explorer ioreg:
$ ioreg -p IOUSB -l | grep "USB Serial"
  • Usando ideviceinstaller no macOS (e Linux):
$ brew install ideviceinstaller
$ idevice_id -l
  • Utilizando system_profiler:
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
  • Utilizando instruments para listar dispositivos:
$ instruments -s devices

Acessando o Shell do Dispositivo

O acesso SSH é habilitado instalando o pacote OpenSSH pós-jailbreak, permitindo conexões via ssh root@<device_ip_address>. É crucial alterar as senhas padrão (alpine) para os usuários root e mobile para garantir a segurança do dispositivo.

O SSH via USB se torna necessário na ausência de Wi-Fi, utilizando iproxy para mapear as portas do dispositivo para conexões SSH. Essa configuração permite o acesso SSH através de USB executando:

$ iproxy 2222 22
$ ssh -p 2222 root@localhost

Aplicativos de shell no dispositivo, como o NewTerm 2, facilitam a interação direta com o dispositivo, especialmente útil para solução de problemas. As conchas SSH reversas também podem ser estabelecidas para acesso remoto a partir do computador host.

Redefinindo Senhas Esquecidas

Para redefinir uma senha esquecida de volta para o padrão (alpine), é necessário editar o arquivo /private/etc/master.passwd. Isso envolve substituir o hash existente pelo hash para alpine ao lado das entradas de usuário root e mobile.

Técnicas de Transferência de Dados

Transferindo Arquivos de Dados do Aplicativo

Arquivamento e Recuperação via SSH e SCP: É simples arquivar o diretório de Dados do aplicativo usando tar e depois transferi-lo usando scp. O comando abaixo arquiva o diretório de Dados em um arquivo .tgz, que é então transferido do dispositivo:

tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .

Ferramentas de Interface Gráfica do Usuário

Usando iFunbox e iExplorer: Essas ferramentas de GUI são úteis para gerenciar arquivos em dispositivos iOS. No entanto, a partir do iOS 8.4, a Apple restringiu o acesso dessas ferramentas ao sandbox do aplicativo, a menos que o dispositivo esteja jailbroken.

Usando Objection para Gerenciamento de Arquivos

Shell Interativo com Objection: Iniciar o objection fornece acesso ao diretório Bundle de um aplicativo. A partir daqui, você pode navegar até o diretório Documents do aplicativo e gerenciar arquivos, incluindo o download e upload deles de e para o dispositivo iOS.

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

Obtaining and Extracting Apps

Obtaining the IPA File

Link de Distribuição Over-The-Air (OTA): Apps distribuídos para teste via OTA podem ser baixados usando a ferramenta de download de ativos de serviços ITMS, que é instalada via npm e usada para salvar o arquivo IPA localmente.

npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa

Extraindo o Binário do Aplicativo

  1. De um IPA: Descompacte o IPA para acessar o binário do aplicativo descriptografado.
  2. De um Dispositivo com Jailbreak: Instale o aplicativo e extraia o binário descriptografado da memória.

Processo de Descriptografia

Visão Geral da Descriptografia Manual: Os binários de aplicativos iOS são criptografados pela Apple usando o FairPlay. Para fazer engenharia reversa, é necessário extrair o binário descriptografado da memória. O processo de descriptografia envolve verificar a flag PIE, ajustar as flags de memória, identificar a seção criptografada e, em seguida, extrair e substituir essa seção por sua forma descriptografada.

Verificando e Modificando a Flag PIE:

otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World

Identificação da Seção Criptografada e Despejo de Memória:

Determine o início e o fim dos endereços da seção criptografada usando otool e faça o despejo da memória do dispositivo com jailbreak usando gdb.

otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000

Sobrescrevendo a Seção Criptografada:

Substitua a seção criptografada no binário do aplicativo original pelo despejo descriptografado.

dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App

Finalizando a Descriptografia: Modifique os metadados do binário para indicar a ausência de criptografia usando ferramentas como MachOView, definindo o cryptid como 0.

Descriptografia (Automaticamente)

frida-ios-dump

A ferramenta frida-ios-dump é utilizada para descriptografar e extrair aplicativos automaticamente de dispositivos iOS. Inicialmente, é necessário configurar o dump.py para se conectar ao dispositivo iOS, o que pode ser feito através do localhost na porta 2222 via iproxy ou diretamente através do endereço IP e porta do dispositivo.

As aplicações instaladas no dispositivo podem ser listadas com o comando:

$ python dump.py -l

Para fazer dump de um aplicativo específico, como o Telegram, o seguinte comando é utilizado:

$ python3 dump.py -u "root" -p "<PASSWORD>" ph.telegra.Telegraph

Este comando inicia o despejo do aplicativo, resultando na criação de um arquivo Telegram.ipa no diretório atual. Este processo é adequado para dispositivos com jailbreak, pois aplicativos não assinados ou falsamente assinados podem ser reinstalados usando ferramentas como ios-deploy.

flexdecrypt

A ferramenta flexdecrypt, juntamente com seu wrapper flexdump, permite a extração de arquivos IPA de aplicativos instalados. Os comandos de instalação para o flexdecrypt no dispositivo incluem o download e a instalação do pacote .deb. O flexdump pode ser usado para listar e despejar aplicativos, conforme mostrado nos comandos abaixo:

apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app

bagbak

bagbak, outra ferramenta baseada em Frida, requer um dispositivo com jailbreak para descriptografia de aplicativos:

bagbak --raw Chrome

r2flutch

r2flutch, utilizando tanto o radare quanto o frida, serve para descriptografar e extrair aplicativos. Mais informações podem ser encontradas em sua página do GitHub.

Instalando Aplicativos

Sideloading refere-se à instalação de aplicativos fora da App Store oficial. Esse processo é gerenciado pelo daemon installd e requer que os aplicativos sejam assinados com um certificado emitido pela Apple. Dispositivos com jailbreak podem contornar isso através do AppSync, permitindo a instalação de pacotes IPA falsamente assinados.

Ferramentas de Sideloading

  • Cydia Impactor: Uma ferramenta para assinar e instalar arquivos IPA no iOS e arquivos APK no Android. Guias e solução de problemas podem ser encontrados em yalujailbreak.net.

  • libimobiledevice: Uma biblioteca para Linux e macOS para se comunicar com dispositivos iOS. Comandos de instalação e exemplos de uso para ideviceinstaller são fornecidos para instalar aplicativos via USB.

  • ipainstaller: Esta ferramenta de linha de comando permite a instalação direta de aplicativos em dispositivos iOS.

  • ios-deploy: Para usuários do macOS, o ios-deploy instala aplicativos iOS a partir da linha de comando. Descompactar o IPA e usar a flag -m para o lançamento direto do aplicativo fazem parte do processo.

  • Xcode: Utilize o Xcode para instalar aplicativos navegando até Window/Devices and Simulators e adicionando o aplicativo em Installed Apps.

Permitir a Instalação de Aplicativos em Dispositivos Não-iPad

Para instalar aplicativos específicos para iPad em dispositivos iPhone ou iPod touch, o valor UIDeviceFamily no arquivo Info.plist precisa ser alterado para 1. Essa modificação, no entanto, requer a reassinatura do arquivo IPA devido às verificações de validação de assinatura.

Nota: Este método pode falhar se o aplicativo exigir capacidades exclusivas de modelos de iPad mais recentes ao usar um iPhone ou iPod touch mais antigo.

Referências

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: