John the Ripper と Hashcat を使った ZIP パスワード解析(Kali Linux)
今回行ったのは パスワード付き ZIP ファイルの解析テスト(ブルートフォースアタック)です。
※本記事は セキュリティ学習目的の実験です。
Kali Linux には、パスワード解析ツールとして有名な John the Ripper と Hashcat が標準で用意されています。
John the Ripper の使い方を調べていると、パスワード付き ZIP ファイルの解析を試している人が多かったため、私も練習を兼ねて実際に試してみました。
ChatGPTに教えてもらったオプションの説明なども私の忘備録として記載しています。
参考にしたサイトなど
実験環境
VMware上にKali Linuxを設定
cat /etc/os-release
PRETTY_NAME="Kali GNU/Linux Rolling" NAME="Kali GNU/Linux" VERSION_ID="2025.4"
- メモリ 8GB
- CPUコア数 4つ
パスワード付きZIPファイルを作成
まずはテスト用の ZIP ファイルを作成します。
今回は解析時間が長くならないように、英数字4文字のパスワードを設定しました。
パスワードは x123 とします。
zip --encrypt Arale.zip Arale.jpg
Enter password:
Verify password:
実際に試してみると分かりますが、短いパスワードは非常に簡単に解析されてしまいます。
そのため実運用では
- 長いパスワード
- ランダムな文字列
を使用することが重要だと感じました。
ZIPからハッシュを抽出
ZIPファイルを直接解析するのではなく、まず ハッシュ情報を抽出します。
John the Ripper には便利なツール zip2john が付属しています。
zip2john Arale.zip > hash.txt
出力例
ver 2.0 efh 5455 efh 7875 Arale.zip/Arale.jpg PKZIP Encr: TS_chk, cmplen=101918, decmplen=101962, crc=FFD1FC8C ts=8847 cs=8847 type=8
このファイルを John the Ripper で解析します。
John the Ripper で解析
まずは John the Ripper で解析してみます。
john hash.txt
出力例
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Proceeding with single, rules:Single
Proceeding with wordlist:/usr/share/john/password.lst
Proceeding with incremental:ASCII
結果
x123 (Arale.zip/Arale.jpg)
解析時間
37秒
Hashcatで解析
次は GPU対応の高速パスワードクラッカーHashcat を使います。
Hashcatは ハッシュ形式のみを入力として受け付けるため、zip2johnの出力から不要部分を削除します。
zip2john Arale.zip | cut -d ":" -f 2 > zip.hash
Hashcat 実行
hashcat -m 17220 -a 3 -w 4 -S zip.hash
数秒で解析が完了しました。
ログを確認すると、パスワード x123 が表示されています。
$pkzip$1*1*2*0...(省略)...85cd*$/pkzip$:x123
Hashcat オプション解説
今回使用したオプションを簡単に説明します。
| オプション | 内容 |
|---|---|
| -m | ハッシュタイプを指定 |
| -a | 攻撃モード |
| -w | ワークロードプロファイル |
| -S | 最適化モード |
-m 17220
ハッシュタイプ指定です。
17220 = PKZIP (Compressed)
ZIPのパスワード解析用モードになります。
-a 3
攻撃モード指定です。
0 = 辞書攻撃
1 = コンビネーション攻撃
3 = ブルートフォース攻撃
今回は **総当たり(ブルートフォース)**を指定しています。
-w 4
Hashcatの処理負荷を指定します。
| 値 | 意味 |
|---|---|
| 1 | 低負荷 |
| 2 | デフォルト |
| 3 | 高負荷 |
| 4 | 最大パフォーマンス |
-w 4 は 最も高速な設定になります。
-S
最適化モードです。
処理速度を優先した設定になります。
一部の特殊ケースでは使用できないことがあります。
John the Ripper と Hashcat の違い
どちらも有名なパスワード解析ツールですが、実際には少し方向性が異なります。
| ツール | 特徴 |
|---|---|
| John the Ripper | CPU中心・使いやすい |
| Hashcat | GPU対応・高速 |
John the Ripper
特徴
- CPUベース
- 辞書攻撃やルールベース攻撃が得意
- フォーマット対応が広い
- zip2john など便利なツールが多い
とりあえず解析してみたい時に便利なツールです。
Hashcat
特徴
- GPUを使った超高速解析
- 大規模ブルートフォースに強い
- ハッシュ解析専用ツール
GPUを使用すると
数十〜数百倍の速度差になることもあります。
Hashcatの攻撃モード(Attack Mode)
Hashcatでは どのような方法でパスワードを探すかを-a オプションで指定します。
これを **攻撃モード(Attack Mode)**と呼びます。
代表的な攻撃モードは次の通りです。
| モード | 内容 |
|---|---|
| 0 | 辞書攻撃 (Dictionary Attack) |
| 1 | コンビネーション攻撃 |
| 3 | ブルートフォース攻撃 (Brute Force) |
| 6 | ハイブリッド攻撃(辞書 + 文字追加) |
| 7 | ハイブリッド攻撃(文字追加 + 辞書) |
0 : 辞書攻撃(Dictionary Attack)
最もよく使われる攻撃方法です。
辞書ファイルにあるパスワードを順番に試します。
例
hashcat -m 17220 -a 0 zip.hash rockyou.txt
rockyou.txt は Kali Linux に含まれている有名なパスワード辞書です。
よく使われるパスワード(例)
password
123456
qwerty
admin
のようなものをまとめたリストです。
1 : コンビネーション攻撃
2つの辞書を組み合わせてパスワードを生成します。
例
password
admin
123
2024
!
↓
password123
password2024
admin123
admin!
3 : ブルートフォース攻撃(総当たり)
すべての文字の組み合わせを試します。
今回の記事で使用したモードです。
例
hashcat -m 17220 -a 3 zip.hash
例えば
aaaa
aaab
aaac
のように 全パターンを順番に試します。
確実に見つかる方法ですが、
パスワードが長くなると 解析時間が急激に増えます。
6 : ハイブリッド攻撃(辞書 + 文字追加)
辞書に対して、後ろに文字を追加する攻撃です。
例
password
↓
password1
password123
password2024
例
hashcat -m 17220 -a 6 zip.hash rockyou.txt ?d?d
7 : ハイブリッド攻撃(文字追加 + 辞書)
モード6とは逆で、
文字を先頭に追加します。
例
123password
2024password
例
hashcat -m 17220 -a 7 zip.hash ?d?d rockyou.txt
以上になります。またお会いしましょう



