Ajustar el Rendimiento de la GPU con Banderas OpenCL

Kali LinuxBeginner
Practicar Ahora

Introducción

Hashcat es una herramienta de recuperación de contraseñas de renombre mundial, capaz de aprovechar la inmensa potencia de procesamiento de las GPUs para descifrar hashes a velocidades increíbles. Sin embargo, para sacar el máximo provecho de tu hardware, necesitas saber cómo configurarlo y ajustarlo correctamente. Usar la configuración incorrecta puede llevar a un rendimiento subóptimo o incluso a inestabilidad del hardware.

En este laboratorio, aprenderás a utilizar varias banderas de Hashcat relacionadas con OpenCL para gestionar y optimizar el rendimiento de tu GPU. Practicarás la listado de dispositivos disponibles, la selección de una GPU específica para una tarea, la implementación de salvaguardas térmicas y la experimentación con opciones de ajuste de rendimiento. Estas habilidades son esenciales para cualquiera que busque utilizar Hashcat de manera efectiva y segura.

Listado de Dispositivos OpenCL Disponibles con --opencl-devices

En este paso, aprenderás a identificar los dispositivos computacionales que Hashcat puede utilizar. Antes de poder asignar una tarea a una GPU o CPU, necesitas saber cómo el sistema la reconoce. Hashcat proporciona una bandera específica para este propósito.

La bandera --opencl-devices consulta el framework OpenCL (Open Computing Language) del sistema y lista todos los dispositivos compatibles, como GPUs y CPUs. A cada dispositivo se le asigna un ID único, que utilizarás en pasos posteriores para dirigirlo específicamente.

Ejecuta el siguiente comando en tu terminal para listar todos los dispositivos OpenCL disponibles:

hashcat --opencl-devices

Verás una salida similar a la siguiente. Los detalles exactos, especialmente los nombres de los dispositivos y la información de la plataforma, variarán según el hardware del entorno del laboratorio.

hashcat (v6.2.6) starting

OpenCL Info:

Platform ID #1
  Vendor  : The pocl project
  Name    : Portable Computing Language
  Version : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG

  Device ID #1
    Type           : CPU
    Vendor ID      : 1024
    Vendor         : GenuineIntel
    Name           : 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
    Version        : OpenCL 3.0 PoCL 3.1+g3a94695b, LLVM 14.0.0, RELOC, SLEEF, DISTRO, POCL_DEBUG
    Processor(s)   : 8
    Clock          : 3000
    ...

Platform ID #2
  Vendor  : NVIDIA Corporation
  Name    : NVIDIA CUDA
  Version : OpenCL 3.0 CUDA 12.2.142

  Device ID #2
    Type           : GPU
    Vendor ID      : 4318
    Vendor         : NVIDIA Corporation
    Name           : NVIDIA T4
    Version        : OpenCL 3.0 CUDA
    Processor(s)   : 40
    Clock          : 1590
    ...

Toma nota del Device ID para cada entrada. En este ejemplo, el Device ID #2 es la GPU NVIDIA T4, que es ideal para el cracking de hashes.

Selección de una GPU Específica para el Cracking con -d

En este paso, aprenderás a indicar a Hashcat que utilice un dispositivo específico para una tarea de cracking. Esto es particularmente útil en sistemas con múltiples GPUs o cuando deseas evitar el uso de la CPU, que generalmente es mucho más lenta para este tipo de trabajo.

La bandera -d (o --devices) te permite especificar qué ID(s) de dispositivo utilizar. Puedes encontrar el ID correcto en la salida del comando del paso anterior.

Ahora ejecutaremos una tarea de cracking simple dirigida a la GPU. Utilizaremos los archivos hash.txt y wordlist.txt preparados en tu directorio ~/project. El comando especifica el tipo de hash (-m 0 para MD5), el modo de ataque (-a 0 para un ataque de diccionario) y el dispositivo objetivo. Suponiendo que la GPU es el Device ID #2 de nuestro ejemplo anterior, el comando sería:

hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2

Si tu GPU tiene un ID diferente, por favor ajusta el número después de -d en consecuencia.

Después de ejecutar el comando, Hashcat iniciará el ataque exclusivamente en el dispositivo especificado y debería encontrar la contraseña rápidamente.

...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 5d41402abc4b2a76b9719d911017c592
Time.Started.....: ...
Time.Estimated...: ...
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#2.........:  104.6 kH/s (0.00ms) @ Accel:128 Loops:128 Thr:1024 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 2/2 (100.00%)
Rejected.........: 0/2 (0.00%)
Restore.Point....: 1/2 (50.00%)
Restore.Sub.#2...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#2....: wrongpass -> password
Hardware.Mon.#2..: Temp: 40c Fan: 30% Util: 13% Core:1410MHz Mem:5000MHz Bus:16

5d41402abc4b2a76b9719d911017c592:password

Started: ...
Stopped: ...

La salida confirma que el hash ha sido descifrado y la contraseña es password.

Comprender la Bandera --gpu-temp-retain

En este paso, aprenderás sobre una característica de seguridad crucial para proteger tu hardware. Ejecutar una GPU al 100% de utilización durante períodos prolongados genera una cantidad significativa de calor. Si no se gestiona, las altas temperaturas pueden causar estrangulamiento térmico (thermal throttling), donde la GPU reduce su velocidad para enfriarse, o incluso daños permanentes.

La bandera --gpu-temp-retain indica a Hashcat que supervise la temperatura de la GPU y ajuste automáticamente la carga de trabajo para mantenerla en o por debajo de un valor especificado en grados Celsius. Esta es una excelente manera de garantizar la estabilidad y la longevidad de tu hardware durante largas sesiones de cracking.

Ejecutaremos el mismo ataque que antes, pero esta vez añadiremos la bandera para mantener la temperatura de la GPU en o por debajo de 85°C. Esta es una temperatura generalmente segura para la mayoría de las GPUs bajo carga.

hashcat -m 0 -a 0 ~/project/hash.txt ~/project/wordlist.txt -d 2 --gpu-temp-retain=85

Debido a que nuestra tarea de cracking es muy corta, no verás la gestión de temperatura en acción. Sin embargo, el comando será aceptado y Hashcat habilitará la función. En un trabajo de cracking de varias horas o varios días, esta bandera estaría trabajando activamente en segundo plano, potencialmente reduciendo la velocidad ligeramente a cambio de seguridad térmica.

La salida será la misma que en el paso anterior, ya que la contraseña se encuentra casi instantáneamente. La clave es saber cómo aplicar esta configuración protectora.

Session..........: hashcat
Status...........: Cracked
...
5d41402abc4b2a76b9719d911017c592:password
...

Experimentar con --opencl-vector-width para Encontrar la Configuración Óptima

En este paso, explorarás una opción de ajuste de rendimiento. La bandera --opencl-vector-width controla cuántos "hilos" (threads) o elementos de trabajo se agrupan para procesarse en una sola instrucción. Esto también se conoce como ancho SIMD (Single Instruction, Multiple Data).

El valor óptimo para esta configuración depende en gran medida de la arquitectura específica de la GPU y del tipo de hash que se esté descifrando. La única forma de encontrar la mejor configuración es experimentar. Los valores permitidos suelen ser potencias de dos, como 1, 2, 4, 8 o 16.

Para probar el efecto de esta bandera, podemos usar el modo de benchmark integrado de Hashcat (-b). Ejecutemos un benchmark para MD5 (-m 0) y establezcamos el ancho del vector en 4.

hashcat -m 0 -b --opencl-vector-width 4

Hashcat ejecutará un benchmark y mostrará la velocidad para cada dispositivo. Presta atención a la línea Speed de tu GPU.

...
Hashtype: MD5

Speed.#2.........:   480.3 MH/s (94.38ms) @ Accel:256 Loops:1024 Thr:256 Vec:4
...

Ahora, intenta ejecutar el benchmark de nuevo con un ancho de vector diferente, por ejemplo, 8:

hashcat -m 0 -b --opencl-vector-width 8

Compara la Speed de esta ejecución con la anterior. Al probar diferentes valores, puedes determinar el ancho de vector óptimo para tu combinación específica de hardware y hash, lo que te permitirá maximizar tu rendimiento de cracking. Para este laboratorio, simplemente experimentar con el comando es suficiente.

Monitorizar la Temperatura y la Velocidad del Ventilador de la GPU Durante un Ataque

En este último paso, aprenderás a monitorizar los signos vitales de tu GPU en tiempo real mientras Hashcat se está ejecutando. Esto es esencial para diagnosticar problemas de rendimiento y asegurar que tus configuraciones térmicas están funcionando como se espera.

Utilizaremos la utilidad nvidia-smi (NVIDIA System Management Interface), una potente herramienta de línea de comandos para gestionar y monitorizar GPUs NVIDIA. Para ver las estadísticas actualizarse en vivo, la ejecutaremos con el comando watch.

Primero, necesitas abrir una segunda ventana de terminal. Puedes hacer esto haciendo clic en el icono "+" en la barra de pestañas de la terminal en la parte inferior de la pantalla.

En tu nueva (segunda) terminal, ejecuta el siguiente comando. Ejecutará nvidia-smi cada segundo y actualizará la pantalla con los datos más recientes.

watch -n 1 nvidia-smi

Verás un panel que muestra el nombre de la GPU, la temperatura, la velocidad del ventilador, el consumo de energía y la utilización de la memoria.

Ahora, vuelve a tu terminal original (primera). Inicia un benchmark intensivo para someter a la GPU a una carga significativa. Usaremos la bandera -w 4 (perfil de carga de trabajo 4, para "Insane") para maximizar la carga.

hashcat -m 0 -b -w 4

Cambia tu vista de nuevo a la segunda terminal que ejecuta watch. Deberías ver que los valores Temp, Pwr y GPU-Util aumentan significativamente a medida que la GPU trabaja intensamente en el benchmark. Esto te proporciona una vista en vivo del estado de tu hardware.

Una vez que hayas terminado de observar, presiona Ctrl+C en la primera terminal para detener el benchmark de Hashcat, y luego presiona Ctrl+C en la segunda terminal para detener el comando watch.

Resumen

En este laboratorio, adquiriste experiencia práctica con varias banderas clave de Hashcat para gestionar y ajustar el rendimiento de la GPU.

Aprendiste a:

  • Listar todos los dispositivos compatibles con OpenCL disponibles usando --opencl-devices.
  • Dirigir una GPU específica para una tarea con la bandera -d.
  • Proteger tu hardware del sobrecalentamiento estableciendo un límite térmico con --gpu-temp-retain.
  • Experimentar con la bandera --opencl-vector-width en modo benchmark para encontrar configuraciones de rendimiento óptimas.
  • Monitorizar las estadísticas en tiempo real de tu GPU usando nvidia-smi y watch durante una carga de trabajo pesada.

Dominar estos comandos te permite pasar de ser un usuario básico a un profesional avanzado, capaz de maximizar la velocidad de cracking al tiempo que garantizas la seguridad y estabilidad de tu hardware.