Lançada Nova versão do programa de recuperação de senhas mais antigo suportado, John the Ripper 1.9.0-jumbo-1. (O projeto está em desenvolvimento desde 1996.) Em página do projeto os códigos-fonte estão disponíveis para download, bem como versões prontas para Windows.
Observa-se que se passaram 4,5 anos desde o lançamento da versão 1.8.0-jumbo-1, período no qual mais de 6000 alterações (commits do git) foram feitas por mais de 80 desenvolvedores. Durante esse tempo, os desenvolvedores recomendaram o uso de a versão atual do GitHub, cujo estado foi mantido estável apesar das alterações realizadas, devido a integração contínua, que inclui uma verificação prévia de cada alteração (pull request) em várias plataformas. Uma das características da nova versão é a inclusão de suporte para FPGA (circuitos integrados de porta programável) além de CPU, GPU e Xeon Phi.
Para placas ZTEX 1.15y, que incluem 4 chips FPGA e que eram originalmente usadas principalmente para mineração de Bitcoin, agora são implementados 7 tipos de hashes de senhas: bcrypt, descrypt clássico (incluindo bigcrypt), sha512crypt, sha256crypt, md5crypt (incluindo Apache apr1 e AIX smd5), Drupal7 e phpass (usado, em particular, no WordPress). Alguns deles são implementados em FPGA pela primeira vez. Para bcrypt, a performance alcançada é de ~119k c/s com 2^5 iterações ("$2b$05") com um consumo de energia de cerca de 27 watts, superando significativamente os resultados dos mais recentes GPUs, levando em conta o custo do hardware e o consumo por watt. Também são suportados clusters placas desse tipo, testadas com até 16 placas (64 FPGA), controladas a partir de um Raspberry Pi 2. A funcionalidade padrão do John the Ripper é suportada, incluindo todos os modos de recuperação de senhas e a carga simultânea de um grande número de hashes. Para acelerar o desempenho, a aplicação de máscara foi implementada (modo "—mask", incluindo em combinação com outros modos) e a comparação dos hashes calculados com os carregados no FPGA. Em termos de implementação, muitos dos designs (por exemplo, para sha512crypt e Drupal7) utilizam blocos compostos por núcleos de processadores multithreaded (soft CPU cores), interagindo com núcleos criptográficos. O desenvolvimento dessa funcionalidade foi conduzido por Denis Burikin em coordenação com outros desenvolvedores do jumbo.
Outras mudanças significativas:
- Suporte a muitos tipos adicionais de hashes, cifras etc., incluindo tanto hashes de senhas clássicos (por exemplo, das novas versões do QNX) quanto carteiras de criptomoedas, arquivos compactados encriptados e sistemas de arquivos encriptados (por exemplo, Bitlocker e FreeBSD geli), além de suporte a novas variedades de formatos já suportados anteriormente (como a adição do suporte a bcrypt-pbkdf para OpenBSD softraid) e muito mais. No total, 80 formatos foram adicionados para CPU e 47 para OpenCL (e um pequeno número de formatos antigos foi removido por serem integrados em novos e obsoletos). O número total de formatos agora é 407 para CPU (ou 262 excluindo formatos “dinâmicos”, configuráveis a partir de arquivos de configuração) e 88 para OpenCL.
- Abandono do suporte ao idioma CUDA em favor do OpenCL, o que não impede de forma alguma o uso completo das GPUs da NVIDIA (e até ajuda, devido ao foco no desenvolvimento e otimizações em uma única implementação de cada formato para GPU, em vez de duas implementações anteriormente).
- Suporte para novos conjuntos de instruções SIMD — AVX2, AVX-512 (incluindo para a segunda geração de Xeon Phi) e MIC (para a primeira geração) — assim como um uso mais universal e completo de SIMD nas implementações de muitos formatos, incluindo a aplicação de conjuntos de instruções anteriormente suportados, até AVX e XOP em x86(-64) e
NEON, ASIMD e AltiVec em ARM, Aarch64 e POWER, respectivamente. (Parcialmente no âmbito do GSoC 2015.) - Numerosas otimizações para CPU e OpenCL, tanto para um funcionamento mais eficiente com um grande número de hashes simultaneamente (por exemplo, foi testado o carregamento de 320 milhões de hashes SHA-1 na GPU), quanto para aumentar a velocidade de cálculo dos hashes. Algumas dessas otimizações são universais, outras abrangem diversos subconjuntos de formatos, e muitas são específicas para formatos individuais.
- (Auto-)otimização do buffer ideal para senhas verificadas no CPU (“—tune=auto —verbosity=5”) e dimensões ideais de carga no OpenCL (ativado por padrão), incluindo consideração do início lento da frequência máxima das GPUs da série NVIDIA GTX 10xx e mais novas. Uso de hashes realmente carregados e do comprimento real das senhas verificadas (quando conhecido antecipadamente) para essa auto-otimização.
- Adição de um compilador de ‘expressões dinâmicas’, especificadas diretamente na linha de comando e realizando novos tipos híbridos de hashes, por exemplo “—format=dynamic=’sha1(md5($p).$s)’”, calculados no CPU usando SIMD. Como componentes dessas expressões, vários hashes rápidos são suportados (desde os comuns como MD5 até alguns moderadamente exóticos como Whirlpool), combinação de substrings, codificação e decodificação, transformação de maiúsculas e minúsculas, referências a senhas, sal, nome de usuário e constantes de string.
- Eliminação de diferenças indesejadas em relação ao hashcat, incluindo suporte para regras anteriormente específicas do hashcat (comandos de regras de lista de palavras), mudança para numeração de dispositivos OpenCL a partir do 1, aplicação por padrão das mesmas longitudes de senhas (geralmente comprimento 7) em testes de desempenho.
- Novos modos de geração de senhas verificáveis (modos de cracking), incluindo PRINCE do hashcat (forma 'frases', combinando várias palavras em ordem crescente de comprimento total), subsets (busca senhas com quantidade insuficiente de caracteres distintos, mesmo que esses caracteres tenham vindo de um grande conjunto possível) e hybrid external (permite modos externos, descritos em arquivos de configuração em uma linguagem similar ao C, formarem muitas senhas verificáveis com base em cada 'palavra' básica que vem de outro modo). Também, vários novos modos externos predefinidos.
- Mais recursos para uso de vários modos simultaneamente (um sobre o outro — stacking), assim como o uso de conjuntos de regras (empilhamento de regras de lista de palavras).
- Melhorias nos modos mask (expansão gradual da máscara dentro de um intervalo especificado de comprimentos, aplicação da máscara no lado do dispositivo OpenCL ou da placa FPGA) e single crack (comportamento razoável em dispositivos que computam um grande número de hashes em paralelo, onde anteriormente este modo não tinha senhas verificáveis suficientes, além de limitações no uso de memória).
- Muitas melhorias no suporte a Unicode e outras codificações em diferentes subsistemas.
- Várias melhorias nos programas *2john (que convertem arquivos de vários formatos para
uso com john), especialmente wpapcap2john (processa tráfego WiFi). - Muitas novas opções de linha de comando, configurações em john.conf, opções do script configure e as novas funcionalidades correspondentes, muitas das quais não conseguimos mencionar aqui.
- Aprimoramento da qualidade do código graças ao suporte embutido para compilações de depuração com AddressSanitizer (já existente) e UndefinedBehaviorSanitizer (adicionado), adição de um fuzzer embutido para formatos (no âmbito do GSoC 2015), aplicação de integração contínua (compilações para dezenas de combinações de sistema operacional e compilador e testes para garantir suporte correto a todos os formatos).
Fonte: linux.org.ru
