この記事では、有名なパスワードクラッキングツールであるJohn the Ripperスイートに含まれるユーティリティ、iwork2john
の使い方について詳しく解説します。このツールは、AppleのiWorkスイート(Pages, Numbers, Keynote)で作成され、パスワードで保護されたファイルからパスワードハッシュを抽出するために使用されます。
抽出されたハッシュは、John the Ripper本体を使用して解析し、元のパスワードを回復(クラック)するために用いられます。これは、パスワードを忘れてしまったファイルの回復や、セキュリティ監査の文脈でパスワードの強度をテストする際に非常に役立ちます。💪
iwork2johnとは? 🤔
iwork2john
は、John the Ripperプロジェクトの一部として開発されたPythonスクリプトです。その主な目的は、以下のApple iWorkファイル形式から、John the Ripperが解析できる形式のパスワードハッシュを抽出することです。
- Pages ドキュメント (
.pages
) - Numbers スプレッドシート (
.numbers
) - Keynote プレゼンテーション (
.key
)
iWork ’09、iWork ’13、およびそれ以降のバージョンで作成されたパスワード保護付きファイルに対応しています。ファイル自体は実際には特殊な構造を持つZIPアーカイブであり、iwork2john
はこの構造を解析して、暗号化に必要な情報(ソルト、IV、暗号化されたデータの一部など)を含むハッシュ文字列を生成します。
このツールによって生成されたハッシュは、iwork
フォーマットとしてJohn the Ripperに認識されます。John the Ripper Wikiによると、これはPBKDF2-SHA1アルゴリズムとAES-128暗号化に基づいています。
インストール 💻
iwork2john
は通常、John the Ripperの「Jumbo」バージョンに含まれています。John the Ripperをインストールすると、多くの場合、run
ディレクトリ、またはシステムの実行パス(例: /usr/bin/
や /usr/lib/john/
)内に配置されます。
John the Ripperをインストールする一般的な方法をいくつか紹介します。
パッケージマネージャーを使用する場合 (Linux)
Debian/Ubuntuベースのシステム(Kali Linuxなど)では、以下のコマンドでJohn the Ripper (Jumboバージョンを含むことが多い) をインストールできます。
sudo apt update
sudo apt install john
Arch Linuxでは:
sudo pacman -S john
Fedoraでは:
sudo dnf install john
インストール後、iwork2john
がパスに含まれているか確認してください。含まれていない場合は、John the Ripperのインストールディレクトリ(例: /usr/share/john/
や /usr/lib/john/
など)を探してみてください。
ソースからコンパイルする場合
最新版や特定の機能が必要な場合は、GitHubのOpenwallリポジトリからソースコードをクローンしてコンパイルすることもできます。
git clone https://github.com/openwall/john -b bleeding-jumbo john
cd john/src/
./configure && make -s clean && make -sj4
コンパイル後、iwork2john.py
(または単に iwork2john
) は通常 run
ディレクトリ内にあります。
cd ../run
ls iwork2john*
macOS / Windows
macOSでは、Homebrewを使ってインストールできます。
brew install john-jumbo
Windowsの場合は、公式ウェブサイトからコンパイル済みのバイナリをダウンロードするのが一般的です。ダウンロードしたZIPファイルを展開し、run
フォルダ内にiwork2john.py
があることを確認します。Pythonがインストールされている必要があります。
使い方 🚀
iwork2john
の基本的な使い方は非常にシンプルです。ターミナルまたはコマンドプロンプトで以下のコマンドを実行します。
iwork2john [対象のiWorkファイル]
または、スクリプトが直接実行可能でない場合やパスが通っていない場合は、Pythonインタープリタを指定して実行します。
python /path/to/john/run/iwork2john.py [対象のiWorkファイル]
成功すると、以下のような形式のハッシュ文字列が標準出力に表示されます。
[ファイル名]:$iwork$*[バージョン]*[salt]*[iv]*[encrypted_data]
各フィールドの意味は以下の通りです。
- [ファイル名]: 処理された元のファイル名。John the Ripperが出力時にどのハッシュがどのファイルに対応するかを示すのに役立ちます。
- $iwork$: ハッシュの種類を示す識別子。
- [バージョン]: iWorkファイルの内部バージョンやフォーマットを示す情報(例: 09, 13)。
- [salt]: パスワードハッシュ生成時に使用されるソルト(16バイトの16進数文字列)。
- [iv]: 暗号化に使用される初期化ベクトル(16バイトの16進数文字列)。
- [encrypted_data]: 暗号化されたデータの一部(64バイトの16進数文字列)。John the Ripperがパスワードの正しさを検証するために使用します。
出力をファイルに保存する
抽出したハッシュを後でJohn the Ripperで処理するために、ファイルに保存しておくと便利です。リダイレクト演算子(>
)を使います。
iwork2john document.pages > iwork_hashes.txt
複数のファイルからハッシュを抽出して、同じファイルに追加することもできます(>>
を使用)。
iwork2john presentation.key >> iwork_hashes.txt
iwork2john spreadsheet.numbers >> iwork_hashes.txt
実践例 ✨
例1: Pagesファイルのハッシュを抽出する
my_secret_document.pages
という名前のパスワード保護されたPagesファイルがあるとします。
iwork2john my_secret_document.pages
出力例:
my_secret_document.pages:$iwork$*13*a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6*11223344556677889900aabbccddeeff*fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210
(注意: 上記のハッシュ値はダミーです。)
例2: 抽出したハッシュをJohn the Ripperで解析する
前の例で抽出したハッシュを hashes.txt
というファイルに保存したとします。John the Ripperを使ってパスワードクラックを試みます。
john hashes.txt
John the Ripperは、デフォルトの辞書やルールを使ってクラックを試みます。特定の辞書ファイルを使う場合は、--wordlist
オプションを指定します。
john --wordlist=/path/to/password.lst hashes.txt
クラックが成功すると、John the Ripperは発見したパスワードを表示します。
Loaded 1 password hash (iwork, Apple iWork '09 / '13 / '14 [PBKDF2-SHA1 AES 128/128 AVX 4x])
Cost 1 (iteration count) is 1000 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password123 (my_secret_document.pages)
1g 0:00:00:05 DONE (2025-03-31 08:25) 0.1851g/s 123.4p/s 123.4c/s 123.4C/s secret..monkey
Session completed
後でクラック済みのパスワードを確認するには、--show
オプションを使用します。
john --show hashes.txt
出力例:
my_secret_document.pages:password123
1 password hash cracked, 0 left
例3: パイプを使って直接John the Ripperに渡す
ハッシュを一時ファイルに保存せず、iwork2john
の出力を直接パイプ (|
) でJohn the Ripperに渡すこともできます。これは、単一のファイルを素早く処理したい場合に便利です。
iwork2john important_presentation.key | john --stdin --format=iwork
--stdin
オプションはJohn the Ripperに標準入力からハッシュを読み込むように指示し、--format=iwork
はハッシュの種類を明示的に指定します(多くの場合自動検出されますが、指定すると確実です)。
ヒントとトラブルシューティング💡
-
ファイルがパスワード保護されていない場合:
iwork2john
はエラーメッセージを表示するか、何も出力しないことがあります。処理する前にファイルが実際にパスワードで保護されていることを確認してください。 -
ファイル形式が古い/サポートされていない場合: 非常に古いバージョンのiWorkファイル(iWork ’09より前)や、破損しているファイルの場合、
iwork2john
は正しくハッシュを抽出できない可能性があります。 -
Pythonのエラー:
iwork2john
はPythonスクリプトであるため、実行にはPython環境が必要です。システムにPythonがインストールされているか確認してください。依存ライブラリが不足している場合もエラーが発生する可能性がありますが、通常は標準ライブラリのみを使用します。 -
John the Ripperでのフォーマット認識: John the Ripperが
iwork
フォーマットを認識しない場合、John the Ripperのバージョンが古いか、Jumbo版ではない可能性があります。最新のJumbo版を使用しているか確認してください。
まとめ 🏁
iwork2john
は、パスワードで保護されたApple iWorkファイルからパスワードハッシュを抽出するためのシンプルかつ効果的なツールです。抽出されたハッシュは、John the Ripperを用いてパスワード回復やセキュリティ強度テストに利用できます。
John the Ripperスイートの一部として提供されており、適切な手順でJohn the Ripperをインストールすれば、すぐに利用を開始できます。基本的なコマンドライン操作で、Pages, Numbers, Keynoteファイルのパスワード解析プロセスを開始するための重要な第一歩を踏み出すことができます。
繰り返しになりますが、このツールは倫理的な目的、つまり自身が所有するファイルや許可を得たファイルに対してのみ使用するようにしてください。Happy Hacking! (ただし、合法的に 😉)
参考情報 📚
- John the Ripper official website: https://www.openwall.com/john/ – John the Ripperの公式ウェブサイト。ダウンロードやドキュメントへのリンクがあります。
- John the Ripper Community Wiki (GitHub): https://github.com/openwall/john/wiki – より詳細な情報、フォーマット、オプションに関するコミュニティWiki。
-
iwork2john.py source code (GitHub):
https://github.com/openwall/john/blob/bleeding-jumbo/run/iwork2john.py
–
iwork2john.py
のソースコード。内部動作に興味がある方向け。
コメント