Desenvolvendo uma Estratégia de Quebra de Senhas

Desenvolvendo uma Estratégia de Quebra de Senhas

Muito frequentemente, hackers iniciantes na quebra de senhas procuram por uma única ferramenta ou técnica que resolva tudo, mas infelizmente (ou felizmente, para a segurança de redes), isso não existe. Cada tipo de senha exige uma estratégia única, adaptada à situação. Essa situação pode envolver o tipo de criptografia (MD5, SHA1, NTLM, etc.), se o ataque é remoto ou offline, se os hashes são com ou sem “salting”, e assim por diante. Sua estratégia de quebra de senhas deve ser específica para o contexto.

Neste tutorial, quero discutir uma abordagem estratégica para a quebra de senhas. Muitos iniciantes simplesmente executam suas ferramentas com listas enormes de senhas (wordlists) e torcem para que funcione. Se a senha não for quebrada, ficam sem saber o que fazer. Aqui, quero propor uma estratégia de múltiplas iterações que funcione na maioria dos casos — embora, claro, nenhuma funcione para todas as senhas, exceto o brute force, que exige muito tempo e poder computacional.

Captura de Hashes

Assumo aqui que o objetivo não é quebrar uma única senha, mas várias. Em geral, quebrar senhas começa com a captura dos hashes. Em sistemas Windows, os hashes ficam no arquivo SAM local ou no LDAP, se for um Active Directory. Em sistemas Linux e UNIX, estão no /etc/shadow. Esses hashes são formas de criptografia unidirecional, únicas para cada senha (ou quase isso). Em qualquer caso, é essencial saber qual o algoritmo de hash usado, senão você pode perder horas ou dias sem sucesso.

Por exemplo, Linux e Unix costumam usar MD5, enquanto versões modernas do Windows usam HMAC-MD5. Outros sistemas podem usar SHA1, MD4, NTLM, entre outros. Ferramentas como o John the Ripper têm detecção automática de hash (acertando em cerca de 90% dos casos), mas ferramentas como Cain and Abel ou Hashcat exigem que você especifique qual o tipo de hash.

Brute Force em Senhas Curtas

Embora pareça contraintuitivo, costumo começar forçando senhas bem curtas. Embora tentar senhas longas com brute force leve dias ou semanas, senhas curtas podem ser quebradas em minutos.

Começo com brute force em senhas de até 6 caracteres. Com bom hardware, isso leva pouco tempo. Em muitos ambientes, isso já revela algumas senhas.

Além disso, também tento senhas numéricas nesse estágio. Senhas apenas com números são as mais fáceis. Uma senha numérica de 8 dígitos tem só 100 milhões de possibilidades. Uma de 12 dígitos, 1 trilhão — ainda factível com hardware potente.

“Frutas Baixas” (Senhas Mais Fracas)

Depois de quebrar algumas senhas curtas, provavelmente ainda restam muitos hashes. Em ambientes corporativos, basta quebrar uma senha para começar uma invasão. Mesmo que o usuário tenha poucos privilégios, é possível escalar privilégios até root ou administrador.

Neste ponto, vamos atrás das “frutas mais baixas” — as mais fáceis. Por exemplo, se sabemos que a política da empresa exige senhas de 8 caracteres, muitas pessoas vão escolher exatamente 8, com palavras simples.

Use um dicionário com palavras de 8 caracteres. Isso pode levar algumas horas e pode revelar uma boa quantidade de senhas.

Tentar Senhas Comuns

Por mais que os usuários acreditem ser criativos, agimos como animais de rebanho: pensamos e agimos de maneira semelhante. Isso vale para senhas também.

Muitos escolhem algo fácil de lembrar, que ainda siga as regras mínimas de complexidade da empresa. É por isso que senhas como “P@ssw0rD” são tão comuns. Ela cumpre os requisitos (maiúsculas, minúsculas, número e caractere especial) e ainda assim é fácil de lembrar.

Nessa etapa, uso listas com senhas comuns. Muitos sites disponibilizam essas listas com senhas vazadas. Você também pode fazer scraping da web para montar suas próprias listas.

Combinar Palavras e Números

Depois de passar pelas senhas simples e comuns, é hora de atacar as mais complexas.

Agora usamos listas com palavras do dicionário combinadas com números. Usuários, quando forçados a trocar senhas, costumam apenas adicionar números ao final ou início da senha antiga. Ferramentas como Hashcat e John the Ripper permitem aplicar “regras” às wordlists, adicionando ou modificando caracteres, números e casos.

Ataques Híbridos

Depois de todas essas etapas, geralmente conseguimos quebrar mais de 50% das senhas. O restante será mais difícil: senhas com símbolos, substituições e combinações criativas.

Exemplos incluem: “c0xinha123”, “r3in0h4ck3r”. Apesar de parecerem complexas, ainda têm base em palavras comuns e são vulneráveis a ataques híbridos.

Para isso, precisamos de listas que combinem palavras do dicionário com números e caracteres especiais. O John the Ripper faz isso automaticamente. O Hashcat também permite aplicar regras avançadas com sua coleção de rule sets.

Se Nada Der Certo… Brute Force Total

Se tudo falhar, resta o brute force completo. Com uma CPU comum é lento, mas com botnets, ASICs para quebra de senhas ou múltiplas GPUs, pode ser extremamente rápido.

Por exemplo, um sistema com 25 GPUs pode fazer até 348 bilhões de hashes por segundo!

Mesmo no brute force, dá para ser estratégico. Se sabemos que a política exige no mínimo 8 caracteres, começamos por aí. Também podemos limitar o conjunto de caracteres: letras maiúsculas, minúsculas e números, por exemplo.

Ferramentas como Hashcat possuem módulos de política, que otimizam o brute force baseado no padrão de construção de senhas da empresa-alvo.

Conclusão

Para ter sucesso na quebra de senhas, é essencial seguir uma estratégia sistemática e iterativa, independentemente da ferramenta usada. Comece pelas senhas mais fáceis e vá avançando conforme a complexidade aumenta.

Essa abordagem depende do ambiente, ferramentas, wordlists e das políticas de senha em vigor. A estratégia que apresentei aqui pode (e deve) ser adaptada para o cenário em que você está atuando.

Leave a Reply

Your email address will not be published. Required fields are marked *