mac2john: macOS パスワードハッシュ抽出ツールの徹底解説

この記事では、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) に情報が格納されるようになりました。これらのファイルは通常、以下のディレクトリにあります(管理者権限が必要です)。
    /var/db/dslocal/nodes/Default/users/<username>.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 の動作は比較的シンプルです。

  1. 入力: ユーザーが指定した .plist ファイル(通常は /var/db/dslocal/nodes/Default/users/<username>.plist)を読み込みます。
  2. 解析: .plist ファイル (XML 形式) の内容を解析し、パスワードハッシュに関連する情報(ShadowHashData キーの下にあるデータなど)を探します。このデータには、ソルト、PBKDF2-SHA512 で計算されたハッシュ本体(エントロピーと呼ばれることもあります)、そしてイテレーション回数が含まれています。
  3. 変換: 抽出した情報を、John the Ripper が解釈できる特定のフォーマットに変換します。このフォーマットは通常、以下のような形式になります。
    username:$ml$[iterations]$[salt]$[entropy]
    • username: .plist ファイル名などから取得されるユーザー名。
    • $ml$: macOS (Mountain Lion 以降) のハッシュ形式を示す識別子。
    • [iterations]: PBKDF2 の反復回数(10進数)。
    • [salt]: ソルト値(16進数文字列)。
    • [entropy]: PBKDF2-SHA512 ハッシュ本体(16進数文字列)。
    例:
    testuser:$ml$35460$93a94bd24b5de64d79a5e49fa372827e739f4d7b6975c752c9a0ff1e5cf72e05$752351df64dd2ce9dc9c64a72ad91de6581a15c19176266b44d98919dfa81f0f96cbcb20a1ffb400718c20382030f637892f776627d34e021bad4f81b7de8222
    この形式は、Hashcat などの他のパスワードクラッキングツールでもモード 7100 (macOS v10.8+ / PBKDF2-SHA512) として認識されることがあります。
  4. 出力: 変換されたハッシュ文字列を標準出力に出力します。ユーザーは通常、これをファイルにリダイレクトして保存します。

4. mac2john のインストール

mac2john は単体のツールとして配布されているわけではなく、John the Ripper の “Jumbo” バージョンに含まれています。”Jumbo” バージョンは、コミュニティによって開発が進められており、より多くのハッシュ形式や機能が追加されています。

John the Ripper (Jumbo) をインストールする方法はいくつかあります。

  • パッケージマネージャー (Homebrew – macOS): macOS で最も簡単な方法の一つです。
    brew install john
    または、より機能が豊富な Jumbo バージョンを明示的に指定する場合(リポジトリによる):
    brew install john-jumbo
    インストール後、mac2john スクリプト(通常は Python スクリプト mac2john.py)は John the Ripper のインストールディレクトリ内の run ディレクトリや share/john/ ディレクトリ、あるいは /usr/sbin//usr/bin/ など、システムのパスが通った場所にあることが多いです。
    # Homebrew でインストールした場合の例 (場所は変わる可能性があります)
    ls /usr/local/share/john/ | grep mac2john
    ls /opt/homebrew/share/john/ | grep mac2john # Apple Siliconの場合
  • ソースコードからコンパイル: 最新版や特定のカスタマイズが必要な場合は、GitHub の John the Ripper リポジトリからソースコードをクローンしてコンパイルします。
    git clone https://github.com/openwall/john -b bleeding-jumbo john
    cd john/src
    ./configure && make -s clean && make -sj4
    # コンパイル後、run ディレクトリに mac2john.py が生成される
    cd ../run
    ls mac2john.py
  • セキュリティディストリビューション (Kali Linux など): Kali Linux や Parrot Security OS などのペネトレーションテスト用 Linux ディストリビューションには、John the Ripper (Jumbo) がプリインストールされていることが多く、mac2john も含まれています。

インストール後、mac2john (または mac2john.py) コマンドが実行可能か確認してください。Python スクリプトとして提供されている場合、実行には Python 3 が必要になることがあります。

5. mac2john の使い方

mac2john の基本的な使い方は非常にシンプルです。

基本構文

mac2john <対象の.plist ファイル> [<対象の.plist ファイル2> ...]

または Python スクリプトを直接実行する場合:

python /path/to/mac2john.py <対象の.plist ファイル> [<対象の.plist ファイル2> ...]

入力ファイル

入力として、パスワードハッシュ情報が含まれる .plist ファイルを指定します。前述の通り、これは通常 /var/db/dslocal/nodes/Default/users/<username>.plist です。

注意: 権限

/var/db/dslocal/nodes/Default/users/ ディレクトリ内の .plist ファイルにアクセスするには、通常 root 権限 (管理者権限) が必要です。sudo コマンドを使用するか、root ユーザーとして操作する必要があります。
また、ファイルを直接 mac2john に渡す代わりに、アクセス可能な場所にコピーしてから処理することも一般的です。コピーする際も root 権限が必要です。

実行例

ユーザー “testuser” のパスワードハッシュを抽出し、hash_output.txt というファイルに保存する例です。

# 1. 対象ファイルを安全な場所にコピー (要 root 権限)
sudo cp /var/db/dslocal/nodes/Default/users/testuser.plist /tmp/testuser.plist
sudo chmod 644 /tmp/testuser.plist # mac2john が読み取れるように権限変更

# 2. mac2john を実行し、出力をファイルに保存
# mac2john がパスに含まれている場合
mac2john /tmp/testuser.plist > hash_output.txt

# Python スクリプトを直接指定する場合 (パスは環境に合わせて変更)
python /usr/local/share/john/mac2john.py /tmp/testuser.plist > hash_output.txt

複数のユーザーファイルを一度に処理することも可能です。

sudo cp /var/db/dslocal/nodes/Default/users/user1.plist /tmp/
sudo cp /var/db/dslocal/nodes/Default/users/user2.plist /tmp/
sudo chmod 644 /tmp/*.plist
mac2john /tmp/user1.plist /tmp/user2.plist > multi_hashes.txt

出力

実行が成功すると、標準出力に John the Ripper 形式のハッシュ文字列が出力されます。上記のようにリダイレクト (>) を使ってファイルに保存するのが一般的です。

# hash_output.txt の中身の例
testuser:$ml$35460$93a94bd24b5de64d79a5e49fa372827e739f4d7b6975c752c9a0ff1e5cf72e05$752351df64dd2ce9dc9c64a72ad91de6581a15c19176266b44d98919dfa81f0f96cbcb20a1ffb400718c20382030f637892f776627d34e021bad4f81b7de8222

エラーが発生した場合(ファイルが見つからない、形式が違うなど)は、エラーメッセージが出力されます。

6. 抽出したハッシュを John the Ripper で解析する

mac2john でハッシュを抽出・変換したら、次はそのハッシュを John the Ripper 本体 (john コマンド) に渡してパスワードクラッキングを試みます。

基本的な使い方

最も基本的なコマンドは、john コマンドにハッシュファイル名を渡すだけです。John the Ripper はファイル内のハッシュ形式を自動検出し、デフォルトのクラッキングモード(シングルクラック、辞書、インクリメンタル)を順に試します。

john hash_output.txt

クラッキングモードの指定

特定のクラッキングモードを指定することもできます。

  • シングルクラックモード (--single): ユーザー名や GECOS 情報(本名など)を基にパスワードを推測します。非常に高速ですが、単純なパスワードにしか効果がありません。
    john --single hash_output.txt
  • 辞書モード (--wordlist): 指定された単語リスト(辞書ファイル)に含まれる単語をパスワード候補として試します。John the Ripper にはデフォルトの辞書 (password.lst) が付属していますが、より大規模で効果的な辞書(例: rockyou.txt)を別途用意して指定するのが一般的です。
    # デフォルト辞書を使用
    john --wordlist=password.lst hash_output.txt
    
    # rockyou.txt (要入手・展開) を使用
    john --wordlist=/path/to/rockyou.txt hash_output.txt
    --rules オプションを併用すると、辞書の単語に数字を追加したり、大文字小文字を変換したりするルール(マングルルール)を適用し、より多くの候補を試すことができます。
    john --wordlist=/path/to/rockyou.txt --rules hash_output.txt
  • インクリメンタルモード (--incremental): 設定ファイルで定義された文字セットを使って、考えられるすべての文字の組み合わせを試します(ブルートフォース攻撃に近い)。非常に時間がかかりますが、辞書にない複雑なパスワードも見つけられる可能性があります。モード(例: Digits, Alpha, Alnum, ASCII)を指定できます。
    john --incremental=Alnum hash_output.txt
  • マスクモード (--mask): パスワードのパターン(例: 大文字1文字 + 小文字7文字 + 数字2文字)が分かっている場合に、そのパターンに合致する候補のみを生成して試します。効率的なブルートフォースが可能です。
    # 例: 8文字のパスワードで、最初は必ず大文字、残りは小文字
    john --mask='?u?l?l?l?l?l?l?l' hash_output.txt

その他のオプション

  • --format=ml: ハッシュ形式を明示的に指定します。mac2john の出力形式は通常自動検出されますが、問題がある場合に指定すると役立つことがあります。
    john --format=ml --wordlist=rockyou.txt hash_output.txt
  • --show: すでにクラックに成功したパスワードを表示します。
    john --show hash_output.txt
    出力例:
    testuser:Password123:1000:::/Users/testuser:/bin/bash
    コロン区切りで、ユーザー名、クラックされたパスワード、UID などが表示されます。
  • --pot=my.pot: クラック結果を保存するファイル(pot ファイル)を指定します。デフォルトは $JOHN/john.pot です。
  • --fork=N: N個のプロセスを並列で実行し、マルチコア CPU を活用してクラッキングを高速化します。
    john --fork=4 --wordlist=rockyou.txt hash_output.txt
  • --restore: 中断したセッションを再開します。
    john --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 を正しく理解し、責任を持って使用することで、システムのセキュリティ評価やインシデント対応、フォレンジック調査などに役立てることができます。しかし、その強力さゆえに、悪用されるリスクも常に念頭に置く必要があります。

参考情報

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です