この記事では、John the Ripper スイートに含まれる mac2john
というツールに焦点を当て、その機能、使い方、そして注意点について詳しく解説します。macOS のセキュリティやパスワード管理に関心のある方、特に古いシステムや特定の状況下でのパスワードリカバリ、セキュリティ監査に携わる方にとって、役立つ情報となるでしょう。
1. mac2john と John the Ripper とは?
まず、mac2john
がどのようなツールなのか、そしてそれが属する John the Ripper スイートについて理解しましょう。
John the Ripper (JtR) は、非常に有名で強力なオープンソースのパスワードクラッキングツールです。その主な目的は、システムのパスワード強度をテストし、弱いパスワードを検出することにあります。多くのオペレーティングシステム(Unix系、macOS、Windowsなど)やアプリケーションのパスワードハッシュ形式に対応しており、辞書攻撃、ブルートフォース攻撃(総当たり攻撃)、インクリメンタルモードなど、多様なクラッキング手法をサポートしています。
mac2john は、John the Ripper の “Jumbo” バージョン(拡張版)に含まれるユーティリティスクリプトの一つです。その役割は、macOS システムから特定の形式のパスワードハッシュ情報を抽出し、John the Ripper が解析できる形式に変換することです。具体的には、macOS 10.8 (Mountain Lion) 以降で使用されているユーザーアカウントのパスワード情報が格納された .plist
ファイル(プロパティリストファイル)を処理対象とします。
mac2john
は、以前は ml2john.py
(Mountain Lion to John) という名前でしたが、macOS のバージョンアップに伴い、より汎用的な mac2john.py
に名称変更されました。
2. macOS のパスワードハッシュ保存場所
mac2john
がどのファイルから情報を抽出するのかを理解するために、macOS がどのようにパスワードハッシュを保存しているかを見てみましょう。保存場所や形式は macOS のバージョンによって異なります。
-
古い macOS バージョン (OS X 10.6 Snow Leopard 以前):
Unix ライクなシステムと同様に、
/etc/master.passwd
やシャドウファイル (/var/db/shadow/hash/<GUID>
など) にパスワードハッシュ(主に SHA-1 形式)が保存されていました。これらの形式は、John the Ripper が直接扱える場合が多いです。 - OS X 10.7 Lion: SHA-512 ベースのハッシュが導入されましたが、基本的な仕組みは似ていました。
-
OS X 10.8 Mountain Lion 以降:
パスワードハッシュの保存方法が変更され、ユーザーごとのプロパティリストファイル (
.plist
) に情報が格納されるようになりました。これらのファイルは通常、以下のディレクトリにあります(管理者権限が必要です)。 ここで<username>
は対象ユーザーのアカウント名です。 この.plist
ファイルには、PBKDF2-SHA512 (Password-Based Key Derivation Function 2 with SHA-512) を使用して計算されたハッシュ値、ソルト、イテレーション(反復回数)などが XML 形式で含まれています。mac2john
は、主にこの.plist
ファイルを処理対象とします。 -
キーチェーン (Keychain):
macOS は、ログインパスワード以外にも、Wi-Fi のパスワード、Web サイトのログイン情報、証明書などを「キーチェーン」という安全なデータベースに保存します。キーチェーンのデータは通常、ユーザーのログインパスワードで暗号化されています。キーチェーン内のパスワードをクラックするのは、ユーザーアカウントのハッシュをクラックするのとは異なるプロセスであり、
mac2john
の直接的な対象ではありません(ただし、John the Ripper スイートにはkeychain2john
のような関連ツールが存在する場合があります)。 - FileVault と Secure Enclave: 現代の macOS では、FileVault によるディスク全体の暗号化や、T2 セキュリティチップ / Apple Silicon に搭載された Secure Enclave によるキー管理など、より高度なセキュリティ機能が実装されています。これにより、物理的なアクセスがあってもパスワードハッシュを容易に抽出・解読することは非常に困難になっています。
mac2john
は、特に OS X 10.8 以降の .plist
ファイル形式のハッシュ抽出に特化しています。
3. mac2john の仕組み
mac2john
の動作は比較的シンプルです。
-
入力: ユーザーが指定した
.plist
ファイル(通常は/var/db/dslocal/nodes/Default/users/<username>.plist
)を読み込みます。 -
解析:
.plist
ファイル (XML 形式) の内容を解析し、パスワードハッシュに関連する情報(ShadowHashData キーの下にあるデータなど)を探します。このデータには、ソルト、PBKDF2-SHA512 で計算されたハッシュ本体(エントロピーと呼ばれることもあります)、そしてイテレーション回数が含まれています。 -
変換: 抽出した情報を、John the Ripper が解釈できる特定のフォーマットに変換します。このフォーマットは通常、以下のような形式になります。
username
:.plist
ファイル名などから取得されるユーザー名。$ml$
: macOS (Mountain Lion 以降) のハッシュ形式を示す識別子。[iterations]
: PBKDF2 の反復回数(10進数)。[salt]
: ソルト値(16進数文字列)。[entropy]
: PBKDF2-SHA512 ハッシュ本体(16進数文字列)。
- 出力: 変換されたハッシュ文字列を標準出力に出力します。ユーザーは通常、これをファイルにリダイレクトして保存します。
4. mac2john のインストール
mac2john
は単体のツールとして配布されているわけではなく、John the Ripper の “Jumbo” バージョンに含まれています。”Jumbo” バージョンは、コミュニティによって開発が進められており、より多くのハッシュ形式や機能が追加されています。
John the Ripper (Jumbo) をインストールする方法はいくつかあります。
-
パッケージマネージャー (Homebrew – macOS): macOS で最も簡単な方法の一つです。
mac2john
スクリプト(通常は Python スクリプトmac2john.py
)は John the Ripper のインストールディレクトリ内のrun
ディレクトリやshare/john/
ディレクトリ、あるいは/usr/sbin/
や/usr/bin/
など、システムのパスが通った場所にあることが多いです。
または、より機能が豊富な Jumbo バージョンを明示的に指定する場合(リポジトリによる):
インストール後、 - ソースコードからコンパイル: 最新版や特定のカスタマイズが必要な場合は、GitHub の John the Ripper リポジトリからソースコードをクローンしてコンパイルします。
-
セキュリティディストリビューション (Kali Linux など): Kali Linux や Parrot Security OS などのペネトレーションテスト用 Linux ディストリビューションには、John the Ripper (Jumbo) がプリインストールされていることが多く、
mac2john
も含まれています。
インストール後、mac2john
(または mac2john.py
) コマンドが実行可能か確認してください。Python スクリプトとして提供されている場合、実行には Python 3 が必要になることがあります。
5. mac2john の使い方
mac2john
の基本的な使い方は非常にシンプルです。
基本構文
または Python スクリプトを直接実行する場合:
入力ファイル
入力として、パスワードハッシュ情報が含まれる .plist
ファイルを指定します。前述の通り、これは通常 /var/db/dslocal/nodes/Default/users/<username>.plist
です。
実行例
ユーザー “testuser” のパスワードハッシュを抽出し、hash_output.txt
というファイルに保存する例です。
複数のユーザーファイルを一度に処理することも可能です。
出力
実行が成功すると、標準出力に John the Ripper 形式のハッシュ文字列が出力されます。上記のようにリダイレクト (>
) を使ってファイルに保存するのが一般的です。
エラーが発生した場合(ファイルが見つからない、形式が違うなど)は、エラーメッセージが出力されます。
6. 抽出したハッシュを John the Ripper で解析する
mac2john
でハッシュを抽出・変換したら、次はそのハッシュを John the Ripper 本体 (john
コマンド) に渡してパスワードクラッキングを試みます。
基本的な使い方
最も基本的なコマンドは、john
コマンドにハッシュファイル名を渡すだけです。John the Ripper はファイル内のハッシュ形式を自動検出し、デフォルトのクラッキングモード(シングルクラック、辞書、インクリメンタル)を順に試します。
クラッキングモードの指定
特定のクラッキングモードを指定することもできます。
-
シングルクラックモード (
--single
): ユーザー名や GECOS 情報(本名など)を基にパスワードを推測します。非常に高速ですが、単純なパスワードにしか効果がありません。 -
辞書モード (
--wordlist
): 指定された単語リスト(辞書ファイル)に含まれる単語をパスワード候補として試します。John the Ripper にはデフォルトの辞書 (password.lst
) が付属していますが、より大規模で効果的な辞書(例:rockyou.txt
)を別途用意して指定するのが一般的です。--rules
オプションを併用すると、辞書の単語に数字を追加したり、大文字小文字を変換したりするルール(マングルルール)を適用し、より多くの候補を試すことができます。 -
インクリメンタルモード (
--incremental
): 設定ファイルで定義された文字セットを使って、考えられるすべての文字の組み合わせを試します(ブルートフォース攻撃に近い)。非常に時間がかかりますが、辞書にない複雑なパスワードも見つけられる可能性があります。モード(例:Digits
,Alpha
,Alnum
,ASCII
)を指定できます。 -
マスクモード (
--mask
): パスワードのパターン(例: 大文字1文字 + 小文字7文字 + 数字2文字)が分かっている場合に、そのパターンに合致する候補のみを生成して試します。効率的なブルートフォースが可能です。
その他のオプション
-
--format=ml
: ハッシュ形式を明示的に指定します。mac2john
の出力形式は通常自動検出されますが、問題がある場合に指定すると役立つことがあります。 -
--show
: すでにクラックに成功したパスワードを表示します。 出力例: コロン区切りで、ユーザー名、クラックされたパスワード、UID などが表示されます。 -
--pot=my.pot
: クラック結果を保存するファイル(pot ファイル)を指定します。デフォルトは$JOHN/john.pot
です。 -
--fork=N
: N個のプロセスを並列で実行し、マルチコア CPU を活用してクラッキングを高速化します。 -
--restore
: 中断したセッションを再開します。
John the Ripper のオプションは非常に豊富です。詳細については、公式ドキュメントや john --help
を参照してください。
7. 重要な考慮事項と倫理
mac2john
や John the Ripper は強力なツールですが、その使用には重要な注意点と倫理的な側面が伴います。
- 法的および倫理的な責任: これらのツールは、自身が管理するシステム のセキュリティ評価や、正当な許可を得た ペネトレーションテスト、あるいは自身が忘れたパスワードの回復 といった合法かつ倫理的な目的 にのみ使用してください。他人のアカウントやシステムに対して許可なくパスワードクラッキングを行うことは、重大な犯罪 となり、法的な処罰の対象となります。絶対に不正利用しないでください。
-
macOS のバージョンとセキュリティ機能:
mac2john
が対象とする.plist
ファイルからのハッシュ抽出は、比較的古いバージョンの macOS や、特定の条件下(FileVault が無効、物理アクセスが可能など)で有効な場合があります。最新の macOS では、FileVault によるディスク暗号化、T2 チップや Secure Enclave によるハードウェアレベルの保護が強化されており、単純に.plist
ファイルを取得してハッシュをクラックすることは非常に困難か、不可能になっています。 - ルート権限の必要性: パスワードハッシュが保存されているファイルへのアクセスには管理者権限 (root) が不可欠です。これは、攻撃者がシステムに侵入し、権限昇格に成功している状況を想定しています。
- パスワードの強度: PBKDF2-SHA512 は比較的強力なハッシュ化アルゴリズムであり、特にイテレーション回数が多く設定されている場合、ブルートフォース攻撃には膨大な計算コストがかかります。しかし、辞書に載っているような弱いパスワードや単純なパスワードは、依然としてクラックされるリスクがあります。
-
ツールの限界:
mac2john
は万能ではありません。特定のファイル形式に特化しており、キーチェーンパスワードや FileVault のパスフレーズなど、他の形式の認証情報を直接扱うことはできません(John the Ripper スイートには、それらを扱うための別のツールが含まれる場合があります)。
8. まとめ
mac2john
は、John the Ripper スイートの一部として、macOS (OS X 10.8 Mountain Lion 以降) のユーザーアカウントパスワードハッシュ (.plist
ファイル形式) を抽出し、John the Ripper で解析可能な形式に変換するための重要なユーティリティです。
以下の点を理解しておくことが重要です。
- 主に
/var/db/dslocal/nodes/Default/users/<username>.plist
ファイルを処理対象とします。 - ファイルへのアクセスには通常 root 権限が必要です。
- 出力は
username:$ml$[iterations]$[salt]$[entropy]
という形式になります。 - 抽出したハッシュは
john
コマンドに渡して解析します。 - 最新の macOS では、セキュリティ強化により、この手法の有効性は限定的です。
- ツールの使用は、必ず合法かつ倫理的な範囲内 で行ってください。
mac2john
と John the Ripper を正しく理解し、責任を持って使用することで、システムのセキュリティ評価やインシデント対応、フォレンジック調査などに役立てることができます。しかし、その強力さゆえに、悪用されるリスクも常に念頭に置く必要があります。
参考情報
- John the Ripper official website: https://www.openwall.com/john/
- John the Ripper Community Wiki (GitHub): https://github.com/openwall/john-packages/wiki/john-jumbo
- mac2john.py source code (GitHub): https://github.com/openwall/john/blob/bleeding-jumbo/run/mac2john.py