O Android protege os dados do usuário, incluindo o armazenamento criptografado de credenciais e as chaves do Keystore vinculadas à autenticação, com fatores de conhecimento da tela de bloqueio (LSKFs) configurados pelo usuário, como PINs, padrões e senhas. Os LSKFs geralmente são valores de baixa entropia, como PINs de 4 ou 6 dígitos. Por isso, é necessário ter proteção contra ataques de força bruta.
O Android usa limitadores de taxa de ambiente de execução confiável (TEE) ou elemento seguro (SE) para desacelerar e, com tentativas suficientes, bloquear invasores que realizam ataques de força bruta em LSKFs. O CDD 9.11 especifica os requisitos e recomendações mínimos de segurança para limitadores de taxa de LSKF. O Android 16 QPR2 e versões mais recentes implementam políticas de limitação de taxa significativamente mais fortes do que as versões anteriores do Android. Para mais detalhes, consulte Política de limitação de taxa padrão mais forte no Android 16 QPR2 e versões mais recentes.
Desbloquear dados protegidos do usuário com LSKFs
LockSettingsService
gerencia o armazenamento e a verificação de LSKFs. Um usuário tem apenas um LSKF ativo por vez. A atribuição de um novo LSKF invalida o anterior e inicia a política de limitação de taxa do início.
Um limitador de taxa principal no TEE ou SE, um de Gatekeeper
ou Weaver, aplica a limitação de taxa para
o LSKF ativo. O LockSettingsService prefere o Weaver quando uma implementação está disponível.
Os dados protegidos do usuário são desbloqueados somente quando o LSKF correto é fornecido ao limitador de taxa principal. Se o LSKF estiver incorreto, o limitador de taxa incrementa um contador de falhas e aplica um tempo limite após determinadas contagens de falhas. Durante um tempo limite, ele rejeita todos os palpites e fornece o tempo limite restante.
Política de limitação de taxa padrão mais forte no Android 16 QPR2 e versões mais recentes
O CDD 9.11 exige a limitação de taxa de LSKF no Android 6 e versões mais recentes. Historicamente, a política de limitação de taxa necessária tem sido bastante tolerante. Por exemplo, uma implementação que atenda aos requisitos mínimos do Android 16 permite até 10 palpites no primeiro minuto, 20 em 6 minutos, 50 em 25 minutos, 110 em 24 horas e 1.800 palpites em 5 anos.
Embora essa política seja razoavelmente segura para LSKFs escolhidos de forma uniforme e aleatória, na prática os usuários não escolhem LSKFs de forma uniforme e aleatória. Alguns LSKFs ocorrem com muito mais frequência do que outros. Os invasores podem alcançar uma taxa de sucesso significativa tentando LSKFs em ordem de frequência decrescente.
Por exemplo, o estudo This PIN Can Be Easily Guessed encontrou uma taxa de sucesso de 16,2% para adivinhar PINs reais após 100 palpites e 35,5% para padrões. Os invasores que conhecem informações específicas do usuário, como aniversários, podem alcançar taxas de sucesso ainda maiores.
Portanto, o Android 16 QPR2 e versões mais recentes oferecem uma política de limitação de taxa de LSKF padrão mais forte. Essa política permite até 6 palpites no primeiro minuto, 7 em 6 minutos, 8 em 25 minutos, 12 em 24 horas e 19 em 5 anos. Nenhum outro palpite é permitido após 20 palpites incorretos. A programação completa do tempo limite é mostrada na tabela a seguir. Ela está sujeita a mudanças em versões futuras do Android.
| Contagem de palpites incorretos | Tempo limite após palpite incorreto |
|---|---|
| 0 | Não relevante |
| 1-4 | 0 segundo |
| 5 | 1 minuto |
| 6 | 5 minutos |
| 7 | 15 minutos |
| 8 | 30 minutos |
| 9 | 90 minutos |
| 10 | 4 horas |
| 11 | 12 horas |
| 12 | 36 horas |
| 13 | 4 dias |
| 14 | 13 dias |
| 15 | 41 dias |
| 16 | 123 dias |
| 17 | 1 ano |
| 18 | 3 anos |
| 19 | 9 anos |
| Mais de 20 | Nenhum outro palpite permitido |
Limitadores de taxa atualizados
O Android 16 QPR2 e versões mais recentes incluem implementações atualizadas do Gatekeeper e do Weaver que aplicam a política de limitação de taxa na tabela.
Limitador de taxa de software
O Android 16 QPR2 e versões mais recentes incluem um limitador de taxa secundário opcional, SoftwareRateLimiter.
Ele é implementado no servidor do sistema e permite que os dispositivos ofereçam uma política de limitação de taxa mais forte quando
o TEE ou SE não puder ser atualizado.
Configure SoftwareRateLimiter no modo de aplicação usando o config_softwareLskfRateLimiterEnforcing
valor de configuração. No modo de aplicação, SoftwareRateLimiter aplica a política de limitação de taxa simultaneamente com o limitador de taxa principal. Para uma determinada contagem de palpites incorretos, o tempo limite é o mais longo exigido pelo limitador de taxa principal e pelo SoftwareRateLimiter.
No modo não obrigatório, SoftwareRateLimiter transmite todas as solicitações de verificação para o limitador de taxa principal sem aplicar uma política de limitação de taxa secundária.
Detecção de palpites duplicados
Para melhorar a usabilidade e permitir o uso de uma política de limitação de taxa mais forte, o Android 16 QPR2 e versões mais recentes oferecem suporte à detecção de palpites duplicados. Quando ativados, os usuários não são penalizados por inserir o mesmo LSKF incorreto várias vezes.
Os usuários legítimos às vezes inserem o mesmo LSKF incorreto várias vezes. Isso resulta em tempos limite desnecessários se contados como vários palpites. Invasores capazes não tentam um determinado LSKF mais de uma vez. Uma política que não conta palpites duplicados melhora a usabilidade da entrada de LSKF para usuários legítimos sem facilitar a adivinhação dos LSKFs para invasores capazes, permitindo que políticas de limitação de taxa mais fortes sejam aplicadas. É menos provável que os usuários legítimos encontrem um tempo limite, já que o usuário precisa inserir 5 palpites incorretos exclusivos em vez de 5 palpites incorretos, incluindo duplicados.
Em dispositivos com o Android 16 QPR2 e versões mais recentes, uma implementação do Weaver e SoftwareRateLimiter configurados no modo de aplicação, os palpites duplicados são detectados e rejeitados antes de serem transmitidos ao Weaver. Essas rejeições não aumentam a contagem de palpites incorretos. Até 5 palpites incorretos exclusivos são rastreados na memória. Se o rastreador estiver cheio, o mais recente será descartado para abrir espaço. Todos os palpites rastreados são descartados 5 minutos após o último palpite incorreto não rastreado.
O Gatekeeper não separa palpites errados de outras falhas de verificação. Portanto, SoftwareRateLimiter não oferece suporte à detecção de palpites duplicados quando o Gatekeeper é o limitador de taxa principal.
Os implementadores do Weaver podem escolher oferecer suporte à detecção de palpites duplicados na implementação do Weaver.