Enviar códigos descartáveis por e-mail é pior do que usar senha
(blog.danielh.cc)- Recentemente, muitos serviços passaram a adotar o método de login com código de 6 dígitos via e-mail ou número de telefone
- o usuário informa o e-mail/telefone, recebe um código de verificação de 6 dígitos e faz login ao inseri-lo
- Esse método causa vulnerabilidades graves na segurança da conta
- um invasor pode simplesmente inserir o endereço de e-mail de outra pessoa em um serviço legítimo para solicitar o envio de um código de verificação
- isso cria o problema de que o usuário não consegue saber facilmente se o código recebido é realmente para uma situação legítima de uso ou se é uma tentativa de phishing
- ferramentas tradicionais de prevenção a phishing, como password managers (gerenciadores de senhas), perdem sua eficácia
- Esse método de código de verificação vem sendo explorado de fato de forma contínua
- um método semelhante é usado até mesmo no login de contas do Minecraft operado pela Microsoft
- vários casos de roubo de contas foram relatados em diversas comunidades online e mídias, como Reddit e YouTube
Conclusão
O método de autenticação por e-mail com código de 6 dígitos é, em termos de segurança, mais vulnerável do que parece
- em comparação com o método tradicional de senha, o risco de phishing aumenta significativamente
- embora tenha sido adotado para melhorar a experiência do usuário ou a segurança, na prática pode causar um resultado pior
3 comentários
Não concordo muito; parece um truque que só funciona em circunstâncias bem específicas.
Se você estiver usando passkeys e perder o dispositivo, parece que vai ser bem complicado mesmo...
Comentário do Hacker News
O padrão de ataque funciona mais ou menos assim
1) O usuário se cadastra em um site fraudulento
2) O site diz algo como “enviamos um código de login do site BOM para o seu e-mail, digite-o aqui”
3) O site fraudulento inicia no site BOM o fluxo de “entrar com código de uso único por e-mail” usando o e-mail do usuário
4) O site BOM envia o código de login para o usuário por e-mail
5) O usuário vê que o e-mail veio do site BOM, confia e digita o código
6) O usuário digita o código no site fraudulento
7) O site fraudulento usa esse código para entrar no site BOM como se fosse o usuário
Por esse motivo, autenticação com “envio de código de uso único por e-mail” é muito vulnerável a phishing
O método “clicar em um link no e-mail” é um pouco melhor, porque dá mais trabalho e parece mais suspeito copiar/colar esse link no site fraudulento, já que o usuário vai direto para o site BOM
Ainda assim, se um serviço de e-mail popular começar de repente a bloquear esses e-mails de login ou os próprios links, muita gente pode simplesmente ficar sem conseguir entrar
Passkeys são a forma mais correta de fazer isso
O suporte a passkeys nos gerenciadores de senha está melhorando cada vez mais
Mesmo que você perca o dispositivo onde salvou as passkeys e acabe perdendo todas elas, ainda acho isso muito mais seguro do que o modelo tradicional de senhas
Acho melhor a sua avó ter que ir ao banco para recuperar acesso à conta do que alguém roubar todo o dinheiro dela via phishing
O problema das Passkeys é mais complexo do que apenas “se você perder o dispositivo, perde o acesso” (dependendo da configuração, há formas de contornar isso)
O maior problema é a Attestation
Ela permite que serviços bloqueiem quem usa ferramentas que aumentam a liberdade do usuário, como soluções de autenticação open source
Passkeys e protocolos de challenge-response poderiam ter sido uma melhoria enorme para substituir senhas
Mas, na prática, foram desenhados de um jeito que fortalece ainda mais o domínio da Big Tech e reduz a liberdade do usuário
Sobre a ideia de que “é melhor a sua avó ir ao banco para recuperar a conta”
vale pensar no que acontece se alguém apontar uma arma para ela e forçar o desbloqueio da conta para levar todo o dinheiro
No país de terceiro mundo onde eu moro, roubo de smartphone é um problema tão grave que até 2FA se torna inviável na prática
Já precisei recuperar 2FA uma vez e foi um inferno
Com senha, bastava acessar o Bitwarden de qualquer lugar
Configurei uma passkey no github e confirmei que ela está salva no Chrome
Quando tento entrar no github com passkey, o Chrome abre um pop-up pedindo o PIN do Gerenciador de Senhas do Google
Eu não faço ideia de qual é esse PIN, e também não consigo achar uma forma de redefini-lo
Não há nenhuma orientação sobre esse PIN no perfil do Google, no gerenciador de senhas ou nas configurações de segurança
Sobre a opinião de que é ok a sua avó ir ao banco para recuperar a conta
eu consigo ir pessoalmente ao banco ou ao help desk de TI da empresa para recuperar acesso,
mas não posso fazer isso na sede do Google, do Facebook ou do Xitter
Passkeys vinculadas a dispositivo têm grande chance de falhar nesses casos
A maioria dos usuários nem considera esse tipo de situação
Só Passkeys não bastam
a ideia é não repetir os mesmos erros de sempre
Gerenciador de senhas deveria ser o padrão, e MFA dedicado deveria existir só para casos realmente excepcionais, como conta de e-mail ou conta financeira
Também acho que a configuração de MFA deveria obrigar pelo menos 3 métodos e exigir o uso de 2 ou mais deles
Se não oferecer praticamente todos os métodos, como códigos impressos, app autenticador independente do sistema operacional e chave de hardware como YubiKey, então esse MFA não vale nada
Recebo quatro vezes por dia e-mails de notificação pedindo redefinição da senha da minha conta Microsoft
São e-mails com um número de 6 dígitos, que permitem recuperar a conta
Na prática, isso significa que um invasor pode tentar tomar minha conta 4 vezes por dia com uma chance de 1 em 1.000.000 por tentativa
Se fizer isso contra milhares de contas, consegue invadir algumas todo dia de graça
Até enviei um relatório de segurança sobre isso, mas recusaram agir dizendo que a prova matemática da vulnerabilidade não era suficiente
O que me resta é aguentar o spam e torcer para que a conta não seja invadida
Resolvi isso adicionando um alias de login
No login, o e-mail antigo da conta (o e-mail público) passou a ser bloqueado, e só o alias, uma string aleatória privada, pode ser usado para entrar
Depois disso, nunca mais houve tentativa de login externa
[Como configurar: account.microsoft.com > Suas informações > Preferências de entrada > Adicionar e-mail > Adicionar alias e definir como padrão > em Preferências de entrada, marcar permitir apenas o alias]
Tive a mesma experiência
Acho que talvez seja um efeito residual de quando precisei usar o Microsoft Teams
Se um atacante usar esse método contra 125.000 contas, provavelmente acerta uma por dia
Se não estiver mirando uma conta específica, mas tentando no atacado, a eficiência por tempo gasto fica bem boa
Para resolver isso, em vez de um limite fixo de 4 tentativas, deveria haver exponential backoff, aumentando o tempo de espera a cada falha
Também continuo recebendo mensagens parecidas numa conta antiga do Instagram
“Está com problemas para entrar? Clique aqui para mudar sua senha!”
Aconteceu a mesma coisa com uma conta antiga e inútil
Quando fui ver os IPs das tentativas de login, vinham de vários ISPs pelo mundo, e a maioria era de redes /16 diferentes entre si
Ver até botnet sendo usada contra contas “inúteis” me faz pensar em quão pior deve ser para pessoas realmente expostas
Depois que ativei 2FA, o problema sumiu completamente
Ainda não sei como eles encontraram esse fluxo de login com código de 6 dígitos em primeiro lugar (porque para mim sempre era só digitar a senha e entrar)
Mas, depois de ativar 2FA, nunca mais vi uma tentativa sequer
O código de 2FA também fica salvo no meu gerenciador de senhas
Fico feliz que agora eles não possam mais atacar essa loteria automática da Microsoft de “senha” de 6 dígitos (nem letras tem, só números!)
O pior de tudo é que esse tipo de autenticação piora os hábitos e as expectativas dos usuários
Com um gerenciador de senhas moderno como o 1Password, tudo fica muito mais fácil, seguro e rápido do que com token por e-mail
Só precisa de um pouco de cuidado na configuração inicial e na verificação em alguns dispositivos
É como copiar a chave da porta quando você se muda para um lugar novo: só dá tranquilidade quando você salvou no gerenciador de senhas e confirmou a sincronização nos outros dispositivos
As pessoas conseguem fazer isso
Mesmo sem entender criptografia ou o conceito de 2FA, basta clicar em “criar nova senha” e usar a senha aleatória que o app salva
Com passkey é a mesma coisa, desde que ela não fique apenas no armazenamento interno do dispositivo e você pense também em backup e recuperação
Ironicamente, o jeito antigo (digitar e-mail e senha) funciona melhor
O gerenciador de senhas já preenche tudo automaticamente, então na prática é muito mais rápido
Passkeys podem ser ainda mais rápidas que isso
Isso me frustra, mas 80% das pessoas à minha volta que não trabalham com TI parecem não saber nada de segurança e simplesmente desistiram do assunto
O caso de maior sucesso que vi foi anotar as informações da conta num caderninho e, no máximo, exigir que a senha tenha números e letras
Entendo o problema desse fluxo
Pela minha experiência, esse esquema de senha de uso único é o método de autenticação mais familiar para as pessoas não técnicas à minha volta depois da senha tradicional
Na pequena cidade onde moro, gerenciador de senhas e passkeys parecem ainda mais complicados, e mesmo explicando na frente da pessoa ela simplesmente não entende
O modelo mental é estranho demais, e a UX é complexa demais para ser compreendida
Até aparecer algo que o público geral entenda intuitivamente, acho que senha e esse modelo “problemático” de código de uso único vão continuar dominando por pura simplicidade
Mesmo que se use uma senha decente, o método de recuperação de conta quando a pessoa “esquece a senha” costuma ser esse mesmo padrão de código de uso único
No fim, um atacante só precisa agir “como se tivesse esquecido a senha” para entrar pelo fluxo de recuperação
Eu mesmo uso login por código de uso único em um serviço que criei
Só que ele não é sensível, então o objetivo não é ter autenticação forte
Eu até chamo isso de ICGAFAS (“I Couldn't Give A Factor” Auth System), para deixar claro que a segurança nem é uma preocupação ali
Autenticação baseada em e-mail também dá mais trabalho para administradores, com problemas de envio e entrega via SMTP etc.
No fim das contas, para não cair em blacklist ou filtro de spam, a realidade é que acaba sendo preciso usar um serviço de relay de terceiros
Me irrita muito que tantos serviços estejam forçando esse método de código de uso único no lugar de e-mail+senha ou login social
Eu só queria poder usar minha senha de 100 caracteres
Você não é o usuário-alvo
Na verdade, faz parte de uma minoria bem fora do comum
No longo prazo, é preciso pensar em soluções que possam se conectar com a “maioria”
Não acho que senhas longas como 100 caracteres façam diferença
Dependendo do comprimento da chave realmente usada pela criptografia por baixo, a senha acaba sendo truncada
Fui conferir se esse tipo de autenticação é oficialmente permitido na documentação do NIST (NIST 800-63b section 5.1.2.1)
Se for tratado como “Look-up Secret Authenticator”, não há nenhum problema especial
O que está acontecendo é um abuso de um mecanismo pensado originalmente para códigos de autenticação pré-distribuídos, como códigos de recuperação, transformando-o em envio em tempo real com escolha única
Acho esse método vulnerável a phishing, mas também é difícil afirmar com certeza que ele é mais perigoso do que o modelo tradicional de usuário/senha
Por exemplo, se pedirem ao usuário um código de 6 dígitos enviado ao e-mail, ele não consegue saber se esse código é para login legítimo ou não
Mas um atacante também pode enganar a pessoa com uma página falsa parecida com a do Google e roubar informações do mesmo jeito
No fim, acho que só autenticação resistente a phishing é o verdadeiro futuro
Tive que deletar minha conta do gofundme porque hoje caí de repente nesse ciclo de autenticação
Usei a conta por anos e fiz doações, mas agora passaram a exigir obrigatoriamente número de celular e código MFA, sem opção de recusar
Acabei fazendo todo o processo e desativei a conta
Acho esse tipo de autenticação um incômodo desnecessário na vida; dá para viver sem gofundme
Estou procurando casa ultimamente, e o app da Zillow faz a mesma coisa: exige login e, para ler as mensagens recebidas, pede MFA toda vez
A sessão expira em uma hora
Estou completamente cansado desse modelo de autenticação
O mundo enlouqueceu
A Ticketmaster faz algo parecido
Não aceita número do Google Voice e exige só número vinculado a SIM
Meu número de SIM muda com frequência e é só um “detalhe de implementação”, mas agora sem esse número não consigo entrar na conta
Na prática, ou desisto desse tipo de compra de ingressos, ou aceito o risco de ficar trancado para fora da conta toda vez que trocar de SIM
O Google ativou 2FA na minha conta por conta própria, e como o número de telefone cadastrado é antigo, a conta ficou completamente bloqueada
Quando um serviço muda sem aviso a senha e a autenticação em duas etapas, você pode perder o acesso para sempre se estiver viajando sem o telefone vinculado à conta
A maioria dos serviços trata a autenticação em duas etapas como mais segura do que minha senha aleatória de 20 caracteres, guardada no gerenciador de senhas local
Só que esses métodos de segundo fator costumam ser coisas bem fracas, como SMS em texto puro ou código enviado por e-mail em texto puro
Li essa frase quatro vezes e ainda não consegui entender
Era algo como: “se o atacante enviar o endereço de e-mail do usuário ao serviço legítimo e pedir um código de 6 dígitos, o usuário não tem como saber se esse código é para um login legítimo”