John the Ripper (JtR) は、非常に強力で広く利用されているオープンソースのパスワードクラッキングツールです。しかし、JtR がその能力を最大限に発揮するためには、解析対象のパスワードハッシュが JtR の理解できる形式になっている必要があります。ここで活躍するのが、*2john
と呼ばれる一連のユーティリティ群です。
今回は、その中でも sense2john
というツールに焦点を当て、その役割と使い方について詳しく解説していきます。パスワードセキュリティの評価やペネトレーションテストに関わる方にとって、*2john
ユーティリティの理解は非常に重要です。
sense2john とは何か? 🤔
sense2john
は、John the Ripper スイートに含まれるユーティリティの一つで、特定のデータソースからパスワードハッシュを抽出し、John the Ripper が解析可能な形式に変換する役割を担います。
具体的には、sense2john.py
は pfSense および OPNsense の設定ファイル (通常は config.xml
) からパスワードハッシュを抽出するために設計された Python スクリプトです。pfSense と OPNsense は、FreeBSD をベースとしたオープンソースのファイアウォール/ルーターディストリビューションであり、Web GUI の認証やその他の機能のためにユーザーアカウントとパスワードを管理しています。
これらのシステムの設定ファイルには、ユーザーアカウント情報(ユーザー名やパスワードハッシュなど)が含まれています。sense2john
はこの設定ファイルを解析し、パスワードハッシュ部分を JtR が処理できる標準的なフォーマットに変換して出力します。
初期の情報では「SensePost data」から抽出すると記載されている場合がありましたが、2021年頃に pfSense/OPNsense の config.xml
に対応する形で追加・更新された経緯があります。これにより、これらのファイアウォール/ルーターアプライアンスの管理者パスワード等の強度を監査することが可能になります。
なぜこのようなツールが必要なのか?
多くのアプリケーションやシステムは、独自のフォーマットでパスワードハッシュを保存しています。John the Ripper は多くのハッシュタイプに対応していますが、特定のアプリケーションのファイル形式を直接読み込むことはできません。sense2john
のようなコンバータは、このギャップを埋めるために存在します。対象のファイル(この場合は config.xml
)を解析し、そこに含まれるハッシュデータを JtR が認識できる文字列形式(例: username:$hash_type$hash_data
)に変換します。
前提条件 🛠️
sense2john
を使用するには、以下のものが必要です。
-
John the Ripper (Jumbo 版):
sense2john.py
スクリプトは、通常 John the Ripper の “Jumbo” バージョンに含まれています。これは、コミュニティによって拡張されたバージョンで、より多くのハッシュタイプやユーティリティをサポートしています。JtR のrun
ディレクトリ内にスクリプトが存在することが多いです。# 例: Kali Linux などでの JtR のインストール sudo apt update sudo apt install john
あるいは、GitHub からソースを取得してビルドすることも可能です。
git clone https://github.com/openwall/john -b bleeding-jumbo john cd john/src ./configure && make -s clean && make -sj4
-
Python 環境:
sense2john.py
は Python スクリプトであるため、実行には Python 3 がインストールされている必要があります。 -
対象の pfSense/OPNsense 設定ファイル (
config.xml
): パスワードハッシュが含まれている設定ファイルが必要です。通常、これらのシステムの/conf/config.xml
にあります。このファイルを取得するには、システムへのアクセス権が必要です(例: バックアップから、あるいは直接ファイルシステムから)。注意: 他者のシステムから許可なく設定ファイルを取得することは不正アクセスにあたる可能性があります。必ず適切な権限のもとで行ってください。
sense2john の使い方 🚀
sense2john
の使用方法は非常にシンプルです。基本的には、John the Ripper の run
ディレクトリに移動し、Python を使ってスクリプトを実行し、引数として対象の config.xml
ファイルを指定します。
ステップ1: JtR の run ディレクトリへ移動
まず、John the Ripper がインストールされているディレクトリ内の run
サブディレクトリに移動します。
cd /path/to/john/run
(/path/to/john
は JtR のインストールパスに置き換えてください。システムによっては /usr/lib/john/
や /opt/john/run/
などになります。)
ステップ2: sense2john.py の実行
次に、python3
コマンド(または単に python
)を使用して sense2john.py
を実行し、引数に pfSense/OPNsense の設定ファイル (config.xml
) のパスを指定します。
python3 sense2john.py /path/to/your/config.xml
(/path/to/your/config.xml
は実際のファイルパスに置き換えてください。)
ステップ3: 出力の確認と保存
sense2john
を実行すると、標準出力に John the Ripper が解析可能な形式のハッシュ文字列が出力されます。通常、これは ユーザー名:ハッシュデータ
の形式になります。
出力例 (架空のものです):
admin:$2y$10$abcdefghijklmnopqrstuvwx.ABCDEFGHIJKLMNOPQRSTUVWXYZ12345
この出力は、John the Ripper で直接使用できます。通常、この出力をファイルに保存して JtR に渡します。
python3 sense2john.py /path/to/your/config.xml > pfsense_hashes.txt
これで、pfsense_hashes.txt
というファイルに JtR 用のハッシュが保存されました。
John the Ripper でのクラッキング実行 🔑
sense2john
でハッシュを抽出・変換したら、いよいよ John the Ripper を使ってパスワードのクラッキング(解析)を試みます。
基本的なコマンドは以下のようになります。
john [オプション] <ハッシュファイル>
辞書攻撃 (Wordlist Mode)
最も一般的な方法の一つが辞書攻撃です。パスワードに使われそうな単語を集めたリスト(辞書ファイル、ワードリスト)を使って試行します。John the Ripper にはデフォルトのワードリスト (password.lst
) が付属していますが、より大規模なリストや、ターゲットに関連する単語を集めたカスタムリストを使用すると成功率が上がることがあります。
# デフォルトのワードリストを使用する場合
john pfsense_hashes.txt
# カスタムワードリストを指定する場合
john --wordlist=/path/to/custom_wordlist.txt pfsense_hashes.txt
# マングリングルールを適用する場合 (例: 単語の変形を行う)
john --wordlist=/path/to/wordlist.txt --rules=Default pfsense_hashes.txt
マングリングルール (Mangling Rules) は、辞書の単語を基に、大文字小文字の変換、数字や記号の追加・置換などを行い、より多くのパスワードパターンを試すための強力な機能です。
インクリメンタルモード (Incremental Mode)
辞書に頼らず、指定された文字セット(例: すべての英数字記号)を使って、短いものから順に総当たり的にパスワードを試すモードです。時間はかかりますが、辞書にないランダムなパスワードも見つけられる可能性があります。
john --incremental pfsense_hashes.txt
マスクモード (Mask Mode)
パスワードの構造(長さや使用文字種)がある程度わかっている場合に、そのパターン(マスク)を指定して効率的に総当たり攻撃を行うモードです。
# 例: 8文字の小文字アルファベットの場合
john --mask='?l?l?l?l?l?l?l?l' pfsense_hashes.txt
クラック結果の表示
クラッキングが成功すると、John the Ripper は結果を john.pot
というファイルに保存します。後でクラックされたパスワードを確認するには、--show
オプションを使用します。
john --show pfsense_hashes.txt
出力例 (架空のものです):
admin:Password123:UID:GID:Full Name:/home/user:/bin/shell
user1:secret:UID:GID:Full Name:/home/user:/bin/shell
2 password hashes cracked, 0 left
上記のように、ユーザー名:パスワード
の形式で結果が表示されます。
注意点と倫理的考慮事項 ⚠️
法的・倫理的な側面
パスワードクラッキングツールは、セキュリティ評価やパスワードリカバリといった正当な目的で使用されるべきものです。他者のシステムやアカウントに対して、許可なくこれらのツールを使用することは、多くの国で法律違反となり、重大な結果を招く可能性があります。
sense2john
や John the Ripper を使用する際は、以下の点を厳守してください。
- 自身の所有するシステム、または明確な許可を得たシステムに対してのみ使用する。
- ペネトレーションテストの一環として使用する場合は、必ず事前に書面で許可(契約)を得る。
- 取得したパスワード情報は厳重に管理し、目的外利用や漏洩を防ぐ。
技術的な注意点
config.xml
の場所: pfSense/OPNsense のバージョンや設定によっては、config.xml
の場所や内容が異なる場合があります。- Python の依存関係: まれに、特定の Python ライブラリが必要になる場合があります。エラーメッセージが表示された場合は、指示に従って必要なライブラリをインストールしてください (例:
pip install <library_name>
)。 - JtR のバージョン: 最新の JtR (Jumbo) を使用することを推奨します。古いバージョンでは
sense2john.py
が含まれていない、あるいは正しく動作しない可能性があります。 - ハッシュ形式の特定:
sense2john
が出力したハッシュが、JtR によって正しく認識されているか確認してください。JtR は通常、ハッシュをロードする際に自動的にフォーマットを検出します (例:Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
のようなログが出力されます)。
まとめ 📝
sense2john.py
は、pfSense や OPNsense の設定ファイル (config.xml
) からパスワードハッシュを抽出し、John the Ripper で解析可能な形式に変換するための便利なユーティリティです。これにより、これらのファイアウォール/ルーターアプライアンスの管理者パスワードやユーザーパスワードの強度を評価することが可能になります。
手順としては、
- 対象の
config.xml
ファイルを入手する(要・正当な権限)。 sense2john.py
を使ってハッシュを抽出・変換し、ファイルに保存する。- John the Ripper を使って、保存したハッシュファイルに対してパスワードクラッキングを実行する。
となります。
*2john
ユーティリティ群は、John the Ripper の適用範囲を大幅に広げる重要なツールです。sense2john
の使い方を理解することで、pfSense/OPNsense 環境におけるパスワードセキュリティ監査の能力を高めることができます。 💪
繰り返しになりますが、これらのツールは強力であるため、常に法と倫理に従い、責任ある使い方を心がけてください。
コメント