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 proteger contra ataques de força bruta.
O Android usa limitadores de taxa do ambiente de execução confiável (TEE) ou do elemento de segurança (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.
O Android 17 e versões mais recentes usam uma limitação de taxa de tela de bloqueio padrão mais forte do que as versões anteriores. Em casos raros, os usuários podem ter longos tempos limite de tela de bloqueio. Por isso, o Android 17 e versões mais recentes oferecem o seguinte feedback aprimorado do usuário na tela de bloqueio.
- Formatação de tempo aprimorada:a tela de bloqueio mostra tempos limite de um minuto ou mais usando unidades de tempo maiores para melhor legibilidade, como Tente novamente em 30 minutos em vez de Tente novamente em 1800 segundos.
- Link curto de recuperação:a tela de bloqueio mostra um link curto
(padrão para g.co/android/unlock) para ajudar os usuários a encontrar
opções de recuperação em outro dispositivo. Esse link pode ser configurado usando o
config_lockscreenLockoutShortlinkrecurso. - Feedback de tentativa duplicada: Em dispositivos com uma implementação do Weaver, o sistema mostra uma mensagem exclusiva quando uma tentativa incorreta duplicada é inserida. Esse feedback específico não está disponível em dispositivos somente com oGatekeeper, porque eles não fornecem códigos de resposta separados para tentativas incorretas e outras falhas de verificação.
- Gerenciamento consistente de entrada de credenciais: a tela de bloqueio desativa o teclado de entrada de PIN se o dispositivo usar uma credencial de PIN, semelhante à entrada de credenciais de senha e padrão.
O método LockPatternUtils#getLockoutAttemptDeadline(int) foi renomeado como LockPatternUtils#getLockoutEndTime(int) e fornece o horário de término do bloqueio de um cache gerenciado pelo sistema. Essa atualização resolve um problema em que eles eram armazenados em cache apenas por instância LockPatternUtils, mostrando erroneamente nenhum tempo limite ativo se um fosse acionado usando outra instância. Os desenvolvedores de solicitações de credenciais do sistema, como a tela de bloqueio e as atividades de configurações, precisam atualizá-las para verificar os tempos limite atuais antes de permitir outras tentativas.
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 desde o início.
Um limitador de taxa principal no TEE ou SE, um dos Gatekeeper
ou Weaver, aplica a limitação de taxa para
o LSKF ativo. 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 incrementará um contador de falhas e aplicará um tempo limite após determinadas contagens de falhas. Durante um tempo limite, ele rejeita todas as tentativas 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 atende aos requisitos mínimos do Android 16 permite até 10 tentativas no primeiro minuto, 20 em 6 minutos, 50 em 25 minutos, 110 em 24 horas e 1.800 tentativas em 5 anos.
Embora essa política seja razoavelmente segura para LSKFs escolhidos de maneira uniforme e aleatória, na prática os usuários não escolhem LSKFs de maneira 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 tentativas 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 tentativas no primeiro minuto, 7 em 6 minutos, 8 em 25 minutos, 12 em 24 horas e 19 em 5 anos. Nenhuma outra tentativa é permitida após 20 tentativas incorretas. 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 tentativas incorretas | Tempo limite após tentativa incorreta |
|---|---|
| 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 | 24 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 | Nenhuma outra tentativa permitida |
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 tentativas incorretas, o tempo limite é o mais longo exigido pelo limitador de taxa principal e pelo SoftwareRateLimiter.
No modo não de aplicação, 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 tentativas duplicadas
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 tentativas duplicadas. Quando ativado, 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árias tentativas. Os invasores capazes não tentam um determinado LSKF mais de uma vez. Uma política que não conta tentativas duplicadas melhora a usabilidade da entrada de LSKF para usuários legítimos sem facilitar a adivinhação dos LSKFs por 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 tentativas incorretas exclusivas em vez de 5 tentativas incorretas, incluindo duplicadas.
Em dispositivos com o Android 16 QPR2 e versões mais recentes, uma implementação do Weaver e SoftwareRateLimiter configurado no modo de aplicação, as tentativas duplicadas são detectadas e rejeitadas antes de serem transmitidas ao Weaver. Essas rejeições não aumentam a contagem de tentativas incorretas. Até 5 tentativas incorretas exclusivas são rastreadas na memória. Se o rastreador estiver cheio, o mais recente será descartado para abrir espaço. Todas as tentativas rastreadas serão descartadas 5 minutos após a última tentativa incorreta não rastreada.
O Gatekeeper não separa tentativas incorretas de outras falhas de verificação. Por isso, SoftwareRateLimiter não oferece suporte à detecção de tentativas duplicadas quando o Gatekeeper é o limitador de taxa principal.
Os implementadores do Weaver podem optar por oferecer suporte à detecção de tentativas duplicadas na implementação do Weaver.