はじめに ✨
現代のシステム管理やセキュリティ評価において、パスワードの安全性確認は非常に重要です。特に、XMPP (Extensible Messaging and Presence Protocol) サーバーである Prosody を運用している場合、ユーザーアカウントのパスワード強度を評価する必要が出てくることがあります。
ここで活躍するのが、強力なパスワードクラッキングツールである John the Ripper (JtR) です。しかし、John the Ripper が Prosody のパスワードハッシュを直接理解できるわけではありません。その橋渡し役となるのが、この記事で解説する prosody2john
スクリプトです。
prosody2john
は、Prosody が保存しているユーザーアカウントのデータファイルからパスワードハッシュ情報を抽出し、John the Ripper が解析可能な形式に変換するためのユーティリティです。この記事では、prosody2john
の基本的な使い方から、実際のパスワードクラッキング手順までを詳しく解説します。セキュリティテストやパスワード監査の一環として、このツールをどのように活用できるかを学びましょう。
Prosodyとは? 🤔
Prosody は、オープンソースで開発されている軽量かつ柔軟な XMPP サーバーソフトウェアです。Lua というスクリプト言語で書かれており、設定の容易さや拡張性の高さが特徴です。主にインスタントメッセージング (IM) やプレゼンス情報の管理に使用されますが、VoIP やその他のリアルタイム通信にも利用可能です。
ユーザー認証に関して、Prosody はアカウント情報をデータストアに保存します。デフォルトのストレージプロバイダー (mod_storage_internal
) は、ユーザーデータをテキストファイルとしてサーバーのファイルシステム上に保存します。これらのデータファイルには、ユーザー名、パスワード情報、その他のアカウント関連データが含まれています。
パスワードは、セキュリティを考慮して通常はハッシュ化されて保存されます (mod_auth_internal_hashed
)。ハッシュ化は、元のパスワードを直接知ることができないようにする一方向性のプロセスです。Prosody は主に SCRAM (Salted Challenge Response Authentication Mechanism) ファミリー (SCRAM-SHA-1, SCRAM-SHA-256, SCRAM-SHA-512 など) の認証メカニズムをサポートしており、これに対応する形式でハッシュが保存されます。
これらのユーザーデータファイルが、prosody2john
の処理対象となります。
John the Ripper (JtR) とは? 🔨
John the Ripper (通称 JtR) は、1996年に開発が始まった、非常に有名で強力なオープンソースのパスワードクラッキングツールです。元々は Unix 系の crypt(3) パスワードハッシュを解読するために作られましたが、現在では非常に多くの種類のハッシュ形式や暗号化ファイルに対応しています。
JtR の主な目的は、システムのパスワード強度を監査し、脆弱なパスワードを発見することです。セキュリティ専門家、ペネトレーションテスター、システム管理者などが、パスワードポリシーの有効性を確認したり、漏洩したハッシュからパスワードを特定したりするために利用します。
JtR は以下のような特徴を持っています:
- 多様なハッシュ形式への対応: Linux/Unix のパスワードハッシュ、Windows の LM/NTLM ハッシュ、Kerberos チケット、データベースのハッシュ、各種アプリケーションのパスワードハッシュ、ZIP や RAR などのアーカイブファイルのパスワードなど、数百種類に対応しています。
- 複数のクラッキングモード:
- シングルクラックモード (Single Crack Mode): ユーザー名や GECOS 情報から派生した候補を試します。
- 辞書モード (Wordlist Mode): 事前に用意された単語リスト(辞書)を使ってパスワードを試します。強力なルールエンジンと組み合わせて、単語を変形させながら試行できます (例: `password` -> `P@ssw0rd1`)。
- インクリメンタルモード (Incremental Mode): 全ての文字の組み合わせを総当たりで試します (ブルートフォースアタック)。
- 外部モード (External Mode): カスタム C コードで定義されたクラッキングロジックを実行します。
- クロスプラットフォーム: Linux, macOS, Windows, BSD など、多くのオペレーティングシステムで動作します。
- 自動検出: 与えられたハッシュファイルの形式を自動的に検出しようと試みます。
- セッション管理: クラッキング作業を中断・再開できます。
JtR は単体で動作しますが、多くの場合は *2john
という形式のヘルパースクリプト群と共に利用されます。これらのスクリプトは、特定のアプリケーションやファイル形式からパスワードハッシュや関連データを抽出し、JtR が理解できる形式に変換する役割を担います。prosody2john
は、この *2john
スクリプトの一つです。
prosody2john とは? 🔑
prosody2john.py
は、John the Ripper スイートに含まれる Python スクリプトの一つです。その主な役割は、Prosody XMPP サーバーが使用するユーザーデータファイル (通常は .dat
拡張子) からパスワードハッシュ情報を抽出し、John the Ripper が解析できるフォーマットに変換することです。
Prosody のデータファイルは通常、Lua のテーブル形式で保存されており、そのままでは JtR で直接処理できません。prosody2john
はこのファイルを読み込み、内部に保存されているパスワードハッシュ(主に SCRAM 関連のハッシュ)を見つけ出し、以下のような JtR 標準フォーマットに整形して出力します。
username:$scram$iterations$salt$storedkey$clientkey
この形式には、ユーザー名、使用されているハッシュアルゴリズム (SCRAM であることを示すマーカー)、反復回数 (iterations)、ソルト (salt)、サーバー側で保存されているキー (StoredKey)、クライアント側で計算されるキー (ClientKey) など、パスワードクラッキングに必要な情報が含まれています。
このスクリプトを使うことで、システム管理者は Prosody サーバー上のユーザーパスワードの強度を JtR を使って評価できるようになります。これは、定期的なセキュリティ監査や、侵害インシデント後の調査などに役立ちます。
prosody2john の使い方 ⚙️
prosody2john
を使用して Prosody のパスワードハッシュを抽出し、John the Ripper で解析する手順は以下のようになります。
ステップ1: 必要なツールの準備
まず、以下のツールがインストールされていることを確認してください。
- John the Ripper: 公式サイトや各 Linux ディストリビューションのパッケージマネージャ (apt, yum, dnf など) からインストールできます。Kali Linux などのペネトレーションテスト用ディストリビューションには、通常、”Jumbo” バージョン (多くの追加機能やハッシュ形式を含む) がプリインストールされています。
prosody2john.py
スクリプトは JtR のインストールに含まれています。 - Python:
prosody2john.py
は Python スクリプトなので、Python 3 の実行環境が必要です。
JtR をインストールすると、prosody2john.py
は通常、/usr/share/john/
, /opt/john/run/
, /usr/lib/john/
などのパスに配置されます。見つからない場合は、find / -name prosody2john.py
コマンドなどで検索してください。
ステップ2: Prosody データファイルの特定
次に、Prosody がユーザーデータを保存しているファイルを見つける必要があります。これらのファイルは通常 .dat
という拡張子を持ち、ユーザーごとに作成されます (例: username.dat
)。
データファイルの保存場所は Prosody の設定ファイル (prosody.cfg.lua
) 内の data_path
ディレクティブで指定されています。デフォルトでは、Linux システムでは /var/lib/prosody/
以下にドメイン名ごとのディレクトリが作成され、その中の accounts
サブディレクトリにユーザーデータファイルが格納されることが多いです。
例: /var/lib/prosody/yourdomain.com/accounts/alice.dat
これらのファイルにアクセスするには、通常 root 権限が必要です。
ステップ3: prosody2john の実行
prosody2john.py
スクリプトを実行して、.dat
ファイルからハッシュを抽出します。スクリプトには、引数として処理したい .dat
ファイルのパスを指定します。
単一のユーザーファイルを処理する場合:
python /path/to/prosody2john.py /var/lib/prosody/yourdomain.com/accounts/alice.dat > prosody_hashes.txt
複数のユーザーファイルを一度に処理する場合:
prosody2john.py
は複数のファイルパスを引数として受け取ることができます。
python /path/to/prosody2john.py /var/lib/prosody/yourdomain.com/accounts/*.dat > prosody_hashes.txt
または、find
コマンドと組み合わせることもできます (ファイル数が非常に多い場合など)。
find /var/lib/prosody/yourdomain.com/accounts/ -name '*.dat' -exec python /path/to/prosody2john.py {} + > prosody_hashes.txt
上記のコマンドは、指定されたディレクトリ内の全ての .dat
ファイルを prosody2john.py
に渡し、抽出されたハッシュを prosody_hashes.txt
というファイルにリダイレクトして保存します。
prosody_hashes.txt
ファイルの中身は以下のようになります (例):
alice:$scram$4096$xxxxxxxxxxxxxxxx$ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
bob:$scram$4096$aaaaaaaaaaaaaaaa$BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
(x
, y
, z
, a
, b
, c
は実際のソルトやキーのデータに置き換えられます)
ステップ4: John the Ripper でハッシュを解析
抽出したハッシュファイル (prosody_hashes.txt
) を John the Ripper に渡して、パスワードクラッキングを開始します。
基本的なコマンド:
john prosody_hashes.txt
このコマンドを実行すると、JtR はまずシングルクラックモードを試行し、次にデフォルトの辞書ファイル (password.lst
) を使った辞書モード、最後にインクリメンタルモード (総当たり) へと移行します。
特定の辞書ファイルを指定する場合:
john --wordlist=/path/to/your/wordlist.txt prosody_hashes.txt
特定のルールを適用する場合:
john --wordlist=/path/to/your/wordlist.txt --rules=YourRules prosody_hashes.txt
JtR はクラッキングの進行状況をターミナルに表示し、解析に成功したパスワードは $JOHN/john.pot
(通常は ~/.john/john.pot
または JtR の実行ディレクトリ直下) というファイルに記録されます。
ステップ5: 解析結果の確認
クラッキングが完了した後、または途中で解析済みのパスワードを確認するには、--show
オプションを使用します。
john --show prosody_hashes.txt
このコマンドは、john.pot
ファイルを参照し、prosody_hashes.txt
内のハッシュに対応する解析済みのパスワードを表示します。
alice:password123:4096:xxxxxxxxxxxxxxxx:ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ:YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY::/var/lib/prosody/yourdomain.com/accounts/alice.dat
bob:correcthorsebatterystaple:4096:aaaaaaaaaaaaaaaa:BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC::/var/lib/prosody/yourdomain.com/accounts/bob.dat
2 passwords cracked, 0 left
表示形式は ユーザー名:パスワード:ハッシュ情報...
となります。
考慮事項とベストプラクティス 🛡️
- 倫理と法的遵守: パスワードクラッキングは、必ず所有者の明確な許可を得たシステムに対してのみ実施してください。不正アクセスは法律で禁止されています。
- リソース消費: パスワードクラッキング、特にブルートフォースアタックは、CPU 時間とメモリを大量に消費します。強力なハードウェア (特に GPU) を使用すると、解析速度が大幅に向上します。
- 辞書の品質: 辞書攻撃の成功率は、使用する辞書の品質に大きく依存します。ターゲットとなる組織やユーザーに関連する単語を含むカスタム辞書を作成すると、効果が高まることがあります。有名な辞書リスト (RockYou など) も有効ですが、取り扱いには注意が必要です。
- Prosody の設定: Prosody 側でパスワードハッシュの反復回数 (iterations) を高く設定している場合、クラッキングに必要な時間が増加します。これはパスワード強度を高めるための推奨される設定です。
- ファイルパーミッション: Prosody のデータファイルは通常、特定のユーザー (例:
prosody
) しか読み取れないようになっています。prosody2john
を実行するユーザーがこれらのファイルを読み取る権限を持っていることを確認してください (sudo
を使用するなど)。 - JtR のバージョン: 最新の JtR (特に Jumbo バージョン) を使用することで、より多くのハッシュタイプへの対応やパフォーマンス向上が期待できます。
まとめ 🏁
prosody2john
は、Prosody XMPP サーバーのセキュリティ評価において重要な役割を果たすツールです。Prosody のデータファイルからパスワードハッシュを抽出し、John the Ripper で解析可能な形式に変換することで、ユーザーパスワードの強度をテストし、脆弱なパスワードを特定することが可能になります。
この記事で解説した手順に従うことで、Prosody サーバー管理者やセキュリティ担当者は、システムのセキュリティ体制を評価し、必要な対策を講じるための具体的な情報を得ることができます。
繰り返しになりますが、これらのツールは強力であるため、その使用には責任が伴います。常に倫理的な観点と法的な枠組みの中で、正当な目的のためにのみ使用するようにしてください。適切な利用により、prosody2john
と John the Ripper は、システム全体のセキュリティを向上させるための有効な手段となり得ます。💪
コメント