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

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.