Imagine isto: você usa a mesma senha em vários sites há anos. Uma manhã, você recebe um alerta informando que suas credenciais estão circulando na dark web. Esta situação não é hipotética – acontece diariamente a milhares de usuários. No entanto, a maioria dos desenvolvedores ignora como verificar proativamente se suas próprias senhas foram comprometidas.
Ao contrário do que se poderia pensar, você não precisa ser um especialista em cibersegurança para criar ferramentas de proteção básicas. Em menos de 50 linhas de código Python, você pode construir um verificador de vazamentos de senhas que utiliza dados reais de violações. Este artigo guia você passo a passo na criação de tal ferramenta, explicando por que esta abordagem é mais eficaz do que verificações manuais e como integrá-la em seus fluxos de trabalho de desenvolvimento.
Por que escanear arquivos de texto para senhas em texto claro?
Antes mesmo de verificar se uma senha vazou online, é preciso primeiro garantir que ela não está armazenada em texto claro no seu código ou arquivos de configuração. Como destaca um usuário da Spiceworks Community, a busca por senhas codificadas em arquivos de texto é uma preocupação real para equipes de TI. O script Python que vamos desenvolver poderia ser adaptado para escanear diretórios em busca de strings que se assemelham a senhas – uma primeira linha de defesa frequentemente negligenciada.
A abordagem tradicional consiste em procurar padrões específicos, mas como observa a discussão na Spiceworks, este método tem suas limitações. Uma senha como "P@ssw0rd2025!" poderia escapar a uma busca baseada no termo "password". É por isso que nossa ferramenta se concentrará primeiro na verificação externa via bancos de dados de vazamentos conhecidos.
A API Have I Been Pwned: sua aliada contra vazamentos
O coração do nosso detector repousará na API Have I Been Pwned (HIBP), um serviço mantido por Troy Hunt que agrega bilhões de contas comprometidas. Em vez de transmitir a senha em texto claro, usaremos a técnica de k-anonimidade: apenas um prefixo do hash SHA-1 da senha é enviado, preservando assim a confidencialidade. A API retorna então a lista completa de hashes correspondentes a este prefixo, que compararemos localmente com o hash completo.
Esta abordagem, descrita em um artigo da DEV Community, representa o método recomendado para verificar vazamentos sem expor a senha original. Ela combina eficiência e respeito à privacidade – dois aspectos cruciais frequentemente em tensão em ferramentas de segurança.
O código: um script Python em três partes
1. Instalação das dependências
Nosso script necessita apenas da biblioteca `requests`, que você pode instalar via pip:
pip install requests
2. Função de hash segura
import hashlib
import requests
def check_password_leak(password):
# Criar o hash SHA-1 da senha
sha1_hash = hashlib.sha1(password.encode('utf-8')).hexdigest().upper()
prefix = sha1_hash[:5]
suffix = sha1_hash[5:]
# Consultar a API HIBP
url = f"https://api.pwnedpasswords.com/range/{prefix}"
response = requests.get(url)
if response.status_code == 200:
hashes = (line.split(':') for line in response.text.splitlines())
for h, count in hashes:
if h == suffix:
return True, int(count)
return False, 0
else:
raise Exception("Falha na requisição API")
3. Interface de usuário simples
def main():
print("=== Verificador de vazamentos de senhas ===")
password = input("Digite a senha a ser verificada: ")
try:
leaked, count = check_password_leak(password)
if leaked:
print(f"⚠️ Esta senha foi encontrada em {count} vazamentos de dados.")
print("Recomendação: altere-a imediatamente.")
else:
print("✅ Esta senha não foi encontrada em vazamentos conhecidos.")
print("Nota: isso não garante sua força ou segurança.")
except Exception as e:
print(f"Erro: {e}")
if name == "main":
main()
Além da verificação: geração e armazenamento seguros
Verificar vazamentos é apenas parte da equação. Se sua senha está comprometida, é preciso substituí-la – mas por quê? Como destaca o Stack Overflow, no Python 3.6+, o módulo `secrets` deve ser usado para gerar senhas criptograficamente seguras. Aqui está um exemplo complementar:
import secrets
import string
def generate_secure_password(length=16):
alphabet = string.ascii_letters + string.digits + string.punctuation
return ''.join(secrets.choice(alphabet) for _ in range(length))
Uma vez gerada uma nova senha, surge a questão do armazenamento. Outro tópico do Stack Overflow aborda justamente este problema: como armazenar de maneira segura credenciais em um script Python? As soluções vão da criptografia local ao uso de cofres de senhas dedicados, passando por tokens de acesso pessoais como os descritos na documentação da Microsoft para Azure DevOps.
Aplicações práticas e limitações
Este script básico pode ser estendido de várias maneiras:
- Escanear automaticamente arquivos de configuração em busca de senhas codificadas (como mencionado na Spiceworks Community)
- Integrar a verificação em um pipeline CI/CD para alertar se credenciais sensíveis são acidentalmente commitadas
- Criar uma interface web simples para equipes não técnicas
No entanto, ele apresenta limitações importantes. Ele verifica apenas contra vazamentos já documentados no HIBP. Uma senha fraca mas ainda não vazada passaria no teste. É por isso que a KnowledgeHut inclui projetos de teste de força de senha em sua lista de projetos de cibersegurança – as duas abordagens são complementares.
O futuro: quando o deep learning encontra a segurança de senhas
Uma abordagem fascinante emerge no lado da pesquisa: usar deep learning para identificar senhas em arquivos ou código. O projeto DeepPass, apresentado no SpecterOps, usa modelos de aprendizado profundo para detectar "candidatos a senhas" em contextos variados. Embora mais complexo de implementar do que nosso script simples, esta direção mostra como a IA poderia no futuro automatizar a detecção de configurações perigosas.
Conclusão: a segurança como prática diária
Construir um verificador de vazamentos de senhas em Python não é apenas um exercício técnico – é a adoção de uma mentalidade proativa frente aos riscos digitais. Ao entender como funcionam estas ferramentas, você se torna melhor equipado para avaliar a segurança de suas próprias práticas e daquelas de seus projetos.
O código apresentado aqui é um ponto de partida. Você poderia estendê-lo para gerenciar listas de senhas, adicionar testes básicos de força, ou integrá-lo a auditorias regulares. Em um mundo onde, segundo o artigo da DEV Community, bilhões de credenciais circulam na dark web, estas poucas linhas de Python poderiam fazer a diferença entre uma segurança ilusória e uma proteção real.
Comece testando suas próprias senhas – os resultados podem surpreendê-lo. Em seguida, compartilhe esta ferramenta com sua equipe. A segurança não é apenas assunto de especialistas; é uma responsabilidade coletiva que começa com ferramentas acessíveis.
Para ir mais longe
- DEV Community - Password Leaks: What Devs. Must Know - Tutorial sobre detecção de vazamentos de senhas com Python
- Spiceworks Community - Finding hard coded passwords in text files - Discussão sobre busca de senhas em texto claro em arquivos
- SpecterOps - DeepPass — Finding Passwords With Deep Learning - Abordagem avançada usando aprendizado profundo
- KnowledgeHut - Top Cyber Security Projects - Lista de projetos práticos em segurança da informação
- Stack Overflow - Generate password in Python - Melhores práticas para gerar senhas
- Stack Overflow - Securely store username and password in Python - Opções de armazenamento seguro de credenciais
- Microsoft Learn - Use Personal Access Tokens - Documentação sobre tokens de acesso pessoais
