Otimizar o Desempenho da GPU com Flags OpenCL

Kali LinuxBeginner
Pratique Agora

Introdução

O Hashcat é uma ferramenta de recuperação de senhas mundialmente renomada, capaz de aproveitar o imenso poder de processamento das GPUs para quebrar hashes em velocidades incríveis. No entanto, para obter o máximo do seu hardware, você precisa saber como configurá-lo e ajustá-lo corretamente. Usar as configurações erradas pode levar a um desempenho subótimo ou até mesmo à instabilidade do hardware.

Neste laboratório, você aprenderá a usar várias flags relacionadas ao OpenCL do Hashcat para gerenciar e otimizar o desempenho da sua GPU. Você praticará a listagem de dispositivos disponíveis, a seleção de uma GPU específica para uma tarefa, a implementação de salvaguardas térmicas e a experimentação com opções de ajuste de desempenho. Essas habilidades são essenciais para qualquer pessoa que deseje usar o Hashcat de forma eficaz e segura.

Listar Dispositivos OpenCL Disponíveis com --opencl-devices

Nesta etapa, você aprenderá a identificar os dispositivos computacionais que o Hashcat pode utilizar. Antes de poder atribuir uma tarefa a uma GPU ou CPU, você precisa saber como o sistema a reconhece. O Hashcat fornece uma flag específica para este propósito.

A flag --opencl-devices consulta o framework OpenCL (Open Computing Language) do sistema e lista todos os dispositivos compatíveis, como GPUs e CPUs. Cada dispositivo é atribuído um ID único, que você usará em etapas posteriores para direcioná-lo especificamente.

Execute o seguinte comando no seu terminal para listar todos os dispositivos OpenCL disponíveis:

hashcat --opencl-devices

Você verá uma saída semelhante à seguinte. Os detalhes exatos, especialmente os nomes dos dispositivos e as informações da plataforma, variarão dependendo do hardware do ambiente do laboratório.

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
    ...

Anote o Device ID para cada entrada. Neste exemplo, o Device ID #2 é a GPU NVIDIA T4, que é ideal para cracking de hashes.

Selecionar uma GPU Específica para Cracking com -d

Nesta etapa, você aprenderá a instruir o Hashcat a usar um dispositivo específico para uma tarefa de cracking. Isso é particularmente útil em sistemas com múltiplas GPUs ou quando você deseja evitar o uso da CPU, que geralmente é muito mais lenta para este tipo de trabalho.

A flag -d (ou --devices) permite que você especifique quais IDs de dispositivo usar. Você pode encontrar o ID correto na saída do comando da etapa anterior.

Agora executaremos uma tarefa simples de cracking direcionada à GPU. Usaremos os arquivos hash.txt e wordlist.txt preparados no seu diretório ~/project. O comando especifica o tipo de hash (-m 0 para MD5), o modo de ataque (-a 0 para um ataque de dicionário) e o dispositivo alvo. Assumindo que a GPU seja o Device ID #2 do nosso exemplo anterior, o comando seria:

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

Se a sua GPU tiver um ID diferente, por favor, ajuste o número após -d de acordo.

Após executar o comando, o Hashcat iniciará o ataque exclusivamente no dispositivo especificado e deverá encontrar rapidamente a senha.

...
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: ...

A saída confirma que o hash foi quebrado e a senha é password.

Compreender a Flag --gpu-temp-retain

Nesta etapa, você aprenderá sobre um recurso de segurança crucial para proteger seu hardware. Executar uma GPU a 100% de utilização por períodos prolongados gera uma quantidade significativa de calor. Se não for gerenciado, altas temperaturas podem causar thermal throttling (onde a GPU desacelera para esfriar) ou até mesmo danos permanentes.

A flag --gpu-temp-retain instrui o Hashcat a monitorar a temperatura da GPU e ajustar automaticamente a carga de trabalho para mantê-la em ou abaixo de um valor especificado em Celsius. Esta é uma excelente maneira de garantir estabilidade e longevidade para seu hardware durante longas sessões de cracking.

Vamos executar o mesmo ataque de antes, mas desta vez adicionaremos a flag para manter a temperatura da GPU em ou abaixo de 85°C. Esta é uma temperatura geralmente segura para a maioria das GPUs sob carga.

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

Como nossa tarefa de cracking é muito curta, você não verá o gerenciamento de temperatura em ação. No entanto, o comando será aceito e o Hashcat habilitará o recurso. Em um trabalho de cracking de várias horas ou vários dias, esta flag estaria ativamente funcionando em segundo plano, potencialmente reduzindo a velocidade ligeiramente em troca de segurança térmica.

A saída será a mesma da etapa anterior, pois a senha é encontrada quase instantaneamente. O ponto principal é saber como aplicar essa configuração protetora.

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

Experimentar com --opencl-vector-width para Encontrar a Configuração Ótima

Nesta etapa, você explorará uma opção de ajuste de desempenho. A flag --opencl-vector-width controla quantos "threads" ou itens de trabalho são agrupados para processamento em uma única instrução. Isso também é conhecido como largura SIMD (Single Instruction, Multiple Data).

O valor ideal para esta configuração depende muito da arquitetura específica da GPU e do tipo de hash que está sendo quebrado. A única maneira de encontrar a melhor configuração é experimentando. Valores permitidos são tipicamente potências de dois, como 1, 2, 4, 8 ou 16.

Para testar o efeito desta flag, podemos usar o modo de benchmark integrado do Hashcat (-b). Vamos executar um benchmark para MD5 (-m 0) e definir a largura do vetor para 4.

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

O Hashcat executará um benchmark e exibirá a velocidade para cada dispositivo. Preste atenção à linha Speed para sua GPU.

...
Hashtype: MD5

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

Agora, tente executar o benchmark novamente com uma largura de vetor diferente, por exemplo, 8:

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

Compare a Speed desta execução com a anterior. Testando diferentes valores, você pode determinar a largura de vetor ideal para sua combinação específica de hardware e hash, permitindo maximizar seu desempenho de cracking. Para este laboratório, simplesmente experimentar com o comando é suficiente.

Monitorar a Temperatura e a Velocidade do Ventilador da GPU Durante um Ataque

Nesta etapa final, você aprenderá como monitorar os sinais vitais da sua GPU em tempo real enquanto o Hashcat está em execução. Isso é essencial para diagnosticar problemas de desempenho e garantir que suas configurações térmicas estejam funcionando como esperado.

Usaremos a utilidade nvidia-smi (NVIDIA System Management Interface), uma poderosa ferramenta de linha de comando para gerenciar e monitorar GPUs NVIDIA. Para ver as estatísticas atualizadas em tempo real, executaremos com o comando watch.

Primeiro, você precisa abrir uma segunda janela de terminal. Você pode fazer isso clicando no ícone "+" na barra de guias do terminal na parte inferior da tela.

Em seu novo (segundo) terminal, execute o seguinte comando. Ele executará nvidia-smi a cada segundo e atualizará a tela com os dados mais recentes.

watch -n 1 nvidia-smi

Você verá um painel mostrando o nome da GPU, temperatura, velocidade do ventilador, uso de energia e utilização de memória.

Agora, volte ao seu terminal original (primeiro). Inicie um benchmark pesado para colocar a GPU sob uma carga significativa. Usaremos a flag -w 4 (perfil de carga de trabalho 4, para "Insane") para maximizar a carga.

hashcat -m 0 -b -w 4

Mude sua visualização de volta para o segundo terminal executando watch. Você deverá ver os valores Temp, Pwr e GPU-Util aumentarem significativamente à medida que a GPU trabalha intensamente no benchmark. Isso lhe dá uma visão ao vivo do status do seu hardware.

Quando terminar de observar, pressione Ctrl+C no primeiro terminal para parar o benchmark do Hashcat e, em seguida, pressione Ctrl+C no segundo terminal para parar o comando watch.

Resumo

Neste laboratório, você adquiriu experiência prática com várias flags chave do Hashcat para gerenciar e ajustar o desempenho da GPU.

Você aprendeu a:

  • Listar todos os dispositivos compatíveis com OpenCL disponíveis usando --opencl-devices.
  • Direcionar uma GPU específica para uma tarefa com a flag -d.
  • Proteger seu hardware contra superaquecimento definindo um limite térmico com --gpu-temp-retain.
  • Experimentar com a flag --opencl-vector-width no modo de benchmark para encontrar configurações de desempenho ideais.
  • Monitorar as estatísticas em tempo real da sua GPU usando nvidia-smi e watch durante uma carga de trabalho pesada.

Dominar esses comandos permite que você passe de um usuário básico para um praticante avançado, capaz de maximizar a velocidade de cracking enquanto garante a segurança e a estabilidade do seu hardware.