Voltar ao blog
segurança mobileAndroidiOSOWASP MASVScertificate pinningengenharia reversaAppSec

Segurança de aplicativos mobile: Android, iOS e as falhas mais comuns

2026-11-02
Segurança de aplicativos mobile: Android, iOS e as falhas mais comuns

Segurança de aplicativos mobile tem uma diferença fundamental em relação à segurança web, e ignorá-la é a raiz da maioria das falhas: no mundo web, o servidor está sob seu controle e apenas o navegador roda no ambiente do usuário. No mundo mobile, o seu aplicativo inteiro roda no dispositivo do usuário, um ambiente que você não controla e que pode ser hostil. O aparelho pode estar com root ou jailbreak, o app pode ser descompilado, o tráfego pode ser interceptado, o armazenamento pode ser inspecionado. Tudo o que você embute no app está, em teoria, nas mãos de quem quiser examiná-lo.

Essa mudança de premissa reorganiza as prioridades. Não basta pensar na comunicação com a API; é preciso pensar no que o app guarda, no que ele expõe quando desmontado e em como ele se comporta em um dispositivo comprometido. Para organizar esse trabalho, existe o OWASP MASVS (Mobile Application Security Verification Standard), o padrão de referência para segurança mobile. Este guia percorre as falhas mais comuns em Android e iOS e como preveni-las.

A premissa: o dispositivo é território hostil

Antes das falhas específicas, o princípio que as conecta: nunca confie no cliente. No mobile, isso é literal. Você deve assumir que um atacante determinado pode:

  • Ler o armazenamento do aplicativo, incluindo arquivos, bancos locais e preferências.
  • Descompilar o app e ler o código, strings e recursos embutidos.
  • Interceptar o tráfego entre o app e o servidor.
  • Rodar o app em um dispositivo com root/jailbreak, contornando proteções do sistema.

A consequência prática é dura e libertadora ao mesmo tempo: segredos e lógica sensível não pertencem ao app. Chaves de API críticas, regras de negócio que não podem ser burladas e validações de segurança precisam viver no servidor, onde você tem controle. O app é uma interface confiável para o usuário, mas não confiável para conter segredos.

Armazenamento inseguro de dados

É uma das falhas mais frequentes e mais graves. O aplicativo guarda dados sensíveis (tokens de sessão, dados pessoais, informações de pagamento) em locais inseguros do dispositivo, de onde podem ser extraídos. Os erros clássicos:

  • Salvar tokens ou senhas em texto claro em arquivos, em bancos SQLite locais ou nas preferências compartilhadas.
  • Deixar dados sensíveis em logs do aplicativo, que podem ser lidos por outros apps ou por ferramentas.
  • Guardar informação sensível em cache ou em backups não protegidos.

A defesa é usar os mecanismos seguros que cada plataforma oferece, feitos exatamente para isso:

  • No Android, o Keystore para chaves e as EncryptedSharedPreferences para dados sensíveis.
  • No iOS, o Keychain, protegido por hardware, para credenciais e segredos.

A regra de ouro do armazenamento: guarde o mínimo possível e, o que precisar guardar, guarde sempre criptografado nos cofres da plataforma. Um token que não está no dispositivo é um token que não vaza dele.

Comunicação insegura e certificate pinning

Todo tráfego entre o app e o servidor deve ser cifrado com TLS, sem exceção. Isso é o básico. O erro comum aqui não é a ausência de TLS, e sim aceitar certificados que não deveriam ser aceitos, abrindo espaço para ataques de intermediário (man in the middle), em que alguém na mesma rede intercepta e lê a comunicação.

Uma camada adicional importante é o certificate pinning. Com ele, o aplicativo não confia em qualquer certificado válido: ele "fixa" (pin) o certificado ou a chave pública esperada do seu servidor e recusa qualquer outro, mesmo que tecnicamente válido. Isso derrota a interceptação feita com certificados fraudulentos instalados no dispositivo. O pinning exige cuidado operacional (a rotação do certificado precisa ser planejada para não quebrar apps antigos), mas eleva significativamente a barreira contra interceptação.

Engenharia reversa e proteção do código

Como o app roda no dispositivo, ele pode ser descompilado e analisado. Um atacante faz isso para entender a lógica, encontrar segredos embutidos, localizar endpoints internos e descobrir como burlar validações. Não dá para impedir a engenharia reversa por completo, mas dá para dificultá-la e reduzir o que ela revela:

  • Não embuta segredos no app: chaves de API sensíveis, credenciais e lógica crítica ficam no servidor. Um segredo no binário é um segredo público.
  • Ofuscação de código: ferramentas que embaralham nomes e estrutura tornam a leitura do código descompilado muito mais trabalhosa. Não é segurança por si só, é atrito adicional.
  • Detecção de root/jailbreak e de adulteração: o app pode detectar se roda em um ambiente comprometido ou se foi modificado, e reagir (por exemplo, limitando funções sensíveis). É uma camada a mais, que um atacante avançado pode contornar, mas que barra os oportunistas.

O princípio permanece: a segurança não pode depender do sigilo do código do app. A ofuscação atrasa o atacante; ela não substitui ter a lógica crítica no servidor.

Permissões e exposição de dados

Aplicativos pedem permissões (câmera, localização, contatos, armazenamento), e cada permissão é uma responsabilidade. Duas falhas comuns:

  • Excesso de permissões: pedir mais do que a função exige aumenta a superfície de risco e mina a confiança do usuário. O princípio é o do menor privilégio: solicite apenas o necessário, no momento em que é necessário.
  • Exposição de componentes: no Android, componentes exportados sem proteção adequada podem ser acionados por outros apps maliciosos. Componentes que não precisam ser públicos devem permanecer privados.

Cuidar de permissões é também uma questão de privacidade e de conformidade com a LGPD: coletar menos dados é, ao mesmo tempo, menos risco e mais respeito ao usuário.

Panorama das falhas e defesas

Falha comum Risco Defesa central
Armazenamento inseguro Extração de tokens e dados Keychain / Keystore, guardar o mínimo
Comunicação insegura Interceptação (MITM) TLS obrigatório + certificate pinning
Segredos no binário Vazamento por engenharia reversa Segredos e lógica crítica no servidor
Engenharia reversa Burla de validações, mapeamento Ofuscação, detecção de root/adulteração
Excesso de permissões Superfície e privacidade Menor privilégio, pedir sob demanda
Componentes expostos Abuso por outros apps Manter privado o que não precisa ser público

Segurança mobile é assumir que o cliente não é confiável

O fio que costura todas essas práticas é a mesma premissa do início: o dispositivo do usuário é território que você não controla, e o app precisa ser projetado para isso. Guarde o mínimo e sempre nos cofres da plataforma, cifre e fixe a comunicação, mantenha segredos e lógica crítica no servidor, dificulte a engenharia reversa e peça só as permissões que usa. Nenhuma dessas medidas isolada torna um app "inquebrável", mas juntas elas movem o app de um alvo fácil para um alvo caro, que é o objetivo realista da segurança. O padrão OWASP MASVS existe justamente para dar a essa checagem um roteiro verificável.

Na ConstructorTI, ajudamos times a elevar a segurança de seus aplicativos Android e iOS: avaliação contra o OWASP MASVS, testes de armazenamento e comunicação, verificação de certificate pinning, análise de engenharia reversa e revisão de permissões e superfície exposta. Se você tem um app em produção lidando com dados de usuários e quer saber o que um atacante veria ao desmontá-lo, converse com o nosso time de CyberSecurity.