John the Ripper (JtR) は、非常に強力で広く使われているパスワードクラッキングツールです。多くのハッシュ形式に対応していますが、特定のシステムやアプリケーションのパスワードデータを解析するには、まず JtR が理解できる形式に変換する必要があります。そのための補助ツールが JtR スイートには多数含まれており、「*2john」という名前で提供されています。
このブログ記事では、その中でも IBM のメインフレーム用セキュリティシステムである RACF (Resource Access Control Facility) のパスワード情報を扱うための cracf2john
(多くの場合 cracf2john.py
という Python スクリプト) に焦点を当て、その使い方と JtR との連携方法について詳しく解説します。
1. cracf2john とは?
cracf2john
は、IBM のメインフレーム環境で使用される RACF のデータベースからパスワードハッシュ情報を抽出し、John the Ripper が解析可能な形式に変換するためのツールです。
歴史的に、RACF のパスワードアルゴリズムは公開されていませんでしたが、2012年頃に Nigel Pentland 氏と “Main Framed” と名乗る人物、そして Dhiru Kholia 氏らの協力によりアルゴリズムが解明され、JtR での対応が進みました。当初は、CRACF
という別のツール(Nigel Pentland 氏作)を使って RACF データベースから CRACF.TXT
という中間ファイルを生成し、それを cracf2john.py
で JtR 形式に変換するという手順が必要でした。
現在では、JtR スイートに含まれる racf2john
(C言語で書かれたバイナリ) が、直接 RACF データベースのバイナリダンプファイルを処理できるようになっています。しかし、過去の経緯や特定の状況(例: CRACF.TXT
形式のファイルしか入手できない場合)によっては、依然として cracf2john.py
が利用されることがあります。
この記事では、主に歴史的な経緯で存在する cracf2john.py
の使い方について触れますが、可能であれば racf2john
の利用を検討することをお勧めします。
2. 準備するもの
cracf2john
を使用するには、以下のものが必要です。
- John the Ripper スイート:
cracf2john.py
は JtR の一部として配布されています。Kali Linux などのペネトレーションテスト用ディストリビューションにはデフォルトで含まれていることが多いです。必要に応じて John the Ripper 公式サイト からダウンロード・インストールしてください。 - CRACF.TXT ファイル:
CRACF
ツールによって RACF データベースから抽出されたテキストファイル。このファイルには、ユーザーIDと関連するパスワード情報(ハッシュなど)が含まれています。RACF データベース本体 (バイナリファイル) を直接扱う場合は、racf2john
を使用します。 - Python 環境:
cracf2john.py
は Python スクリプトであるため、実行には Python がインストールされている必要があります。
3. cracf2john.py の基本的な使い方
cracf2john.py
の基本的なコマンド構文は非常にシンプルです。
または、JtR の run
ディレクトリにパスが通っていれば、
各部分の説明:
python
: Python インタープリタを呼び出します(環境によっては不要な場合もあります)。/path/to/cracf2john.py
:cracf2john.py
スクリプトへのパスを指定します。JtR のインストール場所によって異なりますが、通常は/usr/share/john/
や/opt/john/run/
などの下にあります。CRACF.TXT
: 入力となるCRACF
ツールが出力したファイル名を指定します。> racf_hashes.txt
: 標準出力をリダイレクトして、変換後の JtR 形式のハッシュをracf_hashes.txt
というファイルに保存します。ファイル名は任意です。
出力形式
cracf2john.py
(または racf2john
) が出力する JtR 形式のハッシュは、一般的に以下のようになります。
USERNAME
: ユーザー名(またはユーザーID)。$racf$
: このハッシュが RACF 形式であることを JtR に示す識別子。*USERID*
: RACF ハッシュ計算に必要なユーザーID情報。アスタリスクで囲まれています。HASHDATA...
: 実際のハッシュデータ。通常、16進数で表現されます。
例:
この形式のデータが、入力ファイルに含まれるユーザーごとに1行ずつ、出力ファイルに書き込まれます。
4. John the Ripper での解析
cracf2john.py
(または racf2john
) で JtR 形式のハッシュファイル (例: racf_hashes.txt
) を作成したら、いよいよ John the Ripper 本体を使ってパスワード解析を行います。
基本的なコマンドは以下のようになります。
これを実行すると、JtR はまず自動的にハッシュ形式 ($racf$
から RACF と判断) を検出し、デフォルトのクラッキングモード(Single Crack モード、Wordlist モードなど)で解析を開始します。
クラッキングモードの指定
より効率的に解析を行うために、特定のクラッキングモードやオプションを指定できます。
- Wordlist モード: 特定の単語リスト (辞書ファイル) を使って解析します。
/usr/share/john/password.lst
など、JtR に付属の辞書や、rockyou.txt
などの有名な辞書ファイルを使用できます。 - Incremental モード: 指定された文字セットを使って総当たり攻撃を行います。RACF のパスワードポリシーに合わせて文字セットを定義すると効果的です。メインフレームのパスワードは歴史的に大文字英数字と特定の記号 (
#
,@
,$
など) のみで構成されることが多かったため、それに合わせたカスタム文字セット (.chr
ファイル) を作成して利用することが考えられます。 (RACFcustom
はjohn.conf
で定義したインクリメンタルモード名) - Rules (ルール) の適用: Wordlist モードと組み合わせて、単語リストの単語に特定の変化(大文字小文字変換、数字付加など)を加えて試行します。
- Format の明示的指定: JtR が自動でフォーマットを認識できない場合や、複数のフォーマットが考えられる場合に明示的に指定します。
解析結果の確認
解析が完了するか、途中で中断した場合、クラックされたパスワードは john.pot
というファイル (デフォルト) に保存されます。以下のコマンドで確認できます。
このコマンドは、racf_hashes.txt
に含まれるハッシュのうち、john.pot
に記録されているクラック済みのパスワードを表示します。
出力例:
(書式は JtR のバージョンや設定により多少異なります)
5. racf2john (バイナリ版) について
前述の通り、現在の John the Ripper (特に jumbo バージョン) には、racf2john
という C 言語で書かれた実行可能ファイルが含まれていることが多いです。これは cracf2john.py
とは異なり、CRACF.TXT
のような中間ファイルを必要とせず、RACF データベースのバイナリダンプファイルを直接処理できます。
基本的な使い方は cracf2john.py
と似ています。
/path/to/racf_database.bin
: RACF データベースのバイナリダンプファイルへのパスを指定します。> racf_hashes.txt
: 変換後の JtR 形式ハッシュをファイルに出力します。
もし RACF データベースのバイナリファイルを入手できる状況であれば、中間ファイルを作成する手間が省けるため、racf2john
を使用する方が効率的です。出力されるハッシュ形式は cracf2john.py
と同じなので、その後の JtR での解析方法は変わりません。
racf2john
を試してみてください。もし RACF データベースのバイナリダンプが手元になく、CRACF.TXT
ファイルのみがある場合は cracf2john.py
を使用します。 6. 注意点とトラブルシューティング
- ファイルのエンコーディング: RACF データベースや
CRACF.TXT
ファイルは、メインフレームで一般的な EBCDIC コードでエンコードされている場合があります。racf2john
やcracf2john.py
は内部で適切に処理しようとしますが、ファイルの転送方法 (ASCII モードでの FTP など) によっては文字化けが発生し、正しくハッシュを抽出できない可能性があります。バイナリ転送モードを使用することが重要です。 - データベース形式の互換性: RACF のバージョンや設定によっては、データベースの内部形式がツールが想定しているものと異なる場合があります。エラーが発生する場合は、JtR のドキュメントやコミュニティ (メーリングリストなど) で情報収集が必要になるかもしれません。
- 権限の問題:
cracf2john.py
やracf2john
、そして JtR 本体を実行する際に、入力ファイルへの読み取り権限と、出力ファイル (john.pot
など) への書き込み権限が必要です。 - 性能: 大規模な RACF データベースからハッシュを抽出・変換する処理や、その後の JtR による解析には、相応の計算リソース(CPU 時間、メモリ)と時間がかかる場合があります。
7. まとめ
cracf2john
(および racf2john
) は、IBM メインフレームの RACF 環境におけるパスワードセキュリティ監査において重要な役割を果たすツールです。RACF データベースからパスワードハッシュ情報を抽出し、John the Ripper で解析可能な形式に変換することで、弱いパスワードの特定やパスワードポリシーの有効性評価に貢献します。
使い方自体は比較的シンプルですが、RACF データベースの入手や適切な転送、そして JtR の効果的な利用には、メインフレーム環境とパスワードクラッキング技術の両方に関する知識が求められます。
繰り返しになりますが、これらのツールは強力であるため、必ず倫理的な範囲内で、適切な許可を得て使用してください。セキュリティ専門家として、技術を正しく、責任を持って活用することが重要です。
参考情報
- John the Ripper official website: https://www.openwall.com/john/ (ツールのダウンロード、ドキュメント、メーリングリストなど)
- IBM RACF Documentation (IBM 公式サイト内): RACF の概要やデータベース構造に関する情報が含まれます。(例: https://www.ibm.com/docs/en/zos/latest?topic=racf-database)