
Adivinhador de senhas baseado em modelo de Markov em C que enumera candidatos por probabilidade, gerando as senhas mais prováveis primeiro para quebra de hash via Hashcat ou John.
OMEN é um adivinhador de senhas baseado em modelo de Markov escrito em C. Ele gera candidatos a senha de acordo com suas probabilidades de ocorrência, ou seja, ele produz as senhas mais prováveis primeiro. O OMEN melhora significativamente a velocidade de adivinhação em relação às propostas existentes. Se você estiver interessado nos detalhes de como o OMEN melhora as abordagens existentes de adivinhação de senhas baseadas em modelo de Markov, consulte OMEN: Faster Password Guessing Using an Ordered Markov Enumerator.
O OMEN consiste em dois módulos de programa separados: createNG e enumNG. O createNG
calcula as probabilidades de n-gramas com base em uma determinada lista de senhas e as armazena
no disco rígido. Com base nessas probabilidades, o enumNG enumera novas
senhas na ordem correta (decrescente).
Use uma versão recente do Linux e certifique-se de ter instalado git (sistema de controle de versão Git), gcc (GNU Compiler Collection) e make (GNU Make). Você pode instalá-los no Ubuntu Linux via:
$ sudo apt-get install build-essential git
Faça o checkout do código-fonte via:
$ git clone https://github.com/RUB-SysSec/OMEN.git OMEN
Mude para o diretório recém-criado OMEN e execute:
$ make
Se a compilação for bem-sucedida, você poderá encontrar createNG e enumNG no diretório atual.
.
├── alphabetCreator
├── createNG
├── docs
│ ├── CHANGELOG.md
│ ├── LICENSE
│ └── screenshots
├── enumNG
├── evalPW
├── makefile
├── README.md
└── src
├── alphabetCreator.c
...
Se quiser, você pode agora remover a pasta src e o arquivo makefile, eles não são mais usados.
Um breve guia de instalação usando Cygwin no Windows 10 pode ser encontrado aqui.
Antes de gerar qualquer senha, as probabilidades de n-gramas devem ser estimadas usando
createNG. Para calcular as probabilidades usando as configurações padrão, createNG deve ser
chamado fornecendo um caminho para uma lista de senhas que deve ser treinada:
$ ./createNG --iPwdList password-training-list.txt
Cada senha da lista fornecida deve estar em uma nova linha. O módulo então
lê e avalia a lista gerando alguns arquivos. Além de um arquivo de configuração (createConfig) que armazena as configurações usadas (neste caso, a configuração padrão), vários arquivos são criados contendo informações sobre os gramas e o comprimento da senha. Esses arquivos têm a extensão '.level':
As probabilidades de cada n-grama e os comprimentos são mapeados para níveis entre 0
(mais provável) e 10 (menos provável). Uma vez que esses arquivos são criados, enumNG pode
ser usado para gerar uma lista de senhas ordenadas por probabilidades. Atualmente, enumNG suporta três modos de operação: file, stdout, simulated plaintext attack. No modo padrão do enumNG, uma lista de adivinhações de senha baseada nesses níveis é criada. Usando o comando
$ ./enumNG
gera 1 bilhão de senhas e as armazena em um arquivo de texto, que pode ser encontrado
na pasta 'results'. As senhas nesse arquivo são ordenadas por nível (ou seja, por
probabilidade). Como editores de texto comuns não são capazes de lidar com arquivos tão grandes,
recomenda-se, para testes, reduzir o número de senhas criadas. Isso
pode ser feito usando o argumento -m.
$ ./enumNG -m 10000
Ele criará uma lista ordenada com apenas 10.000 senhas. Se você estiver interessado em imprimir as senhas para o fluxo de saída padrão (stdout) use o argumento -p.
$ ./enumNG -p -m 10000
Se você estiver interessado em avaliar o desempenho de adivinhação contra um conjunto de teste de senhas em plaintext use o argumento -s. Observe: Neste modo, o OMEN se beneficia do algoritmo adaptativo de agendamento de comprimento que incorpora feedback ao vivo, o qual não está disponível (devido ao canal de feedback ausente) nos modos file e stdout.
$ ./enumNG -s=password-testing-list.txt -m 10000
O resultado desta avaliação pode ser encontrado na pasta 'results'.
Ambos os módulos fornecem um diálogo de ajuda que pode ser mostrado usando o argumento -h ou --help.
Como ir de $2a$10$HNYF4KajSTqxIP/KoiB5tOCVeKUgvscTh32hhAmppFk4T/USmI2B. para "GoodOMEN!123"?
O OMEN foi desenvolvido para casos de uso acadêmicos como melhorar a modelagem probabilística de senhas, estimar números de tentativas ou força de senha, em geral, para melhorar a segurança de senhas. Não abuse deste software para prejudicar a privacidade de outras pessoas ou para infringir a lei.
Avaliadores de hash populares como Hashcat e John the Ripper suportam centenas de formatos de hash e cifra e poderiam ser facilmente integrados devido ao seu suporte para ler candidatos a senha via seu fluxo de entrada padrão (stdin).
$ ./enumNG -p -m 10000 | ./hashcat64.bin ...
ou
$ ./enumNG -p -m 10000 | ./john --stdin ...
Para um desempenho ótimo de adivinhação, considere treinar o createNG com uma distribuição de senhas semelhante à que você deseja quebrar.
Observe: Usar modelagem probabilística de senhas para quebrar senhas, em geral, deve ser considerado apenas contra hashes lentos (por exemplo, bcrypt, PBKDF2, scrypt ou Argon2) onde o número de tentativas viáveis é limitado ou em ataques muito direcionados. Em contraste, para hashes muito rápidos (MD5, SHA-1 ou NTLM), usar bons dicionários e regras de mangling (por exemplo, best64.rule) é o caminho a seguir.
Se você estiver interessado neste tópico, considere ler os seguintes artigos e seus trabalhos relacionados (esta lista está incompleta, você pode ajudar expandindo-a):
Gramáticas Livres de Contexto Probabilísticas
Modelos de Markov