Evolução da Segurança do Android

Melhorias de segurança significativas das versões principais recentes do Android, começando com Android 5.0 Lollipop (API 21).
Android 5.0 (API 21) - Lollipop
Melhorias de segurança - Android 5
Android 6 (API 23) - Marshmallow
Melhorias de segurança no Android 6
- A API Keystore foi significativamente estendida (primitivas criptográficas simétricas, suporte a AES e HMAC e sistema de controle de acesso para chaves protegidas por hardware), veja Keystore com suporte de hardware
- TEE é um requisito, veja Keystore com suporte de hardware e Seção 7.3.10. Sensor de impressão digital da Definição de Compatibilidade do Android 6.0
- Nova API (
isInsideSecureHardware) para verificar se uma chave do KeyStore está armazenada em hardware seguro (por exemplo, Ambiente de Execução Confiável (TEE) ou Secure Element (SE)), veja método isInsideSecureHardware de KeyInfo
- Os aplicativos precisam solicitar permissões em tempo de execução, veja Seção de permissões de tempo de execução das mudanças do Android 6.0, Solicitar permissões de tempo de execução e Melhorias de segurança no Android 6.0
- SELinux mais restritivo (filtragem de IOCTL, endurecimento dos domínios do SELinux, etc.), veja Security-Enhanced Linux no Android e Melhorias de segurança no Android 6.0
Android 7 (API 24) - Nougat
Melhorias de segurança - Android 7
- User e System Certificate Trust Store separados, o que significa que ataques Man-in-the-Middle basicamente exigem acesso root a partir desse ponto, veja Mudanças nas Autoridades de Certificação Confiáveis no Android Nougat
- Adicionado suporte para Network Security Config para que os aplicativos possam personalizar o comportamento de suas conexões seguras (HTTPS, TLS) de forma declarativa simples, sem modificação de código. Ele suporta âncoras de confiança personalizadas (quais Autoridades de Certificação (CA) o aplicativo confia), substituições somente em depuração, opt-out de tráfego em texto claro e fixação de certificados (limitando quais chaves de servidor são confiáveis), veja Seção Network Security Config do Android 7.0 para Desenvolvedores
- Por padrão, aplicativos direcionados ao Android 7.0 confiam apenas nos certificados fornecidos pelo sistema e não confiam mais em Autoridades de Certificação (CA) adicionadas pelo usuário, mesmo sem um Network Security Config personalizado, veja Autoridade de Certificação Confiável Padrão do Android 7.0 para Desenvolvedores
- Atualização para o Keymaster 2 com suporte para Atestação de chave e vínculo de versão (impedindo o rollback para uma versão antiga insegura sem perder chaves), veja Seção Atestação de chave do Android 7.0 para Desenvolvedores, Funções do Keymaster, Verificando pares de chaves com suporte de hardware com Atestação de chave e Atestação de chave e ID
- Criptografia baseada em arquivos (FBE) introduzida, mas é opcional para os fabricantes implementarem, veja Seção Direct Boot do Android 7.0 para Desenvolvedores, Suporte ao modo Direct Boot e Criptografia
- Configuração atualizada do SELinux: maior restrição do sandbox de aplicativos, dividindo a pilha do mediaserver em processos menores com permissões reduzidas (mitigação para o Stagefright), veja Security-Enhanced Linux no Android
Android 8 (API 26) - Oreo
Melhorias de segurança - Android 8