Skip to content

MASTG-TEST-0009: Testando Backups para Dados Sensíveis

Deprecated Test

This test is deprecated and should not be used anymore. Reason:

Please check the following MASTG v2 tests that cover this v1 test:

Visão Geral

Análise Estática

Local

Verifique o arquivo AndroidManifest.xml para a seguinte flag:

android:allowBackup="true"

Se o valor da flag for true, determine se o aplicativo salva qualquer tipo de dado sensível (verifique o caso de teste "Testando para Dados Sensíveis no Armazenamento Local").

Nuvem

Independentemente de você usar key/value backup ou auto backup, você deve determinar o seguinte:

  • quais arquivos são enviados para a nuvem (ex.: SharedPreferences)
  • se os arquivos contêm informações sensíveis
  • se as informações sensíveis são criptografadas antes de serem enviadas para a nuvem.

Se você não quiser compartilhar arquivos com o Google Cloud, pode excluí-los do Auto Backup. Informações sensíveis armazenadas em repouso no dispositivo devem ser criptografadas antes de serem enviadas para a nuvem.

  • Auto Backup: Você configura o Auto Backup através do atributo booleano android:allowBackup dentro do arquivo de manifesto do aplicativo. O Auto Backup está habilitado por padrão para aplicativos que têm como destino o Android 6.0 (API level 23). Você pode usar o atributo android:fullBackupOnly para ativar o auto backup ao implementar um agente de backup, mas este atributo está disponível apenas para versões do Android 6.0 e superiores. Outras versões do Android usam key/value backup.
android:fullBackupOnly

O auto backup inclui quase todos os arquivos do aplicativo e armazena até 25 MB deles por aplicativo na conta do Google Drive do usuário. Apenas o backup mais recente é armazenado; o backup anterior é excluído.

  • Key/Value Backup: Para habilitar o key/value backup, você deve definir o agente de backup no arquivo de manifesto. Procure em AndroidManifest.xml pelo seguinte atributo:
android:backupAgent

Para implementar o key/value backup, estenda uma das seguintes classes:

Para verificar implementações de key/value backup, procure por essas classes no código-fonte.

Análise Dinâmica

Após executar todas as funções disponíveis do aplicativo, tente fazer backup via adb. Se o backup for bem-sucedido, inspecione o arquivo de backup em busca de dados sensíveis. Abra um terminal e execute o seguinte comando:

adb backup -apk -nosystem <package-name>

O ADB deve responder agora com "Agora desbloqueie seu dispositivo e confirme a operação de backup" e você deverá ser solicitado no telefone Android para uma senha. Esta é uma etapa opcional e você não precisa fornecer uma. Se o telefone não exibir esta mensagem, tente o seguinte comando incluindo as aspas:

adb backup "-apk -nosystem <package-name>"

O problema ocorre quando seu dispositivo tem uma versão do adb anterior à 1.0.31. Se for esse o caso, você deve usar uma versão do adb 1.0.31 também na sua máquina host. Versões do adb após 1.0.32 quebraram a compatibilidade reversa.

Aprove o backup do seu dispositivo selecionando a opção Back up my data. Após o processo de backup ser concluído, o arquivo .ab estará no seu diretório de trabalho. Execute o seguinte comando para converter o arquivo .ab para tar.

tail -c +25 backup.ab |openssl zlib -d > backup.tar

Caso você receba o erro openssl:Erro: 'zlib' é um comando inválido. você pode tentar usar Python.

tail -c +25 backup.ab | python -c "import zlib,sys;sys.stdout.buffer.write(zlib.decompress(sys.stdin.buffer.read()))" > backup.tar

O Android Backup Extractor é outra ferramenta alternativa de backup. Para fazer a ferramenta funcionar, você deve baixar os Oracle JCE Unlimited Strength Jurisdiction Policy Files para JRE7 ou JRE8 e colocá-los na pasta JRE lib/security. Execute o seguinte comando para converter o arquivo tar:

java -jar abe.jar unpack backup.ab

Se mostrar algumas informações de Cipher e uso, significa que não foi descompactado com sucesso. Neste caso você pode tentar com mais argumentos:

abe [-debug] [-useenv=yourenv] unpack <backup.ab> <backup.tar> [password]

[password] é a senha que seu dispositivo Android solicitou anteriormente. Por exemplo aqui é: 123

java -jar abe.jar unpack backup.ab backup.tar 123

Extraia o arquivo tar para o seu diretório de trabalho.

tar xvf backup.tar