Como Lidar com Senhas Inseguras em Projetos Legados
May 8, 2017 00:00 · 572 words · 3 minute read
by Leandro Lugaresi
Aqui 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! Speed Hashing The good news is that hashing algorithms (assuming you didn’t roll your own, God forbid) were designed by professional…
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 a 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 prove diversos produtos e serviço que 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 email, 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 se logando, 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 a 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 possuí um post bem detalhado sobre essa prática e quais algoritmos de password hash devem ser utilizados.
Originally published at www.leandrolugaresi.com.br.