Lanzado una nueva versión del programa más antiguo y soportado para la recuperación de contraseñas, John the Ripper 1.9.0-jumbo-1. (El proyecto se ha desarrollado desde 1996.) En la página del proyecto están disponibles para descargar los códigos fuente, así como las compilaciones listas para Windows.
Se destaca que han pasado 4.5 años desde el lanzamiento de la versión 1.8.0-jumbo-1, durante los cuales se han realizado más de 6000 cambios (commits de git) por más de 80 desarrolladores. Durante este tiempo, se recomendó utilizar la edición actual desde GitHub, cuyo estado se mantuvo estable a pesar de los cambios realizados gracias a la integración continua, que incluye la revisión previa de cada cambio (pull request) en múltiples plataformas. La característica distintiva de la nueva versión es la adición del soporte para FPGA (matrices de puertas programables en campo) junto con CPU, GPU y Xeon Phi.
Para las placas ZTEX 1.15y, que incluyen 4 chips FPGA y que originalmente se utilizaban principalmente para la minería de Bitcoin, ahora se implementan 7 tipos de hashes de contraseñas: bcrypt, descrypt clásico (incluyendo bigcrypt), sha512crypt, sha256crypt, md5crypt (incluyendo Apache apr1 y AIX smd5), Drupal7 y phpass (utilizado, en particular, en WordPress). Algunos de ellos se implementan en FPGA por primera vez. Para bcrypt, el rendimiento alcanzado es de aproximadamente 119k c/s a 2^5 iteraciones (“$2b$05”) con un consumo de energía de alrededor de 27 vatios, superando significativamente los resultados de las GPUs más recientes en términos de costo por tarjeta, precio de hardware y vatios. También se soportan clústeres de este tipo de placas, comprobado hasta 16 placas (64 FPGA), controladas desde una Raspberry Pi 2. Se mantiene la funcionalidad habitual de John the Ripper, incluyendo todos los modos de recuperación de contraseñas y la carga simultánea de un gran número de hashes. Para acelerar el trabajo, se ha implementado el uso de máscaras (modo "—mask", incluida en combinación con otros modos) y la comparación de hashes calculados con los cargados en el lado de FPGA. En términos de implementación, en muchos de los diseños (por ejemplo, para sha512crypt y Drupal7) se aplican bloques compuestos por núcleos de procesador multihilo (soft CPU cores) que interactúan con núcleos criptográficos. El desarrollo de esta funcionalidad fue dirigido por Denis Burykin en coordinación con otros desarrolladores de jumbo.
Otros cambios importantes:
- Soporte para una gran cantidad de tipos de hash adicionales, cifrados, etc., incluyendo tanto hashes de contraseñas clásicos (por ejemplo, de las nuevas versiones de QNX) como billeteras de criptomonedas, archivos comprimidos cifrados y sistemas de archivos cifrados (por ejemplo, Bitlocker y FreeBSD geli), así como soporte para nuevas variedades de formatos que se habían admitido previamente (por ejemplo, se añadió soporte para bcrypt-pbkdf para OpenBSD softraid) y mucho más. En total, se añadieron 80 formatos en CPU y 47 en OpenCL (y se eliminó una pequeña cantidad de antiguos que se integraron en nuevos y quedaron obsoletos). El número total de formatos ahora es de 407 en CPU (o 262 sin incluir formatos «dinámicos», configurables desde archivos de configuración) y 88 en OpenCL.
- Abandono del soporte para el lenguaje CUDA en favor de OpenCL, lo que no interfiere en absoluto con el uso completo de las GPU de NVIDIA (e incluso ayuda, gracias al enfoque de desarrollo y optimizaciones en una única implementación de cada formato para GPU en lugar de dos implementaciones como antes).
- Soporte para nuevos conjuntos de instrucciones SIMD — AVX2, AVX-512 (incluido para la segunda generación de Xeon Phi) y MIC (para la primera generación) — así como un uso más versátil y completo de SIMD en implementaciones de muchos formatos, incluyendo la aplicación de conjuntos de instrucciones admitidos anteriormente hasta AVX y XOP en x86(-64) y
NEON, ASIMD y AltiVec en ARM, Aarch64 y POWER, respectivamente. (Parcialmente en el marco de GSoC 2015.) - Numerosas optimizaciones para CPU y OpenCL, tanto para un funcionamiento más eficiente con una gran cantidad de hashes simultáneamente (por ejemplo, se probó la carga de 320 millones de hashes SHA-1 en GPU), así como para aumentar la velocidad de cálculo de hashes. Parte de estas optimizaciones son universales, algunas cubren diversos subconjuntos de formatos, y muchas son específicas para formatos individuales.
- (Auto-)configuración de la optimización del almacenamiento en búfer de contraseñas verificadas en CPU ("—tune=auto —verbosity=5") y de tamaños óptimos de tareas en OpenCL (incluido por defecto), teniendo en cuenta el lento tiempo para alcanzar la frecuencia completa de funcionamiento de las GPU de la serie NVIDIA GTX 10xx y posterior. Uso de hashes realmente cargados y longitudes reales de contraseñas verificadas (cuando se conoce de antemano) para tal auto-configuración.
- Adición de un compilador de 'expresiones dinámicas', que se indican directamente en la línea de comandos y que implementan nuevos tipos híbridos de hash, por ejemplo '—format=dynamic=’sha1(md5($p).$s)’', calculados en la CPU utilizando SIMD. Como componentes de tales expresiones, se admiten decenas de hashes rápidos (desde los comunes como MD5 hasta los moderadamente exóticos como Whirlpool), combinación de subcadenas, codificación y decodificación, transformación de mayúsculas y minúsculas, referencias a contraseñas, sal, nombres de usuario y constantes de texto.
- Eliminación de diferencias no deseadas con hashcat, incluyendo soporte para reglas específicas de hashcat (comandos de reglas de listas de palabras), cambio a la numeración de dispositivos OpenCL comenzando desde 1, aplicación por defecto de las mismas longitudes de contraseñas (normalmente longitud 7) en pruebas de rendimiento.
- Nuevos modos de generación de contraseñas verificables (modos de cracking), incluyendo PRINCE de hashcat (forma 'frases' combinando varias palabras en orden creciente de longitud total), subsets (prueba contraseñas con insuficientes caracteres diferentes, incluso si esos caracteres provienen de un gran conjunto de posibilidades) y hybrid external (permite que modos externos, descritos en archivos de configuración en un lenguaje similar a C, generen múltiples contraseñas verificables basadas en cada 'palabra' base llegada desde otro modo). Además, varios nuevos modos externos predefinidos.
- Funciones adicionales para el uso simultáneo de varios modos (uno sobre otro — stacking), así como para usar conjuntos de reglas de esa manera (stacking de reglas de listas de palabras).
- Mejoras en los modos mask (estiramiento gradual de la máscara en el rango de longitudes especificado, aplicación de la máscara en el lado del dispositivo OpenCL o de la placa FPGA) y single crack (comportamiento razonable en dispositivos que calculan un gran número de hashes en paralelo, para lo cual antes en este modo faltaban contraseñas verificables, así como limitaciones en el uso de memoria).
- Muchas mejoras en el soporte de Unicode y otros codificadores en diferentes subsistemas.
- Muchas mejoras en los programas *2john (que transforman archivos de diferentes formatos para
uso con john), especialmente wpapcap2john (que procesa el tráfico WiFi). - Muchas nuevas opciones de línea de comandos, configuraciones en john.conf, opciones del script configure y sus nuevas capacidades correspondientes, no todas las cuales se han podido mencionar aquí.
- Mejora de la calidad del código gracias al soporte integrado para compilaciones de depuración con AddressSanitizer (ya disponible anteriormente) y UndefinedBehaviorSanitizer (agregado), la inclusión de un fuzzer de formatos incorporado (como parte de GSoC 2015), y la implementación de integración continua (compilaciones para decenas de combinaciones de sistemas operativos y compiladores y pruebas en ellos para asegurar el correcto soporte de todos los formatos).
Fuente: linux.org.ru
