Quebrando minha primeira senha

Views: 577
0 0
Read Time:6 Minute, 51 Second

O empregador da minha filha enviou um formulário de imposto por e-mail como um arquivo PDF criptografado. O e-mail dizia: “A senha para abrir este documento é sua data de nascimento neste formato MMDDYYYY e os últimos 4 dígitos do seu número SS.” Abri o documento e digitei a senha conforme indicado.

Mas não deu certo.

Eu verifiquei o número de segurança social da minha filha e a data de nascimento dela (às vezes confundimos essas coisas). Eu tentei coisas como colocar os quatro últimos sociais dela primeiro, seguidos pela data formatada. Tentei formatar a data de uma dúzia de maneiras diferentes. Tentei transpor alguns números no SSN dela. Nada funcionou.

Enviei um email para seu empregador:

Não podemos abrir o formulário de <filha> usando MMDDYYYY, seguido imediatamente pelos últimos 4 dígitos do seu número SS. Você já teve algum relato de outras pessoas que não podem abrir o deles?

Resposta:

Não, não ouvi dizer que mais alguém teve esse problema. Posso imprimir e enviar por correio ou ela pode buscá-lo, o que for mais conveniente.

Nos últimos seis anos, fiquei completamente sem papel com nossos impostos. Eu guardo todos os nossos formulários fiscais digitalmente, organizados por ano. Eu prefiro gerenciar documentos digitais em vez de documentos em papel, que se acumulam ao longo dos anos e precisam ser (fisicamente) armazenados, organizados e movidos.

É claro que eu poderia esperar o documento chegar pelo correio e depois digitalizá-lo, mas qual é a graça disso? Então eu levei para o Google:

Para “força bruta” uma senha significa tentar todas as combinações possíveis de caracteres até que você finalmente adivinhe a senha correta. No meu caso, eu tinha certeza de que a senha do formulário fiscal da minha filha consistia em 12 dígitos. Nesta era da computação, isso não pode ser muito difícil de decifrar, pode?

A primeira etapa foi extrair o hash da senha do documento PDF. Se “hash” faz você pensar em “hash browns”, você não está muito longe da verdade. Os hashes de senha são até “salgados” para torná-los mais difíceis de decifrar.

Para fazer batatas douradas com hash, é necessário ralar as batatas em pequenos pedaços. Vamos chamar essa ferramenta de grade de “algoritmo de hash”. Para continuar a analogia, para quebrar nossa senha, precisamos alimentar batata após batata através do algoritmo de hash até encontrar uma que saia exatamente como o hash original. Como você pode imaginar, é preciso muita batata.

Você já está com fome?

Eu também. Aqui está a minha receita:

No futuro, apenas as crianças legais escreverão. Apenas assista.

Primeiro, faça o download e instale o Perl . Perl é uma linguagem de programação super geek que eu gostaria de conhecer. Estou no Microsoft Windows (ei, seja legal), então experimentei os sabores ActiveState e Strawberry do Perl. Ambos funcionam, a parte crítica é garantir que o Windows associe a extensão de arquivo .pl ao Perl.

Em seguida, baixei o repositório do GitHub para John the Ripper . John, o Estripador (doravante denominado “JtR”) é outra ferramenta nerd com uma história realmente longa. Seu principal objetivo é ralar nossas batatas em hashes o mais rápido possível até conseguirmos uma partida. Eu baixei a compilação do Windows e descompactei. Não requer instalação.

Não é muito claro no que clicar para baixar a compilação, então aqui está uma captura de tela.

Eu localizei a pasta “run” dentro do diretório JtR e copiei o arquivo PDF (“TaxForm.pdf”) que estava tentando invadir. Eu estava preparando meu espaço de trabalho.

Abri o prompt de comando do Windows e naveguei para o diretório JtR “run”, onde há uma infinidade de scripts Perl e Python que podemos usar para extrair hashes de senhas de todos os tipos diferentes de arquivos: 7z2john.pl, cisco2john .pl, itunes_backup2john.pl, etc. O que eu precisava era chamado pdf2john.pl .

A execução da pdf2john.pl TaxForm.pdfsaída do hash do arquivo PDF na tela. Mas o JtR precisa desse hash em um arquivo de texto. Então, redirecionei a saída para um arquivo de texto adicionando >hashfile.txt.

(Esse hash não é realmente o hash da data de nascimento e do SSN da minha filha.)

Eu estava quase pronto para começar a rachar. Eu só precisava descobrir como dizer ao JtR para tentar apenas combinações de números de 0 a 9 com 12 caracteres. A opção de dizer ao JtR para usar apenas números é --incremental=digits, mas especificar um comprimento de 12 caracteres requerido para editar o arquivo john.conf (convenientemente localizado no diretório “run”).

O bloco de notas normal do Windows não detectará as quebras de linha no arquivo john.conf, então eu o abri com o Notepad ++. É um arquivo grande, mas encontrei os parâmetros que procurava em torno da linha 1210. Configurei MinLen = 12MaxLen = 12.

Eu acionei o JtR com john --incremental=digits hashfile.txt

O JtR começa a executar – na minha máquina – mais de 50.000 combinações por segundo através de seu algoritmo de hash, tentando encontrar um hash correspondente ao que extraímos do TaxForm.pdf. O JtR não exibe muita saída na tela, mas continuará sendo executado em segundo plano até que Ctrl-C seja pressionado. Para obter mais detalhes sobre o que está fazendo, eu precisava verificar repetidamente o arquivo john.log:

Eu deixei correr a noite toda e até o dia seguinte. Então me ocorreu: existem 900 bilhões de combinações diferentes de 12 dígitos. Com 50.000 tentativas por segundo, levaria mais de 6 meses para experimentar todas. É claro que posso ter sorte e encontrar o hash certo depois de apenas algumas semanas, mas ainda há muito tempo. Realmente não vale a pena se o empregador da minha filha puder nos enviar o formulário em poucos dias.

[Devo observar que minha máquina possui um processador Core i5. Já ouvi falar de pessoas capazes de encadear um monte de processadores PlayStation em série. Eles provavelmente podem acelerar esse processo 100 vezes mais rápido do que minha pequena CPU.]

Comecei a me perguntar se havia uma maneira melhor.

Outra maneira pela qual o JtR pode decifrar senhas é por ataque de dicionário . Em vez de o JtR tentar todas as combinações aleatórias possíveis de caracteres, fornecemos uma lista de senhas pré-geradas que ele pode tentar.

No padrão de [data de nascimento em MMDDYYYY + últimos quatro dígitos do SSN], imaginei que havia apenas seis dígitos únicos usados, e eu poderia reduzir para cinco se presumir que os três primeiros (a parte MMD) foram corrigir. Então, reuni o seguinte código do Powershell para gerar uma lista de todas as permutações possíveis dos nove dígitos finais, prefixados pelos três primeiros que eu esperava que estivessem corretos.

Esse script levou cerca de 15 minutos para ser concluído, mas, quando concluído, eu tinha uma lista com mais de 600.000 permutações que eu poderia usar para tentar quebrar o hash da senha do TaxForm.pdf.

Copiei meu arquivo list.txt para o diretório de execução do JtR e tentei
john --wordlist=list.txt hashfile.txt

JtR encontrou facilmente a senha em apenas alguns segundos. Ele foi exibido na minha tela como mostrado acima, mas isso pode ter acontecido porque eu pedi alguns ajustes adicionais no arquivo john.conf. De qualquer forma, o JtR armazena senhas que quebram em um arquivo chamado john.pot.

Descobri que o empregador da minha filha tinha seu número de segurança social errado. Foi até incorreto no formulário de imposto que eu finalmente consegui abrir. Tive a sorte de que eles erraram de tal maneira que foram capturados por uma das permutações limitadas que eu tinha na minha lista de palavras.

Uma observação final: para ataques de dicionário, o JtR foi bastante específico sobre a codificação do arquivo da lista de palavras que eu forneci. Funciona melhor quando o arquivo é codificado como UTF-8.

FONTE: MEDIUM

POSTS RELACIONADOS