# Hashcat 使い方
## I. 基本的な使い方と構文
### 1. 基本コマンド構文
Hashcatの基本的なコマンド構文は以下の通りです。
```bash
hashcat.exe [オプション]... ハッシュまたはハッシュファイル [辞書|マスク|ディレクトリ]...
```
* **`hashcat.exe`**: 実行ファイル名 (Windows環境)。
* **`[オプション]...`**: 動作を指定するフラグ(`-m`, `-a`, `-w`など)。
* **`ハッシュまたはハッシュファイル`**: 解析対象のハッシュ文字列を直接指定するか、ハッシュが保存されたファイル名を指定します。
* **`[辞書|マスク|ディレクトリ]...`**: 攻撃モード(`-a`)に応じて、辞書ファイル(ワードリスト)、マスク(パターン)、またはこれらが格納されたディレクトリを指定します。
### 2. 環境情報の確認
HashcatはCLIツールであるため、まずヘルプオプションで基本情報を確認することが推奨されます。
| コマンド | 説明 | 参照元 |
| :--- | :--- | :--- |
| `hashcat.exe -h` | ヘルプ(基本的なオプション)を表示します。 | |
| `hashcat.exe -hh` | サポートされている**全ハッシュモード**を表示します。 | |
| `hashcat.exe -I` | システム/環境/バックエンドAPI情報、および利用可能なGPU/CPUのIDを確認できます。 | |
### 3. ハッシュタイプの特定 (`-m`)
解析を開始する前に、ハッシュのタイプ(アルゴリズム)を正確に特定し、`-m`オプションでモード番号を指定する必要があります。
| モード番号 (`-m`) | ハッシュ名 | 備考 | 参照元 |
| :--- | :--- | :--- | :--- |
| `0` | MD5 | 生のMD5ハッシュ | |
| `1000` | NTLM | Windows認証で広く利用されます | |
| `3200` | bcrypt $2*$, Blowfish (Unix) | 強力なハッシュアルゴリズム | |
| `500` | MD5crypt, Apache MD5 (apr1) | `$1$`署名を持つことが多いハッシュ | |
| `2500` | WPA-EAPOL-PBKDF2 | WPA/WPA2 (hccapxファイル) | |
| `11600` | 7-Zip | 7z2hashcatで抽出されたハッシュ | |
**注意点**: ハッシュの署名(例: `$1$`)はアルゴリズムを推測する強力な手掛かりとなりますが、常に正確であるとは限りません。また、**間違ったハッシュタイプを指定すると、「Line-length exception」などの一般的なエラー**が発生する可能性があります。
## II. 主要な攻撃モードの実践 (`-a`)
Hashcatは様々な攻撃モードをサポートしており、`-a`オプションでモード番号を指定します。
### 1. 辞書攻撃 (Straight Attack: `-a 0`)
辞書ファイル(ワードリスト)に記載されている単語をそのまま、またはルールを適用して試行する最も基本的な攻撃です。
#### 実行例 (MD5, 複数辞書, ルール適用)
```bash
hashcat.exe -a 0 -m 0 hashes.txt dict1.txt dict2.txt -r rules/best64.rule -o cracked.txt
```
* `-a 0 -m 0`: MD5 (モード 0) に対して辞書攻撃を実行します。
* `hashes.txt`: 解析対象のハッシュファイルです。
* `dict1.txt dict2.txt`: 複数の辞書ファイルをスペース区切りで指定できます。
* `-r rules/best64.rule`: Hashcatに含まれる**ルールセット(`best64.rule`など)を辞書内の各単語に適用**し、パスワード候補を拡張します。
#### ルールスタッキング(Rule Stacking)
`-r`オプションを複数回使用することで、複数のルールファイルを順番にチェーン(連結)して適用できます。これにより、さらに複雑な変形(マングル)が可能になります。
```bash
hashcat.exe -a 0 -m 0 -r rules/best64.rule -r rules/toggles2.rule hashlist.txt dict.txt
```
### 2. マスク攻撃 (Mask Attack / Brute-force: `-a 3`)
従来の総当たり攻撃(ブルートフォース)をより具体的で効率的に行うための手法です。パスワードのパターン(マスク)を指定し、キー空間を大幅に削減することで、解析時間を短縮します。
#### マスクの構成要素
マスクは、組み込み文字セット(`?l`, `?d`など)やカスタム文字セット(`?1`〜`?4`)で構成されます。
| プレースホルダ | 説明 | 組み込み文字セット |
| :---: | :--- | :--- |
| `?l` | 小文字 (a-z) | |
| `?u` | 大文字 (A-Z) | |
| `?d` | 数字 (0-9) | |
| `?s` | 特殊文字 | |
| `?a` | すべて (?l?u?d?s) | |
| `?1`〜`?4` | カスタム文字セット | `-1`〜`-4`オプションで定義 |
#### 実行例 (8桁の数字の総当たり)
```bash
hashcat.exe -a 3 -m 0 example0.hash ?d?d?d?d?d?d?d?d
```
#### パスワード長の増分 (Increment Mode)
パスワード長が不明な場合は、`--increment`(または`-i`)フラグを使用し、パスワード長を最小値から最大値まで自動で増加させます。
| オプション (Short / Long) | 説明 |
| :--- | :--- |
| `--increment` (`-i`) | 増分モードを有効にします。 |
| `--increment-min` | 最小長を設定します。 |
| `--increment-max` | 最大長を設定します。 |
**実行例 (長さ4〜6の全文字セットを増分)**
```bash
hashcat.exe -a 3 -m 0 --increment --increment-min 4 --increment-max 6 hash.txt ?a?a?a?a?a?a?a?a
```
*解説: マスクは8文字長ですが、`--increment-max 6`により、長さは4から6に制限されます。
### 3. ハイブリッド攻撃 (Hybrid Attack: `-a 6`, `-a 7`)
辞書攻撃とマスク攻撃を組み合わせることで、既知の単語パターンに数字や記号を追加するパスワード(例: `password123`)を効率的に試行できます。
| モード番号 (`-a`) | 名称 | 説明 | 実行例(MD5) |
| :---: | :--- | :--- | :--- |
| `6` | Wordlist + Mask | 辞書(単語)にマスクを**後置**(追加)します。 | `hashcat.exe -a 6 -m 0 dict.txt ?d?d?d?d` |
| `7` | Mask + Wordlist | マスクを辞書(単語)に**前置**します。 | `hashcat.exe -a 7 -m 0 ?u?l dict.txt` |
**実行例 (辞書の後ろに4桁の数字を追加)**
WPAハッシュ(`-m 2500`)に対して、`rockyou.txt`の単語に4桁の数字(`?d?d?d?d`)を後置して試行します。
```bash
hashcat.exe -a 6 -m 2500 wpa.hccapx rockyou.txt ?d?d?d?d
```
### 4. コンビネーション攻撃 (Combination Attack: `-a 1`)
2つの辞書ファイルを結合してパスワード候補を生成します。
**実行例**
`names.txt`(左側)と`years.txt`(右側)の単語を連結して試行します。
```bash
hashcat.exe -a 1 -m 1000 ntlm_hashes.txt names.txt years.txt
```
## III. GPUの活用とパフォーマンスチューニング
HashcatはGPUを利用することで解析速度を劇的に向上させます。
### 1. デバイス指定とワークロード設定
| オプション (Short / Long) | 説明 | 推奨設定 | 参照元 |
| :--- | :--- | :--- | :--- |
| `-D, --devices` | 使用するGPUをカンマ区切りで指定します(IDは`-I`で確認)。 | `-D 1,3` | |
| `-w, --workload-profile` | GPU負荷プロファイル。`3` (High) はサーバーや専用マシンで最大の速度を出すのに推奨されますが、デスクトップ操作が困難になることがあります。 | `-w 3` | |
| `-O, --optimized-kernel-enable` | **最適化カーネル**を有効にし、パフォーマンスを向上させます(一部ハッシュタイプで有効。パスワード長に制限がかかる場合があります)。 | `-O` | |
| `--gpu-temp-abort` | 指定温度に達した場合に安全に終了させます。 | `--gpu-temp-abort=90` | |
| `--benchmark` (`-b`) | 特定のハッシュモードのベンチマーク(理論上の最大速度)を実行します。 | `hashcat.exe -m 1000 -b` | |
### 2. 高速ハッシュのためのワークロード増幅
MD5のような**高速ハッシュ**(Fast Hashes)は計算が非常に速いため、GPUの並列処理能力をフル活用するには、HashcatがGPU上でパスワード候補を生成する**アンプリファイア(増幅器)** が必要です。
1. **辞書 + 大量のルール**: 辞書に多数のルールを適用することで、GPU上で候補生成を増幅させます。目安として、1000万語以上の辞書と1000個以上のルールがスイートスポットになり得ます。
2. **マスクベースの攻撃**: マスク攻撃やハイブリッド攻撃は、GPU上で候補を生成するため、アンプリファイアとして機能します。
### 3. 遅いハッシュへのパイプライン利用
bcrypt (`-m 3200`) のような**遅いハッシュ**(Slow Hashes)は、計算自体に時間がかかるため、アンプリファイアは通常不要です。
パイプ(`|`)を使って辞書やルールを適用した候補をHashcatに直接供給することで、効率を最適化できます。Windowsでもパイプ機能はLinuxと同様に動作します。
**例 (ルール適用結果をbcryptへパイプ)**
```bash
# --stdout はハッシュをクラックせず、候補のみを標準出力に出力するオプション
hashcat.exe --stdout wordlist.txt -r rules/best64.rule | hashcat.exe -m 3200 test.hccapx
```
## IV. 解析結果の管理と復元
### 1. セッション管理 (`--session` / `--restore`)
長時間の解析では、セッション機能を活用して中断・再開できるようにすることが必須です。
1. **セッション開始時**: `--session`で名前を定義します。
```bash
hashcat.exe -a 3 -m 1000 hashes.txt ?a?a?a?a?a?a?a?a --session=long_attack
# (Ctrl+Cで中断可能)
```
2. **セッション復元時**: 中断後に`--restore`と**同じセッション名**を指定して再開します。
```bash
hashcat.exe --session=long_attack --restore
```
### 2. Potfileの活用
Hashcatは、クラックに成功したハッシュと平文を自動的に `hashcat.potfile` に記録します(Potfile)。これにより、次に同じハッシュを解析する際に無駄な計算を防ぎ、特にソルト付きハッシュの効率が向上します。
* **クラック済み結果の表示 (`--show`)**:
Potfileに記録されている、指定されたハッシュリストに対応する結果を表示します。
```bash
hashcat.exe -m 0 original_MD5_hashes.txt --show
```
* **未解析ハッシュの抽出 (`--left`)**:
Potfileに記録されていない、つまりまだクラックできていないハッシュのみを表示またはファイルに出力します。
```bash
hashcat.exe -m 0 original_MD5_hashes.txt --left > uncracked_hashes.txt
```
* **ハッシュの自動削除 (`--remove`)**:
ハッシュがクラックされた直後に入力ハッシュファイルからそのハッシュを削除したい場合は、`--remove`オプションを使用します。
### 3. 出力フォーマットの指定 (`-o`, `--outfile-format`)
クラック結果をファイルに出力する際は、`-o`オプションでファイル名を指定し、`--outfile-format`で出力形式を制御できます。
| フォーマット番号 | 説明 | 参照元 |
| :---: | :--- | :--- |
| `1` | hash[:salt] | |
| `2` | plain (平文のみ) | |
| `3` | hex_plain (ハッシュ:平文) | |
**実行例 (平文のみを `formatted_output.txt` に出力)**
```bash
hashcat.exe -m 0 --show -o formatted_output.txt --outfile-format 2 original_MD5_hashes.txt
```
## V. 特定のデータ形式の処理(ユーティリティ連携)
Hashcat-utilsに含まれるユーティリティや関連ツールは、Hashcatでの解析前に特定のデータ形式を準備するために使用されます。
| 対象ファイル | ツール/モード | 備考 | 参照元 |
| :--- | :--- | :--- | :--- |
| WPA/WPA2 (.pcap, .cap) | `cap2hccapx` | キャプチャファイルからHashcat入力形式(`.hccapx`、モード`2500`)に変換します。 | |
| 7-Zip (.7z) | `7z2hashcat.exe` | 7-Zipファイルからハッシュを抽出します。Windows向け実行ファイル(`.exe`)が提供されています。モードは`-m 11600`。 | |
**7z2hashcatの実行例 (Windows .exe 版)**
https://github.com/philsmd/7z2hashcat
抽出されたハッシュをHashcatの入力ファイルとして使用します。
```bash
7z2hashcat.exe file.7z > 7z_hash.txt
hashcat.exe -m 11600 -a 0 7z_hash.txt rockyou.txt
```
## VI. 補足:ハッシュのレイヤー化の危険性
非常に強力なハッシュ(bcryptなど)の上に、MD5などの**弱いハッシュをレイヤー化**する(例:`bcrypt(MD5(password))`)手法は、攻撃者にとって脆弱性となります。
攻撃者が他の侵害データからMD5ハッシュそのものを知っている場合、強力なbcryptレイヤーを**ハッシュ剥ぎ取り (Hash Shucking)** によって剥がし取り、下のMD5ハッシュを直接攻撃できます。これにより、本来bcryptが提供していたセキュリティ上の利点(遅さ)が失われ、攻撃速度が飛躍的に向上します(bcryptの2,000 H/sからMD5の650億 H/sへ)。
もしハッシュのアップグレードなどでレイヤー化を行う場合は、中間ハッシュ(MD5)に**サイト全体のペッパー (Pepper)** を追加して保護することが強く推奨されます。ペッパーはハッシュ計算に秘密の追加情報として使用され、データベースとは物理的に離れた場所に保管されるべきです。
---
### まとめ
Hashcatの実践では、GPU性能を最大限に引き出すために、`-a`, `-m`, `-w`オプションを適切に組み合わせること、特に高速ハッシュにはルールやマスクによる**ワークロードの増幅**が必須であることを理解することが重要です。また、長時間の解析にはセッション管理 (`--session`, `--restore`) とPotfileの活用 (`--show`, `--left`) が不可欠です。
パスワード解析は、ハッシュ化された文字列から元の平文を推測するという性質上、鍵空間全体を探索するには莫大な時間が必要です。したがって、**良質な辞書と巧妙なルール**、そしてターゲットのパスワードポリシーに関する知識を活用して、効率的に鍵空間を絞り込むことが成功の鍵となります。