OpenCL フラグによる GPU パフォーマンスのチューニング

Kali LinuxBeginner
オンラインで実践に進む

はじめに

Hashcat は、GPU の膨大な処理能力を活用して驚異的な速度でハッシュをクラックできる、世界的に有名なパスワードリカバリツールです。しかし、ハードウェアの性能を最大限に引き出すには、適切に設定・チューニングする方法を知る必要があります。間違った設定は、パフォーマンスの低下やハードウェアの不安定化を招く可能性があります。

この実験では、Hashcat の OpenCL 関連のフラグをいくつか使用して、GPU のパフォーマンスを管理・最適化する方法を学びます。利用可能なデバイスのリスト表示、タスク用の特定の GPU の選択、サーマルセーフガードの実装、パフォーマンスチューニングオプションの実験を行います。これらのスキルは、Hashcat を効果的かつ安全に使用したい人にとって不可欠です。

--opencl-devices を使用した OpenCL デバイスのリスト表示

このステップでは、Hashcat が使用できる計算デバイスを特定する方法を学びます。GPU または CPU にタスクを割り当てる前に、システムがそれをどのように認識しているかを知る必要があります。Hashcat はこの目的のために特定のフラグを提供しています。

--opencl-devices フラグは、システムの OpenCL (Open Computing Language) フレームワークをクエリし、GPU や CPU などの互換性のあるすべてのデバイスをリスト表示します。各デバイスには一意の ID が割り当てられ、これは後続のステップで特定のデバイスをターゲットにするために使用されます。

すべての利用可能な OpenCL デバイスをリスト表示するには、ターミナルで次のコマンドを実行します。

hashcat --opencl-devices

以下のような出力が表示されます。正確な詳細、特にデバイス名とプラットフォーム情報は、ラボ環境のハードウェアによって異なります。

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

各エントリの Device ID に注意してください。この例では、Device ID #2 がハッシュクラッキングに最適な NVIDIA T4 GPU です。

クラッキング用に特定の GPU を選択する (-d)

このステップでは、Hashcat にクラッキングタスクに使用する特定のデバイスを指示する方法を学びます。これは、複数の GPU を搭載したシステムや、この種の作業では一般的に非常に遅い CPU の使用を避けたい場合に特に役立ちます。

-d (または --devices) フラグを使用すると、使用するデバイス ID を指定できます。正しい ID は、前のステップのコマンド出力から見つけることができます。

ここでは、GPU をターゲットにした簡単なクラッキングタスクを実行します。~/project ディレクトリに準備された hash.txt および wordlist.txt ファイルを使用します。コマンドは、ハッシュタイプ (MD5の場合は -m 0)、攻撃モード (辞書攻撃の場合は -a 0)、およびターゲットデバイスを指定します。前の例で GPU が Device ID #2 であると仮定すると、コマンドは次のようになります。

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

GPU の ID が異なる場合は、-d の後の数値を適宜調整してください。

コマンドを実行すると、Hashcat は指定されたデバイスでのみ攻撃を開始し、すぐにパスワードを見つけるはずです。

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

出力は、ハッシュがクラックされ、パスワードが password であることを確認しています。

--gpu-temp-retain フラグの理解

このステップでは、ハードウェアを保護するための重要な安全機能について学びます。GPU を長期間 100% の使用率で実行すると、かなりの熱が発生します。管理しないと、高温はサーマルスロットリング(GPU が冷却のために速度を低下させること)や、恒久的な損傷を引き起こす可能性があります。

--gpu-temp-retain フラグは、Hashcat に GPU の温度を監視させ、指定された摂氏値以下に保つようにワークロードを自動的に調整するように指示します。これは、長時間のクラッキングセッション中にハードウェアの安定性と寿命を確保するための優れた方法です。

以前と同じ攻撃を実行しますが、今回は GPU 温度を 85°C 以下に保つフラグを追加します。これは、負荷がかかった状態のほとんどの GPU にとって一般的に安全な温度です。

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

私たちのクラッキングタスクは非常に短いため、温度管理が実際に機能している様子を見ることはできません。しかし、コマンドは受け入れられ、Hashcat はこの機能を有効にします。数時間または数日かかるクラッキングジョブでは、このフラグはバックグラウンドで積極的に機能し、熱的安全性と引き換えに速度がわずかに低下する可能性があります。

パスワードはほぼ瞬時に見つかるため、出力は前のステップと同じになります。重要なのは、この保護設定を適用する方法を知ることです。

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

最適な設定を見つけるために --opencl-vector-width を実験する

このステップでは、パフォーマンスチューニングオプションを調べます。--opencl-vector-width フラグは、単一の命令で処理するためにバンドルされる「スレッド」またはワークアイテムの数を制御します。これは SIMD (Single Instruction, Multiple Data) 幅としても知られています。

この設定の最適な値は、特定の GPU アーキテクチャとクラッキング対象のハッシュの種類に大きく依存します。最良の設定を見つける唯一の方法は実験することです。許可される値は通常、1、2、4、8、または 16 のような 2 の累乗です。

このフラグの効果をテストするために、Hashcat の組み込みベンチマークモード (-b) を使用できます。MD5 (-m 0) のベンチマークを実行し、ベクトル幅を 4 に設定しましょう。

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

Hashcat はベンチマークを実行し、各デバイスの速度を表示します。GPU の Speed 行に注目してください。

...
Hashtype: MD5

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

次に、異なるベクトル幅、例えば 8 でベンチマークを再度実行してみてください。

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

この実行の Speed を前の実行と比較してください。異なる値をテストすることで、特定のハードウェアとハッシュの組み合わせに最適なベクトル幅を決定し、クラッキングパフォーマンスを最大化できます。この実験では、コマンドを試すだけで十分です。

攻撃中に GPU の温度とファン速度を監視する

この最終ステップでは、Hashcat が実行中に GPU のバイタルサインをリアルタイムで監視する方法を学びます。これは、パフォーマンスの問題を診断し、熱設定が期待どおりに機能していることを確認するために不可欠です。

NVIDIA GPU の管理と監視のための強力なコマンドラインツールである nvidia-smi (NVIDIA System Management Interface) ユーティリティを使用します。統計情報をライブで更新するには、watch コマンドで実行します。

まず、2 番目のターミナルウィンドウを開く必要があります。これは、画面下部にあるターミナルタブバーの "+" アイコンをクリックすることで実行できます。

新しい(2 番目の)ターミナルで、次のコマンドを実行します。これは 1 秒ごとに nvidia-smi を実行し、最新のデータで画面を更新します。

watch -n 1 nvidia-smi

GPU の名前、温度、ファン速度、電力使用量、メモリ使用量を示すダッシュボードが表示されます。

次に、元の(最初の)ターミナルに戻ります。GPU に大きな負荷をかけるために、重いベンチマークを開始します。負荷を最大化するために -w 4 (ワークロードプロファイル 4、「Insane」用) フラグを使用します。

hashcat -m 0 -b -w 4

ビューを watch を実行している2 番目のターミナルに戻します。GPU がベンチマークで懸命に作業しているため、TempPwr、および GPU-Util の値が大幅に増加しているのが見えるはずです。これにより、ハードウェアの状態をライブで確認できます。

観察が終了したら、最初のターミナルで Ctrl+C を押して Hashcat ベンチマークを停止し、次に 2 番目のターミナルで Ctrl+C を押して watch コマンドを停止します。

まとめ

この実験では、GPU パフォーマンスの管理とチューニングのためのいくつかの重要な Hashcat フラグについて実践的な経験を積みました。

以下の方法を学びました。

  • --opencl-devices を使用して、利用可能なすべての OpenCL 互換デバイスを一覧表示する。
  • -d フラグを使用して、タスクの対象となる特定の GPU を指定する。
  • --gpu-temp-retain を使用して熱制限を設定し、ハードウェアの過熱から保護する。
  • ベンチマークモードで --opencl-vector-width フラグを実験して、最適なパフォーマンス設定を見つける。
  • 重いワークロード中に nvidia-smiwatch を使用して、GPU のリアルタイム統計情報を監視する。

これらのコマンドを習得することで、基本的なユーザーから高度な実践者へと移行し、ハードウェアの安全性と安定性を確保しながらクラッキング速度を最大化できるようになります。