John the Ripper (JtR) は、非常に強力で広く使われているパスワードクラッキングツールです。多くのハッシュ形式に対応しており、その拡張性も魅力の一つです。「*2john」と呼ばれる一連のユーティリティ群は、様々なアプリケーションやシステムのパスワードハッシュデータを、John the Ripperが解析可能な形式に変換する役割を担っています。この記事では、その中の一つである apex2john
に焦点を当て、その使い方とOracle APEXのパスワードセキュリティについて詳しく解説します🔑。
1. Oracle APEX とは?
Oracle Application Express (APEX) は、Oracle Databaseに標準で搭載されているローコード開発プラットフォームです。Webブラウザベースの開発環境で、データベース中心のWebアプリケーションを迅速に構築できます。企業内の業務アプリケーションから、一般公開されるWebサイトまで、幅広い用途で利用されています。
APEXアプリケーションでは、ユーザー認証機能が重要な役割を果たします。デフォルトではAPEX独自の認証スキーム(APEXアカウント認証)が用意されていますが、LDAP連携やカスタム認証スキームを作成することも可能です。
2. apex2john とは?
apex2john
は、John the Ripper スイートに含まれるPythonスクリプトです。その主な目的は、Oracle APEX環境から取得したユーザーアカウントのパスワードハッシュデータを、John the Ripperが解析できる形式に変換することです。
セキュリティ監査やペネトレーションテストの文脈において、システム内に存在する脆弱なパスワード(推測しやすい、辞書攻撃に弱いなど)を特定することは非常に重要です。apex2john
を利用することで、APEXユーザーのパスワード強度を評価し、セキュリティリスクを低減するための対策を講じることが可能になります🛡️。
通常、John the Ripper をソースからビルドした場合や、Kali Linuxなどのペネトレーションテスト用ディストリビューションに含まれるパッケージをインストールした場合、apex2john
スクリプトは John the Ripper の実行ファイル群と同じディレクトリ(例えば /usr/share/john/
や John the Ripper のソースディレクトリ配下の run
ディレクトリなど)に配置されています。
3. APEX のパスワードハッシュ
Oracle APEX では、ユーザーアカウントの情報は通常 APEX_XXXXXX.WWV_FLOW_FND_USER
テーブル(XXXXXX
はAPEXのバージョンを示す数字)に格納されています。このテーブルには、ユーザー名、メールアドレスなどの情報とともに、パスワードに関する重要な列が含まれています。
WEB_PASSWORD
: 古いバージョンのAPEXや、SQLで直接パスワードが設定された場合に、平文または古い形式のハッシュが格納されることがある列です。セキュリティ監査では、この列に平文パスワードが残っていないか確認することが推奨されます。WEB_PASSWORD2
: 現在のAPEXバージョンで主に使用される、より強力なハッシュ化されたパスワードが格納される列です。WEB_PASSWORD_VERSION
: パスワードハッシュの生成に使用されたアルゴリズムやパラメータ(例: PBKDF2のイテレーション数など)を示す情報が格納されています。この情報は、apex2john
がハッシュを正しく解釈するために必要となる場合があります。近年のAPEXでは、PBKDF2 (Password-Based Key Derivation Function 2) などの標準的なアルゴリズムが利用されており、セキュリティグループID、ユーザー名、ユーザーIDなどをソルト値の一部として使用し、総当たり攻撃への耐性を高めています。
注意: テーブル名 (APEX_XXXXXX
) はAPEXのバージョンによって異なります。実際の環境に合わせて確認してください。また、これらのテーブルへのアクセスには適切な権限が必要です(通常はSYS
ユーザーやSYSTEM
ユーザー、またはAPEX_ADMINISTRATOR_ROLE
を持つユーザー)。
4. apex2john の使い方
apex2john
の基本的な使い方は非常にシンプルです。
ステップ1: APEXハッシュデータの取得
まず、対象となるAPEX環境のデータベースに接続し、WWV_FLOW_FND_USER
テーブルから必要な情報を抽出します。一般的には、ユーザー名と WEB_PASSWORD2
(または必要に応じて WEB_PASSWORD
)、そして WEB_PASSWORD_VERSION
を取得します。
SQL*Plus や SQL Developer などのツールを使用して、以下のようなクエリを実行します(テーブル名は適宜修正してください)。
-- APEX 22.2 の場合 (例)
SELECT
user_name,
web_password2,
web_password_version
FROM
apex_220200.wwv_flow_fnd_user
WHERE
web_password2 IS NOT NULL; -- ハッシュが存在するユーザーのみ対象
このクエリ結果をCSVファイルやテキストファイルとして保存します。例えば apex_hashes.txt
という名前で保存したとします。ファイルの内容は以下のようになるでしょう(実際のハッシュ値は異なります)。
ADMIN,44A592AEEFFE5DCF40239F21D77838EDABC26EF81F6D558018FA4CD13B1AF45D94911E5BBBB4BD5734CE2B966FDFBA5802DD819EF12AD3B71411FF98772FF4F9,5;5;10000
USER1,AB12..............................................................................................................................CD34,5;5;10000
USER2,EF56..............................................................................................................................GH78,5;5;10000
取得する形式は、apex2john
が解釈できる必要があります。多くの場合、単純なカンマ区切り(CSV)や、各情報を区切り文字(例: コロン `:`)で結合した形式が用いられます。
ステップ2: apex2john の実行
次に、取得したハッシュデータファイルを apex2john
スクリプトに渡して、John the Ripper 形式のハッシュファイルを作成します。
# Pythonスクリプトとして実行する場合 (Python 2 または 3 が必要)
python /path/to/john/run/apex2john.py apex_hashes.txt > apex_hashes_for_john.txt
# 実行権限があれば直接実行できる場合も
# /path/to/john/run/apex2john.py apex_hashes.txt > apex_hashes_for_john.txt
ここで、/path/to/john/run/
は実際の apex2john.py
が存在するパスに置き換えてください。apex_hashes.txt
が入力ファイル、apex_hashes_for_john.txt
が John the Ripper 用に変換されたハッシュが保存される出力ファイルです。
出力ファイル (apex_hashes_for_john.txt
) の内容は、John the Ripper が認識できる特定のフォーマットになります。例えば、以下のようになる可能性があります(フォーマットはJtRのバージョンやapex2johnの実装により若干異なる場合があります)。
ADMIN:$apex$5*5*10000*44A592AEEFFE5DCF40239F21D77838EDABC26EF81F6D558018FA4CD13B1AF45D94911E5BBBB4BD5734CE2B966FDFBA5802DD819EF12AD3B71411FF98772FF4F9
USER1:$apex$5*5*10000*AB12..............................................................................................................................CD34
USER2:$apex$5*5*10000*EF56..............................................................................................................................GH78
この形式は通常、ユーザー名:$フォーマット識別子$ソルト情報*ハッシュ値
のような構造をしています。$apex$
がAPEXハッシュであることを示し、続く 5*5*10000
は WEB_PASSWORD_VERSION
から得られた情報(例: アルゴリズムバージョン、ハッシュタイプ、イテレーション数など)であり、最後の長い文字列が実際のハッシュ値です。
ステップ3: John the Ripper でのクラッキング
最後に、生成された apex_hashes_for_john.txt
ファイルを John the Ripper に渡して、パスワードクラッキングを実行します。
# 基本的な実行 (デフォルトのモードでクラッキング)
john apex_hashes_for_john.txt
# 辞書ファイルを使用する場合
john --wordlist=/path/to/wordlist.txt apex_hashes_for_john.txt
# 特定のフォーマットを指定する場合 (通常は自動検出されますが)
# john --format=apex apex_hashes_for_john.txt
John the Ripper は、シングルクラックモード、辞書攻撃モード、インクリメンタルモードなど、様々な手法を組み合わせてパスワードの解析を試みます。クラックに成功したパスワードは、コンソールに表示されるとともに、John the Ripper の .pot
ファイル(デフォルトでは $JOHN/john.pot
)に保存されます。
クラックされたパスワードを確認するには、--show
オプションを使用します。
john --show apex_hashes_for_john.txt
これにより、ユーザー名:クラックされたパスワード
の形式で結果が表示されます。
💡 ヒント: John the Ripper の詳細な使い方やオプションについては、公式ドキュメントや john --help
コマンドを参照してください。
5. セキュリティ上の考慮事項と対策
apex2john
と John the Ripper を使用したパスワード強度テストは、APEX環境のセキュリティを評価する上で有効な手段ですが、以下の点に注意が必要です。
- 倫理的な利用: これらのツールは、許可されたシステムに対するセキュリティ監査やペネトレーションテストの目的でのみ使用してください。不正アクセスや許可のないシステムへの攻撃は法律で禁じられています。
- データ保護: 取得したハッシュデータは機密情報として扱い、安全に管理してください。不要になったデータは確実に削除する必要があります。
- パフォーマンスへの影響: 大量のハッシュをクラックする作業は、CPUリソースを大量に消費します。テストを実施するマシンや環境への影響を考慮してください。
APEX環境のパスワードセキュリティを強化するための対策としては、以下のようなものが挙げられます。
- 強力なパスワードポリシーの強制: APEXの管理機能やデータベースのプロファイル機能を利用して、パスワードの最小長、複雑性(大文字、小文字、数字、記号を含むなど)、履歴管理、有効期限などを設定します。
- カスタム認証の利用: 必要に応じて、より強固な認証メカニズム(多要素認証など)を提供するカスタム認証スキームを実装します。
- 定期的なパスワード監査:
apex2john
や他の監査ツールを定期的に使用して、弱いパスワードが設定されていないかチェックし、該当ユーザーにパスワード変更を促します。 - アカウントロックアウトポリシー: 一定回数ログインに失敗した場合にアカウントを一時的または恒久的にロックする設定を有効にします。
- APEXとデータベースのセキュリティパッチ適用: Oracleから提供される最新のセキュリティパッチを適用し、既知の脆弱性に対応します。
- 不要なアカウントの無効化・削除: 使用されていない、または不要になったAPEXアカウントは速やかに無効化または削除します。
これらの対策を組み合わせることで、不正アクセスやパスワード漏洩のリスクを大幅に低減することができます 😊。
6. まとめ
apex2john
は、Oracle APEX環境のパスワードセキュリティ監査において重要な役割を果たすツールです。APEXのユーザーデータベースから抽出したパスワードハッシュを、強力なパスワードクラッキングツールである John the Ripper で解析可能な形式に変換します。
この記事で解説した手順に従い、apex2john
を適切に利用することで、APEXアプリケーションにおけるパスワードの強度を評価し、潜在的なセキュリティリスクを特定することができます。特定されたリスクに対しては、強力なパスワードポリシーの適用、定期的な監査、不要アカウントの整理などの対策を講じることが、システム全体のセキュリティを維持するために不可欠です。
ツールの使用は常に倫理的な範囲内で行い、システムの安全性を高める目的で活用しましょう。
7. 参考情報
- John the Ripper official website: https://www.openwall.com/john/ (John the Ripper の公式サイト。ドキュメントやダウンロード情報があります)
- Oracle Application Express (APEX) Documentation: https://docs.oracle.com/en/database/oracle/application-express/ (Oracle APEX の公式ドキュメント)
- Pete Finnigan’s Blog Post on Cracking APEX Passwords: https://www.petefinnigan.com/weblog/archives/00001878.htm (APEXパスワードのクラッキングに関する詳細なブログ記事。2023年12月22日公開)
コメント