Testar e depurar recursos

Categoria do OWASP: MASVS-CODE - Qualidade do código

Visão geral

O lançamento de builds de produção que incluem recursos de teste ou depuração pode afetar negativamente a postura de segurança do aplicativo. Essas funcionalidades são usadas para ajudar os desenvolvedores a descobrir e identificar bugs nos casos de uso pretendidos do aplicativo antes ou depois do lançamento de uma nova versão. Elas não podem ser acessadas publicamente.

Exemplos de recursos de teste/depuração:

  • Menus ocultos
  • Opções para ativar registros de depuração
  • Opções para mudar o fluxo do aplicativo
  • Opções para burlar processos de pagamento ou assinatura
  • Opções para contornar a autenticação
  • Testes para atividades específicas do aplicativo

Tudo o que foi mencionado acima pode ser aproveitado por um usuário mal-intencionado para mudar o fluxo pretendido do aplicativo ou extrair informações do sistema para ajustar ataques futuros.

O risco introduzido ao deixar recursos de teste ou depuração expostos pode variar de acordo com a ação associada a eles.

Outra área de risco para o aplicativo é o atributo android:debuggable definido no <application> do elemento AndroidManifest.xml. Conforme relatado no artigo android:debuggable, a implantação de um aplicativo de produção com o conjunto de valores mencionado acima permite que usuários mal-intencionados acessem recursos administrativos que, de outro modo, seriam inacessíveis.

Impacto

Um usuário mal-intencionado interagindo com um recurso de teste ou depuração em um build de produção pode levar a resultados inesperados. O impacto de qualquer ação está diretamente ligado às permissões atribuídas ao recurso. Quanto maiores as permissões, maior o impacto que uma exploração ativa pode ter. Esses recursos em um aplicativo podem ser usados para contornar várias proteções, ignorar paywalls, obter informações relacionadas ao sistema ou ao usuário ou acionar atividades de teste.

Mitigações

Evitar o uso de componentes de depuração

As funcionalidades de teste ou depuração nunca devem ser implementadas em componentes de aplicativos de produção, por exemplo, atividades, broadcast receivers, serviços ou provedores de conteúdo. Se exportadas, essas funcionalidades podem ser executadas por qualquer outro processo no dispositivo. Configurar o componente de depuração como não exportado (android:exported="false") não constitui uma proteção válida para os recursos, uma vez que qualquer dispositivo com acesso root ainda poderá executá-lo pela ferramenta Android Debug Bridge (ADB), se a opção de depuração estiver ativada.

Limitar recursos de depuração ou teste a builds de fase de testes

A execução de qualquer função de teste ou depuração em aplicativos deve ser limitada apenas a um conjunto restrito de builds de fase de teste para permitir que apenas os desenvolvedores depurem ou testem os recursos do app em um ambiente controlado. Isso pode ser conseguido com a criação de um build de teste ou depuração dedicado do aplicativo e testes de instrumentação avançados para ele, a fim de garantir que qualquer recurso de teste ou depuração seja executado em uma versão isolada.

Configurar testes automatizados da interface

Ao executar testes em um aplicativo, opte por testes automatizados da interface, já que eles são repetíveis, podem ser executados em um ambiente separado e não são propensos a erros humanos.

Recursos