Segurança do sistema e do kernel

No nível do sistema operacional, a plataforma Android oferece a segurança do kernel do Linux, além de uma comunicação segura entre processos (IPC, na sigla em inglês) para permitir a comunicação segura entre apps executados em processos diferentes. Esses recursos de segurança no nível do SO garantem que até o código nativo seja limitado pelo sandbox do aplicativo. O código pode ser o resultado do comportamento incluído no app ou a exploração de uma vulnerabilidade do app. O sistema foi projetado para impedir que o app malicioso prejudique outros apps, o sistema Android ou o próprio dispositivo. Consulte Configuração do kernel para saber quais medidas você pode tomar para fortalecer o kernel nos dispositivos. Consulte o Documento de definição de compatibilidade do Android (CDD) para conferir as configurações necessárias.

Segurança do Linux

A fundação da plataforma Android é o kernel do linux. O kernel do Linux é amplamente usado há anos e é usado em milhões de ambientes sensíveis à segurança. Com sua história de ser constantemente pesquisado, atacado e corrigido por milhares de desenvolvedores, o Linux se tornou um kernel estável e seguro, confiável para muitas corporações e profissionais de segurança.

Como a base para um ambiente de computação móvel, o kernel do Linux fornece ao Android vários recursos de segurança importantes, incluindo:

  • Um modelo de permissões baseado em usuários
  • Isolamento de processos
  • Mecanismo extensível para IPC seguro
  • A capacidade de remover partes desnecessárias e potencialmente não seguras do kernel

Como um sistema operacional multiusuário, um objetivo de segurança fundamental do kernel do Linux é isolar os recursos do usuário uns dos outros. A filosofia de segurança do Linux é proteger os recursos do usuário uns dos outros:

  • Impedir que o usuário A leia os arquivos do usuário B
  • Garante que o usuário A não esgote a memória do usuário B
  • Garante que o usuário A não esgote os recursos de CPU do usuário B
  • Garante que o usuário A não esgote os dispositivos do usuário B (por exemplo, telefonia, GPS e Bluetooth)

Sandbox de aplicativos

A segurança de apps do Android é aplicada pelo sandbox de aplicativos, que isola apps uns dos outros e protege os apps e o sistema contra apps maliciosos. Para mais detalhes, consulte Sandbox do aplicativo.

Partição do sistema e modo de segurança

As várias partições protegidas por integridade contêm o kernel do Android, bem como as bibliotecas do sistema operacional, o ambiente de execução do app, a estrutura e os apps. Esta partição está definida como somente leitura. Quando um usuário inicializa o dispositivo no modo seguro, os apps de terceiros podem ser iniciados manualmente pelo proprietário do dispositivo, mas não são iniciados por padrão.

Permissões do sistema de arquivos

Em um ambiente no estilo UNIX, as permissões do sistema de arquivos garantem que um usuário não possa alterar ou ler os arquivos de outro. No caso do Android, cada app é executado como o próprio usuário. A menos que o desenvolvedor compartilhe arquivos explicitamente com outros apps, os arquivos criados por um app não podem ser lidos ou alterados por outro.

Linux com segurança aprimorada

O Android usa o Security-Enhanced Linux (SELinux) para aplicar políticas de controle de acesso e estabelecer o controle de acesso obrigatório (MAC) em processos. Consulte Linux com segurança aprimorada no Android para mais detalhes. .

Inicialização verificada

O Android 7.0 e versões mais recentes oferecem suporte à Inicialização verificada rigorosamente aplicada, o que significa que dispositivos comprometidos não podem ser inicializados. A inicialização verificada garante a integridade do software do dispositivo, começando pela raiz de confiança do hardware até a partição do sistema. Durante a inicialização, cada etapa verifica criptograficamente a integridade e a autenticidade da próxima etapa antes de executá-la.
Consulte Inicialização verificada para mais detalhes.

Criptografia

O Android oferece um conjunto de APIs criptográficas para uso por apps. Isso inclui implementações de primitivas criptográficas padrão e comumente usadas, como AES, RSA, DSA e SHA. Além disso, as APIs são fornecidas para protocolos de nível mais alto, como SSL e HTTPS.

O Android 4.0 introduziu a classe KeyChain para permitir que os apps usem o armazenamento de credenciais do sistema para chaves privadas e cadeias de certificados.

Acesso root no dispositivo

Por padrão, no Android, apenas o kernel e um pequeno subconjunto dos serviços principais são executados com permissões de raiz. O SELinux ainda restringe os processos do espaço do usuário em execução como root. A inicialização verificada impede que um usuário ou serviço com permissões raiz modifique permanentemente o sistema operacional.

A capacidade de modificar um dispositivo Android próprio é importante para os desenvolvedores que trabalham com a plataforma Android. Em muitos dispositivos Android, os usuários podem desbloquear o carregador de inicialização para permitir a instalação de um sistema operacional alternativo. Esses sistemas operacionais alternativos podem permitir que um proprietário tenha acesso raiz para depurar apps e componentes do sistema ou acessar recursos não apresentados aos apps pelas APIs do Android.

Em alguns dispositivos, uma pessoa com o controle físico de um dispositivo e um cabo USB pode instalar um novo sistema operacional que fornece privilégios raiz ao usuário. Para proteger os dados do usuário, o mecanismo de desbloqueio do carregador de inicialização precisa apagar todos os dados do usuário como parte da etapa de desbloqueio. O acesso raiz obtido com a exploração de um bug do kernel ou de uma falha de segurança pode contornar essa proteção.

Criptografar dados com uma chave armazenada no dispositivo não protege os dados do app de usuários raiz em dispositivos com acesso root. Os apps podem adicionar uma camada de proteção de dados usando criptografia com uma chave armazenada fora do dispositivo, como em um servidor ou em uma senha de usuário. Essa abordagem pode oferecer proteção temporária enquanto a chave não está presente, mas em algum momento ela precisa ser fornecida ao app, que depois fica acessível aos usuários raiz.

Uma abordagem mais robusta para proteger dados de usuários raiz é o uso de soluções de hardware. Os OEMs podem implementar soluções de hardware que limitam o acesso a tipos específicos de conteúdo, como DRM para reprodução de vídeo ou o armazenamento confiável relacionado à NFC para a Carteira do Google. No caso de um dispositivo perdido ou roubado, a criptografia de armazenamento garante que os dados do usuário não possam ser acessados sem conhecer a credencial da tela de bloqueio do usuário.

Recursos de segurança do usuário

Criptografia de armazenamento

O CDD exige que todos os dispositivos lançados com o Android 10 ou mais recente e a maioria dos dispositivos lançados com o Android 6.0 ou mais recente ativem a criptografia de armazenamento imediatamente.

A implementação atual de criptografia de armazenamento do Android é baseada em arquivos em combinação com criptografia de metadados. A criptografia baseada em arquivo criptografa de forma transparente o conteúdo e os nomes dos arquivos na partição de dados do usuário, usando chaves diferentes para diretórios diferentes. Ele fornece diretórios de armazenamento criptografados por credenciais e pelo dispositivo para cada usuário, incluindo perfis de trabalho.

A criptografia de metadados complementa a criptografia baseada em arquivos. Ele criptografa todos os blocos na partição de dados do usuário que ainda não foram criptografados por criptografia baseada em arquivos, usando uma chave não vinculada a nenhuma credencial de tela de bloqueio do usuário, mas ainda protegida pela Inicialização verificada.

Proteção de credenciais na tela de bloqueio

O Android pode ser configurado para verificar uma credencial da tela de bloqueio fornecida pelo usuário (PIN, senha ou padrão) antes de conceder acesso a um dispositivo. Além de impedir o uso não autorizado do dispositivo, a credencial da tela de bloqueio protege a chave criptográfica para dados criptografados com credenciais. O uso de uma credencial de tela de bloqueio e/ou regras de complexidade de credenciais pode ser exigido por um administrador do dispositivo.

Administração do dispositivo

O Android 2.2 e versões mais recentes oferecem a API Device Administration, que oferece recursos de administração de dispositivos no sistema. Por exemplo, o app de e-mail integrado do Android usa as APIs para melhorar o suporte ao Exchange. Por meio do app de e-mails, os administradores do Exchange podem implementar políticas de credenciais da tela de bloqueio, incluindo senhas alfanuméricas ou PINs numéricos, em vários dispositivos. Os administradores também podem apagar remotamente (isto é, restaurar padrões de fábrica) dispositivos perdidos ou roubados.

Além de serem usadas em apps incluídos no sistema Android, essas APIs estão disponíveis para provedores de terceiros de soluções de gerenciamento de dispositivos. Confira detalhes sobre a API em Administração do dispositivo.