Segurança de Senhas e Credenciais
Esta aula aborda os fundamentos da segurança de senhas e credenciais, incluindo armazenamento seguro com hashing e salting, políticas de senhas, rotação de credenciais e o uso de gerenciadores de senhas. O conteúdo é prático e voltado para alunos intermediários, com exemplos e exercícios.
A segurança de senhas e credenciais é um dos pilares da segurança da informação. Senhas são a primeira linha de defesa contra acessos não autorizados, e seu gerenciamento inadequado pode comprometer sistemas inteiros. Nesta aula, exploraremos as melhores práticas para armazenamento, políticas, rotação e uso de gerenciadores de senhas, com foco em implementações seguras.
Entender como proteger credenciais é essencial para qualquer profissional de segurança. Vamos desde os conceitos básicos de hash e salt até estratégias avançadas de rotação e ferramentas modernas como gerenciadores de senhas.
Armazenamento seguro
Armazenar senhas de forma segura é fundamental. Nunca armazene senhas em texto puro. Em vez disso, utilize funções hash criptográficas (como bcrypt, scrypt ou Argon2) combinadas com um salt único para cada senha. O salt impede que hashes idênticos sejam gerados para senhas iguais, dificultando ataques de tabela arco-íris.
Além disso, utilize algoritmos lentos e com fator de custo ajustável para tornar ataques de força bruta mais caros. Por exemplo, bcrypt permite definir o número de rounds. Sempre use bibliotecas confiáveis e evite implementar sua própria criptografia.
Exemplo de hash com bcrypt (pseudo-código):
senha = "minhaSenhaSegura"
salt = bcrypt.gensalt()
hash = bcrypt.hashpw(senha, salt)
// Armazene o hash no banco de dados.
// Para verificar:
bcrypt.checkpw(senha_digitada, hash_armazenado)Políticas
Políticas de senhas definem regras para criação e uso de senhas. Exigências comuns incluem comprimento mínimo (12+ caracteres), uso de maiúsculas, minúsculas, números e símbolos. No entanto, estudos mostram que senhas longas e fáceis de lembrar (frases) são mais eficazes do que combinações complexas curtas.
Políticas também devem proibir senhas comuns (como "123456" ou "password") e reuso de senhas recentes. É importante equilibrar segurança com usabilidade para evitar que usuários recorram a práticas inseguras, como anotar senhas em post-its.
Exemplo de política:
- Mínimo de 12 caracteres
- Pelo menos uma letra maiúscula, uma minúscula, um número e um caractere especial
- Não pode conter partes do nome de usuário
- Não pode ser igual a nenhuma das últimas 5 senhasRotação
Rotação de senhas é a prática de trocar senhas periodicamente. Embora seja comum, especialistas hoje recomendam rotação apenas quando há suspeita de comprometimento, pois a rotação forçada frequente pode levar a senhas fracas ou reutilizadas. A NIST (National Institute of Standards and Technology) revisou suas diretrizes, sugerindo que a rotação periódica não é mais necessária se a senha for forte e não houver incidentes.
No entanto, em alguns contextos (como contas de administrador ou sistemas críticos), a rotação ainda é recomendada. A automação da rotação, via scripts ou ferramentas de gerenciamento, reduz o risco de erro humano.
Exemplo de script de rotação automática (bash):
#!/bin/bash
NOVA_SENHA=$(openssl rand -base64 18)
echo "admin:$NOVA_SENHA" | chpasswd
echo "Senha alterada com sucesso"Password managers
Gerenciadores de senhas são ferramentas que armazenam e gerenciam senhas de forma segura, geralmente criptografadas com uma senha mestra. Eles eliminam a necessidade de memorizar múltiplas senhas fortes e ajudam a evitar reutilização. Exemplos populares incluem LastPass, 1Password, Bitwarden e KeePass.
Além de armazenar senhas, muitos gerenciadores geram senhas aleatórias fortes, preenchem formulários automaticamente e sincronizam entre dispositivos. A segurança do gerenciador depende da criptografia forte e da proteção da senha mestra. Recomenda-se usar autenticação multifator (MFA) para proteger o cofre.
Exemplo de geração de senha forte via linha de comando (Linux):
< /dev/urandom tr -dc 'A-Za-z0-9!@#$%^&*()_+' | head -c 20; echoBoas práticas e observações finais
Além dos tópicos abordados, lembre-se de implementar autenticação multifator sempre que possível, monitorar tentativas de login suspeitas e educar os usuários sobre phishing. A segurança de senhas é uma responsabilidade compartilhada entre sistemas e pessoas.
Referências
- OWASP Password Storage Cheat Sheet
- NIST SP 800-63B: Digital Identity Guidelines
- OWASP Authentication Cheat Sheet
- Password Manager Reviews and Comparisons
- Django Password Management Documentation
Exercícios
Explique por que é importante usar um salt ao armazenar hashes de senhas.
✓ Resposta: O salt é um valor aleatório adicionado à senha antes de aplicar o hash, garantindo que senhas iguais gerem hashes diferentes. Isso impede ataques de tabela arco-íris e dificulta a descoberta de senhas comuns mesmo que o banco de dados seja comprometido.Cite três requisitos comuns em políticas de senhas e explique por que senhas longas são preferíveis a senhas curtas e complexas.
✓ Resposta: Requisitos comuns: comprimento mínimo (ex.: 12 caracteres), uso de diferentes tipos de caracteres (maiúsculas, minúsculas, números, símbolos), e proibição de senhas comuns. Senhas longas aumentam exponencialmente o espaço de busca, tornando ataques de força bruta inviáveis, enquanto senhas curtas e complexas são mais difíceis de lembrar e podem levar a práticas inseguras.Em que situações a rotação periódica de senhas é recomendada? E quando não é?
✓ Resposta: A rotação periódica é recomendada quando há suspeita de comprometimento, em contas de alto privilégio ou em sistemas com requisitos regulatórios específicos. Não é recomendada para usuários comuns sem evidência de comprometimento, pois pode levar a senhas fracas e reutilização. A NIST atualmente desaconselha a rotação forçada periódica.Liste duas vantagens de usar um gerenciador de senhas e uma precaução importante ao utilizá-lo.
✓ Resposta: Vantagens: 1) Gera e armazena senhas fortes e únicas para cada serviço; 2) Facilita o login automático e reduz a necessidade de memorizar senhas. Precaução: Proteger a senha mestra com autenticação multifator e nunca compartilhá-la.Descreva o processo de verificação de uma senha armazenada com hash e salt.
✓ Resposta: Ao verificar, o sistema recupera o hash armazenado e o salt associado. Concatena o salt com a senha fornecida, aplica a mesma função hash e compara o resultado com o hash armazenado. Se forem iguais, a senha está correta. Exemplo com bcrypt: bcrypt.checkpw(senha_digitada, hash_armazenado) já extrai o salt internamente.