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
の基本的なコマンド構文は非常にシンプルです。
python /path/to/cracf2john.py CRACF.TXT > racf_hashes.txt
または、JtR の run
ディレクトリにパスが通っていれば、
cracf2john.py CRACF.TXT > racf_hashes.txt
各部分の説明:
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:$racf$*USERID*HASHDATA...
USERNAME
: ユーザー名(またはユーザーID)。$racf$
: このハッシュが RACF 形式であることを JtR に示す識別子。*USERID*
: RACF ハッシュ計算に必要なユーザーID情報。アスタリスクで囲まれています。HASHDATA...
: 実際のハッシュデータ。通常、16進数で表現されます。
例:
USER01:$racf$*USER01*C1C2C3C4C5C6C7C8
この形式のデータが、入力ファイルに含まれるユーザーごとに1行ずつ、出力ファイルに書き込まれます。
4. John the Ripper での解析
cracf2john.py
(または racf2john
) で JtR 形式のハッシュファイル (例: racf_hashes.txt
) を作成したら、いよいよ John the Ripper 本体を使ってパスワード解析を行います。
基本的なコマンドは以下のようになります。
john racf_hashes.txt
これを実行すると、JtR はまず自動的にハッシュ形式 ($racf$
から RACF と判断) を検出し、デフォルトのクラッキングモード(Single Crack モード、Wordlist モードなど)で解析を開始します。
クラッキングモードの指定
より効率的に解析を行うために、特定のクラッキングモードやオプションを指定できます。
- Wordlist モード: 特定の単語リスト (辞書ファイル) を使って解析します。
john --wordlist=/path/to/wordlist.txt racf_hashes.txt
/usr/share/john/password.lst
など、JtR に付属の辞書や、rockyou.txt
などの有名な辞書ファイルを使用できます。 - Incremental モード: 指定された文字セットを使って総当たり攻撃を行います。RACF のパスワードポリシーに合わせて文字セットを定義すると効果的です。メインフレームのパスワードは歴史的に大文字英数字と特定の記号 (
#
,@
,$
など) のみで構成されることが多かったため、それに合わせたカスタム文字セット (.chr
ファイル) を作成して利用することが考えられます。
(john --incremental=RACFcustom racf_hashes.txt
RACFcustom
はjohn.conf
で定義したインクリメンタルモード名) - Rules (ルール) の適用: Wordlist モードと組み合わせて、単語リストの単語に特定の変化(大文字小文字変換、数字付加など)を加えて試行します。
john --wordlist=/path/to/wordlist.txt --rules=KoreLogic racf_hashes.txt
- Format の明示的指定: JtR が自動でフォーマットを認識できない場合や、複数のフォーマットが考えられる場合に明示的に指定します。
john --format=racf racf_hashes.txt
解析結果の確認
解析が完了するか、途中で中断した場合、クラックされたパスワードは john.pot
というファイル (デフォルト) に保存されます。以下のコマンドで確認できます。
john --show racf_hashes.txt
このコマンドは、racf_hashes.txt
に含まれるハッシュのうち、john.pot
に記録されているクラック済みのパスワードを表示します。🎉
出力例:
USER01:PASSWORD123:user01:::/bin/bash:
USER02:COMPLEXPW#:user02:::/bin/bash:
2 passwords cracked, 1 left
(書式は JtR のバージョンや設定により多少異なります)
5. racf2john (バイナリ版) について
前述の通り、現在の John the Ripper (特に jumbo バージョン) には、racf2john
という C 言語で書かれた実行可能ファイルが含まれていることが多いです。これは cracf2john.py
とは異なり、CRACF.TXT
のような中間ファイルを必要とせず、RACF データベースのバイナリダンプファイルを直接処理できます。
基本的な使い方は cracf2john.py
と似ています。
racf2john /path/to/racf_database.bin > racf_hashes.txt
/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)
コメント