aem2john: Adobe Experience Manager (AEM) のパスワードハッシュを解読する方法 🕵️‍♂️

セキュリティツール

こんにちは!このブログ記事では、John the Ripper (JtR) スイートに含まれるツールの一つである aem2john の使い方について詳しく解説します。Adobe Experience Manager (AEM) のセキュリティ評価やペネトレーションテストを行う際に、パスワードハッシュを抽出してその強度を評価する必要が出てくることがあります。そんな時に役立つのが aem2john です。さっそく見ていきましょう!🚀

aem2john は、John the Ripper スイートの一部として提供されているユーティリティスクリプト(主にPythonで書かれています)です。その主な目的は、Adobe Experience Manager (AEM) インスタンスからパスワードハッシュを抽出し、John the Ripper が解読できる形式に変換することです。

AEM は、企業がウェブサイト、モバイルアプリ、フォームなどを構築・管理するための包括的なコンテンツ管理ソリューションです。ユーザー認証情報(ユーザー名とパスワードハッシュ)は、AEMのリポジトリ内に保存されています。セキュリティ監査やテストの文脈では、これらのハッシュを抽出し、弱いパスワードが使用されていないかを確認することが重要になります。

John the Ripper は、非常に強力で広く使われているパスワードクラッキングツールです。多くのハッシュタイプに対応しており、aem2john のような補助ツールを使うことで、特定のアプリケーションやシステムから抽出したハッシュも扱えるようになります。

AEM は、ユーザーパスワードを平文ではなく、ハッシュ化して保存します。これはセキュリティの基本ですが、使用されているハッシュアルゴリズムや保存形式は AEM 独自のものである場合があります。John the Ripper 本体だけでは、この AEM 固有の形式を直接認識して処理することはできません。

そこで aem2john の出番です。このツールは AEM のデータ構造(通常はリポジトリ内のユーザーノードなど)を解析し、パスワードハッシュと関連情報(ソルトなど)を特定します。そして、それらを John the Ripper が理解できる標準的なフォーマット(例:$aem$*... のような形式)に変換します。これにより、John the Ripper の強力なクラッキング能力を AEM のパスワード強度評価に活用できるようになります。

主な利用シナリオは以下の通りです:

  • セキュリティ監査: システム管理者が、ユーザーによって設定されたパスワードが組織のポリシーに準拠し、十分に強力であるかを確認する。
  • ペネトレーションテスト: セキュリティ専門家が、システムへの不正アクセスが可能かどうかを評価する一環として、取得したハッシュからパスワードをクラックしようと試みる。
  • インシデント対応: セキュリティ侵害が発生した場合、漏洩した可能性のあるハッシュを分析し、影響範囲を特定する。
注意: パスワードクラッキングツールの使用は、法規制や倫理規定に従って行う必要があります。必ず適切な権限と許可を得てから、合法的な目的(自己所有システムのテスト、明示的な許可を得た監査など)でのみ使用してください。

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

  • John the Ripper (Jumbo バージョン推奨): aem2john は John the Ripper の一部です。多くの場合、aem2john のような多くの *2john ツールを含む “Jumbo” バージョンが必要です。最新の Jumbo バージョンは GitHub リポジトリから入手できます。ソースからビルドするか、Kali Linux などのペネトレーションテスト用ディストリビューションに含まれるパッケージを利用するのが一般的です。
    ヒント: 標準リポジトリの John the Ripper では AEM ハッシュに対応していない場合があるため、Jumbo バージョン、特に bleeding-jumbo ブランチをビルドすることが推奨されることがあります。
    # 必要な依存関係のインストール例 (Debian/Ubuntu系)
    sudo apt-get update
    sudo apt-get install build-essential libssl-dev yasm libgmp-dev libpcap-dev libnss3-dev libkrb5-dev pkg-config libbz2-dev zlib1g-dev
    
    # (オプション) GPU クラッキング用 (NVIDIA)
    # sudo apt-get install nvidia-cuda-toolkit nvidia-opencl-dev
    
    # John the Ripper (bleeding-jumbo) のクローンとビルド
    git clone https://github.com/magnumripper/JohnTheRipper -b bleeding-jumbo john
    cd john/src
    ./configure && make -s clean && make -sj4 # -sj4 は並列ビルド数を指定 (コア数に合わせる)
    cd ../run # 実行ファイルや *2john スクリプトはこのディレクトリにある
  • AEM のハッシュデータを含むファイルまたはリポジトリへのアクセス: これが最も重要です。aem2john がハッシュを抽出するためには、AEM のユーザーデータが格納されているファイルやディレクトリにアクセスできる必要があります。具体的な場所は AEM のバージョンや設定(TarMK か MongoMK かなど)によって異なる可能性がありますが、一般的には以下のような場所やファイルが対象となります。
    • AEM リポジトリのデータファイル (例: crx-quickstart/repository/segmentstore/data*.tar, crx-quickstart/repository/segmentstore/journal.log)
    • リポジトリのバックアップファイル
    • ユーザー情報がエクスポートされた XML や JSON ファイル (もしあれば)
    • 特定の JCR (Java Content Repository) ノードパス (例: /home/users 以下) のデータダンプ

    多くの場合、ファイルシステムレベルでリポジトリデータ全体、特にセグメントストアのファイル群に対して aem2john を実行することになります。

  • Python 環境: aem2john は Python スクリプトなので、実行環境に Python がインストールされている必要があります(通常、John the Ripper をビルドする環境には既に含まれています)。

aem2john の基本的な使い方はシンプルです。John the Ripper の run ディレクトリにある aem2john.py スクリプトを実行し、引数として AEM のデータファイルやディレクトリを指定します。

コマンド構文

python /path/to/john/run/aem2john.py [AEMデータファイル または ディレクトリ] > output_hashes.txt
  • /path/to/john/run/aem2john.py: あなたの環境における aem2john.py スクリプトへの実際のパスを指定します。John the Ripper をソースからビルドした場合、通常は john/run/ ディレクトリ内にあります。
  • [AEMデータファイル または ディレクトリ]: ハッシュが含まれている可能性のある AEM のリポジトリデータファイルや、関連ファイルを含むディレクトリを指定します。TarMK の場合は crx-quickstart/repository/segmentstore/ ディレクトリなどを指定することが多いでしょう。
  • > output_hashes.txt: 抽出されたハッシュを保存するファイル名を指定します。このファイルは後で John the Ripper に入力として渡します。

実行例

例えば、AEM のリポジトリデータが /mnt/aem_backup/crx-quickstart/repository/segmentstore/ にあると仮定します。John the Ripper が /opt/john/ にインストールされている場合、コマンドは以下のようになります。

python /opt/john/run/aem2john.py /mnt/aem_backup/crx-quickstart/repository/segmentstore/ > aem_hashes.txt

スクリプトは指定された場所をスキャンし、AEM のユーザーハッシュと思われるデータを見つけ出し、John the Ripper が解釈できる形式に変換して標準出力に出力します。リダイレクト (>) を使って、その出力を aem_hashes.txt ファイルに保存しています。

出力形式

aem_hashes.txt ファイルの中身は、以下のような形式になっているはずです(具体的な形式は AEM のバージョンやハッシュアルゴリズムによって若干異なります)。

admin:$aem$0$10000$... (長いハッシュ文字列) ...
user1:$aem$0$10000$... (別のハッシュ文字列) ...

各行は ユーザー名:ハッシュ情報 という形式になっています。$aem$ はこれが AEM ハッシュであることを示し、続く数字や文字列はハッシュのバージョン、イテレーション回数、ソルト、ハッシュ本体などを含みます。

aem2john でハッシュファイル (aem_hashes.txt) を生成したら、いよいよ John the Ripper を使ってパスワードクラッキングを試みます。

基本的なコマンド

/path/to/john/run/john [オプション] aem_hashes.txt
  • /path/to/john/run/john: John the Ripper の実行ファイルへのパス。
  • [オプション]: クラッキング方法を指定するオプション。よく使われるものをいくつか紹介します。
    • --wordlist=/path/to/wordlist.txt: 指定した単語リスト(辞書ファイル)を使って攻撃します。強力なパスワードクラッキングには、rockyou.txt のような大規模な単語リストがよく使われます。
    • --rules: 単語リストの単語に様々な変換ルール(例: 大文字小文字変換、数字や記号の追加)を適用して試行します。単語リスト攻撃と併用することが多いです (--wordlist=... --rules)。
    • --incremental: インクリメンタルモード(総当たり攻撃)。指定した文字セット(例: 数字のみ、英小文字のみ、全文字種)で可能な全ての組み合わせを試します。時間がかかります。
    • --format=aem: ハッシュ形式を明示的に指定する場合に使います。John が自動検出できない場合に役立ちます。
    • --show: 既にクラックに成功したパスワードを表示します。
  • aem_hashes.txt: aem2john で生成したハッシュファイル。

実行例:単語リスト攻撃

/opt/john/run/john --wordlist=/usr/share/wordlists/rockyou.txt --rules aem_hashes.txt

このコマンドは、rockyou.txt の単語リストと組み込みのルールを使って aem_hashes.txt 内のハッシュをクラックしようとします。

実行例:インクリメンタルモード (全印刷可能文字)

/opt/john/run/john --incremental=All aem_hashes.txt

このコマンドは、印刷可能な全ての文字を使って総当たり攻撃を試みます。非常に時間がかかるため、通常は最後の手段となります。

結果の確認

クラッキングが成功すると、John the Ripper は見つかったパスワードをターミナルに表示し、john.pot というファイル(John Potfile)に記録します。後でクラック済みのパスワードを確認するには、--show オプションを使います。

/opt/john/run/john --show aem_hashes.txt

出力例:

admin:password123:1:1:Admin User:/home/users/q/qwert:/bin/bash
user1:sunshine:1:1:::

2 password hashes cracked, 0 left

この例では、`admin` ユーザーのパスワードが `password123`、`user1` ユーザーのパスワードが `sunshine` であることがわかりました。

✨ クラッキングが成功すると嬉しいですが、弱いパスワードが見つかった場合は、システム管理者に報告し、より強力なパスワードポリシーの適用を推奨しましょう。
  • 法的・倫理的側面: 繰り返しになりますが、パスワードクラッキングは許可されたシステムに対してのみ、合法的な目的で行ってください。不正アクセスは犯罪です。
  • パフォーマンス: 大量のハッシュや複雑なパスワードのクラッキングには、高性能な CPU や GPU、そして多くの時間が必要です。
  • John the Ripper のバージョン: aem2john や AEM ハッシュ形式のサポートは、John the Ripper のバージョンによって異なる場合があります。常に最新の Jumbo バージョンを使用することを推奨します。
  • Hashcat との比較: 最近の Hashcat (ソースからビルドした場合) も AEM ハッシュに対応している可能性があります。Hashcat は特に GPU クラッキングに優れているため、状況に応じて使い分けることも検討できます (ただし、2024年初頭の情報では、公式リリース版 Hashcat は未対応で、John の方が確実という報告もありました)。
  • データソースの特定: 最も難しいのは、AEM インスタンスから正しいハッシュデータを含むファイルやディレクトリを見つけ出すことです。AEM のドキュメントや、特定のバージョンに関する情報を調査することが重要です。

aem2john は、Adobe Experience Manager のセキュリティ評価において非常に役立つツールです。AEM 固有のパスワードハッシュ形式を John the Ripper が扱える形式に変換することで、パスワード強度のテストや脆弱性診断を効率的に行うことができます。

この記事が、aem2john の使い方を理解し、AEM 環境のセキュリティ向上に役立てる一助となれば幸いです。適切な知識と倫理観を持って、ツールを活用してくださいね!😊

参考情報

コメント

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