はじめに:Hashcatとは?
Hashcat(ハッシュキャット)は、「世界最速かつ最先端のパスワード回復ユーティリティ」と称される、非常に強力なオープンソースのパスワード解析ツールです。Linux, macOS, Windowsなど様々なプラットフォームで動作し、特にGPU(グラフィックボード)の並列処理能力を活用することで、驚異的な速度でパスワード解析を行うことができます。
元々はプロプライエタリソフトウェアでしたが、2015年にオープンソース化されました。主にサイバーセキュリティの専門家やペネトレーションテスターが、システムのパスワード強度を評価したり、セキュリティ監査を行う目的で使用します。300種類以上のハッシュアルゴリズムに対応しており、様々な攻撃モードを駆使して解析を行います。
Kali Linuxでの利用とインストール
Kali Linuxには、デフォルトでHashcatがプレインストールされていることが多いです。これにより、ペネトレーションテストやセキュリティ学習を始める際に、すぐにHashcatを利用できます。
インストールされているか確認し、最新版にアップデートするには、以下のコマンドを使用します。
# パッケージリストの更新
sudo apt update
# Hashcatのインストールまたはアップデート
sudo apt install hashcat
# バージョンの確認
hashcat -V
HashcatはGPUを利用することで大幅に高速化されます。NVIDIAまたはAMDのGPUを使用している場合、適切なドライバ(CUDAまたはOpenCL)がインストールされていることを確認してください。GPUが認識されない場合は、各メーカーの公式サイトから最新のドライバをインストールする必要があります。
Hashcatの公式サイト (https://hashcat.net/hashcat/) から、他のOS用のバイナリやソースコードもダウンロード可能です。
基本的な使い方
Hashcatの基本的なコマンド構文は以下の通りです。
hashcat [オプション]... ハッシュファイル [辞書ファイルまたはマスク]...
ハッシュファイルには解析対象のハッシュ値が含まれるファイルを指定します。ハッシュ値を直接コマンドラインで指定することも可能です。
主要な構成要素:
- オプション (`[オプション]`): 動作モード、ハッシュタイプ、使用デバイスなどを指定します。
- ハッシュファイル (`ハッシュファイル`): 解析したいハッシュ値が1行に1つずつ記述されたテキストファイル。
- 辞書ファイルまたはマスク (`[辞書ファイルまたはマスク]`): アタックモードに応じて、パスワード候補リスト(辞書)のファイルパスや、ブルートフォース攻撃のパターン(マスク)を指定します。
例えば、MD5ハッシュ (`-m 0`) を辞書攻撃 (`-a 0`) で解析する場合のコマンドは以下のようになります。
hashcat -m 0 -a 0 hashes.txt wordlist.txt
ここで、`hashes.txt` がハッシュ値を含むファイル、`wordlist.txt` が辞書ファイルです。
ハッシュタイプ (`-m`) の指定 🔑
Hashcatで最も重要なオプションの一つが `-m` (または `–hash-type`) です。これは、解析対象のハッシュがどのアルゴリズムで生成されたかを指定します。Hashcatは自動でハッシュタイプを判別しないため、ユーザーが正確に指定する必要があります。
ハッシュタイプのIDは、Hashcatの公式WikiにあるExample hashesのページで確認できます。300種類以上のハッシュタイプがサポートされています。
よく使われるハッシュタイプの例:
ハッシュタイプID (`-m`) | アルゴリズム名 | カテゴリ・用途例 |
---|---|---|
0 |
MD5 | Raw Hash |
100 |
SHA1 | Raw Hash |
1400 |
SHA2-256 | Raw Hash |
1800 |
SHA-512 (Unix) | Operating System |
1000 |
NTLM | Network Protocols, Windows Accounts |
3000 |
LM | Operating System (古いWindows) |
3200 |
bcrypt ($2*$, $2a$, $2y$) | Operating System |
17210 or 17220 |
PKZIP (Compressed) | Archive (ZIPファイル) |
22000 |
WPA-PBKDF2-PMKID+EAPOL | Network Protocols (WPA/WPA2) |
13100 |
Kerberos 5 TGS-REP | Network Protocols |
解析したいハッシュの形式が不明な場合は、`hashid` ツールなどを使って特定を試みることができます。正しいハッシュタイプを指定しないと、解析は成功しません。
アタックモード (`-a`) の選択 ⚔️
Hashcatは多様な攻撃手法(アタックモード)をサポートしており、`-a` (または `–attack-mode`) オプションで指定します。目的に応じて適切なモードを選択することが重要です。
モードID (`-a`) | 名称 | 説明 | 必要な引数 |
---|---|---|---|
0 |
Straight (辞書攻撃) | 指定された辞書ファイル内の単語を順番に試します。最も基本的な攻撃方法です。 | 辞書ファイル |
1 |
Combination (組み合わせ攻撃) | 2つの辞書ファイルを指定し、それぞれの単語を組み合わせて試します。 | 辞書ファイル1 辞書ファイル2 |
3 |
Brute-force (ブルートフォース攻撃 / マスク攻撃) | 指定された文字セット(マスク)に基づいて、考えられる全ての組み合わせを生成して試します。 | マスク |
6 |
Hybrid (Wordlist + Mask) | 辞書ファイル内の単語の後ろに、指定されたマスクパターンを追加して試します。 | 辞書ファイル マスク |
7 |
Hybrid (Mask + Wordlist) | 指定されたマスクパターンの後ろに、辞書ファイル内の単語を追加して試します。 | マスク 辞書ファイル |
8 |
Prince | 辞書内の単語を組み合わせて新しい候補を生成する高度な辞書攻撃。 | 辞書ファイル |
辞書攻撃 (`-a 0`)
最も一般的で、効果的な攻撃方法の一つです。品質の高い辞書ファイル(ワードリスト)を用意することが成功の鍵となります。有名な辞書ファイルには `rockyou.txt` (2009年にRockYou社から漏洩したパスワードリストが元) や、SecListsプロジェクト (https://github.com/danielmiessler/SecLists) で提供されているものなどがあります。
# NTLMハッシュ (-m 1000) を rockyou.txt を使って辞書攻撃 (-a 0)
hashcat -m 1000 -a 0 ntlm_hashes.txt /usr/share/wordlists/rockyou.txt
ブルートフォース / マスク攻撃 (`-a 3`)
パスワードのパターンがある程度推測できる場合に非常に有効です。マスクは、パスワードに使用されている可能性のある文字の種類と長さを指定します。
マスク文字セットの定義:
マスク文字 | 意味 | 含まれる文字 |
---|---|---|
?l |
小文字アルファベット (lower) | abcdefghijklmnopqrstuvwxyz |
?u |
大文字アルファベット (upper) | ABCDEFGHIJKLMNOPQRSTUVWXYZ |
?d |
数字 (digit) | 0123456789 |
?s |
記号 (symbol) | !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ |
?a |
上記すべて (all) | ?l?u?d?s |
?b |
すべてのバイト (binary) | 0x00 - 0xff |
?h |
小文字16進数 | 0123456789abcdef |
?H |
大文字16進数 | 0123456789ABCDEF |
例えば、「大文字1文字 + 小文字5文字 + 数字2文字」の8文字のパスワードをブルートフォースで探す場合のマスクは `?u?l?l?l?l?l?d?d` となります。
# SHA1ハッシュ (-m 100) を上記のマスクでブルートフォース攻撃 (-a 3)
hashcat -m 100 -a 3 sha1_hash.txt ?u?l?l?l?l?l?d?d
カスタム文字セット: `-1`, `-2`, `-3`, `-4` オプションを使って、独自の文字セットを定義することも可能です。例えば、「大文字と数字のみ」を `?1` として定義するには `-1 ?u?d` のように指定します。
# 6文字で、大文字と数字のみから成るパスワードを探索
hashcat -m 0 -a 3 md5_hash.txt -1 ?u?d ?1?1?1?1?1?1
長さのインクリメント (`–increment`): マスクの長さを段階的に増やしながら攻撃する場合に使います。例えば `–increment –increment-min 4 –increment-max 8` は4文字から8文字までの長さを試します。
# 4文字から8文字までの数字のみのパスワードを探索
hashcat -m 0 -a 3 md5_hash.txt --increment --increment-min 4 --increment-max 8 ?d?d?d?d?d?d?d?d
ハイブリッド攻撃 (`-a 6`, `-a 7`)
辞書攻撃とマスク攻撃を組み合わせる方法です。「よく使われる単語 + 数字や記号」のようなパターンのパスワードに有効です。
# 辞書単語の後ろに数字4桁を追加する攻撃 (-a 6)
hashcat -m 0 -a 6 md5_hashes.txt wordlist.txt ?d?d?d?d
# 数字4桁の後ろに辞書単語を追加する攻撃 (-a 7)
hashcat -m 0 -a 7 md5_hashes.txt ?d?d?d?d wordlist.txt
便利なオプション ⚙️
Hashcatには解析作業を効率化するための多くのオプションがあります。
オプション | 説明 |
---|---|
-o <file> --outfile <file> |
解析に成功したハッシュとパスワードを指定したファイルに出力します。形式は `hash:password` です。 |
--show |
既に解析済みのパスワード (potfileに記録されているもの) を表示します。 |
--left |
まだ解析されていないハッシュのみを表示します。 |
--remove |
解析に成功したハッシュを、元のハッシュファイルから削除します (注意して使用)。 |
--session <name> |
解析セッションに名前を付けます。中断 (`Ctrl+C`) しても、後で同じセッション名で `–restore` オプションを使って再開できます。 |
--restore |
最後に中断したセッション、または `–session` で指定したセッションを再開します。 |
-O --optimized-kernel-enable |
最適化されたカーネルを使用し、パフォーマンスを向上させることがあります (特に長いパスワードの場合)。 |
-w <level> --workload-profile <level> |
ワークロードプロファイルを指定します (1=Low, 2=Economy, 3=High, 4=Insane)。値が大きいほどGPUへの負荷が高まり、速度が向上する可能性がありますが、安定性に影響することもあります。 |
-d <devices> --opencl-device-types <types> |
使用するデバイス(CPU/GPU)を指定します。`hashcat -I` でデバイスIDを確認できます。例: `-d 1` (GPU 1のみ使用)。 |
--force |
特定の警告 (例: 古いドライバの使用) を無視して強制的に実行します。問題が発生する可能性があるため、注意が必要です。 |
-r <rule_file> |
辞書攻撃 (`-a 0`) で使用するルールファイルを指定します。単語を変化させるルール (例: 大文字化、数字追加) が含まれます。 |
解析を中断・再開する機能 (`–session`, `–restore`) は、時間のかかる解析作業において非常に重要です。
# 長時間かかる解析を開始 (セッション名を "long_run" とする)
hashcat -m 22000 -a 3 capture.hccapx ?a?a?a?a?a?a?a?a --session=long_run -O -w 3
# (Ctrl+C で中断後) 解析を再開
hashcat --session=long_run --restore
解析が成功した結果は、デフォルトでは `hashcat.potfile` というファイルに `hash:password` の形式で保存されます。`-o` オプションで出力ファイル名を指定することも推奨されます。
# 解析結果を cracked.txt に出力
hashcat -m 0 -a 0 hashes.txt wordlist.txt -o cracked.txt
# cracked.txt に保存された解析結果を確認 (一部)
cat cracked.txt
# 出力例: d033e22ae348aeb5660fc2140aec35850c4da997:password123
実践例:WPA/WPA2の解析 📶
Hashcatは無線LANのパスワード解析にもよく用いられます。WPA/WPA2のパスワード解析には、通常、クライアントとアクセスポイント間の認証プロセス(4ウェイハンドシェイク)をキャプチャしたファイルが必要です。
- ハンドシェイクのキャプチャ: `airodump-ng` などのツールを使用して、ターゲットネットワークのハンドシェイクを含む `.cap` ファイルを取得します。
- hccapx形式への変換: Hashcatが扱える形式 `.hccapx` (または新しい `.hc22000`) に変換します。`cap2hccapx` ツールや `hcxpcapngtool` などを使用します。
# 例: hcxpcapngtool を使用 hcxpcapngtool capture.cap -o capture.hc22000
- Hashcatによる解析: `-m 22000` (新しい形式) または `-m 2500` (古いhccapx形式) を指定して解析を実行します。辞書攻撃やマスク攻撃が一般的です。
# 辞書攻撃でWPA/WPA2パスワードを解析 (-m 22000) hashcat -m 22000 -a 0 capture.hc22000 wordlist.txt # 8文字の数字のみのパスワードをマスク攻撃で解析 (-m 22000) hashcat -m 22000 -a 3 capture.hc22000 ?d?d?d?d?d?d?d?d
2018年には、Jens Steube氏によって、完全な4ウェイハンドシェイクを必要とせずに、アクセスポイントからの最初のEAPOLフレーム (PMKIDを含む) だけでも解析が可能になる新しい攻撃手法が発見されました。これは `-m 22000` で対応しています。
無線LANのパスワード解析は、自身が管理するネットワーク、または明示的に許可を得たネットワークに対してのみ行ってください。
パフォーマンスチューニングと注意点
Hashcatの性能を最大限に引き出すためには、以下の点を考慮すると良いでしょう。
- GPUの活用: 可能であれば高性能なGPUを使用し、最新のドライバをインストールします。CPUのみでも動作しますが、速度は大幅に劣ります。
- ワークロード (`-w`): システムの安定性を見ながら、ワークロードプロファイルを調整します。`3` (High) や `4` (Insane) は速度が出ますが、GPU温度や電力消費に注意が必要です。
- 最適化カーネル (`-O`): 特定の条件下でパフォーマンスが向上することがあります。試してみる価値はあります。
- 辞書とルール: 辞書攻撃では、ターゲットに合わせた質の高い辞書を選択し、ルール (`-r`) を活用することで効率が上がります。
- マスクの絞り込み: ブルートフォース攻撃では、パスワードポリシーや推測に基づき、できるだけマスクの範囲を絞り込むことが時間短縮につながります。
- セッション管理: 長時間解析では `–session` と `–restore` を活用し、中断しても再開できるようにします。
まとめ 🙏
Hashcatは、その速度と多様な機能により、パスワード回復やセキュリティ評価のための非常に強力なツールです。この記事では、基本的な使い方から主要なオプション、アタックモード、そしてWPA/WPA2解析の実践例までを解説しました。
適切なハッシュタイプとアタックモードを選択し、各種オプションを理解することで、Hashcatを効果的に活用できます。しかし、その強力さゆえに、倫理的な使用と法的遵守が不可欠です。セキュリティ専門家として、あるいは学習者として、責任ある態度でこのツールに向き合い、知識をセキュリティ強化のために役立てましょう。
Happy (Ethical) Cracking!
参考情報
- Hashcat公式サイト: https://hashcat.net/hashcat/
- Hashcat Wiki (使い方、オプション詳細など): https://hashcat.net/wiki/
- Example Hashes (ハッシュタイプ一覧): https://hashcat.net/wiki/doku.php?id=example_hashes
コメント