DPAPImk2john の徹底解説:Windows DPAPI Master Key のハッシュ抽出と解析

John the Ripper (JtR) は、パスワードクラッキングツールとして広く知られていますが、その強力な機能の一部として、様々な形式のハッシュに対応するための補助ツール群が含まれています。その中でも、`dpapimk2john` は Windows の Data Protection API (DPAPI) の Master Key ファイルからハッシュを抽出し、JtR で解析可能な形式に変換するための重要なツールです 🔑。

このブログ記事では、`dpapimk2john` の使い方、背景となる DPAPI の仕組み、そして実際の解析手順について、初心者にも分かりやすく、かつ詳細に解説していきます。フォレンジック調査やペネトレーションテストに関わる方々にとって、このツールの理解は非常に役立つでしょう。

1. DPAPI とは何か? 🤔

`dpapimk2john` を理解する前に、まず Windows DPAPI (Data Protection API) について知っておく必要があります。DPAPI は、Windows 2000 以降の OS に組み込まれている、データの暗号化・復号を行うための API です。開発者は複雑な暗号化アルゴリズムの実装を意識することなく、機密データを保護できます。

多くのアプリケーションが DPAPI を利用しています。例えば、

  • Internet Explorer や Google Chrome などのウェブブラウザ (パスワード、Cookieなど)
  • Skype, Dropbox, iCloud などのアプリケーション
  • Windows Credential Manager (資格情報マネージャー) や Windows Vault
  • Wi-Fi パスワード (WEP/WPAキー)
  • EFS (Encrypting File System) 証明書
  • VPN や RDP (リモートデスクトップ接続) のパスワード

DPAPI は、ユーザーのログオンパスワードやシステム情報に基づいて「Master Key」と呼ばれる鍵を生成し、これを使って実際の暗号化・復号を行います。この Master Key こそが、`dpapimk2john` のターゲットとなるものです。

2. Master Key の仕組みと保管場所 💾

DPAPI の核心となるのが Master Key です。ユーザーがログオンすると、そのユーザーのパスワード(正確にはパスワードから派生したキー)を使って Master Key が復号され、メモリ上にロードされます。アプリケーションが DPAPI を介してデータを暗号化・復号する際には、このメモリ上の Master Key が利用されます。

Master Key 自体は暗号化された状態でファイルとしてディスクに保存されています。保管場所は通常以下の通りです。

  • ユーザー Master Key: %APPDATA%\Microsoft\Protect\{SID} (例: C:\Users\<ユーザー名>\AppData\Roaming\Microsoft\Protect\<ユーザーSID>)
  • システム Master Key: %WINDIR%\System32\Microsoft\Protect\S-1-5-18\User (通常は C:\Windows\System32\Microsoft\Protect\S-1-5-18\User)

{SID} は、ユーザーアカウントのセキュリティ識別子 (Security Identifier) です。各 Master Key ファイルは GUID (Globally Unique Identifier) 形式の名前を持っています (例: 1b4ac82b-1a40-456e-83bb-ca5e1d91024c)。これらのファイルは通常、隠し属性やシステム属性が付与されているため、エクスプローラーの標準設定では表示されません。

%APPDATA%\Microsoft\Protect\{SID} フォルダ内には、複数の Master Key ファイルが存在することがあります。現在アクティブに使用されている Master Key を示すファイルとして `Preferred` というファイルが存在します。このファイルには、現在使用中の Master Key の GUID が記録されています。

Master Key は、ユーザーのパスワード(正確には、パスワードから PBKDF2 (Password-Based Key Derivation Function 2) などのアルゴリズムで派生されたキー)によって暗号化されています。つまり、ユーザーのパスワードが分かれば、原理的には Master Key を復号できる可能性があるということです。`dpapimk2john` は、この Master Key ファイルと関連情報から、ユーザーパスワードのクラッキング試行に必要なハッシュデータを抽出する役割を担います。

ドメイン環境の場合:
Active Directory ドメイン環境では、ユーザー Master Key はユーザーパスワードで暗号化されるだけでなく、ドメインコントローラーが持つ「DPAPI ドメインバックアップキー」という特別な RSA キーペアの公開鍵でも暗号化されたコピーが作成されます。これはパスワードを忘れた場合などの回復目的で使用されます。攻撃者がドメイン管理者権限を奪取した場合、このバックアップキーを抽出・利用してドメイン内の任意のユーザーの Master Key を復号できてしまう可能性があります。Mimikatz などのツールはこのバックアップキーの抽出機能も備えています。

3. dpapimk2john の準備 🛠️

`dpapimk2john` は、John the Ripper の一部として提供される Python スクリプトです。通常、John the Ripper をインストールすると、`run` ディレクトリ (例: `/usr/share/john/run/` や John the Ripper のソースを展開したディレクトリ内の `run`) に含まれています。

使用するには、Python 環境が必要です。また、暗号化処理のために `pycryptodome` ライブラリが必要になる場合があります。もし実行時に `ImportError: No module named ‘Crypto’` のようなエラーが出る場合は、以下のコマンドでインストールしてください。

pip install --user pycryptodome

または

pip3 install --user pycryptodome

システムによっては `python3-pycryptodome` のようなパッケージ名で提供されている場合もあります。

`dpapimk2john` を実行する前に、解析対象となる以下のファイルを用意する必要があります。

  • Master Key ファイル: %APPDATA%\Microsoft\Protect\{SID}\<GUID> から取得したファイル。
  • ユーザーの SID: Master Key ファイルの所有者であるユーザーの SID。
  • (オプション) ユーザーのパスワード: もしパスワードが既知であれば、Master Key の復号を試みることができます。
  • (オフライン解析、特にドメインアカウントの場合) SYSTEM レジストリハイブ: %WINDIR%\System32\config\SYSTEM
  • (オフライン解析、特にドメインアカウントの場合) SECURITY レジストリハイブ: %WINDIR%\System32\config\SECURITY

SYSTEM および SECURITY ハイブは、特にドメイン環境のユーザー Master Key をオフラインで解析する際に、キーの復号に必要な情報 (LSA Secrets など) を取得するために必要となる場合があります。これらのハイブファイルはシステム稼働中はロックされているため、ライブシステムから取得する場合は専用のツール (FTK Imager, KAPE など) や Volume Shadow Copy を利用する必要があります。

4. dpapimk2john の使い方 ⌨️

`dpapimk2john` の基本的な使い方は、コマンドラインから必要な引数を指定して実行します。ヘルプメッセージは `-h` または `–help` オプションで確認できます。

python dpapimk2john.py -h

主なオプションは以下の通りです。

オプション 説明
-S SID, --sid SID Master Key ファイルを所有するアカウントの SID を指定します。 (例: S-1-5-21-xxxxxxxxxx-yyyyyyyyyy-zzzzzzzzzz-1001) 必須
-mk MASTERKEY, --masterkey MASTERKEY 解析対象の Master Key ファイルのパスを指定します。 (例: 1b4ac82b-1a40-456e-83bb-ca5e1d91024c) 必須 (-P と同時使用不可)
-c CONTEXT, --context CONTEXT ユーザーアカウントのコンテキストを指定します。local (ローカルアカウント) または domain (ドメインアカウント) を指定します。
-P PREFERRED, --preferred PREFERRED Preferred ファイルのパスを指定します。このファイルから現在使用中の Master Key の GUID を読み取り、標準出力に表示します。他のオプションとは併用できません。
--password PASSWORD Master Key ファイルを復号するためのパスワードを指定します。パスワードが正しい場合、Master Key の内容 (復号されたキー) を表示しようと試みます。 (通常、ハッシュ抽出目的では使用しません)
--system SYSTEM_HIVE SYSTEM レジストリハイブファイルのパスを指定します。(オフライン解析用)
--security SECURITY_HIVE SECURITY レジストリハイブファイルのパスを指定します。(オフライン解析用)

基本的な実行例 (ローカルアカウント)

ローカルユーザー (SID: `S-1-5-21-1234567890-1234567890-1234567890-1001`) の Master Key ファイル (`1b4ac82b-1a40-456e-83bb-ca5e1d91024c`) から JtR 用のハッシュを抽出する場合:

python dpapimk2john.py --sid="S-1-5-21-1234567890-1234567890-1234567890-1001" --masterkey="1b4ac82b-1a40-456e-83bb-ca5e1d91024c" --context="local"

実行結果 (ハッシュ形式)

上記のコマンドを実行すると、以下のような形式のハッシュ文字列が標準出力に表示されます (実際の値は異なります)。

$DPAPImk$2*1*S-1-5-21-1234567890-1234567890-1234567890-1001*aes256*sha512*8000*46717b1fd50eb3d12559ed19016bd2dc*288*a897faef12ebdc3bf0721a938d3de72f348f51b6e0236782f664f0d3a21b1c0bf49da1f3671014f636aad84a5d5aa9946a5a240028e3d5e35cbcca03902f035e2d21ccbbbcbdb65a8316595d3da821cc0858a48e5f34275b742be30859c57b0742984f7692f3eced795c39a58d2fc6a9e7b88031aad8020f11695981edc6c06e69863c775ee325523d74ebcbb9a3e052

この文字列が、John the Ripper で解析可能な DPAPI Master Key のハッシュです。形式は以下のようになっています (バージョン等により多少異なる場合があります):

$DPAPImk$version*context_flag*SID*crypt_algo*hash_algo*iterations*salt*key_length*encrypted_key
  • $DPAPImk$: John the Ripper が DPAPI Master Key ハッシュであることを認識するための識別子。
  • version: DPAPI のバージョン (例: 2)。
  • context_flag: コンテキストを示すフラグ (例: 1)。
  • SID: ユーザーの SID。
  • crypt_algo: Master Key の暗号化に使用されているアルゴリズム (例: `aes256`, `des3`)。
  • hash_algo: パスワードからのキー派生に使用されているハッシュアルゴリズム (例: `sha512`, `sha1`)。
  • iterations: キー派生時の反復回数 (PBKDF2 のイテレーション数)。
  • salt: キー派生に使用されたソルト (16進数文字列)。
  • key_length: 暗号化されたキーの長さ (ビット数)。
  • encrypted_key: 暗号化された Master Key 本体 (16進数文字列)。

このハッシュ文字列をファイルに保存し、John the Ripper の入力として使用します。

Preferred ファイルから GUID を取得

どの Master Key ファイルが現在使われているかを確認するには、`-P` オプションを使用します。

python dpapimk2john.py -P /path/to/Protect/SID/Preferred

出力例:

1b4ac82b-1a40-456e-83bb-ca5e1d91024c

この GUID を持つファイルが、現在アクティブな Master Key ファイルとなります。

5. John the Ripper による解析 💥

`dpapimk2john` で抽出したハッシュをファイル (例: `dpapi_hash.txt`) に保存したら、John the Ripper を使ってパスワードクラックを試みます。

基本的なコマンドは以下のようになります (辞書ファイル `password.lst` を使用する場合):

john --wordlist=password.lst dpapi_hash.txt

John the Ripper は、`dpapi_hash.txt` 内のハッシュ形式 (`$DPAPImk$…`) を自動的に認識し、適切な解析処理を開始します。ハッシュに含まれる情報 (アルゴリズム、ソルト、反復回数など) を基に、辞書ファイル内の各パスワード候補からキーを派生させ、Master Key の復号を試みます。正しいパスワードが見つかれば、そのパスワードが表示されます。

DPAPI のパスワード派生処理は、特に近年の Windows (Windows 10/11 など) では反復回数が多く設定されているため、解析には時間がかかることがあります。GPU を利用できる環境であれば、Hashcat などのツールを使用すると、より高速な解析が可能です (Hashcat も DPAPI Master Key ハッシュ (モード 15900) に対応しています)。

John the Ripper のモード

John the Ripper は様々なクラッキングモードを持っています。
  • Wordlist mode: 辞書ファイルを使って試行します (`–wordlist=FILE`)。
  • Incremental mode: 定義された文字セットに基づいて総当たり攻撃を行います (`–incremental[=MODE]`)。
  • Single crack mode: ユーザー名などの情報からパスワードを推測します (`–single`)。
  • Rules: Wordlist mode と組み合わせて、単語の変形ルール (大文字小文字変換、数字付加など) を適用します (`–rules`)。
状況に応じて適切なモードを選択してください。

6. 応用例とシナリオ 🕵️‍♂️

`dpapimk2john` は、以下のようなシナリオで非常に有効です。

  • フォレンジック調査:
    侵害されたシステムから Master Key ファイルを抽出し、`dpapimk2john` と JtR/Hashcat を使ってユーザーパスワードの特定を試みることができます。パスワードが特定できれば、そのユーザーアカウントで保護されていた他の情報 (ブラウザの保存パスワード、Wi-Fi キーなど) へのアクセスや、他のシステムへのラテラルムーブメントに使用された可能性のある認証情報の解明につながる可能性があります。
  • ペネトレーションテスト:
    システムへのアクセス権限を取得した後、ユーザープロファイルから Master Key ファイルを収集し、オフラインでパスワードクラックを試みることができます。これにより、より権限の高いアカウントのパスワードや、他の機密情報へのアクセスを試みることが可能になります。特に、弱いパスワードが設定されている場合に有効です。2022年には、APT29 (ロシアの SVR に関連するとされる攻撃グループ) が Windows の Credential Roaming 機能と組み合わせて DPAPI Master Key を悪用し、パスワードハッシュを抽出してオフラインクラックを行った事例が報告されています。
  • パスワード監査:
    組織内のシステムから Master Key を収集し、既知の弱いパスワードリストや辞書を使ってクラックを試みることで、脆弱なパスワードを使用しているユーザーを特定し、パスワードポリシーの強化につなげることができます。

Mimikatz のようなツールは、システム上で動作中にメモリ (LSASS プロセスなど) から直接 Master Key やその復号に必要な情報を取得し、DPAPI で保護されたデータをその場で復号する機能も持っていますが、`dpapimk2john` はオフラインでの解析に特化しており、取得したファイルさえあれば別の環境でじっくりと解析を進めることができる点が異なります。

7. 注意点と倫理的考慮 ⚠️

`dpapimk2john` および John the Ripper は非常に強力なツールですが、その使用には注意が必要です。

  • 法的・倫理的な制約: 他人のシステムやアカウントに対して、許可なくこれらのツールを使用することは、不正アクセス禁止法などの法律に違反する可能性があります。必ず、適切な権限と許可を得た上で、正当な目的 (セキュリティ評価、フォレンジック調査など) のためにのみ使用してください。
  • 悪用のリスク: これらのツールは、攻撃者によって悪用される可能性もあります。ツールの管理や使用状況には十分注意し、不正利用を防ぐための対策を講じることが重要です。
  • 解析時間: 強力なパスワードや、高い反復回数で保護された Master Key の解析には、非常に長い時間がかかる場合があります。
  • システムへの影響: オンラインでの解析や、システムからのファイル抽出作業は、システムのパフォーマンスに影響を与えたり、検知システムに記録されたりする可能性があります。

ツールの能力を理解し、責任ある使用を心がけることが不可欠です。

まとめ ✨

`dpapimk2john` は、Windows DPAPI Master Key ファイルから John the Ripper で解析可能なハッシュを抽出するための不可欠なツールです。DPAPI の仕組みを理解し、`dpapimk2john` の正しい使い方をマスターすることで、フォレンジック調査やペネトレーションテストにおいて、ユーザーパスワードの特定や DPAPI で保護されたデータへのアクセスを試みることが可能になります。

しかし、その強力さゆえに、常に法的・倫理的な側面を考慮し、責任ある使用を徹底する必要があります。この記事が、`dpapimk2john` の理解と適切な活用の一助となれば幸いです。😊

参考情報

コメント

タイトルとURLをコピーしました