filipedeschamps / tabnews.com.br

Conteúdos para quem trabalha com Programação e Tecnologia.
https://tabnews.com.br
GNU General Public License v3.0
5k stars 369 forks source link

Implementar Two Factor #1171

Open filipedeschamps opened 1 year ago

filipedeschamps commented 1 year ago

Contexto

Não sei se o Two Factor precisa de muito contexto, mas no que trata do TabNews, devemos poder oferecer isso no Login e na alteração de dados cadastrais.

Execução

Ao alterar um dado cadastral, a gente deveria pedir o Token do Two Factor, ou a senha? O mais seguro é o Token, correto?

cybernerd007 commented 1 year ago

bom tendo em vistá os ataques recentes do youtubers onde se era roubado a sessão e mesmo tendo a verificação em 2 etapas ativas era possivel logar usando a sessão roubada, recomendo aqui diminuir a vida ultil da sessão do usuario (cookie) assim seria uma SOLUÇÃO PALEATIVA PARA EVITAR FUTURAS DORES DE CABEÇA para caso ocorra o roubo de sessão dificilmente isso traga um impacto maior ao usuario final.

Ao alterar um dado cadastral, a gente deveria pedir o Token do Two Factor, ou a senha? O mais seguro é o Token, correto?

Recomendo pedir os 2 assim como faz o Github quando é solicitado a exclusão de um repositorio, primeiro pede a senha em sequencia pede o token...

o que acha?

filipedeschamps commented 1 year ago

Nas vezes que o GitHub me pede uma segunda autenticação, recentemente ele me pede por padrão o Token, mas se eu quiser, posso ignorar e colocar apenas a Senha. Acho que pedir a Senha e o Token atrapalha demais a UX.

O que acha de, se o Two Factor estiver desabilitado, pede só a senha, e se estiver habilitado, pede só o token?

cybernerd007 commented 1 year ago

Nas vezes que o GitHub me pede uma segunda autenticação, recentemente ele me pede por padrão o Token, mas se eu quiser, posso ignorar e colocar apenas a Senha. Acho que pedir a Senha e o Token atrapalha demais a UX.

O que acha de, se o Two Factor estiver desabilitado, pede só a senha, e se estiver habilitado, pede só o token?

Show!! Perfeito dessa forma..

coffeeispower commented 1 year ago

Deve ser fácil adicionar isso no meu pr.

Também uma coisa que ficou meio estranho e que ele adiciona a caixa do código no login, acho que seria melhor um dialog, eu vou ver isso depois....

Rafatcb commented 4 months ago

O token do segundo fator de autenticação será um código enviado via e-mail ou um TOTP? Eu estava pesquisando sobre isso agora, e acho que um TOTP traz mais complexidade do que benefícios (digo isso tendo em mente que o issue surgiu no fim de 2022 e estamos no início de 2024):

Também pesquisei sobre passkeys e parece que isso poderia ser usado como um 2FA. Citando essa página do Google:

Caso sua conta use a verificação em duas etapas ou se estiver inscrita no Programa Proteção Avançada, uma chave de acesso não precisará passar pela segunda etapa de autenticação, porque ela confirma que o dispositivo está em sua posse.

Eu (acho que) nunca usei passkeys, então não sei dizer quais mecanismos de fallback costumam ser usados no cenário de 2FA caso o usuário não tenha um passkey no dispositivo. As grandes empresas (Google, Microsoft) costumam ter várias formas de autenticação (MFA), mas acho que para nós, se/quando formos adicionar uma, o ideal é escolher a com maior custo-benefício: a que trará menos complexidade ao mesmo tempo que adicionará uma nova camada de segurança.

coffeeispower commented 4 months ago

Mas tambem perder o TOTP é tipo fechar a gaveta a chave com a chave la dentro, o usuario tem que ter cuidado com isso. Os aplicativos de TOTP evoluiram para evitar isso por exemplo com backups na cloud como no proton pass. Mas acho que da pra implementar os dois e deixar a pessoa escolher como no github.

As bibliotecas de TOTP não tem atualizações não por falta de manutenção mas porque simplesmente estão acabados, sei que vocês tao habituados a cada semana tem um framework da moda mas não é esse o caso, TOTP é uma coisa bem estavel, uma vez implementado não precisa ser alterado. Imagina se futebol mudasse o campo de futebol ou a bola todos os anos porque senão consideram um jogo abandonado, já teria acabado faz tempo.

ravenastar-js commented 4 months ago

Vários especialistas da área de segurança informam que o uso de 2FA é importante, pois com 2FA ativado vai inviabilizar / mitigar a maioria de invasões / ataques de usuários mal-intencionados nas contas de terceiros, a realidade é que hoje em dia há muitos vazamentos de dados, usuários usam a mesma senha em várias plataformas diferentes ( isso é triste mas é a realidade ), usam software pirata o que ocasiona vários riscos de segurança e entre outras situações, com isso tudo já aumenta a chance de um invasor acessar a conta do usuário com tentativa e erro em relação as informações vazadas, OSINT, metadados e afins...

Quando o usuário tem 2FA ativado na conta dele, se o invasor tiver login + senha, só com esses dados o invasor não consegue acessar 100% a conta do usuário sem o código TOTP, óbvio que os golpistas não são bobos é melhoraram os golpes, eles sabem que essa segurança do 2FA é bem eficaz, então por isso que eles usam o ataque "Session hijacking" que é o roubo de sessão + engenharia social + phishing... Quando mais camadas de segurança pra dificultar a vida do invasor, melhor é, 2FA trará segurança extra para conta do usuário, não complexidade...

Rafatcb commented 4 months ago

Mas tambem perder o TOTP é tipo fechar a gaveta a chave com a chave la dentro, o usuario tem que ter cuidado com isso.

Já vi um funcionário de uma academia tendo que cortar um cadeado porque deixaram a chave dentro do armário. Quando você lida com pessoas, entende que esse tipo de situação é bem menos incomum do que parece.

As bibliotecas de TOTP não tem atualizações não por falta de manutenção mas porque simplesmente estão acabados, sei que vocês tao habituados a cada semana tem um framework da moda mas não é esse o caso, TOTP é uma coisa bem estavel, uma vez implementado não precisa ser alterado.

Na verdade, não é isso. Como eu disse, as bibliotecas que citei possuíam vários Issues e PRs abertos há anos. Seja para atualizar dependências (das bibliotecas que tinham), seja por outros motivos.

Veja, por exemplo, a biblioteca otplib: 37 issues, 48 pull requests e uma documentação offline desde 2020. Isso significa que o projeto não é mantido. O padrão TOTP é bem estabelecido, mas isso não significa que as bibliotecas não tenham problemas. Inclusive, é uma opção implementarmos nós mesmos a solução, se for necessário, mas sempre tentamos evitar isso para não gastar tempo naquilo que não é o foco do negócio.

Agora, veja a biblioteca totp-generator. Ela existe há 8 anos, nenhum Issue ou PR aberto, e o último commit foi há duas semanas. Isso é bom? Isso é ruim? Precisa avaliar caso a caso. Não dá para generalizar.

E existem várias outras bibliotecas: speakeasy, otpauth, otp-io, notp etc.

Os aplicativos de TOTP evoluiram para evitar isso por exemplo com backups na cloud

Sim, hoje está melhor do que um ano atrás, por exemplo, quando o Google Authenticator não tinha backup.

Imagina se futebol mudasse o campo de futebol ou a bola todos os anos porque senão consideram um jogo abandonado, já teria acabado faz tempo.

Analogias assim não são agregam valor à discussão. O "futebol" não faz nada, mas os times cuidam do gramado do campo e trocam ele, por exemplo. Recomendo a leitura: Argument from analogy.


Vários especialistas da área de segurança informam que o uso de 2FA é importante, pois com 2FA ativado vai inviabilizar / mitigar a maioria de invasões / ataques de usuários mal-intencionados nas contas de terceiros

Essa frase precisa de referências. 2FA é literalmente qualquer coisa. O segundo fator de autenticação pode ser enviar uma selfie para um e-mail do site e um humano avaliar e considerar válida. A depender do método escolhido, você pode apenas ter aumentado a falta de segurança da sua conta. Por esse motivo, é altamente não recomendado usar 2FA com SMS, por exemplo.

Quando o usuário tem 2FA ativado na conta dele, se o invasor tiver login + senha, só com esses dados o invasor não consegue acessar 100% a conta do usuário sem o código TOTP

Como eu disse neste e no meu primeiro comentário, 2FA não é só TOTP, o envio de um token por e-mail também é 2FA.


Não me entendam mal. Eu uso TOTP para outros serviços, como mencionei em meu primeiro comentário, e todos me disponibilizam uma forma de "recuperar o TOTP", seja enviando fotos e documentos por e-mail, seja com os códigos de recuperação. Essa resposta fala mais sobre o assunto, mas praticamente não adiciona nada novo ao que eu já disse.

ravenastar-js commented 4 months ago

Como eu disse neste e no meu primeiro comentário, 2FA não é só TOTP, o envio de um token por e-mail também é 2FA.

Eu sei disso, hora alguma discordei de você, só informei que 2FA é importante, qualquer fator de segurança extra é fudamental, porém não implementar algo do tipo dar a entender que estão "negligenciando segurança".

cybernerd007 commented 4 months ago

Quero deixar uma sugestão de se o login for feito em um novo dispositivo que seja enviado um e-mail informando o login em um novo dispositivo, pois infelizmente os usuários geralmente reciclam as senhas e utilizam a mesma em vários serviços que pode ser propensas a vazamento de dados...

Acredito que o Two Factor seja algo indispensável porem "PODE" abrir algumas brechas porem rodarei os testes assim que implementado em homologação.

lspaulucio commented 1 month ago

Fala pessoal, tudo certo com vocês?

Estava abrindo uma PR para adicionar TOTP no TabNews e vi que existia essa issue aberta.

Dei uma lida na discussão de vocês e seguem algumas considerações minhas:

Sobre o comentário do @filipedeschamps

O que acha de, se o Two Factor estiver desabilitado, pede só a senha, e se estiver habilitado, pede só o token? Concordo em partes com o Filipe.

Para mim no momento do login, caso o MFA esteja configurado, é necessário que seja solicitado tanto a senha quanto o token, visto que a ideia do MFA é ter um outro fator para autenticar o usuário. Caso peça um ou outro acaba que o MFA não faz muito sentido pois acaba virando um e-mail e "senha/token".

Contudo, para um usuário, que já esteja autenticado, realizar alguma alteração interna no TabNews que precise de uma confirmação/validação do usuário, acredito que solicitar a senha ou o token seja uma opção válida.

Sobre os comentários do @Rafatcb

Será necessário ter códigos de recuperação para conseguir acessar a conta sem ter o TOTP (importante caso o usuário tenha perdido acesso ao dispositivo que contém a chave, por exemplo). Alguns exemplos de sites que usam isso são o GitHub, NPM, LinkedIn, Microsoft, Discord etc. Pergunta e resposta no FAQ para orientar o usuário que ficar "trancado para fora" da conta. Apesar dos cuidados citados nos últimos tópicos, possivelmente teria um pequeno aumento na necessidade de suporte via e-mail. Se considerarmos que um humano poderia liberar a conta, então surgiria um novo risco com golpes de engenharia social.

Na minha implementação eu não utilizei códigos de recuperação para esses casos. O que fiz foi uma alteração no fluxo de recuperação de conta. Caso o usuário perca o token, basta ele realizar o fluxo normal de recuperação. Durante o processo o TOTP é desabilitado e o usuário precisa realizar a configuração novamente. Não pensei nessa questão do FAQ, preciso incluir essa informação lá :sweat_smile:

Com relação as bibliotecas, confesso que não tinha parado para analisar isso. Eu usei na implementação as bibliotecas qrcode e otpauth. Não sei se foram as melhores opções, escolhi elas porque foram uma das primeiras que encontrei pesquisando na internet. Dei uma olhada rápida aqui e vi que a otpauth aparenta ser atualizada com frequência, a última alteração foi há 19 dias e possui 1 issue. Já a qrcode teve a última alteração a 1 ano e tem 64 issues abertas. Caso achem importante posso dar uma pesquisada mais a fundo para ver se encontro bibliotecas mais novas/utilizadas.

Sobre passkey, concordo que parece ser um tipo de MFA mais simples e mais agradável para o usuário. Configurei passkey (não cheguei a ver como funciona a fundo) no GitHub para testar e achei bem legal!!! Ele não pede usuário e senha, utiliza apenas o passkey configurado. Do ponto de vista do usuário acho que é mais atrativo, inclusive segue a ideia que o @filipedeschamps falou lá no início. Talvez seja um método de MFA a ser implementado futuramente no TabNews em, o que acham? :smile:

Mas mesmo com essas questões de bibliotecas e complexidade levantadas sobre o TOTP, acho importante o TabNews ter um MFA disponível para aumentar a segurança dos usuários.