Voltar
Vulnerability Intelligence
Tabela de conteúdo

 

Um aplicativo Android é um software executado em dispositivos equipados com o sistema operacional Android. Os aplicativos Android geralmente são escritos na linguagem de programação Java e compilados em bytecode. Esses aplicativos são basicamente kits de pacotes Android (arquivos APK) que permitem a distribuição e instalação de aplicativos Android. Isso é semelhante à forma como os arquivos.exe são usados no sistema operacional Windows. O segundo trimestre de 2020 registrou 2,96 milhões de aplicativos Android no total em comparação com 2,6 milhões em 2018 (no Google Play). E em 2018, vulnerabilidades de alto risco foram encontradas em 43% dos aplicativos Android.

Um arquivo APK contém os seguintes componentes:

  • AndroidManifest.xml: que, por sua vez, contém detalhes como o nome do pacote, a descrição dos direitos de acesso e os componentes da API.
  • vermelho/: Uma pasta que contém recursos do aplicativo, que não inclui recursos de aplicativos pré-compilados.
  • classes.dex: código de aplicativo compilado no formato dex que pode ser executado pela máquina virtual Dalvik.
  • META-INFORMAÇÕES/: uma pasta que contém os hashes e as assinaturas de todos os arquivos.

 

Sandboxing de aplicativos

Diferentemente do Windows, o Android executa cada um de seus aplicativos em um ambiente sandbox. O sandbox ou a conteinerização de aplicativos limitam o ambiente no qual um código pode ser executado. Ele pretende proteger o aplicativo de interagir com elementos maliciosos externos.

O sistema operacional Android é baseado no sistema Linux que usa o kernel Linux. Mas, diferentemente do sistema Linux, cada aplicativo Android recebe um ID de usuário exclusivo. O sistema então define permissões para um ID de usuário específico, permitindo que esse aplicativo sozinho acesse determinados recursos. 

Normalmente, todos os aplicativos Android precisam solicitar permissão para acessar dados confidenciais, como contatos, SMS e câmeras. Todos esses recursos do sistema são restritos com a ajuda da API de permissões. O aplicativo tem permissão para acessar os recursos do sistema somente se o usuário conceder acesso.

 

Aplicações e processos

Embora os aplicativos Android sejam escritos em Java, os arquivos de classe que contêm instruções da máquina virtual Java (bytecode Java) são convertidos em arquivos executáveis Dalvik (arquivos.dex) que contêm bytecodes Dalvik, antes de serem instalados.

O kernel usado pelo sistema operacional Android gerencia o funcionamento de cada aplicativo no dispositivo, onde a máquina virtual Dalvik executa processos ou aplicativos independentes sob diferentes IDs de usuário.

Android app Kernel

  

Fuga na caixa de areia

Os aplicativos da Web têm links universais para interagir com outros aplicativos, diferentemente dos aplicativos Android.

As comunicações entre aplicativos do Android são limitadas, no entanto, elas são obtidas por meio dos seguintes métodos:

 

  • Intenções/Deeplinks

 

Uma intenção é usada para solicitar uma ação de um componente diferente do aplicativo. Isso ajuda a coordenar as atividades realizadas por diferentes aplicativos. Por exemplo, selecionar uma foto da sua galeria para definir sua imagem de exibição do WhatsApp.

Deeplinks são links que direcionam você para um destino específico a partir de um aplicativo.

O Deeplinks é o que possibilita que os usuários compartilhem o link de um artigo do Medium no Twitter.

 

  • Encadernador IPC

 

Um Binder permite a comunicação entre processos (IPC) dentro de um kernel. Ele permite que os processos gerenciem dados compartilhados. Object Linking and Embedding (OLE) da Microsoft é um exemplo de IPC.

 

  • Provedores de conteúdo

 

Os provedores de conteúdo gerenciam o acesso ao repositório central de dados. Eles fornecem dados para aplicativos externos. Por exemplo, os provedores de conteúdo concedem acesso a aplicativos para usar os contatos e SMSs em um dispositivo.

Embora os aplicativos Android geralmente sejam isolados e isolados, limitando as comunicações entre aplicativos, eles ainda podem ser usados de forma abusiva.

 

O que dá errado?

A configuração incorreta do aplicativo ou as práticas incorretas de codificação do desenvolvedor tornam os aplicativos Android vulneráveis a ataques cibernéticos. Abaixo estão listados os problemas mais comuns de segurança de aplicativos Android encontrados por desenvolvedores e usuários.

 

Credenciais codificadas

As credenciais codificadas são basicamente senhas de texto simples, chaves de API, tokens etc. no código-fonte. Embora seja bastante comum que aplicativos Android integrem APIs de terceiros, eles podem não ser necessariamente para chamadas de API do lado do cliente. Quando essas credenciais são expostas em texto simples, elas formam alvos fáceis para explorações de adivinhação de senhas.

Recentemente, o aplicativo CSC BHIM sofreu uma violação de dados, expondo 70 lakh de registros de usuários, devido a um banco de dados inseguro da AWS. Os desenvolvedores teriam codificado as credenciais da AWS no próprio aplicativo. Nesses casos, uma análise estática de código pode depurar o código-fonte antes que o programa seja executado. Ele expõe qualquer vulnerabilidade no código-fonte estático. Esse processo também é automatizável. No entanto, pode haver muitos falsos positivos.

 

Criptografia fraca

A criptografia quebrada em aplicativos Android usa algoritmos fracos para criptografia e decodificação ou implementa um algoritmo forte de forma insegura.

A função criptográfica de hash MD5, amplamente usada, foi considerada vulnerável. A cifra de transmissão RC4 é conhecida por sua simplicidade, mas foi descoberta que tem várias vulnerabilidades.

Encontrar uma criptografia mais fraca/vulnerável pode ser automatizado por meio de análise estática.

 

Usando um analisador estático no APK

Os descompiladores Java descompilam o bytecode Java no código-fonte Java. Usando essas ferramentas, convertemos o APK para produzir o código-fonte. Mesmo que não fossem o código exato que o desenvolvedor escreveu, as classes, os métodos e a lógica seriam os mesmos. Isso revela credenciais codificadas ou outras falhas no código que o desenvolvedor possa ter usado.

A prática mais comum de codificação incorreta de desenvolvedores envolve criptografia personalizada, que pode ser quebrada com bastante facilidade.

 

Problemas de HTTPS

A segurança de transporte é necessária ao se comunicar com o servidor. Ela é aplicada por meio de HTTPS, que usa Transport Layer Security (TLS) para criptografar os dados. No entanto, vários desenvolvedores invalidam inadvertidamente essa proteção. Vários aplicativos optam por confiar em qualquer certificado fornecido sem verificar a cadeia de confiança. Esse código passa pela produção quando os desenvolvedores testam o aplicativo em um ambiente local que pode ter certificados autoassinados, eles ignoram intencionalmente as verificações SSL.

A verificação SSL pode ser desativada por meio de código, por exemplo, estabelecer uma conexão não validada por meio de um SSLSocketFactory personalizado desativará toda a validação de SSL.

Esses desvios podem ser facilmente detectados por meio de análise estática.

 

Problema com o WebView

O WebView é um componente alimentado por um mecanismo de navegador que permite que aplicativos Android abram páginas da web dentro do próprio aplicativo. Como os navegadores são expostos a ataques por meio de intenções e links diretos, não é seguro abrir páginas da Web não confiáveis no aplicativo.

Por exemplo, um usuário do Twitter encontrou um bug do WebView no ARogyaSetu, que expôs arquivos internos no banco de dados local. O WebView podia ser chamado intencionalmente e qualquer aplicativo instalado no telefone era capaz de carregar o URL no WebView. Um invasor que tenha controle sobre o WebView pode decidir qual página da Web deve ser aberta. Se o JavaScript estiver ativado, os invasores poderão executar o código JavaScript dentro do aplicativo para realizar atividades maliciosas.

 

Armazenamento inseguro

A criação de arquivos fora da sandbox do Android permite que os usuários visualizem ou alterem o conteúdo do arquivo, e isso pode ser uma grande preocupação de segurança. Os invasores exploram dados confidenciais expostos ou dados de configuração de aplicativos armazenados fora da sandbox do aplicativo em um formato legível e gravável por qualquer usuário.

 

Configurações incorretas de componentes

  • Serviços e atividades exportados: Se seu aplicativo tiver atividades que são exportadas (o que significa que elas podem ser chamadas por outros aplicativos) e for um aplicativo malicioso, ele poderá obter acesso a dados pessoais e confidenciais. Mas só porque os serviços e as atividades são exportados, isso não significa que eles representem riscos de segurança. A inspeção do código também ajudará a detectar a falha.
  • Provedores de conteúdo mal configurados: Conforme mencionado anteriormente, os provedores de conteúdo gerenciam o acesso seguro aos dados do aplicativo. Provedores de conteúdo mal configurados concedem acesso a aplicativos externos sem restrições.
  • Receptores de transmissão: Esses são componentes do Android que permitem enviar e receber eventos do sistema ou do aplicativo, como uma mensagem de bateria fraca. A leitura do código-fonte pode ajudá-lo a identificar do que o receptor de transmissão é capaz ou como ele é acionado. Os atacantes podem explorar essa falha e enviar mensagens indesejadas sem o consentimento do usuário.

 

Conclusão

Os principais recursos de segurança do Android, como o sandbox de aplicativos, reduzem significativamente os problemas de segurança. Mas, a partir das falhas discutidas acima, deve-se destacar que boas práticas de codificação também garantem a segurança dos aplicativos Android. Além disso:

  • Proteja a comunicação entre seu aplicativo e outros aplicativos.
  • Verifique se há vulnerabilidades, como credenciais codificadas ou criptografia fraca.
  • Armazene informações confidenciais na sandbox/armazenamento interno.
  • Solicite credenciais antes de fornecer acesso ao conteúdo premium dentro do aplicativo.
  • Use o WebView com cuidado.
  • Verifique se há configurações incorretas de componentes.
Nenhum item encontrado.

Blogs relacionados