はじめに
Hashcat は強力で汎用性の高いパスワードリカバリツールですが、他の複雑なソフトウェアと同様に、ユーザーは最初は混乱する可能性のあるエラーに遭遇することがあります。これらの一般的な問題を理解することは、Hashcat を効果的に使用するための鍵となります。
この実験では、Hashcat の操作中に発生する最も一般的なエラーのいくつかを診断および修正する方法を学びます。ハッシュ形式、ファイル解析、ハードウェア管理に関連する問題を取り上げます。この実験の終わりまでに、独自の Hashcat セッションのトラブルシューティングを行うための準備が整っているでしょう。
「トークン長例外」エラーの調査
このステップでは、「トークン長例外」エラーについて調査します。このエラーは、入力ファイル内のハッシュが、指定されたハッシュモード(-m)に対して正しい長さを持っていない場合に発生します。例えば、標準的な MD5 ハッシュは正確に 32 文字の 16 進数である必要があります。Hashcat がそれより短いまたは長い行を見つけた場合、このエラーを報告して停止します。
まず、不正なハッシュを含むファイルで Hashcat を実行してみましょう。この目的のために hashes_token_length.txt という名前のファイルを用意しました。ハッシュモード 0 を使用します。これは MD5 に対応します。
ターミナルで次のコマンドを実行してください。
hashcat -m 0 -a 0 hashes_token_length.txt wordlist.txt
以下のようなエラーメッセージが表示されるはずです。
hashcat (v6.2.x) starting
...
* Token length exception: 1/2 hashes
This error happens if the hashes you are trying to crack do not meet the length requirements of the selected hash-mode.
Please make sure you have specified the correct hash-mode and that all of your hashes are valid.
...
* Startup failed: Invalid hash-length
メッセージは明確に「トークン長例外」を示しています。これを修正するには、無効なハッシュを特定し、修正するかファイルから削除する必要があります。不正な長さの行を見つける簡単な方法は、awk のようなツールを使用することです。MD5 ハッシュ(32 文字)の場合、長さが 32 でない行をチェックできます。
ファイルを検査するためにこのコマンドを実行してください。
awk 'length != 32' hashes_token_length.txt
出力には問題のある行が表示されます。
5d41402abc4b2a76b9719d911017c59
無効なハッシュを見つけたので、修正されたファイルを作成できます。有効なハッシュのみを含む hashes_corrected.txt という新しいファイルを作成しましょう。
awk 'length == 32' hashes_token_length.txt > hashes_corrected.txt
これで、修正されたファイルで Hashcat を正常に実行できます。
hashcat -m 0 -a 0 hashes_corrected.txt wordlist.txt
今回は、Hashcat はエラーなしで開始されます。
「ハッシュがロードされていません」エラーの解決
このステップでは、「ハッシュがロードされていません」(No hashes loaded)エラーに対処します。これは最も一般的な問題の 1 つであり、通常は Hashcat が指定されたハッシュモードに対して、ハッシュファイル内のどの行も有効なハッシュとして解析できなかったことを意味します。これは、ハッシュモードの誤り、ファイルの破損、またはファイル形式の誤りなどが原因である可能性があります。
hashes_no_load.txt という名前のファイルがあります。このファイルをハッシュモード 10(md5($pass.$salt))を使用してクラックしてみましょう。このモードでは、ハッシュとソルトはコロン(:)で区切られている必要がありますが、私たちのファイルには生の MD5 ハッシュのみが含まれています。
次のコマンドを実行してください。
hashcat -m 10 -a 0 hashes_no_load.txt wordlist.txt
Hashcat は開始されますが、すぐにハッシュがロードされなかったことを示すステータスメッセージで終了します。
...
Hashes: 2 digests; 2 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Applicable optimizers:
* Zero-Byte
* Precompute-Init
* Precompute-Merkle-Demgard
* Meet-In-The-Middle
* Early-Skip
* Not-Iterated
* Not-Salted
* Raw-Hash
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature monitoring is disabled.
No hashes loaded.
Started: ...
Stopped: ...
重要な行は No hashes loaded です。これは、ハッシュファイルの内容と指定したハッシュモードの間に不一致があることを示しています。ファイル hashes_no_load.txt には生の MD5 ハッシュが含まれており、これはモード 0 に対応します。
これを修正するには、正しいハッシュモードを指定する必要があります。-m 0 を付けてコマンドを再度実行しましょう。
hashcat -m 0 -a 0 hashes_no_load.txt wordlist.txt
今回は、Hashcat はファイルから有効なハッシュを正しくロードし、クラッキングセッションを開始します。モード 0 に対して有効なハッシュに見えない行 "not_a_hash" は無視されます。
...
Hashes: 1 digests; 1 unique digests, 1 unique salts
...
Session..........: hashcat
Status...........: Running
...
「デバイス温度アボート」警告への対処
このステップでは、温度に関連する問題の対処法について説明します。GPU のような強力なハードウェアで実行する場合、Hashcat は大量の熱を発生させます。ハードウェアの損傷を防ぐため、Hashcat はデバイスの温度を監視し、温度が高くなりすぎるとセッションを自動的に一時停止または中止します。
LabEx の仮想環境では、物理的な GPU にアクセスできないため、このエラーを直接発生させることはできません。しかし、これは実際の使用において理解しておくべき重要な機能です。エラーメッセージは Device #1 temperature abort trigger reached のようなものになります。
Hashcat は、この動作を管理するためのコマンドラインオプションを提供しています。
--gpu-temp-abort=X: いずれかの GPU が温度 X(摂氏)に達した場合にセッションを中止します。--gpu-temp-retain=Y: いずれかの GPU が温度 Y(摂氏)に達した場合にセッションを一時停止し、冷却されたら再開します。
これらのフラグを使用して、ハードウェアと冷却設定に適したカスタム温度制限を設定できます。例えば、温度が 90°C を超えた場合に Hashcat を停止させるには、コマンドに --gpu-temp-abort=90 を追加します。
このフラグを使用してコマンドを実行し、その使用方法を見てみましょう。セットアップ中に作成した valid_hash.txt ファイルを使用します。
hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --gpu-temp-abort=90
コマンドは通常どおり実行されますが、Hashcat はカスタム温度制限で設定されました。
場合によっては、ハードウェア監視が故障しているかサポートされていないため、不正確な温度読み取りや不要なシャットダウンが発生することがあります。冷却が適切であり、温度読み取りが間違っていると確信している場合は、--hwmon-disable フラグを使用してハードウェア監視機能を完全に無効にすることができます。
hashcat -m 0 -a 0 valid_hash.txt wordlist.txt --hwmon-disable
これは重要な安全機能を無効にするため、このオプションは注意して使用してください。
単語リストまたはルールファイルにおける「行長例外」の修正
このステップでは、「行長例外」(Line-length exception)エラーに対処します。このエラーは、ステップ 1 のトークン長例外に似ていますが、ハッシュファイルではなく、単語リストやルールファイルなどの入力ファイルに適用されます。Hashcat には、これらのファイルから読み取った行用の内部バッファがあり、行がこの制限(通常 256 バイト)を超えると、このエラーがトリガーされます。
これは、破損した単語リストや適切に生成されていないルールファイルで発生する可能性があります。wordlist_long_line.txt という名前のファイルがあり、非常に長い行が 1 つ含まれています。
これを valid_hash.txt に対するクラッキングセッションで使用してみましょう。
hashcat -m 0 -a 0 valid_hash.txt wordlist_long_line.txt
単語リストファイルを指すエラーメッセージが表示されます。
...
ATTENTION!
The wordlist 'wordlist_long_line.txt' contains a line that is larger than 256 bytes.
The line is ignored.
To fix this, remove the line from the wordlist.
...
Hashcat はこの警告の後も続行する可能性がありますが、入力ファイルをクリーンアップするのがベストプラクティスです。awk のようなツールを使用して、サイズが大きすぎる行を見つけて削除できます。次のコマンドは、ファイル内で 256 文字を超えるすべての行を表示します。
awk 'length > 256' wordlist_long_line.txt
これにより、問題のある長い行が表示されます。問題を修正するには、256 文字を超える行を除外した、新しくクリーンな単語リストを作成できます。
awk 'length <= 256' wordlist_long_line.txt > wordlist_corrected.txt
これで、エラーに遭遇することなく wordlist_corrected.txt ファイルを使用できます。
hashcat -m 0 -a 0 valid_hash.txt wordlist_corrected.txt
セッションは、行長に関する警告なしにクリーンに開始されるようになります。
「セパレーターが見つかりません」エラーの理解と解決
この最後のステップでは、「セパレーターが見つかりません」(Separator not found)エラーに対処します。このエラーは、特定のフォーマットとセパレーター文字(通常はコロン :)を期待するハッシュモードを使用しているにもかかわらず、ハッシュファイル内の行にそれらが含まれていない場合に発生します。user:password や hash:salt のような多くのハッシュフォーマットは、この構造に依存しています。
この例では、NetNTLMv1 用のハッシュモード 5500 を使用します。このフォーマットは通常 USER::DOMAIN:LM_HASH:NT_HASH:CHALLENGE のようになります。コロンは不可欠なセパレーターです。hashes_no_separator.txt という名前のファイルがあり、ハッシュ文字列が含まれていますが、必要なセパレーターが欠落しています。
このファイルで Hashcat を実行してみましょう。
hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt
Hashcat は失敗し、「セパレーターが見つかりません」エラーを表示します。また、正しいフォーマットの例も示します。
...
* Separator unmatched: 1/1 hashes
This error happens if the hashes you are trying to crack are not in the correct format.
Please read https://hashcat.net/wiki/doku.php?id=example_hashes to learn more about the correct format.
...
* Startup failed: Invalid hash-format
エラーメッセージは、ハッシュに必要なセパレーターが欠落していることを示しています。これを修正するには、期待されるフォーマットに一致するようにハッシュファイルを編集する必要があります。ユーザー名を labex、ドメインを corp、チャレンジを 1122334455667788 と仮定します。正しいフォーマットは labex::corp:<the_hash>:1122334455667788 になります。
nano エディタでファイルを開き、修正しましょう。
nano hashes_no_separator.txt
ファイルの内容を以下のように変更します。
U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935
元のハッシュ文字列で <the_hash> を置き換えることを確認して、以下のようにします。
labex::corp:U4BE_AC149FD0318023832132BFB833521AAF8A631114317A4935:1122334455667788
Ctrl+X、次に Y、そして Enter を押してファイルを保存し、nano を終了します。
これで、Hashcat コマンドを再度実行します。
hashcat -m 5500 -a 0 hashes_no_separator.txt wordlist.txt
フォーマットが修正されたことで、Hashcat はハッシュを受け入れ、クラッキングセッションを正しく開始するようになります。これは、使用している特定のハッシュモードに対してハッシュファイルが正しくフォーマットされていることを確認することの重要性を示しています。
まとめ
この実験では、Hashcat を使用する際に遭遇する最も一般的な 5 つのエラーの診断と解決方法を学びました。
以下の項目をカバーしました。
- トークン長例外(Token length exception): 指定されたモードに対してハッシュの長さが正しくない場合に発生します。
- ハッシュがロードされない(No hashes loaded): ハッシュファイルフォーマットと選択されたハッシュモードの不一致が原因です。
- デバイス温度による中断(Device temperature abort): 温度制御フラグで管理できるハードウェアの安全機能です。
- 行長例外(Line-length exception): 単語リストまたはルールファイル内の大きすぎる行によってトリガーされます。
- セパレーターが見つかりません(Separator not found): ハッシュフォーマットが、ハッシュファイルに存在しないセパレーターを必要とする場合に発生します。
これらのエラーの原因を理解し、修正方法を知ることで、Hashcat をより効率的に使用し、一般的な落とし穴を回避できます。重要なのは、常にインプットファイルを検証し、特定のタスクに対して正しいオプションを使用していることを確認することです。


