Recomendações de segurança para backups

Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)

Visão geral

O objetivo dos backups de apps é preservar os dados dos usuários para que eles possam ser restaurados mais tarde em um novo dispositivo ou em caso de perda de dados. As recomendações de segurança atuais relacionadas a backups de apps têm nuances, variando entre as versões do Android e os fabricantes do dispositivo. O tema comum é que essas recomendações visam garantir que nenhum dado sensível seja vazado.

O sistema padrão de backup do Android oferece a solução mais segura, robusta e fácil para que os apps façam backup de dados na nuvem ou transfiram dados para um novo dispositivo usando o Backup automático (que é ativado por padrão, não requer trabalho para implementação e também pode ser estendido) e o backup de chave-valor. Recomendamos usar essa solução porque ela armazena os dados de backup resultantes em diretórios que não podem ser acessados por outros apps de terceiros, além de facilitar a criptografia em repouso, a criptografia em trânsito e as configurações que permitem a exclusão de dados sensíveis dos backups.

Se um app implementar uma solução de backup que não depende do sistema padrão de backup do Android, isso pode aumentar a probabilidade de erros que levam a vazamentos de dados sensíveis. Exemplos de soluções de backup não padrão que expõem os dados do usuário a vazamentos incluem apps que oferecem um recurso de "exportação" ou "backup" que cria uma cópia dos dados do app em diretórios legíveis por outros apps e que, portanto, é propenso a vazamentos (diretamente ou por outras vulnerabilidades).

Impacto

Seguir as recomendações de segurança ao configurar backups de apps evita o vazamento potencial de dados sensíveis que os backups podem incluir. Dependendo dos dados reais e das intenções do invasor, o vazamento de dados sensíveis pode levar à divulgação de informações, falsificação de identidade do usuário e perda financeira.

Mitigações

Usar o sistema padrão de backup do Android

O sistema de backup padrão do Android sempre criptografa dados de backup em trânsito e em repouso. Essa criptografia é aplicada independentemente da versão do Android em uso e de o dispositivo ter ou não uma tela de bloqueio. A partir do Android 9, se o dispositivo tiver uma tela de bloqueio definida, os dados de backup não só serão criptografados, mas também com uma chave desconhecida do Google. O segredo da tela de bloqueio protege a chave de criptografia, permitindo a criptografia de ponta a ponta.

Em geral, siga as diretrizes de armazenamento de dados e de segurança.

Se o backup incluir dados sensíveis, recomendamos excluí-los ou, se não for possível, exigir a criptografia de ponta a ponta, conforme descrito na próxima seção.

Como excluir dados do backup

É possível especificar quais dados excluir de um backup usando um arquivo de regras, chamado convencionalmente de backup_rules.xml e colocado na pasta do app res/xml. Há algumas diferenças na forma como as regras de backup são configuradas, dependendo da versão do Android usada:

Em seguida, configure o arquivo backup_rules.xml de acordo com os requisitos de persistência e segurança de dados do aplicativo, seguindo o formato de configuração atualizado.

O formato necessário para a configuração do arquivo backup_rules.xml permite que os desenvolvedores definam regras de backup personalizadas para a nuvem e as transferências de dispositivo para dispositivo (D2D). Se o atributo <device-transfer> não estiver definido, todos os dados do aplicativo serão transferidos durante uma migração D2D. É importante destacar que, mesmo que o aplicativo de destino seja direcionado ao Android 12 ou mais recente, um arquivo separado com um conjunto adicional de regras de backup sempre precisa ser especificado para dispositivos com o Android 11 (nível 30 da API) ou versões anteriores.

  • Para o Android 11 e versões anteriores, adicione um atributo android:fullBackupContent ao elemento <application> no AndroidManifest.xml:
  • xml xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>

Em seguida, configure o arquivo backup_rules.xml de acordo com a persistência de dados e os requisitos de segurança do aplicativo usando a sintaxe informada no artigo fazer backup dos dados do usuário.

Exigência de criptografia de ponta a ponta

Se não for possível excluir dados sensíveis do backup, recomendamos exigir a criptografia de ponta a ponta, o que significa permitir backups apenas no Android 9 ou versões mais recentes e somente quando a tela de bloqueio estiver definida. Para fazer isso, use a flag requireFlags="clientSideEncryption", que precisa ser renomeada para disableIfNoEncryptionCapabilities e definida como true a partir do Android 12.

Se não for possível usar o sistema de backup padrão do Android

Se não for possível usar o sistema padrão de Backup do Android, o armazenamento seguro dos dados de backup e a especificação de quais dados excluir do backup será mais complexo. Isso precisa ser especificado no nível do código e, consequentemente, está sujeito a erros, o que pode causar vazamentos de dados. Nesse cenário, também é recomendável testar regularmente a implementação para garantir que não houve alterações no comportamento de backup esperado.

Recursos