No nível do sistema operacional, a plataforma Android fornece a segurança do kernel 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 restringido pelo Application Sandbox. Quer esse código seja o resultado do comportamento incluído do aplicativo ou da exploração de uma vulnerabilidade do aplicativo, o sistema foi projetado para evitar que o aplicativo não autorizado prejudique outros aplicativos, o sistema Android ou o próprio dispositivo. Consulte 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 Linux
A base da plataforma Android é o kernel Linux. O kernel 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 se tornou um kernel estável e seguro, confiável para muitas corporações e profissionais de segurança.
Como base para um ambiente de computação móvel, o kernel Linux fornece ao Android vários recursos importantes de segurança, incluindo:
- Um modelo de permissões baseado no usuário
- Isolamento de processo
- Mecanismo extensível para IPC seguro
- A capacidade de remover partes desnecessárias e potencialmente inseguras do kernel
Como sistema operacional multiusuário, um objetivo fundamental de segurança do kernel Linux é isolar os recursos dos usuários uns dos outros. A filosofia de segurança do Linux é proteger os recursos dos usuários 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 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)
A caixa de areia do aplicativo
A segurança dos aplicativos Android é reforçada pela sandbox de aplicativos, que isola os aplicativos uns dos outros e protege os aplicativos e o sistema contra aplicativos maliciosos. 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 está 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 explicitamente arquivos com outros aplicativos, os arquivos criados por um aplicativo não poderão 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 estritamente aplicada, o que significa que os dispositivos comprometidos não podem inicializar. A inicialização verificada garante a integridade do software do dispositivo, desde uma raiz confiável de hardware até a partição do sistema. Durante a inicialização, cada estágio verifica criptograficamente a integridade e a 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 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 evita que um usuário ou serviço com permissões root modifique permanentemente o sistema operacional.
A capacidade de modificar um dispositivo Android de sua propriedade é importante para 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 é capaz de instalar um novo sistema operacional que fornece privilégios de root ao usuário. Para proteger quaisquer dados existentes do usuário contra comprometimento, o mecanismo de desbloqueio do bootloader exige que o bootloader apague todos os dados existentes do usuário 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 contornar 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 se torna acessível aos usuários root.
Uma abordagem mais robusta para proteger dados de usuários root é através do uso de soluções de hardware. Os OEMs podem optar por implementar soluções de hardware que limitem 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 o conhecimento da 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 de criptografia de armazenamento do Android é a criptografia baseada em arquivos 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 userdata, usando chaves diferentes para diretórios diferentes. Ele fornece diretórios de armazenamento criptografados por credenciais e por 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 userdata que ainda não estão criptografados pela criptografia baseada em arquivo, usando uma chave não vinculada à credencial de tela de bloqueio de nenhum usuário, mas ainda protegida pela inicialização verificada.
Proteção de credenciais de 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 para dados criptografados por credenciais. O uso de uma credencial de tela de bloqueio e/ou regras de complexidade de credencial pode ser exigido por um administrador do dispositivo.
Administração de dispositivos
O Android 2.2 e versões posteriores fornecem a API Android Device Administration, que fornece recursos de administração de dispositivos no nível do sistema. Por exemplo, o aplicativo Android Email integrado usa APIs para melhorar o suporte ao Exchange. Através do aplicativo Email, os administradores do Exchange podem aplicar 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 (ou seja, 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 fornecedores terceirizados de soluções de gerenciamento de dispositivos. Detalhes sobre a API são fornecidos em Administração de Dispositivos .