はじめに
この実験 (Lab) では、強力なパスワードリカバリツールである hashcat のワークロードプロファイルを使用して、そのパフォーマンスを最適化する方法を探ります。ワークロードプロファイル設定により、hashcat のリソース消費を微調整し、生のクラッキング速度とシステム全体の応答性のバランスを取ることができます。これは、他のアクティビティにも使用されているマシンで、長時間実行されるクラッキングタスクを実行する必要がある場合に非常に重要です。
以下のことを学びます。
hashcatで利用可能なさまざまなワークロードプロファイルを理解する。- ベースラインのパフォーマンスベンチマークを確立する。
- 「低電力 (Low Power)」および「高性能 (High Performance)」プロファイルをテストおよび比較する。
- この知識を実践的なクラッキングシナリオに適用する。
-w を使用したワークロードプロファイルの目的を理解する
このステップでは、hashcat の -w (または --workload-profile) オプションについて学びます。このオプションは hashcat の内部ワークロード管理を制御し、CPU と GPU にかかる負荷の度合いに影響を与えます。
主なプロファイルは 4 つあります。
-w 1(低電力 - Low Power): リソースの使用を最小限に抑えます。システムは非常に応答性が高くなりますが、クラッキング速度は大幅に低下します。ワークステーションでバックグラウンドで実行する場合に理想的です。-w 2(デフォルト - Default): システムを合理的に使用可能な状態に保ちながら、良好なパフォーマンスを提供するバランスの取れたプロファイルです。-w 3(高性能 - High Performance): より多くのシステムリソースを使用することで、クラッキング速度を最大化します。システムが遅くなる可能性があります。-w 4(ナイトメア - Nightmare): 専用の高度にチューニングされたクラッキングリグ用です。ハードウェアを絶対的な限界までプッシュし、標準的なマシンではシステムの不安定化やクラッシュを引き起こす可能性があります。
まず、この特定オプションのヘルプ情報を表示することから始めましょう。これは、コマンドラインツールの機能を理解するための良い習慣です。
hashcat のヘルプメニューでワークロードプロファイルオプションの説明を見つけるために、ターミナルで次のコマンドを実行してください。
hashcat --help | grep "workload-profile"
-w オプションとその利用可能なレベルを説明する出力が表示されるはずです。
-w, --workload-profile | ## | Enable a specific workload profile. See below. | -w 3
Workload Profiles:
==================
## | Profile | Performance | Memory | Unattended | Base Tuning
-+-----------+-------------+--------+------------+-------------
1 | Low-Power | 10 % | 1/4 | No | -n 1 -u 1024
2 | Default | 90 % | 1/2 | No | -n 8 -u 256
3 | High-Perf | 100 % | Full | No | -n 64 -u 64
4 | Nightmare | 100 % | Full | Yes | -n 512 -u 32
これにより、さまざまなプロファイルが確認され、パフォーマンスとシステムチューニングへの影響についてのヒントが得られます。
ベースライン確立のためのベンチマークを実行する
このステップでは、パフォーマンスのベースラインを確立します。ベースラインとは、比較のための基準点として使用できる標準的な測定値のことです。ここでは、デフォルト設定(-w 2 と同等)で hashcat の組み込みベンチマークモードを実行します。
ベンチマークモード (-b) を使用すると、hashcat は入力ハッシュファイルなしで、さまざまなハッシュアルゴリズムに対するパフォーマンスを測定できます。ここでは、モード番号 0 (-m 0) で指定される MD5 アルゴリズムを特にテストします。
MD5 のベンチマークを開始するには、次のコマンドを実行してください。
hashcat -b -m 0
hashcat が起動し、MD5 ハッシュタイプに対するシステムのパフォーマンスをテストします。出力に注意してください。しばらくすると、結果の表が表示されます。「Speed」列に注目してください。
hashcat (v6.2.6) starting in benchmark mode
...
Hashtype: 0 - MD5
Speed.#1.........: 299.4 MH/s (46.38ms) @ Accel:128 Loops:256 Thr:64 Vec:1
...
注意: 表示される速度(例:299.4 MH/s)は、仮想マシンのリソースによって異なります。重要なのは、この数値を心に留めておくことです。これが、デフォルトのワークロードプロファイルでのベースラインパフォーマンスです。
-w 1 を使用して低電力プロファイルをテストする
このステップでは、「低電力」ワークロードプロファイルをテストします。名前が示すように、このプロファイルはシステムのリソースに負担をかけないように設計されています。コンピューターを他のタスクに使用する能力に影響を与えることなく、hashcat を長期間実行する必要がある場合に理想的な選択肢です。
前のステップと同じベンチマークを実行しますが、今回は -w 1 フラグを追加して明示的に低電力プロファイルを選択します。
次のコマンドを実行してください。
hashcat -b -m 0 -w 1
再び、hashcat は MD5 アルゴリズムのベンチマークを実行します。「Speed」の値を見つけて出力に注目してください。
hashcat (v6.2.6) starting in benchmark mode
...
Hashtype: 0 - MD5
Speed.#1.........: 37.8 MH/s (48.13ms) @ Accel:1 Loops:1024 Thr:1 Vec:1
...
この新しい速度を、ステップ 2 で記録したベースラインと比較してください。速度が大幅に低下していることに気づくはずです。これはトレードオフを示しています。生のパフォーマンスを犠牲にして、システムの応答性を向上させています。
-w 3 を使用して高パフォーマンスプロファイルをテストする
このステップでは、「高パフォーマンス」ワークロードプロファイルをテストします。このプロファイルは低電力プロファイルとは逆で、hashcat にシステムリソースを可能な限り多く使用させ、最大のクラッキング速度を達成するように指示します。これは、パフォーマンスのみが最優先される専用マシンで使用するプロファイルです。
今回は -w 3 フラグを使用して、再度ベンチマークを実行しましょう。
以下のコマンドを実行してください。
hashcat -b -m 0 -w 3
hashcat は高パフォーマンス設定を使用して MD5 ベンチマークを実行します。出力の「Speed」の値を確認してください。
hashcat (v6.2.6) starting in benchmark mode
...
Hashtype: 0 - MD5
Speed.#1.........: 315.1 MH/s (43.80ms) @ Accel:64 Loops:64 Thr:64 Vec:1
...
この速度を、ベースライン(ステップ 2)と低電力の結果(ステップ 3)の両方と比較してください。これまでの結果で最も速い速度であり、おそらくデフォルトプロファイルよりもさらに速いでしょう。これにより、-w 3 がシステムの応答性よりも速度を効果的に優先していることが確認できます。
パフォーマンスとシステム応答性の比較
最終ステップでは、これまでの調査結果をまとめ、実際(ただし簡単な)クラッキングタスクに適用します。
これまでに、以下の関係性を観察しました。
- 速度 (
-w 1) < 速度 (デフォルト) < 速度 (-w 3)
これは、ワークロードプロファイルによって管理されるトレードオフを明確に示しています。それでは、高パフォーマンスプロファイルを使用して、実験の冒頭で用意されたサンプルハッシュをクラックしましょう。~/project ディレクトリには、ハッシュファイル sample.hash と辞書ファイル wordlist.txt が含まれています。
以下のコマンドを使用します。
-m 0: MD5 ハッシュタイプを指定します。-a 0: ストレート辞書攻撃を選択します。sample.hash: クラックするハッシュを含むファイルです。wordlist.txt: パスワード候補を含むファイルです。-w 3: 結果を可能な限り迅速に取得するための高パフォーマンスプロファイルです。
コマンドを実行してクラッキングプロセスを開始してください。
hashcat -m 0 -a 0 sample.hash wordlist.txt -w 3
パスワードは小さな単語リストに含まれているため、hashcat はほぼ瞬時にそれを見つけます。出力には、クラックされたハッシュと対応するパスワードが表示されます。
...
Dictionary cache built:
* Filename..: wordlist.txt
* Passwords.: 4
* Bytes.....: 29
* Keyspace..: 4
81d38d4b393528b4c444097c69141559:labex
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: 81d38d4b393528b4c444097c69141559
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 268.2 MH/s (0.01ms) @ Accel:64 Loops:64 Thr:64 Vec:1
Recovered........: 1/1 (100.00%) Digests
Progress.........: 4/4 (100.00%)
Rejected.........: 0/4 (0.00%)
Restore.Point....: 3/4 (75.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: 123456 -> labex
Hardware.Mon.#1..: Temp: 48c Util: 98% Core:1800MHz Mem:3500MHz Bus:16
Started: ...
Stopped: ...
重要な行は 81d38d4b393528b4c444097c69141559:labex であり、元のハッシュと回復されたパスワード labex が表示されています。ワークロードプロファイルを使用してクラッキングタスクを最適化することに成功しました。
まとめ
この実験を完了された皆さん、おめでとうございます!hashcat のワークロードプロファイルを使用して、パフォーマンスとシステムリソースを管理する方法を習得しました。
この実験では、以下のことを学びました。
-wオプションとその異なるプロファイル(-w 1、-w 2、-w 3)の目的を学びました。- ベンチマークモード(
-b)を使用してベースラインを確立し、異なるプロファイル下でのパフォーマンスを測定しました。 - クラッキング速度とシステム応答性の間の直接的なトレードオフを観察しました。
- 高パフォーマンスプロファイルを実際のパスワードクラッキングタスクに適用しました。
ツールのチューニング方法を理解することは、あらゆる技術専門家にとって重要なスキルです。この知識を応用することで、専用マシンでの最大速度が必要な場合でも、個人のワークステーションでの静かなバックグラウンドタスクが必要な場合でも、あらゆる状況に適した hashcat 設定を選択できるようになります。


