O Android protege os dados do usuário, incluindo armazenamento criptografado por credenciais e chaves Keystore vinculadas à autenticação com fatores de conhecimento da tela de bloqueio (LSKFs) configurados pelo usuário, como PINs, padrões e senhas. As LSKFs geralmente são valores de baixa entropia, como PINs de 4 ou 6 dígitos. Por isso, é necessário 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 diminuir a velocidade 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 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 versões anteriores. Em casos raros, os usuários podem ter tempos limite longos na tela de bloqueio. Por isso, o Android 17 e versões mais recentes oferecem o seguinte feedback aprimorado 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 de novo em 30 minutos em vez de Tente de novo em 1.800 segundos.
- Link curto de recuperação:a tela de bloqueio mostra um link curto
(o padrão é 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 recurso
config_lockscreenLockoutShortlink. - Feedback de tentativa duplicada:em dispositivos com uma implementação do Weaver, o sistema mostra uma mensagem exclusiva quando um palpite incorreto duplicado é inserido. Esse feedback específico não está disponível em dispositivos somente com Gatekeeper, porque eles não fornecem códigos de resposta separados para palpites incorretos 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 de
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 novas tentativas.
Desbloquear dados protegidos do usuário com LSKFs
LockSettingsService
gerencia o armazenamento e a verificação de LSKFs. Um usuário só pode ter uma LSKF ativa por vez. A atribuição de uma nova LSKF
invalida a anterior e reinicia a política de limitação de taxa.
Um limitador de taxa principal no TEE ou SE, um dos Gatekeeper
ou Weaver,impõe 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ó são desbloqueados quando a LSKF correta é fornecida ao limitador de taxa principal. Se a LSKF estiver incorreta, o limitador de taxa vai incrementar um contador de falhas e vai impor um tempo limite após determinadas contagens de falhas. Durante um tempo limite, ele rejeita todos os palpites e informa o tempo 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 limitação de taxa de LSKF no Android 6 e versões mais recentes. Historicamente, a política de limitação de taxa exigida tem sido bastante tolerante. Por exemplo, uma implementação que atenda 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 escolhidas de maneira uniforme e aleatória, na prática os usuários não escolhem LSKFs de maneira uniforme e aleatória. Algumas LSKFs ocorrem com muito mais frequência do que outras. Os invasores podem atingir uma taxa de sucesso significativa ao tentar LSKFs em ordem de frequência decrescente.
Por exemplo, o estudo This PIN Can Be Easily Guessed (em inglês) descobriu uma taxa de sucesso de 16,2% para adivinhar senhas de PINs do mundo real após 100 tentativas e 35,5% para padrões. Os invasores que sabem informações específicas do usuário, como datas de nascimento, podem ter taxas de sucesso ainda maiores.
Por isso, o Android 16 QPR2 e versões mais recentes oferecem uma política de limitação de taxa 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. Não é possível fazer mais palpites depois de 20 tentativas incorretas. A programação completa de tempo limite é mostrada na tabela a seguir. Ele está sujeito a mudanças em versões futuras do Android.
| Contagem de palpites incorretos | Tempo limite após um 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 | Não é possível fazer mais palpites |
Limitadores de taxa atualizados
O QPR2 do Android 16 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 o SE não podem ser atualizados.
Configure SoftwareRateLimiter no modo de aplicação usando o valor de configuração config_softwareLskfRateLimiterEnforcing. No modo de aplicação, o SoftwareRateLimiter aplica a política de limitação de taxa simultaneamente ao limitador de taxa principal. Para uma determinada contagem de palpites incorretos, o tempo limite é o maior entre o exigido pelo limitador de taxa principal e o exigido por SoftwareRateLimiter.
No modo não obrigatório, o SoftwareRateLimiter transmite todas as solicitações de verificação ao
limitador de taxa principal sem aplicar uma política secundária de limitação de taxa.
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 tentativas duplicadas. Quando ativado, os usuários não são penalizados por inserir a mesma LSKF incorreta várias vezes.
Às vezes, usuários legítimos inserem o mesmo LSKF incorreto várias vezes. Isso resulta em tempos limite desnecessários se forem contados como vários palpites. Invasores capazes não tentam uma determinada 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 para invasores capazes, permitindo a aplicação de políticas de limitação de taxa mais fortes. É menos provável que usuários legítimos encontrem um tempo limite, já que precisam inserir cinco palpites incorretos únicos em vez de cinco palpites incorretos, incluindo duplicados.
Em dispositivos com Android 16 QPR2 e versões mais recentes, uma implementação do Weaver e SoftwareRateLimiter
configurado no modo de aplicação, 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é cinco palpites incorretos exclusivos são rastreados na memória. Se o rastreador estiver cheio, o menos recente será descartado para abrir espaço. Todas as tentativas rastreadas são descartadas cinco minutos após a última tentativa incorreta não rastreada.
O Gatekeeper não separa palpites errados de outras falhas de verificação. Por isso, SoftwareRateLimiter
não oferece suporte à detecção de palpites duplicados quando o Gatekeeper é o principal limitador de taxa.
Os implementadores do Weaver podem optar por oferecer suporte à detecção de palpites duplicados na implementação do Weaver.