Checklist - Pentest Android
Este é um checklist para pentest em android. Eu basicamente traduzi e adicionei algumas coisas de um repositório do github original. Planejo atualizar esse checklist com frequência.
C01 | SSL Pinning
Descrição: Uma vulnerabilidade de SSL Pinning em um aplicativo Android ocorre quando o app não valida corretamente o certificado SSL ou a chave pública do servidor durante o handshake SSL/TLS, permitindo que um atacante do tipo man-in-the-middle intercepte e descriptografe a comunicação do aplicativo.
- Ausência de SSL Pinning
- Verificar se é possível realizar bypass utilizando Frida/Objection
- Verificar se é possível realizar manipulação de código
CO2 | Detecção de Root
Descrição: Uma vulnerabilidade de detecção de root em um aplicativo Android ocorre quando o app não detecta corretamente ou não restringe a execução em dispositivos com root, permitindo que usuários obtenham acesso não autorizado a dados ou funcionalidades do aplicativo.
- Ausência de detecção de root
- Verificar se é possível realizar bypass utilizando Frida/Objection
- Verificar se é possível realizar manipulação de código
CO3 | Detecção de Emulador
Descrição: Uma vulnerabilidade de detecção de emulador em um aplicativo Android ocorre quando o app não detecta corretamente ou não bloqueia a execução em emuladores, permitindo contornar controles de segurança ou acessar funcionalidades não autorizadas.
- Ausência de detecção de emulador
- Verificar se é possível realizar bypass utilizando Frida
CO4 | Dados Sensíveis em Logs do ADB Logcat
Descrição: Uma vulnerabilidade de exposição de dados sensíveis no ADB Logcat ocorre quando o aplicativo registra informações sensíveis, como senhas ou dados pessoais, nos logs do sistema via Android Debug Bridge (ADB), expondo esses dados a atacantes ou usuários não autorizados.
- Verificar logs do Logcat em busca de informações ou dados sensíveis
- Verificar se é possível realizar bypass utilizando Frida/Objection
- Verificar a existência de requisições ou dados não criptografados nos logs do Logcat
CO5 | Dados Sensíveis Armazenados no Armazenamento Local
Descrição: Uma vulnerabilidade de armazenamento local ocorre quando o aplicativo salva informações sensíveis, como senhas ou dados pessoais, de forma não criptografada ou insegura no dispositivo.
- Verificar se informações ou dados sensíveis estão armazenados em Shared Preferences
- Verificar se há informações ou dados armazenados em arquivos temporários
- Verificar se informações ou dados sensíveis estão armazenados em bancos de dados locais utilizando criptografia forte
- Verificar se há informações ou dados armazenados em outros arquivos
CO6 | Dados Sensíveis na Memória da Aplicação
Descrição: Uma vulnerabilidade de dados sensíveis na memória da aplicação ocorre quando o app mantém informações sensíveis, como senhas ou dados pessoais, na memória de forma não criptografada ou insegura, possibilitando sua extração por atacantes com acesso à memória do dispositivo.
- Verificar se há informações ou dados sensíveis armazenados temporariamente na memória da aplicação (utilizar fridump.py)
CO7 | Certificado de Assinatura Fraco
Descrição: Uma vulnerabilidade de certificado de assinatura fraco ocorre quando o aplicativo é assinado com um certificado fraco ou comprometido, possibilitando modificação do app ou acesso não autorizado às suas funcionalidades.
- Verificar se o aplicativo está assinado com algoritmos fracos, como
SHA1withRSA - Verificar a presença da vulnerabilidade Janus
- Verificar se o aplicativo está assinado com certificado de debug
CO8 | Activities Android Vulneráveis
Descrição: Activities são componentes do Android que representam telas ou partes da interface do aplicativo. Uma activity vulnerável pode conter práticas inseguras ou configurações incorretas que permitam exploração.
- Verificar activities protegidas acessíveis via ADB, permitindo bypass de autenticação
- Verificar se activities exportadas estão corretamente configuradas com
exported=false - Verificar se alguma activity pode ser iniciada por outras aplicações
- Verificar se activities podem ser exploradas ou sequestradas via ADB ou outras ferramentas
- Verificar se alguma activity causa Denial of Service ou crash da aplicação
CO9 | WebView
Descrição: Android WebView é um componente que permite a exibição de conteúdo web dentro do aplicativo. Implementações inseguras podem introduzir vulnerabilidades.
- Verificar vulnerabilidade de Cross-Site Scripting (XSS) em WebViews
- Verificar vulnerabilidade de Local File Inclusion (LFI) em WebViews
- Verificar se JavaScript está habilitado de forma insegura na WebView
CO10 | Intent Filters
Descrição: Intent redirection ocorre quando intents implícitas ou explícitas são utilizadas sem validação adequada, permitindo redirecionamento indevido entre componentes, de forma similar ao Open Redirect em aplicações web.
- Verificar vulnerabilidades de intent spoofing ou intent sniffing
CO11 | Broadcast Receivers
Descrição: Broadcast Receivers permitem que o aplicativo receba eventos do sistema ou de outros apps. Configurações incorretas podem permitir exploração.
- Verificar no manifest receivers com
exported=truesem proteção por permissões
CO12 | Content Provider
Descrição: Content Providers permitem o compartilhamento de dados entre aplicações por meio de URIs iniciadas com content://. Controles de segurança inadequados podem causar vazamento de informações.
- Verificar SQL Injection em Content Providers
- Verificar Path Traversal em Content Providers
- Verificar acesso indevido a dados internos via Content Providers
CO13 | Ofuscação de Código-Fonte
Descrição: A ofuscação de código dificulta a engenharia reversa e protege a propriedade intelectual do aplicativo.
- Verificar se a ofuscação de código (ProGuard/R8) está implementada
- Caso parcialmente implementada, verificar se fluxos sensíveis estão devidamente ofuscados
CO14 | Informações Sensíveis ou Chaves de Autenticação Hardcoded
Descrição: Essa vulnerabilidade ocorre quando dados sensíveis, como senhas ou chaves de API, estão codificados diretamente no código-fonte do aplicativo.
- Verificar no código-fonte a presença de API keys, tokens, auth-keys, senhas ou credenciais hardcoded (pode ser automatizado com MobSF)
CO15 | Práticas de Codificação Inseguras
Descrição: Práticas de codificação inseguras aumentam a superfície de ataque e a probabilidade de falhas de segurança.
- Verificar geração insegura de números aleatórios (ex.: OTPs previsíveis)
- Verificar uso de funções ou objetos inseguros
- Verificar uso de criptografia fraca ou reversível (MD5, Base64)
- Verificar outras fragilidades decorrentes de práticas inseguras
CO16 | Deeplinks Inseguros
Descrição: Deeplinks inseguros podem permitir acesso a funcionalidades internas ou dados sensíveis sem validação adequada.
- Verificar deeplinks explícitos utilizando PendingIntent para destinos internos
- Verificar deeplinks implícitos que resolvem para destinos internos
CO17 | Ausência de Verificações de Integridade
Descrição: Verificações de integridade garantem que o aplicativo não foi modificado ou adulterado, protegendo contra repackaging e injeção de código.
- Decompilar, modificar, recompilar e reassinar o aplicativo para verificar se ele continua funcionando normalmente
CO18 | Permissões Android Inseguras
Descrição: Aplicações Android definem permissões no arquivo AndroidManifest.xml. Configurações incorretas podem introduzir vulnerabilidades.
- Verificar se tráfego em texto claro está habilitado no AndroidManifest.xml
- Verificar se o modo debug está habilitado no AndroidManifest.xml
- Verificar se
dataExtractionRulesestão corretamente definidas - Verificar se o modo de backup está habilitado
- Verificar permissões desnecessárias
CO19 | Cache de Tela em Segundo Plano
Descrição: O cache de tela pode expor dados sensíveis quando o aplicativo é colocado em segundo plano devido a funcionalidades do sistema operacional.
- Verificar se capturas de tela são permitidas quando o aplicativo vai para segundo plano
CO20 | Banco de Dados Firebase Inseguro
Descrição: O Firebase Database é um serviço de banco de dados em tempo real. Regras de segurança mal configuradas podem expor dados publicamente.
- Adicionar
.jsonà URL da instância Firebase para testar acesso de leitura - Substituir
firebaseio.comporappspot.come adicionar/.jsonpara testar acesso e comportamento de CORS
CO21 | Bypass de Autenticação por Bloqueio de Tela ou Biometria
Descrição: Alguns aplicativos utilizam o bloqueio de tela do Android ou autenticação biométrica para proteger funcionalidades sensíveis, o que pode ser contornado se mal implementado.
- Verificar se o estado biométrico é armazenado em Shared Preferences ou arquivos locais
- Verificar se a autenticação biométrica ou por bloqueio de tela pode ser bypassada via hooking em runtime ou modificação de código
CO22 | Verificações-Chave em Análise Dinâmica
Descrição: A análise dinâmica foca no comportamento em tempo de execução, interações com APIs e controles de segurança do lado servidor.
- Executar um checklist completo de segurança de APIs
- Verificar Broken Access Control e falhas de autenticação no lado servidor
- Verificar injeções server-side e más configurações de segurança
- Verificar exposição de dados sensíveis
- Realizar fuzzing
COX | Outros
Descrição: Verificações adicionais que podem revelar fragilidades de segurança sutis ou contextuais.
- Verificar se chaves criptográficas não são reutilizadas para múltiplos propósitos
- Verificar exposição de dados sensíveis via interface ou screenshots
- Verificar se o cache do teclado está desabilitado para o aplicativo
- Verificar se copiar/colar está desabilitado em campos sensíveis
- Verificar se dados sensíveis são mascarados durante a troca de aplicativos
- Verificar se teclados de terceiros estão desabilitados para campos de entrada sensíveis