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:allowBackupdentro 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 atributoandroid:fullBackupOnlypara 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.xmlpelo 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