No nível do sistema operacional, a plataforma Android fornece a segurança do kernel Linux, bem como um recurso de comunicação segura entre processos (IPC) para permitir a comunicação segura entre aplicativos executados em diferentes processos. Esses recursos de segurança no nível do SO garantem que até mesmo o código nativo seja restringido pelo Application Sandbox. Seja esse código 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 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 do Linux tem sido amplamente utilizado há anos e é usado em milhões de ambientes sensíveis à segurança. Através de seu histórico 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 em 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 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. Assim, 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 esgota 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 do aplicativo do Android é reforçada pela sandbox do aplicativo, que isola os aplicativos uns dos outros e protege os aplicativos e o sistema de aplicativos maliciosos. Para obter mais detalhes, consulte Application Sandbox .
Partição do sistema e modo de segurança
A partição do sistema 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 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 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 o 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 6.0 e posterior é compatível com inicialização verificada e device-mapper-verity. A inicialização verificada garante a integridade do software do dispositivo desde uma raiz de hardware confiável 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.
O Android 7.0 e posterior oferece suporte a inicialização verificada rigorosamente aplicada, o que significa que os dispositivos comprometidos não podem inicializar.
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 primitivos criptográficos padrão e comumente usados, como AES, RSA, DSA e SHA. Além disso, as 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 aplicativos principais são executados com permissões de root. O Android não impede que um usuário ou aplicativo com permissões de root modifique o sistema operacional, kernel ou qualquer outro aplicativo. Em geral, o root tem acesso total a todos os aplicativos e a todos os dados do aplicativo. Os usuários que alteram as permissões em um dispositivo Android para conceder acesso root aos aplicativos aumentam a exposição da segurança a aplicativos mal-intencionados e possíveis falhas de aplicativos.
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 têm a capacidade de 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 proteger quaisquer dados de usuário existentes de comprometimento, o mecanismo de desbloqueio do carregador de inicialização exige que o carregador de inicialização 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.
A criptografia de dados com uma chave armazenada no dispositivo não protege os dados do aplicativo de usuários root. 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 estiver presente, mas em algum momento a chave deve ser fornecida ao aplicativo e, em seguida, torna-se acessível aos usuários root.
Uma abordagem mais robusta para proteger os 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 a carteira do Google.
No caso de um dispositivo perdido ou roubado, a criptografia completa do sistema de arquivos em dispositivos Android usa a senha do dispositivo para proteger a chave de criptografia, portanto, modificar o carregador de inicialização ou o sistema operacional não é suficiente para acessar os dados do usuário sem a senha do dispositivo do usuário.
Recursos de segurança do usuário
Criptografia do sistema de arquivos
O Android 3.0 e posterior fornece criptografia completa do sistema de arquivos, para que todos os dados do usuário possam ser criptografados no kernel.
O Android 5.0 e posterior é compatível com criptografia de disco completo . A criptografia de disco completo usa uma única chave—protegida com a senha do dispositivo do usuário—para proteger toda a partição userdata de um dispositivo. Na inicialização, os usuários devem fornecer suas credenciais antes que qualquer parte do disco seja acessível.
O Android 7.0 e versões posteriores são compatíveis com criptografia baseada em arquivo . A criptografia baseada em arquivo permite que arquivos diferentes sejam criptografados com chaves diferentes que podem ser desbloqueadas independentemente.
Mais detalhes sobre a implementação da criptografia do sistema de arquivos estão disponíveis na seção Criptografia .
Proteção de senha
O Android pode ser configurado para verificar uma senha fornecida pelo usuário antes de fornecer acesso a um dispositivo. Além de impedir o uso não autorizado do dispositivo, essa senha protege a chave criptográfica para criptografia completa do sistema de arquivos.
O uso de uma senha e/ou regras de complexidade de senha pode ser exigido por um administrador do dispositivo.
Administração do dispositivo
O Android 2.2 e versões posteriores fornecem a API Android Device Administration, que fornece recursos de administração do dispositivo 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 aplicar políticas de senha — 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) de 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 Device Administration .