Compilar John the Ripper para soporte de múltiples CPUs / Cores (Multihilo)
Para adaptar La herramienta “John the Ripper” al número de CPUs / Núcleos del sistema, se debe editar simplemente el fichero Makefile para dar soporte en la compilación al multiproceso (OpenMP). Esto no es necesario si se usa la versión Jumbo de JtR la cual tiene el soporte activado de forma predeterminada.
NOTA: En ocasiones se obtienen mejores resultados usando la opción “--fork” que permite usar varios procesos en paralelo. Esta opción deshabilita el uso de OpenMP si se usan la totalidad de cores, pero es posible combinar procesos e hilos como se puede ver al final del artículo.
Warning: OpenMP was disabled due to --fork; a non-OpenMP build may be faster
- John the Ripper (Free / Jumbo): http://www.openwall.com/john/
- John the Ripper (Bleeding-Jumbo): https://github.com/magnumripper/JohnTheRipper
Activar Multiproceso.
Fichero Makefile (dentro del directorio src).
OMPFLAGS = -fopenmp -march=native
Compilar JtR free (Se recomienda el uso de la versión bleeding-jumbo para disponer de más opciones).
cd src make make clean SYSTEM cd ../run/ # Ejemplo para el uso de 4 Núcleos (4 hilos). export OMP_NUM_THREADS=4 ./john --test
Benchmark (Ejemplo de benchmark de cores John the Ripper realizado con 8 cores).
export OMP_NUM_THREADS=8 ./john --test Will run 8 OpenMP threads Benchmarking: descrypt, traditional crypt(3) [DES 128/128 AVX-16]... DONE Many salts: 31017K c/s real, 3798K c/s virtual Only one salt: 28749K c/s real, 3453K c/s virtual Benchmarking: bsdicrypt, BSDI crypt(3) ("_J9..", 725 iterations) [DES 128/128 AVX-16]... DONE Many salts: 853254 c/s real, 108878 c/s virtual Only one salt: 770105 c/s real, 98194 c/s virtual Benchmarking: md5crypt [MD5 32/64 X2]... DONE Raw: 94041 c/s real, 21268 c/s virtual Benchmarking: bcrypt ("$2a$05", 32 iterations) [Blowfish 32/64 X2]... DONE Raw: 7182 c/s real, 922 c/s virtual Benchmarking: LM [DES 128/128 AVX-16]... DONE Raw: 98362K c/s real, 21596K c/s virtual Benchmarking: AFS, Kerberos AFS [DES 48/64 4K]... DONE Short: 701395 c/s real, 700194 c/s virtual Long: 3045K c/s real, 3041K c/s virtual Benchmarking: tripcode [DES 128/128 AVX-16]... DONE Raw: 22674K c/s real, 2704K c/s virtual Benchmarking: dummy [N/A]... DONE Raw: 105716K c/s real, 105335K c/s virtual Benchmarking: crypt, generic crypt(3) [?/64]... DONE Many salts: 2572K c/s real, 306699 c/s virtual Only one salt: 2609K c/s real, 309688 c/s virtual
Multihilo / Multiproceso (Ej. 8 núcleos).
Para saber qué método es el más conveniente en base al hardware / ataque se recomienda hacer pruebas realizando múltiples combinaciones de números de hilos y procesos. (No se debe exceder el límite de cores del sistema).
2 Procesos con 4 hilos cada uno.
export OMP_NUM_THREADS=4 ./john --fork=2 --wordlist:rockyou.txt /etc/shadow
4 Procesos con 2 hilos cada uno.
export OMP_NUM_THREADS=2 ./john --fork=4 --wordlist:rockyou.txt /etc/shadow
Nota: Con la opción “--node” es factible usar varios equipos físicos con JtR.