1. 项目定位与用途
VMkatz 是一个红队渗透测试命令行工具,用于从虚拟机内存快照(.vmsn、.sav、.vmrs)和虚拟磁盘文件(.vmdk、.qcow2、.vhdx 等)中直接提取 Windows 凭证。它设计为静态二进制,可在 ESXi 主机、Proxmox 节点、NAS 等存储节点本地运行,无需在目标 Windows 系统内执行。主要输出包括 NTLM/LM 哈希、Kerberos 票证、DPAPI 主密钥、BitLocker 解密密钥、SAM 哈希、LSA 秘密以及完整的 NTDS.dit 账户哈希,适用于后期渗透阶段的凭证获取与横向移动。
2. 解决的问题
在红队 engagement 中,当攻击者已控制虚拟机存储环境但网络带宽极低时,传统方法需 exfiltrate 完整磁盘镜像(可能数百 GB),耗时数天且易被 SOC 检测。VMkatz 直接在文件所在位置提取凭证,将数据量从 GB 级降至 KB 级,大幅缩短操作时间并降低暴露风险。同时,它统一了跨虚拟化平台(VMware、VirtualBox、QEMU、Hyper-V)的凭证提取流程,避免为不同格式使用不同工具。
3. 适用场景
1. 从 ESXi 主机上的 .vmsn 内存快照提取 LSASS 凭证;2. 从 NAS 或存储上的虚拟磁盘提取 SAM 哈希、LSA 秘密、NTDS.dit 数据;3. 从 Proxmox/QEMU 的保存状态或 ELF core 转储提取内存凭证;4. 从 Hyper-V 的 .vmrs 内存状态或 .vhdx 磁盘提取凭证;5. 分析 LSASS minidump(.dmp)文件;6. 从 BitLocker 加密磁盘提取 FVEK 并透明解密。所有场景均无需网络传输完整磁盘镜像。
4. 安装方式
使用 Cargo 编译:cargo build --release(可指定目标平台如 x86_64-unknown-linux-musl 用于 ESXi);或从 GitHub Releases 下载预编译静态二进制文件(约 3 MB)。在 ESXi 8.0+ 上需首次执行 esxcli system settings advanced set -o /User/execInstalledOnly -i 0 以允许非 VIB 二进制运行;若保持默认设置,可使用 tools/vmkatz_loader.py 通过匿名内存映射绕过限制。仓库中未明确给出 Windows 或 macOS 的特定安装步骤,但 Rust 工具链可跨平台编译。
5. 使用方式
直接运行 vmkatz 后跟虚拟机文件、目录或设备路径,例如:vmkatz /vmfs/volumes/datastore1/MyVM/MyVM-Snapshot1.vmsn。工具自动检测输入格式(内存快照或虚拟磁盘)并提取所有支持的凭证类型。可通过命令行选项控制提取范围,如 --ntds 仅提取 NTDS.dit,--sam 仅提取 SAM/LSA。输出包含 NTLM/LM 哈希(可用于 Pass-the-Hash)、Kerberos 票证(.kirbi/.ccache 文件可直接使用)、DPAPI 主密钥(Hashcat 模式 15300/15310/15900/15910)等。目录自动发现功能可递归扫描 VM 文件夹中的所有相关文件。
6. 实现特点
采用分层架构,通过 PhysicalMemory trait 抽象 VMware/VBox/QEMU/Hyper-V 格式,暴露连续物理地址空间。进程发现基于 EPROCESS 结构签名(ImageFileName 偏移),支持 18 个 Windows 版本偏移表(WinXP SP3 至 Win11 24H2)。页表遍历支持 4 级 x64 和 3 级 PAE,包含 TLB 缓存、大页处理和 pagefile 故障解析。LSASS 提取覆盖 9 种 SSP 凭证提供程序,使用模式匹配解析加密密钥并自动选择解密算法(3DES-CBC、AES-CBC、AES-CFB、DES-X-CBC、RC4)。NTDS.dit 采用原生 ESE 解析器,支持 8KB 和 32KB 页面大小及多种哈希格式。在 ESXi 上可通过 VMFS-5/6 解析器直接读取原始 SCSI 设备,绕过文件锁。