In this article
Segurança de aplicativos Android: como proteger apps Android para desenvolvedores
Como proteger seus apps Android contra agentes mal-intencionados.
O que é segurança de aplicativos Android?
A segurança de aplicativos Android consiste em medidas para proteger aplicativos Android contra acesso, uso indevido, alteração ou danos sem autorização. Com a popularização dos dispositivos móveis, incluindo smartphones e tablets, o Android se tornou uma plataforma bastante usada para criar e distribuir apps móveis — mas sua abertura também o deixa vulnerável a diferentes riscos de segurança. A adoção de medidas de segurança para dispositivos móveis pode proteger os usuários contra ameaças cibernéticas, como tentativas de invasão, malware e roubo de dados.
Por que a segurança de apps Android é importante?
A segurança de apps Android é essencial porque o Android domina o mercado de sistemas operacionais móveis, com 71,8% de participação de mercado, em comparação com cerca de 27,6% do iOS da Apple. Dispositivos Android costumam ser alvos valiosos por terem acesso a diversas fontes de dados (e-mails, redes sociais), aos recursos do dispositivo (microfone, câmera, geolocalização) e a processos de autenticação (2FA). Os desenvolvedores precisam priorizar a segurança para proteger os dados pessoais, financeiros e confidenciais armazenados nos dispositivos Android. Embora os ataques a dispositivos móveis sempre tenham sido um problema, a ameaça está evoluindo rapidamente, à medida que agentes mal-intencionados desenvolvem malware cada vez mais sofisticado.
Agentes mal-intencionados implantam ativamente malware com recursos de acesso remoto total, design modular e características semelhantes às de worms, capazes de causar danos significativos a dispositivos Android. Algumas dessas famílias de malware se tornam ainda mais perigosas com atualizações de desenvolvimento frequentes, e os cibercriminosos estão cada vez melhores em inserir código malicioso sem serem detectados pelo processo de revisão das lojas oficiais de apps.
Entre as táticas de malware para dispositivos móveis contra as quais os desenvolvedores precisam se proteger estão:
Fraude no dispositivo (ODF): o malware para dispositivos móveis já consegue realizar ações fraudulentas diretamente no dispositivo da vítima. A ODF representa uma mudança significativa nos ataques a dispositivos móveis e pode ter como alvo contas comerciais e ferramentas de comunicação.
Redirecionamento de chamadas telefônicas: o malware pode redirecionar uma ligação feita para um banco para outro número controlado pelo invasor. A vítima não percebe o desvio, pois a tela da chamada mostra o número de telefone legítimo.
Abuso da resposta direta a notificações: os spywares FluBot, Medusa e Sharkbot podem abusar do recurso de resposta direta às notificações do Android para autorizar transações fraudulentas, modificar notificações push e disseminar malware. Esse recurso também pode ser usado para aplicar phishing por mensagens push e espalhar o malware entre os contatos da vítima, como um worm.
Algoritmo de geração de domínios: o Sharkbot usa um algoritmo de geração de domínios (DGA) para evitar a detecção, criando constantemente novos nomes de domínio e endereços IP para seus servidores de comando e controle. Isso dificulta a detecção e o bloqueio do malware pelas equipes de segurança.
Como burlar a detecção das lojas de apps: criminosos encontraram maneiras de burlar a detecção das lojas de apps ao abusar da plataforma de testes beta TestFlight da Apple e do processo de segurança do Google Play, além de pagar desenvolvedores para incorporar seu SDK malicioso aos apps.
Práticas de desenvolvimento aprimoradas: os trojans para Android, como o malware Xenomorph, agora são desenvolvidos com recursos sofisticados de atualização. No futuro, mais famílias de malware para dispositivos móveis incorporarão processos de atualização melhores, permitindo adicionar recursos aprimorados e novas funcionalidades aos dispositivos comprometidos.
Recursos de segurança do Android
Para impedir possíveis ataques, o Android oferece recursos de segurança que ajudam os desenvolvedores a proteger os aplicativos contra invasões. Entre eles estão:
Sandbox de aplicativos: os apps são executados em um ambiente isolado para impedir o acesso não autorizado aos dados dos usuários e aos recursos do sistema.
Permissões: a plataforma Android inclui um sistema de permissões que permite aos usuários controlar quais dados e recursos um app pode acessar.
SELinux: o Android usa o Security-Enhanced Linux (SELinux) para aplicar políticas obrigatórias de controle de acesso, ajudando a proteger o sistema contra apps maliciosos.
Assinatura de código: o Android exige que todos os apps sejam assinados com um certificado digital, o que garante que o app vem de uma fonte confiável e não foi adulterado.
Google Play Protect: o Google Play Protect é um recurso de segurança integrado que verifica se há malware e outras ameaças de segurança nos apps do Google Play.
Permissões em tempo de execução: a partir do Android 6.0 (Marshmallow), os usuários precisam conceder permissão para que um app acesse determinados dados ou recursos durante a execução, e não no momento da instalação.
Configuração de segurança de rede: o Android permite que os desenvolvedores configurem a segurança de rede dos apps, incluindo o pinning de certificados SSL/TLS e outras definições de segurança.
IPC seguro: o mecanismo de comunicação entre processos (IPC) do Android permite a comunicação segura entre apps e serviços em execução no mesmo dispositivo.
Inicialização verificada: os dispositivos Android incluem um processo de inicialização verificada que garante a integridade do software do dispositivo e impede alterações não autorizadas.
Segurança de hardware: os dispositivos Android incluem recursos de segurança de hardware, como um ambiente de execução confiável (TEE) e armazenamento de chaves protegido por hardware, para proteger dados confidenciais.
Dica profissional: os recursos específicos e a melhor forma de usá-los dependem da versão do Android e do hardware do dispositivo, que podem variar bastante. É recomendável (1) manter-se atualizado sobre os recursos relevantes disponíveis, (2) conhecer o mercado atendido pelo seu app e (3) planejar o uso desses recursos de acordo com essas informações. Também é recomendável usar ao máximo os serviços oferecidos pelo sistema operacional.
Linguagens de desenvolvimento Android e seus desafios de segurança
O Android oferece suporte a várias linguagens de programação para o desenvolvimento de aplicativos móveis, incluindo Kotlin, Java e C++. Cada linguagem tem seus pontos fortes, limitações e desafios de segurança, que os desenvolvedores precisam levar em conta.
Kotlin
O Kotlin é uma linguagem mais recente que está se tornando o padrão para o desenvolvimento Android. Ele oferece um isolamento melhor do que o Java, o que significa que os apps Kotlin têm menos probabilidade de interagir com outros apps no dispositivo do usuário. Isso reduz o risco de apps maliciosos acessarem dados ou recursos confidenciais.
O principal desafio de segurança do Kotlin é ser uma linguagem relativamente nova. Embora seja considerado mais seguro que o Java, ainda podem existir vulnerabilidades ou outros problemas de segurança não descobertos. Os desenvolvedores precisam acompanhar as práticas recomendadas de segurança mais recentes e manter bibliotecas e frameworks atualizados para minimizar o risco de violações de segurança.
Java
Java é uma linguagem de programação popular, usada em uma ampla variedade de aplicações, incluindo o desenvolvimento de apps Android. É uma linguagem de nível mais alto que C++, o que facilita escrever e entender código em Java. No entanto, por estar em uma camada mais alta da pilha, talvez não seja tão eficiente quanto C++ em desempenho e consumo de bateria.
Um dos principais desafios de segurança do Java é a possibilidade de haver vulnerabilidades em suas bibliotecas e frameworks. Os desenvolvedores precisam usar bibliotecas e frameworks atualizados e seguir práticas de programação segura para evitar problemas comuns de segurança, como injeção de SQL e cross-site scripting.
C++
C++ é uma linguagem de baixo nível, frequentemente usada na programação em nível de sistema no Android. Por estar mais próxima do hardware, pode oferecer desempenho e autonomia de bateria melhores que Java ou Kotlin. No entanto, o C++ é compartilhado por diferentes aplicativos, como WebKit, framework de mídia e camadas gráficas, o que dificulta seu isolamento eficaz.
Um dos principais desafios de segurança do C++ é a possibilidade de vulnerabilidades relacionadas à memória, como estouros de buffer e erros de ponteiro. Os desenvolvedores precisam ter cuidado ao trabalhar com C++ para evitar essas vulnerabilidades, que podem ser exploradas por invasores. Também precisam levar em conta a natureza compartilhada do C++ e tomar medidas para garantir que o código não interaja involuntariamente com outros apps ou serviços.
O Snyk Code oferece suporte às linguagens Kotlin, Java e C++, sendo uma ótima opção para a segurança de aplicativos Android.
Comece a jogar Capture the Flag
Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.
Práticas recomendadas de segurança para aplicativos Android
O Google, responsável pela manutenção do Android, está sempre aprimorando a estrutura de segurança e privacidade. No entanto, isso dificulta a criação de apps compatíveis com várias versões do Android, pois os requisitos de segurança são diferentes. Os desenvolvedores precisam considerar desde o início do ciclo de desenvolvimento as permissões e os requisitos de privacidade necessários para os apps, já que o comportamento varia entre as versões do Android.
Outras práticas recomendadas de segurança para Android importantes incluem:
Garanta comunicações seguras: os desenvolvedores devem usar protocolos seguros, como HTTPS, para criptografar as transmissões de dados entre o app e seus servidores. Além disso, devem implementar o pinning de certificados, que garante que o app se comunique apenas com servidores confiáveis, verificando o certificado do servidor em relação a uma chave pública conhecida.
Solicite as permissões necessárias: os desenvolvedores devem garantir que seus apps solicitem apenas as permissões necessárias para funcionar corretamente. Solicitar permissões desnecessárias pode fazer com que os usuários neguem o acesso ao app ou, pior ainda, que ele seja removido do Google Play. Além disso, solicite permissões somente quando necessário, por exemplo, quando o usuário tentar usar um recurso específico do app.
Armazene os dados com segurança: os desenvolvedores devem usar criptografia para proteger os dados confidenciais armazenados localmente pelo app. Esses dados também devem ser armazenados em locais seguros, inacessíveis a pessoas não autorizadas. Por exemplo, não os armazene em dispositivos de armazenamento externo, como cartões SD, pois outros apps e até mesmo usuários podem acessá-los com facilidade.
Mantenha serviços e dependências atualizados: os desenvolvedores devem atualizar regularmente as dependências e bibliotecas dos apps para garantir que não estejam vulneráveis a problemas de segurança ou bugs conhecidos. Também devem acompanhar novas ameaças de segurança e corrigir os apps o mais rápido possível, além de remover dependências sem uso ou desatualizadas para reduzir a superfície de ataque.
Checklist de segurança de aplicativos Android
Confira este checklist de oito pontos para garantir os mais altos padrões de segurança no desenvolvimento de aplicativos Android.
Segurança e gerenciamento de permissões são fundamentais: a segurança deve ser uma prioridade durante todo o processo de desenvolvimento. Identifique possíveis riscos e ameaças de segurança no início do projeto e estabeleça os protocolos adequados. Além disso, considere o gerenciamento das permissões dos usuários e garanta que eles entendam claramente quais dados o app acessa.
Comunicação entre o app móvel e o back-end: a comunicação entre o app móvel e o back-end deve ser segura, e ambos devem implementar medidas robustas de segurança. Garanta que todas as transmissões de dados entre o app e o back-end sejam criptografadas e usem protocolos seguros, como HTTPS. Além disso, implemente o pinning de certificados para garantir que o app se comunique apenas com servidores confiáveis.
Os cenários de ameaça em dispositivos móveis são diferentes: os apps móveis operam em um ambiente hostil, e os dados confidenciais podem estar em risco. Considere a quantidade de dados críticos de segurança armazenados no cliente móvel e use criptografia para proteger os dados confidenciais armazenados localmente. Além disso, fique atento a possíveis ameaças, como espionagem, e tome as medidas adequadas para se proteger.
Use todos os recursos de segurança disponíveis no sistema operacional Android: o Android oferece vários recursos de segurança, como armazenamento seguro, gerenciamento de chaves e isolamento de apps. Use esses recursos para reforçar a segurança do seu app.
Considere as permissões necessárias para seus aplicativos: os desenvolvedores devem avaliar cuidadosamente quais permissões o aplicativo exige e solicitar apenas o mínimo necessário. Planejar com antecedência é essencial para garantir que o aplicativo seja desenvolvido para lidar com as permissões exigidas. Além disso, os desenvolvedores devem deixar claro para os usuários quais dados o aplicativo acessa e por que isso é necessário.
Use a automação para manter seus serviços e dependências atualizados: os desenvolvedores devem usar ferramentas automatizadas para gerenciar as dependências e bibliotecas dos aplicativos. Isso garante que o aplicativo esteja sempre atualizado e protegido contra vulnerabilidades conhecidas e bugs.
Deixe claras as versões do sistema operacional compatíveis: os desenvolvedores devem ser transparentes sobre as versões do Android compatíveis com o aplicativo. Oferecer suporte a muitas versões do Android pode ser um desafio, então é preciso equilibrar o atendimento aos usuários e a compatibilidade com dispositivos com a segurança. Além disso, lembre os usuários de atualizar para a versão mais recente do aplicativo para garantir que estejam usando a versão mais segura.
Testar é essencial: os testes são fundamentais para detectar possíveis riscos e ameaças à segurança. Os desenvolvedores devem usar ferramentas de detecção de intrusão e outros métodos de hacking ético para testar a segurança do aplicativo. Além disso, incluam os aplicativos móveis em todos os processos de teste e avaliação de segurança para garantir que sejam seguros.
Ferramentas de segurança para aplicativos Android
Os desenvolvedores precisam contar com um conjunto de ferramentas de segurança para identificar e evitar possíveis ameaças. Estas são algumas ferramentas de segurança de aplicativos Android comumente usadas:
SAST (teste estático de segurança de aplicativos): tipo de teste de segurança que analisa o código-fonte ou binário de um aplicativo sem executá-lo. As ferramentas SAST usam técnicas como correspondência de padrões e análise de fluxo de controle e de dados para identificar vulnerabilidades nas etapas iniciais do desenvolvimento.
SCA (análise de composição de software): as ferramentas SCA analisam dependências de código aberto e de terceiros de um aplicativo para identificar vulnerabilidades de segurança e problemas de conformidade de licenças. Elas examinam o código em busca de vulnerabilidades conhecidas, monitoram o surgimento de novas vulnerabilidades e recomendam como corrigi-las.
Fuzzing: tipo de teste que consiste em fornecer dados inválidos, inesperados ou aleatórios a um aplicativo para detectar bugs ou vulnerabilidades. As ferramentas de fuzzing geram grandes volumes de dados de teste para identificar possíveis vulnerabilidades na validação de entradas do aplicativo.
DAST (teste dinâmico de segurança de aplicativos): tipo de teste de segurança que analisa um aplicativo durante a execução para identificar possíveis vulnerabilidades. As ferramentas DAST simulam ataques e analisam as respostas do aplicativo para identificar vulnerabilidades como falhas de injeção, cross-site scripting (XSS) e problemas de autenticação.
IAST (teste interativo de segurança de aplicativos): as ferramentas IAST combinam elementos de SAST e DAST para fornecer feedback em tempo real sobre possíveis vulnerabilidades enquanto o aplicativo está em execução. Elas detectam vulnerabilidades como injeção de SQL, cross-site scripting e estouros de buffer.
Monitoramento e detecção: essas ferramentas monitoram continuamente a segurança de um aplicativo em produção para identificar possíveis incidentes. Elas monitoram registros, tráfego de rede e eventos do sistema para detectar anomalias e possíveis ameaças à segurança. Também enviam alertas e notificações às equipes de segurança quando ocorre um incidente, permitindo uma resposta rápida.
Segurança de aplicativos Android com a Snyk
A Snyk oferece duas ferramentas de segurança para aplicativos Android: Snyk Code e Snyk Open Source.
A análise SAST do Snyk Code revela possíveis vulnerabilidades, como injeção de SQL e ataques de cross-site scripting (XSS). A ferramenta oferece suporte às linguagens Kotlin, Java e C++, comumente usadas no desenvolvimento de aplicativos Android.
A cobertura de SCA do Snyk Open Source detecta e reporta vulnerabilidades de segurança conhecidas nas dependências de terceiros do seu aplicativo Android. Ela examina as bibliotecas e os frameworks de código aberto usados no aplicativo e fornece um relatório das vulnerabilidades conhecidas para que você possa tomar as medidas adequadas e reduzir o risco de uma violação de segurança.
Os aplicativos móveis não funcionam isoladamente: eles interagem com outros serviços e dependências, como APIs e serviços de back-end. Para garantir a segurança de todo o ecossistema ao redor do seu aplicativo Android, a Snyk oferece outras ferramentas de segurança, como Snyk Container e Snyk IaC.
O Snyk Container analisa a segurança de contêineres para detectar e corrigir vulnerabilidades no seu ambiente conteinerizado. O Snyk IaC examina a infraestrutura em busca de vulnerabilidades de segurança, incluindo configurações incorretas, violações de conformidade e muito mais.
Com o conjunto de ferramentas de segurança para desenvolvedores da Snyk, você pode garantir que seu aplicativo Android seja examinado a fundo em busca de vulnerabilidades e protegido contra possíveis ameaças, ficando seguro e pronto para implantação. Agende uma demonstração ao vivo hoje mesmo e saiba mais.