
PACK (Kit de Análise e Quebra de Senhas)
PACK (Password Analysis and Cracking Toolkit) é uma coleção de utilitários desenvolvidos para auxiliar na análise de listas de senhas, a fim de aprimorar a quebra de senhas por meio da detecção de padrões de máscaras, regras, conjuntos de caracteres e outras características de senhas. O kit gera arquivos de entrada válidos para a família de quebradores de senhas Hashcat.
OBSERVAÇÃO: O kit em si não é capaz de quebrar senhas, mas foi projetado para tornar a operação de quebradores de senhas mais eficiente.
Antes de começarmos a usar o kit, devemos estabelecer um critério de seleção de listas de senhas. Como estamos procurando analisar a maneira como as pessoas criam suas senhas, devemos obter a maior amostra possível de senhas vazadas. Uma excelente lista é baseada na violação do RockYou.com. Esta lista fornece uma coleção grande e diversificada que oferece bons resultados para senhas comuns usadas em sites semelhantes (por exemplo, redes sociais). A análise obtida desta lista pode não funcionar para organizações com políticas de senhas específicas. Portanto, selecionar uma amostra de entrada deve ser o mais próximo possível do seu alvo. Além disso, tente evitar obter listas baseadas em senhas já quebradas, pois isso gerará viés estatístico em relação às regras e máscaras usadas pelo(s) indivíduo(s) que quebraram a lista, e não pelos usuários reais.
A análise mais básica que você pode realizar é simplesmente obter o comprimento, conjunto de caracteres e outras características mais comuns das senhas na lista fornecida. No exemplo abaixo, usaremos 'rockyou.txt' contendo aproximadamente 14 milhões de senhas. Execute statsgen.py com a seguinte linha de comando:
$ python statsgen.py rockyou.txt
Abaixo está a saída do comando acima:
_
StatsGen #.#.# | |
_ __ __ _ ___| | _
| '_ \ / _` |/ __| |/ /
| |_) | (_| | (__| <
| .__/ \__,_|\___|_|\_\
| |
|_| [email protected]
[*] Analisando senhas em [rockyou.txt]
[+] Analisando 100% (14344390/14344390) das senhas
OBSERVAÇÃO: As estatísticas abaixo são relativas ao número de senhas analisadas, não ao número total de senhas
[*] Comprimento:
[+] 8: 20% (2966037)
[+] 7: 17% (2506271)
[+] 9: 15% (2191039)
[+] 10: 14% (2013695)
[+] 6: 13% (1947798)
...
[*] Conjunto de caracteres:
[+] loweralphanum: 42% (6074867)
[+] loweralpha: 25% (3726129)
[+] numeric: 16% (2346744)
[+] loweralphaspecialnum: 02% (426353)
[+] upperalphanum: 02% (407431)
...
[*] Complexidade da senha:
[+] digit: min(0) max(255)
[+] lower: min(0) max(255)
[+] upper: min(0) max(187)
[+] special: min(0) max(255)
[*] Máscaras Simples:
[+] stringdigit: 37% (5339556)
[+] string: 28% (4115314)
[+] digit: 16% (2346744)
[+] digitstring: 04% (663951)
[+] othermask: 04% (576324)
...
[*] Máscaras Avançadas:
[+] ?l?l?l?l?l?l?l?l: 04% (687991)
[+] ?l?l?l?l?l?l: 04% (601152)
[+] ?l?l?l?l?l?l?l: 04% (585013)
[+] ?l?l?l?l?l?l?l?l?l: 03% (516830)
[+] ?d?d?d?d?d?d?d: 03% (487429)
...
OBSERVAÇÃO: Você pode reduzir o número de outliers exibidos incluindo a flag --hiderare, que não mostrará nenhum item com ocorrência inferior a 1%.
Aqui está o que podemos aprender imediatamente com a lista acima:
A última seção, "Máscaras Avançadas", contém as máscaras mais frequentes usando o formato Hashcat. Símbolos individuais podem ser interpretados da seguinte forma:
?l - um único caractere minúsculo
?u - um único caractere maiúsculo
?d - um único dígito
?s - um único caractere especial
Por exemplo, a primeira máscara, "?l?l?l?l?l?l?l?l", corresponderá a todas as senhas alfanuméricas minúsculas. Dado o tamanho da amostra, você conseguirá quebrar aproximadamente 4% das senhas. No entanto, após gerar a saída inicial, você pode estar interessado em usar filtros para restringir os dados de senha.
Vamos ver como os usuários do RockYou tendem a selecionar suas senhas usando a máscara simples "stringdigit" (uma string seguida por números):
$ python statsgen.py ../PACK-0.0.3/archive/rockyou.txt --simplemask stringdigit -q --hiderare
[*] Analisando senhas em [rockyou.txt]
[+] Analisando 37% (5339556/14344390) das senhas
OBSERVAÇÃO: As estatísticas abaixo são relativas ao número de senhas analisadas, não ao número total de senhas
[*] Comprimento:
[+] 8: 23% (1267260)
[+] 7: 18% (981432)
[+] 9: 17% (939971)
[+] 10: 14% (750938)
[+] 6: 11% (618983)
[+] 11: 05% (294869)
[+] 12: 03% (175875)
[+] 13: 01% (103047)
[+] 14: 01% (65958)
[*] Conjunto de caracteres:
[+] loweralphanum: 88% (4720184)
[+] upperalphanum: 06% (325941)
[+] mixedalphanum: 05% (293431)
[*] Complexidade da senha:
[+] digit: min(1) max(252)
[+] lower: min(0) max(46)
[+] upper: min(0) max(31)
[+] special: min(0) max(0)
[*] Máscaras Simples:
[+] stringdigit: 100% (5339556)
[*] Máscaras Avançadas:
[+] ?l?l?l?l?l?l?d?d: 07% (420318)
[+] ?l?l?l?l?l?d?d: 05% (292306)
[+] ?l?l?l?l?l?l?l?d?d: 05% (273624)
[+] ?l?l?l?l?d?d?d?d: 04% (235360)
[+] ?l?l?l?l?d?d: 04% (215074)
...
O topo da saída especifica a porcentagem do total de senhas analisadas. Neste caso, quebrando apenas senhas que correspondem à máscara "stringdigit", é possível recuperar apenas cerca de 37% do conjunto total, conforme exibido na saída original. Em seguida, parece que apenas 11% deste tipo de senha usam algo diferente de minúsculas. Portanto, seria inteligente concentrar-se apenas em strings minúsculas que correspondam a esta máscara. Por fim, na seção "Máscaras Avançadas", podemos ver que a maioria das senhas "stringdigit" consiste em uma string com dois ou quatro dígitos após ela. Com as informações obtidas da saída acima, podemos começar a criar uma imagem mental dos padrões de geração de senhas dos usuários alvo.
Existem alguns outros filtros disponíveis para comprimento da senha, máscara e conjuntos de caracteres:
Comprimento: --minlength e/ou --maxlength
Máscara Simples: --simplemask [numeric, loweralpha, upperalpha, mixedalpha, loweralphanum, etc.]
Conjuntos de caracteres: --charset [digit, string, stringdigit, digitstring, digitstringdigit, etc.]
OBSERVAÇÃO: Mais de um filtro da mesma classe pode ser especificado como uma lista separada por vírgulas:
--simplemask="stringdigit,digitstring"