Otimizar o Desempenho de Regras
Nesta etapa, você aprenderá sobre a otimização do desempenho de regras. Embora regras complexas sejam poderosas, elas também podem ser computacionalmente intensivas. O John the Ripper fornece mecanismos para otimizar a aplicação de regras, principalmente entendendo a ordem das operações e evitando regras redundantes.
Uma forma de otimizar é garantir que suas regras sejam o mais específicas possível e evitem gerar candidatos desnecessários. Por exemplo, se você sabe que uma senha sempre começará com uma letra maiúscula, aplicar uma regra que capitaliza todas as letras é ineficiente.
Considere o complex_rules.rule da etapa anterior. Cada regra aplica todas as substituições Leet Speak antes de anexar. Se você tivesse muitas regras desse tipo, repetir as substituições poderia ser menos eficiente do que aplicá-las uma vez e depois ramificar. No entanto, para casos simples, encadear dentro de uma única regra geralmente é eficiente o suficiente.
Para conjuntos de regras muito grandes ou cenários específicos, o John the Ripper permite sintaxe de regras mais avançada e arquivos de regras externos. Para este laboratório, focaremos em uma compreensão conceitual da otimização.
Uma técnica comum de otimização é filtrar sua lista de palavras ou direcionar padrões específicos com conjuntos de regras menores e separados, em vez de um único conjunto de regras massivo e abrangente.
Vamos demonstrar um conceito simples de otimização criando uma regra que só se aplica se a palavra for menor que um determinado comprimento, usando a regra l (length). Isso pode evitar a aplicação de regras complexas a palavras que já são muito longas para serem senhas comuns.
Crie um novo arquivo de regras chamado optimized_rules.rule no seu diretório ~/project.
nano ~/project/optimized_rules.rule
Adicione o seguinte conteúdo ao arquivo optimized_rules.rule:
: l<10 s/e/3 A!
l<10 significa "aplique esta regra apenas se o comprimento da palavra for menor que 10 caracteres".
s/e/3 substitui 'e' por '3'.
A! anexa um ponto de exclamação.
Salve o arquivo pressionando Ctrl+X, depois Y, e depois Enter.
Agora, vamos testar esta regra com nosso wordlist.txt.
john --wordlist=~/project/wordlist.txt --rules=~/project/optimized_rules.rule --stdout
Você deverá ver uma saída semelhante a esta:
s3cr3t!
p4ssw0rd!
Tanto "password" (8 caracteres) quanto "secret" (6 caracteres) têm menos de 10 caracteres, portanto a regra se aplica. Se você tivesse uma palavra como "superlongpassword" (17 caracteres), esta regra não se aplicaria a ela, economizando assim computação.
Entender como aplicar regras seletivamente com base em condições como comprimento pode melhorar significativamente o desempenho de suas tentativas de quebra, reduzindo o número de candidatos desnecessários gerados.