Back-End

19 mai, 2017

Como lidar com senhas inseguras em projetos legados

Publicidade

Na Coderockr, nós, eventualmente, nos deparamos com sistemas legados e muitas vezes inseguros. Um dos problemas mais comuns é a utilização de funções hash como MD5, SHA1, SHA-256 em senhas. O uso dessas funções apresenta alguns riscos que as aplicações não deveriam estar correndo, mas antes de abordar as soluções, vamos ver porque o uso deses algoritmos de hash representam um risco de segurança.

Por que funções hash não devem ser usadas em senhas?

Basicamente, funções hash foram criadas para verificar a integridade de dados de forma eficiente e no menor tempo possível, sendo um grande problema quando estamos lidando com senhas, pois não fornecem nenhuma defesa contra ataques de força bruta.

Se você acha que isso não é algo tão importante ou não sabia disso, o Jeff Atwood fez um post bem detalhado sobre o assunto em 2012!

Agora que sabemos do problema na utilização dessas funções, podemos ir para as soluções:

Solução 1:  Pare de usar senhas!

ALTER TABLE users DROP COLUMN password;

Senhas estão obsoletas há um bom tempo e podem/devem ser substituídas por mecanismos possivelmente mais seguros. Muitas empresas como Medium, Telegram, Instagram, Uber e WhatsApp já aderiram a essa prática.

Ficou com medo de fazer uma mudança tão grande? Bom, você deveria ficar com medo é de ser um dos responsáveis por garantir a segurança dessas informações!

Embora essa opção possa dar trabalho para se utilizar em projetos que já estejam em produção, é possivelmente mais econômico utilizar serviços de terceiros ao invés de manter uma solução você mesmo.

Algumas opções que podem ser usadas:

  • Auth0 — A Auth0 é uma empresa que provê diversos produtos e serviço relacionados a autenticação e autorização e facilitam muito a sua vida com segurança;
  • Keycloak — O Keycloak é um sistema open source para gerenciamento de acesso e usuários, é o melhor identity provider open source que eu já encontrei e é mantido pela Redhat;
  • Usar uma biblioteca como a OmniAuth e utilizar algum dos provedores de login;
  • Account Kit — O Account Kit é um produto do Facebook para prover registro e login de usuários através de SMS ou e-mail, sem a necessidade de senhas e com o foco principal em aplicativos mobile.

Solução 2: Migrar as senhas para uma solução mais segura

Existem algumas abordagens utilizadas para migrar as senhas, por exemplo, podemos forçar todos os usuários a recuperarem as senhas e utilizar o novo algoritmo quando a nova senha for utilizada – embora está opção não seja recomendável.

Outra opção é ir utilizando o novo algoritmo nos novos usuários e nos usuários antigos, conforme eles forem logando. Mas essa solução é ruim, pois os usuários inativos continuarão com hashes inseguros, se acontecer um vazamento da sua base de dados. Podemos resolver isso removendo a senha de usuários que não se logam há muito tempo.

Para mim, a melhor solução nesse caso é uma abordagem um pouco diferente. Vamos utilizar o resultado do hash antigo como entrada para o novo algoritmo de senhas; dessa forma, precisamos apenas fazer a migração dos hashes antigos para o novo e os usuários não irão perceber!

Se você ficou interessado nessa abordagem, o pessoal da Paragon Initiative possui um artigo bem detalhado sobre essa prática e quais algoritmos de password hash devem ser utilizados.

***

Artigo originalmente publicado em www.leandrolugaresi.com.br