Home / Sharenewshort / VMkatz – Công cụ trích xuất bí mật Windows trực tiếp từ file máy ảo, không cần exfiltrate hàng trăm GB

VMkatz – Công cụ trích xuất bí mật Windows trực tiếp từ file máy ảo, không cần exfiltrate hàng trăm GB

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.

VMkatz example output


📦 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:

  1. 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.

  2. 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.

  3. 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.

  4. DPAPI: Parse master key cache trong LSASS, extract GUID + decrypted key, cho phép offline decrypt DPAPI blob.

  5. 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:

  1. Parse disk format (VMDK/VDI/QCOW2/VHDX) → xác định NTFS partitions.
  2. Parse NTFS filesystem → locate các registry hive files (SAM, SYSTEM, SECURITY).
  3. Parse registry hive structure → decrypt (sử dụng boot key từ SYSTEM hive).
  4. Extract: SAM hashes (V值 structure), LSA secrets (PolSecretEncryptionKey + decrypt), cached domain credentials (DCC2), DPAPI master keys.
  5. 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 FVEcCngb trong 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

Leave a Reply

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *