Lançamento do John the Ripper 1.9.0-jumbo-1 com suporte a FPGA

Lançada nova versão do programa mais antigo suportado para quebra de senhas John the Ripper 1.9.0-jumbo-1 (o projeto está em desenvolvimento desde 1996). Desde o lançamento da versão anterior 1.8.0-jumbo-1, se passaram 4,5 anos, durante os quais mais de 6000 alterações (commits git) foram feitas por mais de 80 desenvolvedores. Graças a integração contínua, que inclui a verificação preliminar de cada alteração (pull request) em várias plataformas, durante este período os desenvolvedores recomendaram usar a versão atual do GitHub, cuja condição foi mantida estável apesar das mudanças. O código principal do projeto é distribuído é licenciado sob a GPLv2+, enquanto o código de alguns componentes é licenciado sob BSD.

Uma característica da nova versão é a adição de suporte a FPGA (além de CPU, GPU e Xeon Phi). Para as placas ZTEX 1.15y, que incluem 4 chips FPGA e que foram 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 particularmente no WordPress). Alguns deles foram implementados em FPGA pela primeira vez.

Para bcrypt, a performance alcançada é de ~119k c/s com 2^5 iterações (‘$2b$05’), consumindo cerca de ~27 watts, o que supera significativamente os resultados dos GPUs mais novos em relação ao custo da placa, ao preço do hardware e à potência consumida. Também são suportados clusters de placas desse tipo, o que foi testado com até 16 placas (64 chips FPGA), controlados por um único Raspberry Pi 2. A funcionalidade típica do John the Ripper é suportada, incluindo todos os modos de quebra de senhas e o carregamento simultâneo de um grande número de hashes.

Para acelerar o trabalho, foi implementado o uso de máscara (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 importantes:

  • Suporte a uma ampla variedade de tipos adicionais de hashes, cifrários, etc., incluindo tanto hashes clássicos de senhas (como as novas versões do QNX) quanto carteiras de criptomoedas, arquivos criptografados e sistemas de arquivos criptografados (como Bitlocker e FreeBSD geli), além do suporte a novas variedades de formatos anteriormente suportados (por exemplo, suporte adicionado para bcrypt-pbkdf no OpenBSD softraid) e muito mais. No total, foram adicionados 80 formatos para CPU e 47 para OpenCL. 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.
  • 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-)ajuste do buffer otimizado de senhas verificadas na CPU ("—tune=auto —verbosity=5") e dimensões de tarefas otimizadas no OpenCL (ativado por padrão), levando em consideração a saída lenta para a frequência completa das GPUs da série NVIDIA GTX 10xx e novas. Utilização de hashes realmente carregados e do comprimento real das senhas verificadas (quando conhecido previamente) para tal autoajuste.
  • Adição de um compilador de 'expressões dinâmicas', especificadas diretamente na linha de comando e que realizam novos tipos híbridos de hash, como '—format=dynamic=’sha1(md5($p).$s)'', computados na CPU usando SIMD. Como componentes dessas expressões, são suportados dezenas de hashes rápidos (desde os mais comuns, como MD5, até os moderadamente exóticos, como Whirlpool), combinação de substrings, codificação e decodificação, conversão de caixa de caracteres, 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: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster