Trong các chiến dịch Red Team kéo dài, kịch bản sau rất phổ biến: bạn đã vượt qua lớp lớp proxy, VPN, jump box compromized, cuối cùng tiếp cận được cụm NAS chứa hàng trăm file .vmdk, .vmsn, .sav — những bản snapshot chứa domain controller, admin workstation, “vương miện” của toàn bộ mạng lưới mục tiêu. Nhưng băng thông chỉ vỏn vẹn 200 KB/s, kéo một file disk 100 GB sẽ mất 6 ngày, và mỗi giờ exfiltrate là thêm một cơ hội để SOC phát hiện, cắt tunnel, đốt sạch toàn bộ đường đi.
VMkatz ra đời để giải quyết triệt để bài toán này: đọc credential ngay tại chỗ, không cần tải file về. Đây là một static binary duy nhất khoảng 3 MB, có thể drop trực tiếp lên ESXi host, node Proxmox, hoặc NAS, trỏ vào file snapshot/disk và walk away với toàn bộ credentials trong tay.
🎯 VMkatz giải quyết vấn đề gì?
Khi bạn đứng trước hàng loạt file虚拟机—— như .vmsn, .vmdk, .sav, .vmem — thay vì phải exfiltrate hàng chục đến hàng trăm gigabyte data qua kênh băng thông hẹp, VMkatz cho phép:
- Trích xuất trực tiếp các bí mật Windows (NTLM hash, DPAPI master key, Kerberos ticket, cached domain credential, LSA secret, NTDS.dit, BitLocker key) từ ngay trong memory snapshot hoặc virtual disk.
- Hoạt động hoàn toàn offline, không cần khởi động VM, không cần network, không cần agent bên trong guest OS.
- Một binary duy nhất ~3 MB, cross-compiled dạng static, drop & run trên mọi môi trường hypervisor.

📦 Khả năng trích xuất chi tiết
1. Trích xuất từ Memory Snapshot (LSASS)
VMkatz triển khai đầy đủ 9 SSP credential provider mà mimikatz hỗ trợ. Mỗi provider khai thác một loại credential khác nhau:
| Provider | Data trích xuất | Ghi chú |
|---|---|---|
MSV1_0 |
NT/LM hashes, SHA1 | Physical-scan fallback cho các entry bị paged out |
WDigest |
Plaintext passwords | Linked-list walk + fallback qua .data section |
Kerberos |
AES/RC4/DES keys, tickets (.kirbi/.ccache) | AVL tree walk + ticket carving cho các session đã freed |
TsPkg |
Plaintext passwords | Chỉ áp dụng cho RDP sessions |
DPAPI |
Master key cache (GUID + decrypted key) | SHA1 masterkey cho offline DPAPI decrypt |
SSP |
Plaintext credentials | SspCredentialList trong msv1_0.dll |
LiveSSP |
Plaintext credentials | Yêu cầu livessp.dll (hiếm sau Windows 8) |
Credman |
Stored credentials | Hash-table + single-list enumeration |
CloudAP |
Azure AD tokens | Thường trống nếu logon chỉ local |
Ngoài 9 provider trên, VMkatz còn trích xuất BitLocker FVEK (Full Volume Encryption Key) trực tiếp từ memory thông qua pool tag scan cho FVEc/Cngb.
2. Trích xuất từ Virtual Disk (offline)
Khi chạy ở chế độ disk, VMkatz phân tích trực tiếp các virtual disk format mà không cần mount hay khởi động VM:
- SAM hashes: NT/LM hash của tài khoản local, kèm trạng thái (disabled, blank password).
- LSA secrets: Mật khẩu service account, auto-logon credentials, machine account keys.
- Cached domain credentials: DCC2 hashes (hash của N lần domain logon gần nhất).
- DPAPI master keys: Dumps ra hash sẵn sàng cho hashcat (
$DPAPImk$— mode 15300/15310/15900/15910). - NTDS.dit: Trích xuất toàn bộ Active Directory hash từ domain controller disk, sử dụng native ESE parser riêng (không phụ thuộc công cụ ngoài).
- BitLocker decryption: Giải mã disk trong suốt bằng FVEK trích xuất từ memory.
🗂️ Định dạng đầu vào được hỗ trợ
VMkatz hỗ trợ một dải cực kỳ rộng các format snapshot và disk:
| Format | Extensions | Nguồn | Trạng thái |
|---|---|---|---|
| VMware snapshots | .vmsn + .vmem |
Workstation, ESXi | ✅ Tested |
| VMware embedded snapshots | .vmsn (không .vmem) |
ESXi suspend | ✅ Tested |
| VirtualBox saved states | .sav |
VirtualBox | ✅ Tested |
| QEMU/KVM savevm states | auto-detected | Proxmox, QEMU | ✅ Tested |
| QEMU/KVM ELF core dumps | .elf |
virsh dump | ✅ Tested |
| Hyper-V saved states | .vmrs |
Hyper-V 2016+ | ⚠️ Untested |
| VMware virtual disks | .vmdk (sparse + flat) |
Workstation, ESXi | ✅ Tested |
| VirtualBox virtual disks | .vdi |
VirtualBox | ✅ Tested |
| QEMU/KVM virtual disks | .qcow2 |
QEMU, Proxmox | ✅ Tested |
| Hyper-V virtual disks | .vhdx, .vhd |
Hyper-V | ✅ Tested |
| VMFS-5/6 raw SCSI devices | /dev/disks/... |
ESXi (bypass file lock) | ✅ Tested |
| LVM block devices | /dev/... |
Proxmox LVM-thin | ✅ Tested |
| Raw registry hives | SAM, SYSTEM, SECURITY | reg save | ✅ Tested |
| Raw NTDS.dit | ntds.dit + SYSTEM | Domain controller | ✅ Tested |
| LSASS minidump | .dmp |
procdump, Task Manager | ✅ Tested |
| VM directories | bất kỳ folder nào | Auto-discover tất cả file | ✅ Tested |
Hệ điều hành mục tiêu: Windows Server 2003 → Windows Server 2025 / Windows 11 24H2 (hỗ trợ cả x86 PAE lẫn x64).
🚀 Cách sử dụng (Quick Start)
Trích xuất credential từ VMware snapshot
# Cơ bản: chỉ định file .vmsn
./vmkatz snapshot.vmsn
Kết hợp snapshot + disk để resolve pagefile (paged-out credentials)
# Khi LSASS memory bị page out, cần thêm disk để phân giải
./vmkatz --disk disk.vmdk snapshot.vmsn
Đây là điểm cực kỳ quan trọng: khi Windows page out một phần LSASS memory ra pagefile.sys (nằm trên disk), việc chỉ đọc snapshot memory sẽ thiếu data. VMkatz cho phép kết hợp cả hai nguồn để resolve đầy đủ, trong đó MSV1_0 provider có cơ chế physical-scan fallback đặc biệt cho các entry bị paged.
Trích xuất SAM/LSA/DCC2 từ virtual disk
./vmkatz disk.vmdk
Trích xuất Active Directory hashes từ Domain Controller disk
./vmkatz --ntds dc-disk.qcow2
VMkatz sử dụng native ESE parser viết sẵn (không cần công cụ bên ngoài) để phân tích trực tiếp NTDS.dit trên disk image, extract toàn bộ domain password hash.
Auto-discover: trỏ vào cả thư mục VM
./vmkatz /path/to/vm-directory/
VMkatz sẽ tự động quét thư mục, nhận diện tất cả các file snapshot/disk/relevant và extract mọi thứ tìm được.
Trích xuất từ raw registry hives
./vmkatz SAM SYSTEM SECURITY
Trường hợp bạn đã có sẵn các hive dump từ trước (qua reg save hoặc copy offline), VMkatz phân tích trực tiếp mà không cần file disk đầy đủ.
Xuất output dạng hashcat-ready
./vmkatz --format hashcat snapshot.vmsn
Export Kerberos tickets
# Xuất dạng .kirbi (mỗi ticket một file)
./vmkatz --kirbi snapshot.vmsn
# Xuất dạng .ccache (gộp tất cả vào 1 file)
./vmkatz --ccache snapshot.vmsn
VMkatz không chỉ extract Kerberos key mà còn carve được orphaned tickets từ freed LSASS memory (ticket carving approach lấy cảm hứng từ volatility-kerberos của Airbus CERT), cho phép khôi phục ticket từ các session đã logoff.
Export BitLocker FVEK
./vmkatz --bitlocker-fvek /tmp/keys snapshot.vmsn
FVEK được dump ra định dạng sẵn sàng cho dislocker, cho phép giải mã BitLocker volume offline.
Quét đệ quy toàn bộ VMs
./vmkatz -r /vmfs/volumes/datastore1/
Tính năng này đặc biệt mạnh khi kết hợp trên ESXi host: đệ quy toàn bộ datastore, auto-discover mọi snapshot/disk, extract credential từ tất cả VMs có thể tiếp cận.
Parse LSASS minidump
./vmkatz lsass.dmp
VMkatz cũng hoạt động như một parser LSASS minidump thay thế cho mimikatz/pypykatz, hữu ích khi bạn đã có dump file từ procdump hoặc Task Manager.
📊 Định dạng Output
VMkatz hỗ trợ 5 định dạng output:
| Format | Flag | Mô tả |
|---|---|---|
| text | --format text (mặc định) |
Full credential dump kèm session metadata chi tiết |
| brief | --format brief |
Tóm tắt 1 dòng per credential |
| ntlm | --format ntlm |
Định dạng pwdump: DOMAIN\user:::hash::: |
| hashcat | --format hashcat |
Raw hash: mode 1000 (NTLM), 2100 (DCC2), 15300/15900 (DPAPI) |
| csv | --format csv |
Machine-readable, tất cả fields, dễ dàng parse/script |
Việc hỗ trợ sẵn hashcat-ready format là một điểm cộng rất lớn: bạn có pipe trực tiếp output vào hashcat hoặc feed vào pipeline cracking mà không cần transform thủ công.
🏗️ triển khai trên ESXi
Build từ source (cross-compile musl static)
cargo build --release --target x86_64-unknown-linux-musl
Kết quả là một binary tĩnh, không có dependency, chạy được trên mọi Linux kể cả ESXi minimal environment.
Upload & chạy
# Upload lên ESXi
scp target/x86_64-unknown-linux-musl/release/vmkatz root@esxi:/tmp/
# Chạy trực tiếp
/tmp/vmkatz /vmfs/volumes/datastore1/MyVM/MyVM-Snapshot1.vmsn
Bypass VIB protection (execInstalledOnly)
Khi ESXi bật execInstalledOnly, chỉ cho phép chạy binary đã ký qua VIB package. VMkatz cung cấp Python loader để bypass mà không cần tắt setting:
# Upload cả loader và binary
scp tools/vmkatz_loader.py target/x86_64-unknown-linux-musl/release/vmkatz root@esxi:/tmp/
# Chạy qua loader
python /tmp/vmkatz_loader.py /tmp/vmkatz /vmfs/volumes/datastore1/MyVM/snapshot.vmsn
Chi tiết kỹ thuật về VIB bypass, VMFS raw device access và auto-discovery được documented trong docs/esxi.md của repository.
VMFS raw device access (bypass file lock)
ESXi sử dụng file lock mechanism trên VMFS datastore, ngăn việc truy cập đồng thời vào disk của VM đang chạy. VMkatz bypass điều này bằng cách truy cập trực tiếp raw SCSI device (/dev/disks/...), sử dụng VMFS-5/6 raw parser riêng (lấy cảm hứng từ dissect.vmfs của Fox-IT và vmfs-tools của Mike Hommey):
# Đọc trực tiếp SCSI device, bypass VMFS lock
./vmkatz /dev/disks/naa.xxxxxxx
Tính năng này cho phép extract credential từ VM đang chạy mà không cần suspend hay tạo snapshot.
🔧 Build Features (modular compile)
VMkatz được thiết kế module hóa, mỗi tính năng có thể enable/disable tại compile time:
| Feature | Mô tả | Mặc định |
|---|---|---|
vmware |
Hỗ trợ VMware .vmsn/.vmem snapshot | ✅ Bật |
vbox |
Hỗ trợ VirtualBox .sav saved-state | ✅ Bật |
qemu |
QEMU/KVM ELF core dump + Proxmox savevm | ✅ Bật |
hyperv |
Hyper-V .vmrs/.bin/.raw dump | ✅ Bật |
sam |
Disk extraction (SAM/LSA/DCC2) + disk format handlers | ✅ Bật |
ntds.dit |
NTDS.dit AD extraction (yêu cầu sam) |
✅ Bật |
carve |
Degraded extraction từ partial/truncated memory | ✅ Bật |
dump |
Process memory dump dạng minidump | ✅ Bật |
vmfs |
VMFS-5/6 raw parser cho ESXi SCSI devices (yêu cầu sam) |
✅ Bật |
Ví dụ build tối giản
# Build đầy đủ (mặc định)
cargo build --release
# Build chỉ hỗ trợ VMware
cargo build --release --no-default-features --features vmware
# Build chỉ hỗ trợ disk extraction (SAM/LSA/DCC2 + NTDS.dit)
cargo build --release --no-default-features --features "sam ntds.dit"
Tính năng carve đặc biệt thú vị: nó cho phép extract credential từ partial hoặc truncated memory dump, tức là ngay cả khi bạn chỉ có một fragment của snapshot (ví dụ bị corrupt, bị truncated khi copy), VMkatz vẫn cố gắng carve ra những gì có thể.
🏛️ Kiến trúc & module layout
VMkatz được viết bằng Rust, với kiến trúc module hóa rõ ràng:
- Snapshot parser layer: Xử lý các format snapshot khác nhau (VMware
.vmsn, VirtualBox.sav, QEMU savevm, ELF core dump, Hyper-V.vmrs), chuyển đổi thành flat memory layout thống nhất. - Disk parser layer: Hỗ trợ VMDK (sparse + flat), VDI, QCOW2, VHDX/VHD, VMFS raw device, LVM block device — tự động parse cấu trúc filesystem NTFS, đọc registry hive.
- Credential extraction engine: Core engine parse LSASS structures (EPROCESS → PEB → module list → credential providers), với kiến thức về cấu trúc Windows kernel (field offset) từ XP xuyên suốt đến Win11 24H2, được verify qua Vergilius Project.
- ESE parser: Native parser cho NTDS.dit, không phụ thuộc thư viện ngoài — trực tiếp phân tích datatable, link table, extract password hash từ domain controller database.
- Output formatter: Layer chuyển đổi kết quả thành 5 format output (text/brief/ntlm/hashcat/csv).
🔬 Phân tích sâu về kỹ thuật trích xuất credential
Phương pháp parse LSASS memory
VMkatz áp dụng nhiều kỹ thuật phân tích khác nhau cho từng SSP provider:
-
MSV1_0: Duyệt credential linked list trong LSASS, với physical-scan fallback khi entry bị page out — quét physical memory để tìm các pattern chứa credential structure.
-
WDigest: Kết hợp linked-list walk (duyệt danh sách liên kết credential) với .data section fallback (quét trực tiếp data segment của wdigest.dll) để tối đa rate recovery.
-
Kerberos: Sử dụng AVL tree walk (cây nhị phân tự cân bằng) để duyệt ticket cache, cộng thêm ticket carving cho freed session — quét memory để tìm.ticket structure đã bị deallocate nhưng chưa bị overwrite.
-
DPAPI: Parse master key cache trong LSASS, extract GUID + decrypted key, cho phép offline decrypt DPAPI blob.
-
Credman: Enumerate qua hash-table + single-list structure trong Credential Manager.
Phương pháp parse virtual disk (offline registry)
Khi chạy trên virtual disk, VMkatz:
- Parse disk format (VMDK/VDI/QCOW2/VHDX) → xác định NTFS partitions.
- Parse NTFS filesystem → locate các registry hive files (
SAM,SYSTEM,SECURITY). - Parse registry hive structure → decrypt (sử dụng boot key từ
SYSTEMhive). - Extract: SAM hashes (V值 structure), LSA secrets (PolSecretEncryptionKey + decrypt), cached domain credentials (DCC2), DPAPI master keys.
- Với NTDS.dit: Parse ESE database structure → locate password hash column → decrypt bằng system key.
BitLocker FVEK extraction
- Từ memory: Quét pool tag
FVEcvàCngbtrong non-paged pool, locate FVEK (Full Volume Encryption Key). - Ứng dụng: FVEK export sang format sẵn sàng cho dislocker, cho phép decrypt BitLocker volume hoàn toàn offline mà không cần TPM, PIN, hay recovery key.
📚 Acknowledgements & nguồn tham khảo
VMkatz dựa trên nghiên cứu và công trình của nhiều dự án mở, trong đó nổi bật:
- mimikatz (Benjamin Delpy / @gentilkiwi) — reference implementation cho LSASS internals và Windows credential decryption.
- pypykatz (Tamás Jós / @skelsec) — reimplement mimikatz bằng Python, dùng cross-reference cho SAM/LSA/DCC2 extraction.
- Impacket (Fortra / @agsolino) — reference implementation cho NTDS.dit extraction và pwdump format.
- Vergilius Project — documentation về Windows kernel structures, dùng verify EPROCESS field offsets từ XP đến Win11 24H2.
- dissect.vmfs (Fox-IT / NCC Group) — Python VMFS parser, reference cho VMFS on-disk structures.
- vmfs-tools (Mike Hommey) — open-source VMFS3/5 implementation.
- volatility-kerberos (Sylvain Peyrefitte / @citronneur, Airbus CERT) — Volatility 3 Kerberos plugin, truyền cảm hứng cho ticket carving approach.
📝 Tóm tắt
VMkatz là một công cụ độc đáo và cực kỳ hiệu quả cho Red Team khi tiếp cận môi trường virtual hóa. Thay vì phải exfiltrate hàng trăm gigabyte disk image qua kênh băng thông hạn chế, VMkatz cho phép:
✅ Đọc credential tại chỗ — drop 3 MB binary, chạy, lấy kết quả.
✅ Hỗ trợ tất cả hypervisor phổ biến — VMware, VirtualBox, QEMU/KVM/Proxmox, Hyper-V.
✅ Full mimikatz capability từ snapshot — 9 SSP provider, không cần agent trong guest.
✅ Offline disk extraction — SAM, LSA, DCC2, DPAPI, NTDS.dit, BitLocker.
✅ Hashcat-ready output — pipe trực tiếp, không cần transform.
✅ Chạy trên ESXi — cả khi VIB protection bật, cả khi VM đang chạy (raw SCSI access).
✅ Modular build — chỉ compile những gì cần, tối giảm footprint.
Công cụ được viết hoàn toàn bằng Rust, static binary, zero runtime dependency — một trong những lợi thế sống còn khi triển khai trên môi trường minimal như ESXi hypervisor.
Source link: VMkatz – nikaiw






