MASTG-TECH-0059: Acessando Diretórios de Dados do Aplicativo

Após instalar o aplicativo, há mais informações a serem exploradas. Vamos fazer uma breve visão geral da estrutura de pastas do aplicativo em aplicativos iOS para entender quais dados são armazenados onde. A ilustração a seguir representa a estrutura de pastas do aplicativo:

No iOS, os aplicativos do sistema podem ser encontrados no diretório /Applications, enquanto os aplicativos instalados pelo usuário ficam em /private/var/containers/. No entanto, encontrar a pasta correta apenas navegando pelo sistema de arquivos não é uma tarefa trivial, pois cada aplicativo recebe um UUID (Identificador Universalmente Único) aleatório de 128 bits para os nomes de seus diretórios.

Para obter facilmente as informações do diretório de instalação de aplicativos instalados pelo usuário, você pode seguir os seguintes métodos:

Conecte-se ao terminal no dispositivo e use instalador de IPA para instalar iGoat-Swift da seguinte forma:

iPhone:~ root# ipainstaller -l
...
OWASP.iGoat-Swift

iPhone:~ root# ipainstaller -i OWASP.iGoat-Swift
...
Bundle: /private/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67
Application: /private/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app
Data: /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693

Usar o comando env do objection também mostrará todas as informações de diretório do aplicativo. A conexão com o aplicativo usando o objection é descrita em Objection para iOS. Neste caso, estamos nos conectando ao iGoat-Swift:

OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # env

Name               Path
-----------------  -------------------------------------------------------------------------------------------
BundlePath         /var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app
CachesDirectory    /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library/Caches
DocumentDirectory  /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Documents
LibraryDirectory   /var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/Library

Como você pode ver, os aplicativos têm dois locais principais:

  • O diretório Bundle (/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/).
  • O diretório Data (/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693/).

Essas pastas contêm informações que devem ser examinadas de perto durante avaliações de segurança de aplicativos (por exemplo, ao analisar os dados armazenados em busca de informações sensíveis).

Diretório Bundle:

  • AppName.app
    • Este é o Application Bundle, como visto anteriormente no IPA. Ele contém dados essenciais do aplicativo, conteúdo estático e o binário compilado do aplicativo.
    • Este diretório é visível para os usuários, mas os usuários não podem gravar nele.
    • O conteúdo deste diretório não é feito backup.
    • O conteúdo desta pasta é usado para validar a assinatura de código.

Diretório Data:

  • Documents/
    • Contém todos os dados gerados pelo usuário. O usuário final do aplicativo inicia a criação desses dados.
    • Visível para os usuários e os usuários podem gravar nele.
    • O conteúdo deste diretório é feito backup.
    • O aplicativo pode desabilitar caminhos definindo NSURLIsExcludedFromBackupKey.
  • Library/
    • Contém todos os arquivos que não são específicos do usuário, como caches, preferências, cookies e arquivos de configuração de lista de propriedades (plist).
    • Aplicativos iOS geralmente usam os subdiretórios Application Support e Caches, mas o aplicativo pode criar subdiretórios personalizados.
  • Library/Caches/
    • Contém arquivos em cache semi-persistentes.
    • Invisível para os usuários e os usuários não podem gravar nele.
    • O conteúdo deste diretório não é feito backup.
    • O sistema operacional pode excluir os arquivos deste diretório automaticamente quando o aplicativo não está em execução e o espaço de armazenamento está ficando baixo.
  • Library/Application Support/
    • Contém arquivos persistentes necessários para a execução do aplicativo.
    • Invisível para os usuários e os usuários não podem gravar nele.
    • O conteúdo deste diretório é feito backup.
    • O aplicativo pode desabilitar caminhos definindo NSURLIsExcludedFromBackupKey.
  • Library/Preferences/
    • Usado para armazenar propriedades que podem persistir mesmo após a reinicialização do aplicativo.
    • As informações são salvas, não criptografadas, dentro da sandbox do aplicativo em um arquivo plist chamado [BUNDLE_ID].plist.
    • Todos os pares chave/valor armazenados usando NSUserDefaults podem ser encontrados neste arquivo.
  • tmp/
    • Use este diretório para gravar arquivos temporários que não precisam persistir entre inicializações do aplicativo.
    • Contém arquivos em cache não persistentes.
    • Invisível para os usuários.
    • O conteúdo deste diretório não é feito backup.
    • O sistema operacional pode excluir os arquivos deste diretório automaticamente quando o aplicativo não está em execução e o espaço de armazenamento está ficando baixo.

Vamos dar uma olhada mais de perto no diretório Application Bundle (.app) do iGoat-Swift dentro do diretório Bundle (/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app):

OWASP.iGoat-Swift on (iPhone: 11.1.2) [usb] # ls
NSFileType      Perms  NSFileProtection    ...  Name
------------  -------  ------------------  ...  --------------------------------------
Regular           420  None                ...  rutger.html
Regular           420  None                ...  mansi.html
Regular           420  None                ...  splash.html
Regular           420  None                ...  about.html

Regular           420  None                ...  LICENSE.txt
Regular           420  None                ...  Sentinel.txt
Regular           420  None                ...  README.txt

Directory         493  None                ...  URLSchemeAttackExerciseVC.nib
Directory         493  None                ...  CutAndPasteExerciseVC.nib
Directory         493  None                ...  RandomKeyGenerationExerciseVC.nib
Directory         493  None                ...  KeychainExerciseVC.nib
Directory         493  None                ...  CoreData.momd
Regular           420  None                ...  archived-expanded-entitlements.xcent
Directory         493  None                ...  SVProgressHUD.bundle

Directory         493  None                ...  Base.lproj
Regular           420  None                ...  Assets.car
Regular           420  None                ...  PkgInfo
Directory         493  None                ...  _CodeSignature
Regular           420  None                ...  AppIcon60x60@3x.png

Directory         493  None                ...  Frameworks

Regular           420  None                ...  embedded.mobileprovision

Regular           420  None                ...  Credentials.plist
Regular           420  None                ...  Assets.plist
Regular           420  None                ...  Info.plist

Regular           493  None                ...  iGoat-Swift

Você também pode visualizar o diretório Bundle a partir do Grapefruit clicando em Finder -> Bundle:

Incluindo o arquivo Info.plist:

Assim como o diretório Data em Finder -> Home:

Consulte o capítulo Teste de Armazenamento de Dados) para mais informações e melhores práticas sobre armazenamento seguro de dados sensíveis.