Segurança em dispositivos Android

Marco Aurelio Silva
CoreShield
Published in
4 min readAug 17, 2020

Jetpack Security Library

Este artigo aborda práticas que aumentam o nível a segurança em aplicativos Android e o uso da JetPack Security Library. Aversão da biblioteca Security abordada neste artigo é a 1.1.0-Alpha01, portanto fique atento para atualizações da biblioteca.

Formas de ataque que a Jetpack Security mitiga

1. Se um aplicativo android está sendo executado em um dispositivo com acesso root, o sistema de arquivos é desbloqueado quando o usuário está ativo no dispositivo, isso quer dizer que os dados estarão disponíveis para um invasor.

2. Um aplicativo pode ter chaves e tokens de API que você não quer que eles vazem. Tecnicamente, quando se um invasor tiver acessos a estes dados confidenciais ele pode começar a fingir ser outro usuário e usar o seu App para propósitos ilegais.

O formato chave-valor

Neste formato um dado armazenado possui uma uma identificação ou chave associada ao seu valor, que pode ser uma variável qualquer tipo string, float, boolean ou conjunto de strings.

Trabalhando com dados de forma mais segura
A biblioteca Security fornece uma implementação de práticas recomendadas de segurança relacionadas a leitura e gravação de dados e também a criação e verificação de chaves usando o padrão builder para configurar os níveis Segurança forte e Segurança Máxima conforme descrito abaixo, mas antes disto vamos esclarecer o que é o padrão builder. Builder é uma classe para produzir elementos complexos associando nomes e campos.

O método add adiciona um elemento e seu nome associado ex:
add(Element element, String name)
O método cretae() cria o elemento para este builder.

Segurança forte que equilibra ótima criptografia e bom desempenho. Esse nível de segurança é adequado para apps para o consumidor, como apps de chat e Internet banking, bem como apps empresariais que realizam verificação de revogação de certificados.

  • Segurança máxima. Esse nível de segurança é adequado para apps que exigem um keystore no hardware e presença de usuário para fornecer acesso a chaves.

O gerenciamento de chaves na biblioteca Security é feito por um sistema de dupla camada:

  • Conjunto de chaves que contém uma ou mais chaves para armazenar arquivos ou dados. o Conjunto de chaves é armazenado em sheredPrefences.
  • Chave mestra que criptografa o conjunto de chaves, a Chave mestra é armazenada no sistema de KeyStores do Android, que é descrito abaixo.

Android Keystore
O sistema Android Keystore dificulta a extração de de chaves armazenadas no dispositivo, quando as chaves estão Keystore, elas podem ser usadas para operações criptografadas mas o material delas permanece não exportável. Além disso podemos determinar quando e como as chaves podem ser usadas, por exemplo, solicitando autenticação do usuário. Não vamos aprofundar a abordagem do Android Keystore neste artigo, vamos deixar isso para um próximo estudo.

Classe incluídas na biblioteca

EncryptedFile: fornece implementação personalizadas de leitura e gravação de streaming mais seguras.

EncryptedSharedPreferences: Encapsula a clase SharedPreferences e criptografa automaticamente as chaves usando dois esquemas:

  • Chaves são criptografadas por meio de um algoritmo de criptografia determinístico (é um algoritmo que dada uma certa entrada ele retornará sempre a mesma saída, age como uma fórmula matemática) para que possam ser criptografadas e pesquisadas corretamente.
  • Valores sao criptografados por meio de GCM AES-256 e não são determinísticos.

Leitura de arquivos
O snippet de código a seguir demonstra como usar o EncryptedFile para ler o conteúdo de um arquivo:

Gravação de arquivos
O snippet de código a seguir demonstra como gravar o conteúdo de um arquivo de forma segura usando o EncryptedFile.

Editar preferências compartilhadas
O snippet a seguir demonstra como usar o EncryptedSharedPreferences para editar um conjuntos de preferências de um usuário de forma segura.

Links

https://developer.android.com/topic/security/data

https://developer.android.com/training/articles/keystore

--

--