Segurança do sistema e do kernel

No nível do sistema operacional, a plataforma Android fornece a segurança do kernel do Linux, bem como um recurso seguro de comunicação entre processos (IPC) para permitir a comunicação segura entre aplicativos executados em diferentes processos. Esses recursos de segurança no nível do sistema operacional garantem que até mesmo o código nativo seja limitado pelo Application Sandbox. Quer esse código seja o resultado do comportamento do aplicativo incluído ou da exploração de uma vulnerabilidade do aplicativo, o sistema foi projetado para impedir que o aplicativo nocivo prejudique outros aplicativos, o sistema Android ou o próprio dispositivo. Veja Configuração do Kernel para medidas que você pode tomar para fortalecer o kernel em seus dispositivos. Consulte o Documento de definição de compatibilidade do Android (CDD) para obter as configurações necessárias.

Segurança do Linux

A base da plataforma Android é o kernel do Linux. O kernel do Linux tem sido amplamente utilizado há anos e é usado em milhões de ambientes sensíveis à segurança. Através de sua história de ser constantemente pesquisado, atacado e corrigido por milhares de desenvolvedores, o Linux tornou-se um kernel estável e seguro em que muitas corporações e profissionais de segurança confiam.

Como 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 no usuário
  • Isolamento do processo
  • Mecanismo extensível para IPC seguro
  • A capacidade de remover partes desnecessárias e potencialmente inseguras 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, Linux:

  • Impede 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 da 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)

A caixa de areia do aplicativo

A segurança do aplicativo Android é reforçada pela caixa de proteção do aplicativo, que isola os aplicativos uns dos outros e protege os aplicativos e o sistema contra aplicativos mal-intencionados. Para obter 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 tempo de execução do aplicativo, a estrutura do aplicativo e os aplicativos. Esta partição é definida como somente leitura. Quando um usuário inicializa o dispositivo no modo de segurança, aplicativos 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 estilo UNIX, as permissões do sistema de arquivos garantem que um usuário não possa alterar ou ler os arquivos de outro usuário. No caso do Android, cada aplicativo é executado como seu próprio usuário. A menos que o desenvolvedor compartilhe arquivos explicitamente com outros aplicativos, os arquivos criados por um aplicativo não podem ser lidos ou alterados por outro aplicativo.

Linux com segurança aprimorada

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

Inicialização verificada

O Android 7.0 e posterior oferece suporte à inicialização verificada rigorosamente aplicada, o que significa que os dispositivos comprometidos não podem ser inicializados. A inicialização verificada garante a integridade do software do dispositivo a partir de uma raiz confiável de hardware até a partição do sistema. Durante a inicialização, cada estágio verifica criptograficamente a integridade e autenticidade do próximo estágio antes de executá-lo.
Consulte Inicialização verificada para obter mais detalhes.

Criptografia

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

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

Enraizamento de dispositivos

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

A capacidade de modificar um dispositivo Android de sua propriedade é importante para os desenvolvedores que trabalham com a plataforma Android. Em muitos dispositivos Android, os usuários podem desbloquear o bootloader para permitir a instalação de um sistema operacional alternativo. Esses sistemas operacionais alternativos podem permitir que um proprietário obtenha acesso root para fins de depuração de aplicativos e componentes do sistema ou para acessar recursos não apresentados aos aplicativos pelas APIs do Android.

Em alguns dispositivos, uma pessoa com controle físico de um dispositivo e um cabo USB pode instalar um novo sistema operacional que fornece privilégios de root ao usuário. Para evitar que qualquer dado de usuário existente seja comprometido, o mecanismo de desbloqueio do bootloader requer que o bootloader apague todos os dados de usuário existentes como parte da etapa de desbloqueio. O acesso root obtido através da exploração de um bug do kernel ou falha de segurança pode ignorar essa proteção.

Criptografar dados com uma chave armazenada no dispositivo não protege os dados do aplicativo de usuários root em dispositivos rooteados. Os aplicativos podem adicionar uma camada de proteção de dados usando criptografia com uma chave armazenada fora do dispositivo, como em um servidor ou uma senha de usuário. Essa abordagem pode fornecer proteção temporária enquanto a chave não está presente, mas em algum momento a chave deve ser fornecida ao aplicativo e, então, torna-se acessível aos usuários root.

Uma abordagem mais robusta para proteger dados de usuários root é por meio do uso de soluções de hardware. Os OEMs podem optar por 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 armazenamento confiável relacionado a NFC para 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 iniciados com Android 10 ou superior e a maioria dos dispositivos iniciados com Android 6.0 ou superior habilitem a criptografia de armazenamento pronta para uso.

A implementação atual da criptografia de armazenamento do Android é a criptografia baseada em arquivo em combinação com a 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 credencial e dispositivo criptografado para cada usuário, incluindo perfis de trabalho.

A criptografia de metadados complementa a criptografia baseada em arquivo. Ele criptografa todos os blocos na partição userdata que ainda não foram criptografados por criptografia baseada em arquivo, usando uma chave não vinculada à credencial da tela de bloqueio de nenhum usuário, mas ainda protegida pela inicialização verificada.

Proteção de credencial da tela de bloqueio

O Android pode ser configurado para verificar uma credencial de tela de bloqueio fornecida pelo usuário (PIN, senha ou padrão) antes de fornecer 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 dos dados criptografados pela credencial. O uso de uma credencial de tela de bloqueio e/ou regras de complexidade de credencial pode ser exigido por um administrador de dispositivo.

Administração do dispositivo

O Android 2.2 e posterior fornecem a API de administração de dispositivos Android, que oferece recursos de administração de dispositivos no nível do sistema. Por exemplo, o aplicativo Android Email integrado usa as APIs para melhorar o suporte do Exchange. Por meio do aplicativo de e-mail, os administradores do Exchange podem impor políticas de credenciais de tela de bloqueio — incluindo senhas alfanuméricas ou PINs numéricos — em todos os dispositivos. Os administradores também podem apagar remotamente (isto é, restaurar os padrões de fábrica) aparelhos perdidos ou roubados.

Além do uso em aplicativos incluídos no sistema Android, essas APIs estão disponíveis para provedores terceirizados de soluções de gerenciamento de dispositivos. Detalhes sobre a API são fornecidos em Device Administration .