John the Ripper スイートの一部である putty2john を使って、PuTTY (.ppk) 形式の秘密鍵ファイルからパスワードハッシュを抽出し、John the Ripper で解析する方法を詳しく解説します。
はじめに:putty2john とは?
putty2john
は、著名なパスワードクラッキングツールである John the Ripper (JtR) スイートに含まれるユーティリティの一つです。その主な目的は、SSH クライアントである PuTTY で使用されるパスワードで保護された秘密鍵ファイル (.ppk) から、John the Ripper が解析可能な形式のハッシュ値を抽出することです。
PuTTY は Windows 環境で広く利用されている SSH および Telnet クライアントですが、サーバーへの接続に公開鍵認証を使用する際、秘密鍵をパスワードで保護することが推奨されています。しかし、万が一そのパスワードを忘れてしまった場合や、セキュリティ監査の一環としてパスワードの強度をテストする必要がある場合に、putty2john
と John the Ripper が役立ちます。💪
前提知識:PuTTY と秘密鍵ファイル (.ppk)
PuTTY とは
PuTTY は、Simon Tatham 氏によって開発された、主に Windows 向けのフリーでオープンソースのターミナルエミュレータ、シリアルコンソール、ネットワークファイル転送アプリケーションです。SSH, Telnet, rlogin, SCP, SFTP など、複数のネットワークプロトコルをサポートしています。特に SSH クライアントとしての機能が広く知られており、リモートの Linux/Unix サーバーへ安全に接続するためによく利用されます。
公開鍵認証と秘密鍵
SSH 接続では、パスワード認証の代わりに、より安全な公開鍵認証方式が推奨されます。これは、事前に生成した「公開鍵」と「秘密鍵」のペアを使用する認証方法です。
- 公開鍵 (Public Key): 接続先のサーバーに登録しておく鍵です。誰に見られても問題ありません。
- 秘密鍵 (Private Key): 接続元のクライアント(あなたの PC)で厳重に保管する鍵です。絶対に他人に知られてはいけません。
認証プロセスでは、サーバーが公開鍵を使って「チャレンジ」を暗号化し、クライアントに送ります。クライアントは対となる秘密鍵を使ってこれを復号し、サーバーに送り返すことで認証が成功します。
PuTTY 秘密鍵ファイル (.ppk)
PuTTY (および PuTTYgen という鍵生成ツール) で生成またはインポートされた秘密鍵は、通常 .ppk
という拡張子を持つ独自の形式で保存されます。このファイルには、秘密鍵の情報(および関連する公開鍵の情報も含む場合がある)が含まれています。
セキュリティを高めるために、.ppk
ファイル自体をパスフレーズ (パスワード) で暗号化して保護することが強く推奨されます。これにより、万が一 .ppk
ファイルが漏洩した場合でも、パスフレーズを知らない第三者は秘密鍵を使用することができません。
putty2john
は、このパスフレーズで保護された .ppk
ファイルを処理対象とします。もし .ppk
ファイルがパスフレーズで保護されていない場合、putty2john
を使う必要はありません (そもそもパスワードクラックの対象が存在しないため)。
id_rsa
など) と PuTTY 形式の秘密鍵 (.ppk
) は互換性がありません。PuTTYgen を使って相互に変換することができます。OpenSSH 形式の秘密鍵のパスワードを解析したい場合は、ssh2john
という別のツールを使用します。
putty2john の入手とインストール
putty2john
は通常、John the Ripper 本体と一緒に配布されています。したがって、John the Ripper をインストールすれば putty2john
も利用可能になります。
John the Ripper には、オリジナルのバージョンと、より多くのハッシュ形式や機能を追加したコミュニティ版である “Jumbo” バージョンがあります。多くの場合、Jumbo バージョンを使用することが推奨されます。
Kali Linux やその他のペネトレーションテスト用ディストリビューション
Kali Linux などのセキュリティテストに特化した Linux ディストリビューションでは、John the Ripper (Jumbo 版を含むことが多い) がデフォルトでインストールされているか、標準リポジトリから簡単にインストールできます。
# apt update && apt install john -y
インストール後、putty2john
コマンドが利用可能か確認します。通常、/usr/sbin/
や /usr/bin/
、あるいは John the Ripper のインストールディレクトリ内の run
ディレクトリなどに配置されます。
# which putty2john
/usr/sbin/putty2john
# ls /usr/share/john/ | grep putty2john
# (場合によってはスクリプト形式で run ディレクトリ配下にあることも)
# ls /opt/john/run/ | grep putty2john
その他の Linux ディストリビューション
Debian, Ubuntu, Fedora などの一般的な Linux ディストリビューションでも、パッケージマネージャを通じて John the Ripper をインストールできます。
# Debian/Ubuntu
sudo apt update && sudo apt install john -y
# Fedora
sudo dnf install john -y
Windows / macOS
John the Ripper は Windows や macOS でも利用可能です。公式サイトのダウンロードページから、それぞれの OS 用のビルド済みバイナリやソースコードを入手できます。
- John the Ripper 公式サイト
- John the Ripper (Jumbo) GitHub リポジトリ (ソースからのビルドや最新版はこちら)
Windows 版では、ダウンロードした ZIP ファイルを展開し、run
ディレクトリ内に putty2john.exe
(または Python スクリプト putty2john.py
) が含まれていることを確認してください。実行する際は、コマンドプロンプトや PowerShell から run
ディレクトリに移動してコマンドを実行します。
ソースコードからのビルド
最新機能を利用したい場合や、特定の環境向けに最適化したい場合は、GitHub からソースコードをクローンしてビルドすることもできます。ビルド手順はリポジトリ内のドキュメント (README.md
や INSTALL
ファイル) を参照してください。
# git clone https://github.com/openwall/john.git john-jumbo
# cd john-jumbo/src/
# ./configure && make -s clean && make -sj4
# cd ../run/
# ./putty2john --help # 動作確認
putty2john の基本的な使い方
putty2john
の主な役割は、パスワードで保護された PuTTY 秘密鍵ファイル (.ppk
) を入力として受け取り、John the Ripper が解析できるハッシュ形式の文字列を標準出力に出力することです。
コマンド構文
基本的な構文は非常にシンプルです。
putty2john [対象の .ppk ファイル]
例えば、mykey.ppk
という秘密鍵ファイルからハッシュを抽出したい場合は、次のように実行します。
$ putty2john mykey.ppk
mykey.ppk:$putty$1*1*...*...:...
出力は ファイル名:ハッシュ
という形式になります。このハッシュ部分 ($putty$1*...
) が、John the Ripper で解析するための情報です。
ハッシュの保存
抽出したハッシュは、通常、テキストファイルに保存して John the Ripper に渡します。リダイレクト (>
) を使うと簡単です。
putty2john mykey.ppk > putty_hash.txt
これで、putty_hash.txt
というファイルに mykey.ppk:$putty$1*...
という内容が保存されます。
複数のファイルを処理する場合
複数の .ppk
ファイルを一度に処理し、ハッシュを一つのファイルにまとめることもできます。
putty2john key1.ppk key2.ppk key3.ppk > all_putty_hashes.txt
または、シェルスクリプトや find
コマンドと組み合わせて、特定のディレクトリ内の全ての .ppk
ファイルを処理することも可能です。
# カレントディレクトリ以下の全ての .ppk ファイルを処理
find . -name "*.ppk" -exec putty2john {} \; > all_putty_hashes.txt
# (注意: 上記コマンドはファイル数が多い場合に非効率になる可能性があります)
# より効率的な方法 (xargs を使う)
find . -name "*.ppk" -print0 | xargs -0 putty2john > all_putty_hashes.txt
対応している PuTTY 鍵フォーマット
putty2john
は、PuTTY Private Key File Format Versions 2 および 3 (PPK2, PPK3) に対応しています。PPK3 は PuTTY 0.75 (2021年5月リリース) 以降でデフォルトとなった新しい形式で、より強力な鍵導出関数 (Argon2) を使用しています。putty2john
はこれらのバージョンの違いを自動的に認識し、適切なハッシュ形式で出力します。
PuTTY-User-Key-File-X:
という行で確認できます (X がバージョン番号)。
John the Ripper によるハッシュ解析 🚀
putty2john
でハッシュを抽出したら、いよいよ John the Ripper を使って元のパスフレーズを解析 (クラック) します。John the Ripper にはいくつかの解析モードがあります。
準備:ハッシュファイルの用意
前のステップで作成したハッシュファイル (例: putty_hash.txt
) を用意します。このファイルには、putty2john
が出力した ファイル名:ハッシュ
の形式の行が含まれているはずです。
基本的な解析コマンド
最も基本的な John the Ripper の実行コマンドは次のようになります。
john [ハッシュファイル]
例えば、putty_hash.txt
を解析するには、次のように実行します。
john putty_hash.txt
John the Ripper は、まずデフォルトのモード (シングルクラックモード、ワードリストモード、インクリメンタルモードの順) で解析を試みます。
解析モードの指定
より効率的に解析するために、特定のモードを指定することができます。
1. ワードリストモード (--wordlist)
最も一般的に使用されるモードの一つです。パスワードの候補がリストアップされたファイル (ワードリスト) を指定し、そのリストに含まれる単語を試します。強力なワードリスト (例えば、SecLists に含まれるものや、有名な rockyou.txt
など) を使うことで、よく使われるパスワードや推測しやすいパスワードを効率的に見つけることができます。
# rockyou.txt をワードリストとして使用
john --wordlist=/usr/share/wordlists/rockyou.txt putty_hash.txt
# John the Ripper 組み込みの password.lst を使用
john --wordlist=password.lst putty_hash.txt
--rules
オプションを併用することで、ワードリストの単語に特定の変換ルール (大文字/小文字変換、数字や記号の追加など) を適用し、より多くのバリエーションを試すことができます。これは非常に強力なテクニックです。
# ワードリストとルールを併用
john --wordlist=/path/to/custom_list.txt --rules=All putty_hash.txt
2. インクリメンタルモード (--incremental)
このモードは、指定された文字セット (例: 数字のみ、英小文字のみ、すべての印字可能文字など) を使って、可能な全ての組み合わせを総当たりで試します。単純なパスワードや短いパスワードに対しては有効ですが、パスワードが長くなったり複雑になったりすると、必要な時間が指数関数的に増加します。
# デフォルトのインクリメンタルモード (通常は ASCII 文字)
john --incremental putty_hash.txt
# 数字のみで試す場合
john --incremental=Digits putty_hash.txt
# 英小文字のみで試す場合
john --incremental=LowerAlpha putty_hash.txt
利用可能な文字セットは、John the Ripper の設定ファイル (john.conf
または john.ini
) で定義されています。
3. シングルクラックモード (--single)
このモードは、ハッシュファイルに含まれる情報 (ユーザー名など、ただし putty2john の出力には通常ユーザー名は含まれない) や、組み込みの辞書を使って高速に解析を試みるモードです。最初に試されることが多いですが、PuTTY 鍵の場合は効果が限定的な可能性があります。John をオプションなしで実行した場合、最初にこのモードが試されます。
その他の便利なオプション
オプション | 説明 |
---|---|
--format=putty |
解析対象のハッシュ形式を明示的に指定します。John が自動判別できない場合や、ファイル内に複数の形式のハッシュが混在する場合に役立ちます。 |
--fork=N |
N個のプロセスをフォークして並列処理を行います。マルチコア CPU の場合に解析速度を向上させることができます。 |
--show |
既にクラックに成功したパスワードを表示します。 |
--session=NAME |
解析セッションに名前を付けます。中断・再開 (--restore=NAME ) が容易になります。 |
--restore[=NAME] |
中断したセッションを再開します。名前を指定しない場合は、デフォルトのセッション (john ) を再開します。 |
John the Ripper には非常に多くのオプションと機能があります。詳細は公式ドキュメントや john --help
を参照してください。
応用的な使い方と Tips ✨
PPK ファイルのパスワード強度テスト
セキュリティ管理者や開発者は、putty2john
と John the Ripper を使って、自身が管理するシステムで使用されている .ppk
ファイルのパスワード強度を定期的に監査することができます。これにより、推測されやすい、または既知のワードリストに含まれるような弱いパスワードが使用されていないかを確認し、必要に応じてユーザーにパスワードの変更を促すことができます。
フォレンジック調査での利用
コンピュータフォレンジック調査において、侵害されたシステムから .ppk
ファイルが発見された場合、putty2john
と John the Ripper を使ってパスワードを解析し、その秘密鍵が不正アクセスに利用されたかどうか、どのシステムへのアクセスに使用された可能性があるかなどを調査する手がかりとすることがあります。
パスワードを忘れてしまった場合の回復
自身で設定した .ppk
ファイルのパスワードをどうしても思い出せない場合に、最後の手段として利用することが考えられます。ただし、十分に長く複雑なパスワードを設定していた場合、解析には膨大な時間と計算リソースが必要になる可能性があります。日頃からパスワード管理ツールを使用するなど、忘れないための対策を講じることが重要です。😅
他のツールとの連携
John the Ripper 以外にも、Hashcat などの他のパスワード解析ツールが存在します。putty2john
で抽出したハッシュは、John the Ripper 形式ですが、ツールによっては互換性がある場合や、変換して利用できる場合があります。(Hashcat の場合は、モード番号 26600
が PuTTY に対応している可能性がありますが、詳細は Hashcat のドキュメントを確認してください)。
トラブルシューティング 🤔
putty2john 実行時に “No password-protected PPK files found.” と表示される
これは、指定された .ppk
ファイルがパスワードで保護されていないことを意味します。パスワードが設定されていなければ、putty2john
で処理する必要はありません。
putty2john 実行時にファイルが見つからないエラー
.ppk
ファイルのパスが正しいか、ファイルが存在するかを確認してください。相対パスで指定している場合は、putty2john
を実行しているカレントディレクトリからのパスが正しいかを確認します。
John the Ripper 実行時に “No password hashes loaded” と表示される
- ハッシュファイルの形式が間違っている:
putty2john
の出力が正しくファイルに保存されているか確認してください。ファイル名:ハッシュ
の形式になっている必要があります。 - John the Ripper がハッシュ形式を認識できない: 古いバージョンの John the Ripper を使用している場合、新しい PPK3 形式に対応していない可能性があります。John the Ripper (特に Jumbo 版) を最新バージョンにアップデートしてみてください。
--format=putty
オプションを明示的に指定してみるのも有効です。 - ファイルが空または破損している: ハッシュファイルの中身を確認してください。
解析に非常に時間がかかる / 解析が終わらない
- パスワードが非常に複雑: 長くてランダムな文字列のパスワードは、特に総当たり攻撃 (インクリメンタルモード) では解析に天文学的な時間がかかることがあります。
- 適切なモード/ワードリストを使用していない: 解析対象のパスワードの性質に合わせて、ワードリストモードやルールを適切に選択することが重要です。
- 計算リソース不足: CPU パワーが低い場合、解析速度は遅くなります。マルチコア CPU を活用する
--fork=N
オプションや、可能であれば GPU を利用できるツール (Hashcat など、ただし PuTTY ハッシュの GPU 対応状況は要確認) を検討する余地もあります。
現実的な時間内に解析できない場合、そのパスワードは十分に強力であると言えるかもしれません。👍
まとめ
putty2john
は、パスワードで保護された PuTTY 秘密鍵ファイル (.ppk
) から John the Ripper で解析可能なハッシュを抽出するための重要なツールです。John the Ripper と組み合わせることで、パスワードの強度テスト、セキュリティ監査、そして万が一の場合のパスワード回復 (ただし自己責任) に役立ちます。
このガイドで解説した手順と注意点を理解し、putty2john
と John the Ripper を活用してください。しかし、これらのツールの強力さを常に念頭に置き、倫理的かつ合法的な範囲内でのみ使用することを絶対に忘れないでください。不正な目的での使用は厳禁です。🚫
安全なパスワード管理と適切なセキュリティ対策を心がけましょう! Happy Hacking (ethically)! 😉
参考情報
- John the Ripper 公式サイト: https://www.openwall.com/john/
- John the Ripper Community Wiki (Jumbo): https://github.com/openwall/john/wiki
- PuTTY 公式サイト: https://www.chiark.greenend.org.uk/~sgtatham/putty/
コメント