SSH (Secure Shell) は、ネットワーク経由で安全にリモートコンピュータと通信するためのプロトコルです。認証にはパスワード認証や公開鍵認証などが用いられますが、特に公開鍵認証はパスワード認証よりも安全性が高いとされています。Windows環境でよく利用されるSSHクライアントの一つに PuTTY があり、PuTTY は独自の秘密鍵形式である PPK (Putty Private Key) ファイルを使用します。
PPKファイルは、多くの場合、不正アクセスを防ぐためにパスフレーズによって保護されています。しかし、このパスフレーズが脆弱であったり、忘れてしまったりした場合、あるいはセキュリティ監査の一環としてパスフレーズの強度をテストする必要がある場合、John the Ripper (JtR) のようなパスワードクラッキングツールが役立ちます。
ただし、John the Ripper は直接 PPK ファイルを扱うことができません。そこで登場するのが pse2john
ユーティリティです。この記事では、pse2john
の役割、インストール方法、使い方、そしてJohn the Ripper と連携してPPKファイルのパスフレーズを解析する手順について、詳しく解説していきます。😊🔐
Putty Private Key (PPK) ファイル形式について
PPKファイルは、PuTTY スイート (PuTTYgen を含む) によって生成・使用される秘密鍵のファイル形式です。主にSSH公開鍵認証のために用いられます。OpenSSH標準の秘密鍵形式とは異なり、PuTTY独自のテキストベースのフォーマットを採用しています。
PPKファイルには、公開鍵の部分と秘密鍵の部分の両方が含まれています。秘密鍵部分は通常、ユーザーが設定したパスフレーズによって暗号化されています。公開鍵部分は暗号化されずに平文で格納されており、これによりPuTTYはSSHサーバーに接続する前に、パスフレーズを入力せずとも公開鍵を提示してサーバーが受け入れるかどうかを確認できます。
PPKファイルバージョン
PPKファイルにはいくつかのバージョンが存在します。
- バージョン 1 (非推奨): 初期の形式ですが、現在ではほとんど使用されていません。
- バージョン 2: 長らく標準的に使用されてきた形式です。
- バージョン 3: PuTTY 0.75 (2021年5月9日リリース) 以降で導入された新しい形式です。セキュリティが強化されており、より強力な鍵導出関数 (Argon2) や、NIST P曲線やEd25519/Ed448などの新しい暗号アルゴリズムをサポートしています。暗号化には主に AES-256-CBC が使用されます。
PPKファイルの構造(概要)
PPKファイルはテキストファイルであり、以下のようなヘッダー情報とデータセクションで構成されます。
PuTTY-User-Key-File-3: ssh-rsa
Encryption: aes256-cbc
Comment: rsa-key-20240331
Public-Lines: 6
AAAAB3NzaC1yc2EAAAADAQABAAABAQ[...]
Private-Lines: 14
[...]
Private-MAC: [...]
PuTTY-User-Key-File-X:
ファイル形式のバージョンと鍵の種類を示します (例:PuTTY-User-Key-File-3: ssh-ed25519
)。Encryption:
秘密鍵部分の暗号化方式を示します (例:aes256-cbc
,none
)。Comment:
鍵生成時に設定されたコメント。Public-Lines:
Base64エンコードされた公開鍵データの行数。- (公開鍵データ)
Private-Lines:
Base64エンコードされた暗号化済み秘密鍵データの行数。- (秘密鍵データ)
Private-MAC:
ファイルの改ざんを検出するためのメッセージ認証コード (MAC)。パスフレーズから導出され、秘密鍵だけでなく公開鍵部分を含むファイル全体を保護します。
この構造を理解することは、pse2john
がどのようにして必要な情報を抽出し、John the Ripper が解析可能な形式に変換するのかを把握する上で役立ちます。
John the Ripper とは?
John the Ripper (通称 JtR) は、1996年に Openwall プロジェクトによって開発された、非常に有名で強力なオープンソースのパスワードクラッキングツールです。当初はUNIX系のパスワードハッシュを検出することを主目的としていましたが、現在では非常に多くの種類のハッシュ形式や暗号化されたファイルのパスワード解析に対応しています。
JtR は主に以下の目的で使用されます。
- セキュリティ監査: システム管理者が、ユーザーが設定しているパスワードの強度をテストし、脆弱なパスワードを特定するために使用します。
- パスワードリカバリ: 忘れてしまったパスワードを回復するために使用します。
- ペネトレーションテスト: セキュリティ専門家が、システムの脆弱性を評価する一環として、パスワードクラッキングを試みるために使用します。
John the Ripper の動作原理
JtR は、様々な手法を用いてパスワードを推測・特定します。
- ハッシュの取得: まず、解析対象となるパスワードハッシュや暗号化されたデータ(今回の場合は PPK ファイルから
pse2john
で抽出したハッシュ)を入手します。 - 辞書攻撃 (Wordlist Mode): 一般的な単語、名前、過去に漏洩したパスワードリストなどを集めた「辞書ファイル」を用意し、その中の単語をパスワード候補として試します。単純な単語だけでなく、「rules」と呼ばれる変換規則(例: 大文字小文字変換、数字や記号の付加)を適用して、より複雑なパスワードも試行します。
- ブルートフォース攻撃 (Brute-Force Mode / Mask Mode): 特定の文字種(英小文字、英大文字、数字、記号)と長さを指定し、考えられるすべての組み合わせを総当たりで試します。「Mask Mode」では、パスワードのパターン(例: 最初の文字は大文字、続く5文字は小文字、最後の2文字は数字)を指定して効率化を図ることも可能です。
- シングルクラックモード (Single Crack Mode): ユーザー名などの情報からパスワードを推測するモードです。辞書攻撃やブルートフォース攻撃の前処理として最初に実行されることが多いです。
- インクリメンタルモード (Incremental Mode): 文字種と長さを指定して総当たり攻撃を行いますが、文字の出現頻度などを考慮して、より可能性の高いものから試行します。
john.pot
というファイルに保存され、次回以降の解析では既に発見されたパスワードはスキップされます。
JtR は非常に多くのハッシュ形式に対応しており、*2john
という名前のユーティリティ群(例: zip2john
, rar2john
, ssh2john
, そして今回の pse2john
)を使って、様々なファイル形式から JtR が解析できるハッシュ形式に変換することができます。
pse2john の役割と機能
pse2john
は、John the Ripper スイートに含まれるユーティリティスクリプト(多くの場合 Python で書かれています)の一つです。その主な役割は、Putty Private Key (PPK) ファイルを解析し、そのパスフレーズをクラックするために必要な情報を抽出し、John the Ripper が理解できるハッシュ形式に変換することです。
具体的には、pse2john
は以下の処理を行います。
- PPK ファイルの読み込み: 指定された PPK ファイルを読み込みます。
- ヘッダー情報の解析: ファイルヘッダーから、PPK のバージョン、鍵の種類 (RSA, DSA, ECDSA, EdDSAなど)、暗号化方式 (AES-256-CBC など) といった重要な情報を特定します。
- 関連データの抽出: パスフレーズから暗号鍵を導出するために必要な情報(例: ソルト、反復回数、鍵導出関数の種類)、暗号化された秘密鍵データ、そして場合によっては初期化ベクトル (IV) などを抽出します。バージョン3のPPKでは、Argon2 のパラメータなども抽出対象になります。
- MAC の抽出: パスフレーズの検証に使用されるメッセージ認証コード (MAC) を抽出します。
- JtR ハッシュ形式への変換: 抽出した情報を、John the Ripper の
putty
またはppk
フォーマット仕様に従って整形します。このハッシュ文字列には、John the Ripper がパスフレーズを検証するために必要なすべての情報が含まれています。 - ハッシュの出力: 整形されたハッシュ文字列を標準出力に出力します。
このように、pse2john
は PPK ファイルと John the Ripper 本体との間の「橋渡し役」として機能します。このツールがなければ、JtR は PPK ファイルのパスフレーズを直接解析することはできません。
注意点として、pse2john
は PPK ファイルのパスフレーズ自体をクラックするわけではありません。あくまで JtR がクラック処理を行うための準備をするツールです。実際のクラック作業は、pse2john
が出力したハッシュを JtR に入力して行います。
多くの場合、pse2john
は John the Ripper の実行ファイルと同じディレクトリ(例えば /usr/sbin/
や JtR をソースからビルドした場合は run
ディレクトリ内)に配置されています。
インストール方法
pse2john
は単独のツールとして配布されているわけではなく、John the Ripper スイートの一部として提供されています。したがって、pse2john
を利用するには、まず John the Ripper 本体をインストールする必要があります。
John the Ripper のインストール方法は、お使いのオペレーティングシステムによって異なります。
Linux (Debian/Ubuntu系)
多くの Debian ベースのディストリビューション (Ubuntu, Kali Linux など) では、apt パッケージマネージャを使用して簡単にインストールできます。”jumbo” バージョンはより多くの機能やハッシュ形式をサポートしているため、通常はこちらをインストールすることが推奨されます。
sudo apt update
sudo apt install john
インストール後、pse2john
は通常 /usr/sbin/pse2john
や /usr/share/john/pse2john
などに配置されます。which pse2john
コマンドで場所を確認できます。Python スクリプトとして提供されている場合もあります。
Linux (Red Hat/Fedora系)
dnf や yum パッケージマネージャを使用してインストールできます。
sudo dnf install john
または
sudo yum install john
インストール場所はディストリビューションにより異なりますが、/usr/sbin/
や /usr/bin/
以下にあることが多いです。
macOS
Homebrew パッケージマネージャを使用するのが一般的です。
brew update
brew install john-jumbo
インストール後、pse2john
は Homebrew の管理ディレクトリ(例: /usr/local/bin/
や /opt/homebrew/bin/
)以下に配置されます。
Windows
Windows 向けの公式ビルドは John the Ripper 公式サイト からダウンロードできます。通常、ZIP 形式で配布されており、解凍後に run
ディレクトリ内に pse2john.py
(Pythonスクリプト) が含まれています。このスクリプトを実行するには、Python の実行環境が必要です。
# Python がインストールされている環境で run ディレクトリに移動してから実行
python pse2john.py C:\path\to\your\private_key.ppk
あるいは、WSL (Windows Subsystem for Linux) を利用して Linux 版の John the Ripper をインストールし、その中の pse2john
を使用することも可能です。
ソースからのビルド
最新版や特定の機能を利用したい場合は、公式サイト や GitHub リポジトリ からソースコードをダウンロードしてビルドすることも可能です。
# 依存関係をインストール後 (例: libssl-dev, yasm)
git clone https://github.com/openwall/john.git john-bleeding-jumbo
cd john-bleeding-jumbo/src
./configure
make -s clean && make -sj4
cd ../run
# この run ディレクトリ内に pse2john (または pse2john.py) が生成される
いずれの方法でインストールした場合でも、pse2john
(または pse2john.py
) が実行可能な状態になれば準備完了です。🐍
基本的な使い方
pse2john
の使い方は非常にシンプルです。基本的なコマンド構文は以下の通りです。
pse2john [対象のPPKファイル1] [対象のPPKファイル2] ...
または、Python スクリプト版の場合は、
python /path/to/pse2john.py [対象のPPKファイル1] [対象のPPKファイル2] ...
引数として、ハッシュを抽出したい PPK ファイルのパスを一つ以上指定します。
実行すると、pse2john
は指定された各 PPK ファイルを解析し、John the Ripper が解析可能な形式のハッシュ文字列を標準出力に表示します。
実行例
例えば、カレントディレクトリにある my_private_key.ppk
というファイルからハッシュを抽出したい場合は、以下のように実行します。
pse2john my_private_key.ppk
成功すると、ターミナルに以下のような形式のハッシュ文字列が出力されます (実際の値はファイルによって異なります)。
my_private_key.ppk:$putty$1*4096*0*8681[...]1a6*6f4[...]ecc*b9[...]5e:ssh-rsa [...]
または、PPK バージョン3の場合は以下のような形式になることもあります。
my_private_key.ppk:$ppk3$1*aes256-cbc*argon2id,15,1,3,33554432*05[...]3a*0*d1[...]b2*79[...]3d
この出力されたハッシュ文字列を、後続の John the Ripper による解析で使用します。
出力をファイルに保存
通常、pse2john
の出力は直接 John the Ripper にパイプで渡すか、ファイルに保存して後で使用します。ファイルに保存する場合は、リダイレクト演算子 (>
) を使用します。
pse2john my_private_key.ppk > ppk_hash.txt
これにより、ppk_hash.txt
というファイルにハッシュ文字列が保存されます。
複数の PPK ファイルを一度に処理することも可能です。
pse2john key1.ppk key2.ppk key3.ppk > all_ppk_hashes.txt
この場合、all_ppk_hashes.txt
には、各ファイルに対応するハッシュが1行ずつ格納されます。
特に複雑なオプションはなく、基本的な使い方は「PPKファイルを指定して実行し、出力を受け取る」というシンプルなものです。👍
出力されるハッシュ形式の解説
pse2john
が出力する文字列は、単なるランダムなデータではなく、John the Ripper が PPK ファイルのパスフレーズを検証するために必要な情報が構造化されて格納された「ハッシュ文字列」です。PPKファイルのバージョンによって、主に2種類のフォーマットが出力されます。
PPK バージョン 2 のハッシュ形式 (`$putty$`)
古いバージョン2の PPK ファイルの場合、一般的に以下のような形式のハッシュが出力されます。
[ファイル名]:$putty$1*[反復回数]*[予約]*[暗号化データ]*[MACデータ]*[公開鍵データ]:[鍵タイプ] [...]
各フィールドの意味は以下の通りです。
フィールド | 説明 | 例 |
---|---|---|
[ファイル名] |
処理対象となった元の PPK ファイル名。John the Ripper がどのハッシュがどのファイルに対応するかを示すために付与します。 | mykey.ppk |
$putty$ |
John the Ripper に対して、これが PuTTY (バージョン2) のハッシュ形式であることを示す識別子。 | $putty$ |
1 |
ハッシュ形式のバージョン番号。現在は 1 が一般的です。 |
1 |
[反復回数] |
パスフレーズから暗号鍵を導出する際の SHA-1 ハッシュの反復回数 (16進数)。 | 4096 (10進数で 16384 回) |
[予約] |
予約フィールド。通常は 0 。 |
0 |
[暗号化データ] |
パスフレーズで暗号化された秘密鍵のデータ部分 (16進数エンコード)。 | 8681[...]1a6 |
[MACデータ] |
ファイル全体の改ざん検出に使用される MAC (Message Authentication Code) データ (16進数エンコード)。パスフレーズの正当性検証に用いられます。 | 6f4[...]ecc |
[公開鍵データ] |
公開鍵のデータ部分 (16進数エンコード)。 | b9[...]5e |
[鍵タイプ] |
鍵のアルゴリズムを示す文字列。 | ssh-rsa |
[...] |
(オプション) 追加情報が含まれる場合があります。 |
John the Ripper は、このハッシュ文字列と辞書などから生成したパスフレーズ候補を使って、鍵導出、MACの計算と比較を行い、パスフレーズが正しいかどうかを検証します。
PPK バージョン 3 のハッシュ形式 (`$ppk3$`)
新しいバージョン3の PPK ファイルの場合、以下のような形式のハッシュが出力されることがあります。
[ファイル名]:$ppk3$1*[暗号化方式]*[鍵導出パラメータ]*[ソルト]*[予約]*[暗号化データ]*[MACデータ]
各フィールドの意味は以下の通りです。
フィールド | 説明 | 例 |
---|---|---|
[ファイル名] |
処理対象となった元の PPK ファイル名。 | my_new_key.ppk |
$ppk3$ |
John the Ripper に対して、これが PuTTY バージョン 3 のハッシュ形式であることを示す識別子。 | $ppk3$ |
1 |
ハッシュ形式のバージョン番号。 | 1 |
[暗号化方式] |
使用されている暗号化アルゴリズム。 | aes256-cbc |
[鍵導出パラメータ] |
鍵導出関数とそのパラメータ。Argon2 が使われることが多く、その場合は argon2id,[time_cost],[memory_cost],[parallelism],[tag_length],[memory_kib] のような形式になります。 |
argon2id,15,1,3,33554432 |
[ソルト] |
鍵導出に使用されるソルト値 (16進数エンコード)。 | 05[...]3a |
[予約] |
予約フィールド。通常は 0 。 |
0 |
[暗号化データ] |
パスフレーズで暗号化された秘密鍵のデータ部分 (16進数エンコード)。 | d1[...]b2 |
[MACデータ] |
ファイル全体の改ざん検出に使用される MAC データ (16進数エンコード)。パスフレーズの正当性検証に用いられます。 | 79[...]3d |
バージョン3では、より強力な鍵導出関数 (Argon2) が採用されているため、バージョン2に比べてパスフレーズのクラッキングに必要な計算コストが高くなっています。John the Ripper はこれらのパラメータを解釈し、適切なアルゴリズムと設定でパスフレーズの試行を行います。
これらのハッシュ形式を理解することで、John the Ripper が内部でどのような処理を行っているのか、より深く理解することができます。💡
John the Ripper でのハッシュ解析
pse2john
を使って PPK ファイルからハッシュを抽出し、ファイルに保存したら、いよいよ John the Ripper 本体を使ってパスフレーズの解析(クラッキング)を行います。
基本的なコマンド構文は以下のようになります。
john [オプション] [ハッシュファイル名]
[ハッシュファイル名]
には、pse2john
で生成し保存したハッシュが含まれるファイル(例: ppk_hash.txt
)を指定します。
基本的な解析の開始
最もシンプルな実行方法は、ハッシュファイル名を指定するだけです。
john ppk_hash.txt
これを実行すると、John the Ripper はまずハッシュファイル (ppk_hash.txt
) を読み込み、含まれるハッシュの形式($putty$
や $ppk3$
)を自動的に検出しようとします。そして、デフォルトのクラッキングモード(通常はシングルクラックモード、次に辞書モード、最後にインクリメンタルモード)で解析を開始します。
解析中は、現在の状況(試行中のパスワード候補、速度など)が表示されます。解析を中断したい場合は Ctrl+C
を押します。再開する場合は、同じコマンドを再度実行すれば、中断した箇所から処理を続行します (進捗は john.pot
ファイルとリカバリファイル *.rec
に保存されています)。
フォーマットの明示的な指定 (`–format`)
John the Ripper がハッシュ形式を正しく自動検出できない場合や、特定の形式のみを対象としたい場合は、--format
オプションを使用します。
- PPK バージョン 2 の場合:
--format=putty
- PPK バージョン 3 の場合:
--format=ppk3
# PPK バージョン 2 のハッシュのみを解析
john --format=putty ppk_hash.txt
# PPK バージョン 3 のハッシュのみを解析
john --format=ppk3 ppk_hash.txt
辞書ファイルの使用 (`–wordlist`)
特定の辞書ファイルを使って辞書攻撃を行いたい場合は、--wordlist
オプションを使用します。John the Ripper にはデフォルトの辞書 (password.lst
) が付属していることが多いですが、より大規模な辞書やターゲットに関連性の高い単語リストを使用すると、解析の成功率が向上することがあります。
john --wordlist=/path/to/custom_dictionary.txt ppk_hash.txt
--rules
オプションを併用することで、辞書中の単語に様々な変換ルール(例: l33t
変換、大文字小文字変換、数字や記号の追加)を適用し、より複雑なパスフレーズの解析を試みることができます。
john --wordlist=/path/to/password.lst --rules=All ppk_hash.txt
マスクモードの使用 (`–mask`)
パスフレーズのパターンがある程度推測できる場合(例: “大文字1文字 + 小文字5文字 + 数字2文字” など)は、マスクモードで効率的に総当たり攻撃を行えます。
# 例: 8文字の英小文字のパスフレーズを試す
john --mask='?l?l?l?l?l?l?l?l' ppk_hash.txt
# 例: "pass" + 4桁の数字 の形式を試す
john --mask='pass?d?d?d?d' ppk_hash.txt
マスク文字の意味: ?l
=英小文字, ?u
=英大文字, ?d
=数字, ?s
=記号, ?a
=全文字種
解析結果の表示 (`–show`)
解析が成功し、パスフレーズが見つかると、その結果は john.pot
ファイルに記録されます。後で解析結果を確認するには、--show
オプションを使用します。
john --show ppk_hash.txt
これにより、指定したハッシュファイルに対応する、既にクラックされたパスフレーズが表示されます。形式は通常 [ハッシュ文字列]:[クラックされたパスフレーズ]
となります。
my_private_key.ppk:$putty$1*[...] :CorrectHorseBatteryStaple
my_new_key.ppk:$ppk3$1*[...] :P@$$wOrd123!
2 passwords cracked, 0 left
John the Ripper は非常に多機能であり、ここで紹介したのは基本的な使い方の一部です。より高度なオプションやチューニングについては、公式ドキュメントなどを参照してください。解析には時間がかかる場合があるため、根気強く待つか、より強力なハードウェア(特にGPU)を利用することも検討しましょう。💪
実践的な例
ここでは、いくつかの具体的なシナリオを想定して、pse2john
と John the Ripper を使用する手順を示します。
シナリオ1: 単一の PPK v2 ファイルのパスフレーズを解析する
手元に old_key.ppk
というファイルがあり、これは古い PuTTY で作成されたバージョン2の PPK ファイルだとします。パスフレーズを忘れてしまったため、解析を試みます。
-
ハッシュの抽出:
pse2john
を使ってハッシュを抽出し、hash_v2.txt
に保存します。pse2john old_key.ppk > hash_v2.txt
hash_v2.txt
の中身は以下のようになります(例)。old_key.ppk:$putty$1*4096*0*ab[...]cd*ef[...]12*34[...]56:ssh-rsa [...]
-
John the Ripper で解析開始: デフォルトのモードで解析を開始します。
john hash_v2.txt
John the Ripper が
$putty$
形式を検出し、解析を始めます。しばらく待つか、Ctrl+C
で中断します。 -
結果の確認: 解析が完了したか、あるいは途中で見つかったかを確認します。
john --show hash_v2.txt
もしパスフレーズが “password123” であれば、以下のように表示されます。
old_key.ppk:password123 1 password cracked, 0 left
シナリオ2: PPK v3 ファイルを特定の辞書で解析する
新しい PuTTY (0.75以降) で作成した new_key.ppk
(バージョン3) があり、パスフレーズは一般的な単語に数字を組み合わせたものである可能性が高いと推測しています。common_passwords.txt
という辞書ファイルを使って解析します。
-
ハッシュの抽出:
pse2john
でハッシュを抽出し、hash_v3.txt
に保存します。pse2john new_key.ppk > hash_v3.txt
hash_v3.txt
の中身は以下のようになります(例)。new_key.ppk:$ppk3$1*aes256-cbc*argon2id,15,1,3,33554432*01[...]fe*0*de[...]ad*be[...]ef
-
John the Ripper で辞書攻撃:
--wordlist
オプションと、念のため--format=ppk3
を指定して解析を開始します。強力な鍵導出関数 (Argon2) を使用しているため、解析には時間がかかる可能性があります。john --wordlist=common_passwords.txt --format=ppk3 hash_v3.txt
John the Ripper が
common_passwords.txt
内の単語を使って試行します。 -
結果の確認: 解析が完了、または中断後に結果を確認します。
john --show hash_v3.txt
もしパスフレーズが “secretword99” であれば、以下のように表示されます。
new_key.ppk:secretword99 1 password cracked, 0 left
トラブルシューティング
- `pse2john: command not found` エラー: John the Ripper が正しくインストールされていないか、
pse2john
へのパスが通っていません。インストール場所を確認し、フルパスで実行するか、パスを通してください。Python スクリプトの場合はpython /path/to/pse2john.py ...
のように実行します。 - ハッシュが抽出されない / “No password hashes loaded” エラー:
- 指定したファイルが有効な PPK ファイルではない可能性があります。ファイルが破損していないか、PuTTYgen などで開けるか確認してください。
- PPK ファイルがパスフレーズで保護されていない場合、
pse2john
はハッシュを出力しないことがあります(クラック対象のパスフレーズがないため)。 john
コマンド実行時にこのエラーが出る場合、ハッシュファイルの中身が空、または JtR が認識できない形式である可能性があります。pse2john
の出力が正しくファイルに保存されているか確認してください。
- “Unsupported key format” 系のエラー: 使用している
pse2john
や John the Ripper のバージョンが、対象の PPK ファイルの形式 (特に新しい鍵タイプや PPK v3) に対応していない可能性があります。John the Ripper を最新の “jumbo” バージョンにアップデートすることを検討してください。 - 解析に非常に時間がかかる: 特に PPK v3 の Argon2 で保護された鍵や、非常に長い・複雑なパスフレーズの場合、解析には膨大な時間がかかることがあります。辞書やマスクを工夫して候補を絞り込む、より高性能なマシン(特に GPU が利用可能な場合)を使用するなどの対策が考えられます。
これらの例を参考に、実際の状況に合わせてコマンドやオプションを調整してください。🧪
セキュリティ上の考慮事項
pse2john
と John the Ripper を使用して PPK ファイルのパスフレーズを解析できるということは、裏を返せば、悪意のある第三者があなたの秘密鍵ファイルを入手した場合、パスフレーズが脆弱であれば容易に解読されてしまう危険性があることを意味します。SSH 秘密鍵は、サーバーへのアクセス権限そのものであることが多く、その漏洩は深刻なセキュリティインシデントにつながる可能性があります。
以下の点に注意して、秘密鍵を安全に管理することが重要です。
-
強力なパスフレーズを設定する:
- 短すぎるパスフレーズ(8文字以下など)は避ける。12文字以上を推奨します。
- 辞書にある単語、名前、誕生日、簡単なパターン(”123456″, “password” など)は絶対に使用しない。
- 英大文字、英小文字、数字、記号を組み合わせる。
- 他のサービスで使用しているパスワードを使い回さない。
- パスフレーズ生成ツールやパスワードマネージャーを利用することも有効です。
- パスフレーズなしの秘密鍵は避ける: 利便性は高いですが、秘密鍵ファイル自体が漏洩した場合、即座に不正アクセスを許してしまいます。機密性の高いシステムへのアクセスには、必ずパスフレーズを設定しましょう。
-
秘密鍵ファイルの適切な管理:
- 秘密鍵ファイル(.ppk ファイル)は、信頼できない場所(共有フォルダ、パブリックなリポジトリなど)に保存しない。
- ファイルパーミッションを適切に設定し、所有者以外が読み取れないようにする(Linux/macOS では
chmod 600 ~/.ssh/id_rsa
など)。 - 不要になった秘密鍵は安全に削除する。
- 秘密鍵ファイルを他人に渡さない。
- PPK バージョン 3 の利用: 可能であれば、新しい PuTTY バージョン (0.75以降) を使用し、PPK バージョン 3 形式で鍵を保存することを検討してください。バージョン 3 で使用される Argon2 鍵導出関数は、バージョン 2 の方式よりも総当たり攻撃に対して耐性があります。
-
定期的な監査: 自身の管理下にある秘密鍵に対して、定期的に
pse2john
と John the Ripper を使用してパスフレーズ強度をテストし、脆弱なものがないか確認することも、セキュリティ対策の一環として有効です(ただし、自身の鍵に対してのみ行うこと)。 - 代替手段の検討: ハードウェアセキュリティキー(YubiKey など)を用いた FIDO2/WebAuthn 認証や、多要素認証 (MFA) を導入することで、秘密鍵のパスフレーズだけに頼らない、より強固な認証を実現できます。
pse2john
は、セキュリティ専門家にとっては脆弱性診断に役立つツールですが、同時に秘密鍵管理の重要性を再認識させてくれるツールでもあります。常にセキュリティ意識を高く持ち、適切な対策を講じることが不可欠です。🛡️
まとめ
pse2john
は、John the Ripper スイートの一部として提供される重要なユーティリティであり、Putty Private Key (PPK) ファイルからパスフレーズ解析用のハッシュを抽出する役割を担います。これにより、セキュリティ監査担当者やペネトレーションテスターは、PPK ファイルに設定されたパスフレーズの強度を評価したり、忘れられたパスフレーズを回復したりすることが可能になります。
この記事では、以下の点について解説しました。
- PPK ファイル形式の概要とバージョン (v2, v3)
- パスワードクラッキングツール John the Ripper の概要
pse2john
の役割と機能- John the Ripper と
pse2john
のインストール方法 pse2john
の基本的な使い方とハッシュの出力- 出力されるハッシュ形式 (
$putty$
,$ppk3$
) の解説 - John the Ripper を用いたハッシュ解析の手順 (基本、フォーマット指定、辞書、マスク、結果表示)
- 実践的な使用例とトラブルシューティング
- PPK ファイルとパスフレーズに関するセキュリティ上の考慮事項
pse2john
と John the Ripper の組み合わせは強力ですが、その利用は常に倫理的かつ法的な範囲内で行われるべきです。そして最も重要なのは、これらのツールが存在すること自体が、SSH 秘密鍵とそのパスフレーズを適切に管理し、強力なものを設定する必要性を強く示唆しているということです。安全な SSH 運用のために、この記事で触れたセキュリティ対策を実践してください。✨
コメント