6 dicas: como desenvolver código seguro para mobile

Rogério Marques

09 março 2017 - 18:27 | Atualizado em 29 março 2023 - 17:43

Pessoa utilizando celular com símbolo de rede projetado

O mercado de aplicativos tem crescido muito em diversas áreas, principalmente financeira, como bancos e corretoras de investimentos. Este cenário também traz uma preocupação com a segurança de dados e capital dentro dos smartphones. Desenvolver código seguro para mobile é primordial para aplicações de risco e diminui consideravelmente possíveis fraudes e vazamentos. Além de tranquilizar o usuário na hora de instalar o app e fornecer permissões.

Existem recomendações genéricas e particularidades independentes de plataforma para desenvolver código seguro para mobile. Acompanhe algumas opções:

1- Sandboxing

Os sistemas operacionais móveis possuem características bem diferentes dos sistemas operacionais tradicionais. Quando falamos especificamente de dispositivo móvel (smartphone), o conceito de multiutilizador não é necessário. Os sistemas operativos são aliviados da gestão dos recursos neste sentido e podem focar-se em problemas de segurança mais emergentes, como o controle do ambiente de execução das aplicações.

Sandbox de aplicações é o isolamento de todo o escopo do app de forma protegida, onde outro app não consegue acessar os dados da aplicação, como banco de dados e outros. Aqui a execução é feita em um processo separado, a nível de kernel. Ao contrário de programas Windows desktop, por exemplo, que cria diversos diretórios de arquivos no Program Files e outras aplicações (vírus e malware) que permite o acesso.

Como o Sandbox é simples e auditável, para uma aplicação quebrá-lo teria que comprometer a segurança do kernel. Uma má prática de programação que quebra o Sandboxing é armazenar dados em memória externa, pois abre o escopo da aplicação e ela fica vulnerável.

2- Proteção da base de dados com criptografia e ofuscamento de código

O SQLite é o sistema de gestão de bases de dados relacionais mais usado no Android, pois integra um módulo de acesso a estas bases de dados. No entanto, a API fornecida por esse módulo não é de fácil utilização e, é relativamente simplificada, não fazendo verificações de caracteres especiais nos parâmetros. A prevenção de SQL injection attacks deve ser implementada ao lado do cliente e a criptografia deve usar chave fornecida pelo usuário (como o PIN) para aumentar a segurança.

O código ofuscado torna seu APK difícil de engenharia reversa, o que é especialmente valioso quando o aplicativo usa recursos sensíveis à segurança, como verificação de licenciamento, por exemplo. Para ofuscamento de código em Android, o ProGuard é excelente, pois ofusca, otimiza o bytecode, remove instruções de código não utilizadas e minifica classes, campos e métodos restantes com nomes curtos. Para iOS existem ferramentas comerciais como o Morpher, Metaforic, Arxan, LLVM Obfuscator e algumas bibliotecas de terceiros que propõe isso.

3- Permissões de bibliotecas de terceiros

A má utilização das permissões autorizadas é talvez um dos pontos mais suscetíveis de ataque ao aplicativo. Não se trata de um bug ou vulnerabilidade no sistema, mas sim da forma que o mecanismo de permissões foi desenhado. Nada impede uma aplicação de requisitar permissões ou ser aprovada pelo utilizador, no entanto, nada garante que a aplicação as use só para as funcionalidades publicitadas.

Exemplificando, uma aplicação de gestão de mensagens escritas poderá requisitar permissões para a leitura, escrita, envio de mensagens e poderá ainda requisitar chamadas telefônicas caso queira, por exemplo, um botão para telefonar diretamente ao remetente das mensagens. Nestas condições, não existe forma de garantir que a aplicação enviará mensagens ou fará chamadas somente quando o utilizador clica no controle associado na interface. Isso também é um fator delimitante que fará com que o usuário instale ou não sua aplicação, já que o SO responsabiliza o utilizador pelo privilégio que cada aplicação terá.

Ao seguir um How To Use de uma biblioteca de terceiros que esteja usando, deve-se tomar cuidado com as permissões de usuário que ela solicita e verificar no código se elas estão sendo usadas somente para o fim proposto. Uma biblioteca mal intencionada poderá levar utilizadores a serem vítimas de toll fraud (ataques voltados ao uso de serviços de telefonia).

4- Usando o Protocolo seguro HTTPS

A grande maioria dos aplicativos fazem requisições a serviços em servidores e criptografia também é uma prática de segurança nesse lado. No protocolo HTTP normal, os dados são enviados em plaintext dentro dos pacotes de rede e quem estiver usando um sniffer, que é um programa que captura os pacotes, poderá ver o conteúdo deles. No entanto, se o conteúdo dos dados que trafegam na sua conexão forem de importante confidencialidade, como dados bancários ou e-mails pessoais, o Secure Socket Layer (SSL) provê uma criptografia forte e muito difícil de ser quebrada. O HTTPS nada mais é que o HTTP sobre o SSL.

Desta forma se alguém inspecionar os seus pacotes de dados sem conhecer as chaves criptográficas usadas, o conteúdo consistirá apenas de uma sequência de bytes aparentemente aleatória e sem sentido. Usar HTTPS evita ataques baseados principalmente em interceptação de dados e alteração de pacotes trocados entre cliente e servidor.

5- Usar métodos de autenticação seguros

A autenticação de dois fatores (ou “2FA”) é uma forma de identificação do usuário ao provedor de serviço, utilizando uma combinação de dois métodos diferentes de autenticação. Estes componentes podem ser algo que o usuário saiba (como senha ou PIN), possua (keyfob ou telefone celular), ou algo que seja ligado ou inseparável do usuário, como impressão digital.

Para aplicativos, podemos usar senha simples de quatro, seis ou oito caracteres combinados com confirmação via SMS ou notificação push, ou algumas das famosas APIs de autenticação do Facebook, Google ou Linkedin. Também existem métodos de reconhecimento facial, como é o caso do Smart Lock incorporado na versão 5.0 do Android, e o método de leitura biométrica, como o Android Fingerprint da versão 6.0. Para sistemas de bancos e fintechs, a recomendação é matar sessões quando o aplicativo é colocado em background e usar assinatura eletrônica em tempo de execução para fazer operações de risco, como movimentações financeiras e negociação de ações.

A assinatura eletrônica é volátil e se perde de tempos em tempos. Os dados de cartões de crédito, senhas e tokens de acesso quase nunca são salvos quando o usuário sai e entra novamente na tela.

6- Comunidade Open Web Application Security Project (OWASP)

A OWASP – Open Web Application Security Project ou Projeto Aberto de Segurança em Aplicações Web é uma organização mundial sem fins lucrativos focada em melhorar a segurança de softwares, em especial os softwares baseados na web, mas também se estende a mobile. Sua missão é fazer com que a segurança das aplicações seja visível, de forma que pessoas e organizações possam fazer decisões conscientes a respeito dos verdadeiros riscos de segurança das aplicações e ajudar os desenvolvedores a se precaverem e criarem aplicações com elevado nível de segurança.

A OWASP atualizou o Top 10 com os ataques à segurança de aplicações móveis mais críticos. Veja a lista completa de 2016 aqui.

Conclusão

Essas foram algumas recomendações que podem ser aplicadas na hora de desenvolver código seguro para mobile. Por possuírem arquitetura de segurança diferentes, as plataformas precisam ser analisadas separadamente. Quando se trata do mundo Android é recomendado não desenvolver aplicações que sejam executadas em modo root , além de não fazer acesso a dados sensíveis quando há outra aplicação sendo executada neste modo. Proteger “Intents”, “Activities”, “Content Providers”, “Broadcast” e “Services” e não permitir instalação do app em dispositivos com “BlackMarket” também são boas práticas. Já no contexto iOS é fortemente recomendado usar a API CFNetwork para validar conexões seguras e a tecnologia “KeyChain” para armazenamento de chaves, além de não permitir instalações em dispositivos com “JailBreak”.

Portanto, adotar boas práticas de codificação e arquitetura voltadas à segurança de aplicações móveis, apesar de não garantir 100% de sucesso contra fraudes e ataques, é indispensável na prevenção de ameaças. Dificultar a ação de invasores e código malicioso na sua aplicação reduzirá a resistência do usuário ao instalar um app que trabalhe com informações de risco.

Recomendados para você

Pessoa digitando no laptop
Criando um arquivo PDF com ITextSharp ...
Pessoa segurando celular e analisando relatórios
User Experience: 5 dicas para quebrar barreiras financeiras ...
Pessoas escrevendo em post-its colados em mural
5 dicas para o seu projeto de aplicativo não falhar! ...