cracf2john の使い方: RACF パスワードハッシュを John the Ripper で解析する 🔑

John the Ripper (JtR) は、非常に強力で広く使われているパスワードクラッキングツールです。多くのハッシュ形式に対応していますが、特定のシステムやアプリケーションのパスワードデータを解析するには、まず JtR が理解できる形式に変換する必要があります。そのための補助ツールが JtR スイートには多数含まれており、「*2john」という名前で提供されています。

このブログ記事では、その中でも IBM のメインフレーム用セキュリティシステムである RACF (Resource Access Control Facility) のパスワード情報を扱うための cracf2john (多くの場合 cracf2john.py という Python スクリプト) に焦点を当て、その使い方と JtR との連携方法について詳しく解説します。💻

注意: パスワードクラッキングツールの使用は、適切な権限と許可を得た上で行う必要があります。許可なくシステムにアクセスしたり、パスワードを解析したりする行為は法律で禁止されています。本記事は、セキュリティ監査や教育目的での利用を想定しており、不正アクセスを助長するものではありません。倫理的な利用を心がけてください。

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 の利用を検討することをお勧めします。

cracf2john を使用するには、以下のものが必要です。

  • John the Ripper スイート: cracf2john.py は JtR の一部として配布されています。Kali Linux などのペネトレーションテスト用ディストリビューションにはデフォルトで含まれていることが多いです。必要に応じて John the Ripper 公式サイト からダウンロード・インストールしてください。
  • CRACF.TXT ファイル: CRACF ツールによって RACF データベースから抽出されたテキストファイル。このファイルには、ユーザーIDと関連するパスワード情報(ハッシュなど)が含まれています。RACF データベース本体 (バイナリファイル) を直接扱う場合は、racf2john を使用します。
  • Python 環境: cracf2john.py は Python スクリプトであるため、実行には Python がインストールされている必要があります。

⚠️ RACF データベースの入手

RACF データベースファイルや CRACF.TXT を入手するには、通常、メインフレームシステムの管理者権限が必要です。セキュリティ監査やフォレンジック調査の一環として、正規の手順を経て入手する必要があります。多くの場合、JCL (Job Control Language) を使用してデータベースのコピーを作成し、FTP などでメインフレーム外に転送します。バイナリ形式のデータベースを転送する際は、FTP モードを binary に設定することが重要です。

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行ずつ、出力ファイルに書き込まれます。

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
    (RACFcustomjohn.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 のバージョンや設定により多少異なります)

前述の通り、現在の 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 を使用します。
  • ファイルのエンコーディング: RACF データベースや CRACF.TXT ファイルは、メインフレームで一般的な EBCDIC コードでエンコードされている場合があります。racf2johncracf2john.py は内部で適切に処理しようとしますが、ファイルの転送方法 (ASCII モードでの FTP など) によっては文字化けが発生し、正しくハッシュを抽出できない可能性があります。バイナリ転送モードを使用することが重要です。
  • データベース形式の互換性: RACF のバージョンや設定によっては、データベースの内部形式がツールが想定しているものと異なる場合があります。エラーが発生する場合は、JtR のドキュメントやコミュニティ (メーリングリストなど) で情報収集が必要になるかもしれません。
  • 権限の問題: cracf2john.pyracf2john、そして JtR 本体を実行する際に、入力ファイルへの読み取り権限と、出力ファイル (john.pot など) への書き込み権限が必要です。
  • 性能: 大規模な RACF データベースからハッシュを抽出・変換する処理や、その後の JtR による解析には、相応の計算リソース(CPU 時間、メモリ)と時間がかかる場合があります。

cracf2john (および racf2john) は、IBM メインフレームの RACF 環境におけるパスワードセキュリティ監査において重要な役割を果たすツールです。RACF データベースからパスワードハッシュ情報を抽出し、John the Ripper で解析可能な形式に変換することで、弱いパスワードの特定やパスワードポリシーの有効性評価に貢献します。🛡️

使い方自体は比較的シンプルですが、RACF データベースの入手や適切な転送、そして JtR の効果的な利用には、メインフレーム環境とパスワードクラッキング技術の両方に関する知識が求められます。

繰り返しになりますが、これらのツールは強力であるため、必ず倫理的な範囲内で、適切な許可を得て使用してください。セキュリティ専門家として、技術を正しく、責任を持って活用することが重要です。✨

参考情報

コメント

タイトルとURLをコピーしました