vSphere集群取证
当我们成功仿真出 vSphere 集群(vCenter + 若干 ESXi 主机)的时候,往往需要先恢复网络与时间同步,让集群重新运转起来,再从中提取关键信息。
vSphere 基础知识
什么是 vSphere
VMware vSphere 是商业虚拟化平台,由两类核心组件构成:
- ESXi —— 直接安装在物理服务器上的裸机 Hypervisor(Type-1),每台 ESXi 是集群中的一个”主机”(Host),上面运行虚拟机。ESXi 自带命令行(ESXi Shell)与 Host Client 网页(
https://<ESXi_IP>/ui),可独立管理。 - vCenter Server(VCSA) —— 基于 Photon OS 的虚拟化管理节点(本身是一台 Linux 虚拟机),统一管理多台 ESXi,提供集群功能:HA(高可用)、DRS(资源调度)、vMotion(在线迁移)、vSAN(超融合存储)。Web 管理入口为
https://<vCenter_IP>/ui。
集群逻辑是:vCenter 通过每台 ESXi 上的 vpxa 代理下发指令;ESXi 本地的管理进程是 hostd;HA 集群成员间通过 fdm 代理通信。取证时两者配置与日志位置不同,需分别收集。
取证要点速览
| 类别 | 关键位置 |
|---|---|
| vCenter 管理面板 | https://<vCenter_IP>/ui(administrator@vsphere.local 登录) |
| VCSA 管理后端(VAMI) | https://<vCenter_IP>:5480(VCSA 系统 root 登录) |
| ESXi Host Client | https://<ESXi_IP>/ui(root 登录) |
| ESXi 主配置 | /etc/vmware/esx.conf(全部系统设置汇总) |
| ESXi VM 清单 | /etc/vmware/hostd/vmInventory.xml |
| ESXi 本地账户 | /etc/passwd、/etc/shadow |
| 虚拟机目录 | /vmfs/volumes/<datastore>/<VM名>/(vmx/vmdk/vmware.log 等) |
| VM 配置文件 | 虚拟机目录下的 <VM名>.vmx |
| VMDK 快照链 | <盘名>.vmdk → <盘名>-000001.vmdk → … |
| ESXi 日志 | /var/log/(vmkernel.log/hostd.log/vpxa.log/shell.log/auth.log) |
| ESXi 持久日志 | /scratch/log/(配置 scratch 分区后日志落盘处) |
| VCSA 主日志 | /var/log/vmware/vpxd/vpxd.log |
| HA 代理日志 | /var/log/fdm.log(ESXi 上) |
| vSAN 信息 | esxcli vsan cluster get 等 |
| NTP 配置 | /etc/ntp.conf(ESXi),PTP 为 /etc/ptp.conf |
仿真环境网络配置
恢复 ESXi 网络
仿真出的 ESXi 若网卡不识别或 IP 丢失,优先通过 DCUI(直连控制台,按 F2 进入)用 root 登录后选 Configure Management Network 恢复管理网配置。命令行方式:
esxcli network nic list # 确认物理网卡 vmnic0 是否识别/Link up
esxcli network vswitch standard list # 查看虚拟交换机与上行链路
esxcli network ip interface ipv4 get # 查看管理接口 vmk0 当前地址
# 手动指定管理 IP(仿真恢复时最常用)
esxcli network ip interface ipv4 set -i vmk0 -t static -I 192.168.1.10 -N 255.255.255.0
esxcli network ip route ipv4 list # 确认默认网关
esxcli network ip dns server list # 确认 DNS
网卡绑到交换机(上行链路缺失时):
esxcli network vswitch standard uplink add --uplink-name=vmnic0 --vswitch-name=vSwitch0
开启 ESXi Shell 与 SSH
DCUI 的 Troubleshooting Mode Options 里可开启;命令行方式:
vim-cmd hostsvc/enable_ssh # 允许 SSH 服务
vim-cmd hostsvc/start_ssh # 立即启动
vim-cmd hostsvc/enable_esx_shell # 本地 Shell 同理
vim-cmd hostsvc/start_esx_shell
恢复 vCenter(VCSA)网络
VCSA 是一台 Photon OS 虚拟机,仿真后若起在 Workstation/ESXi 里,直接用控制台改网络:
ifconfig eth0 # 确认网卡
/opt/vmware/share/vami/vami_config_net # VCSA 官方网络配置向导(DHCP/静态均可)
注意:
- vCenter 服务启动依赖 FQDN 可解析,改 IP 后务必检查
cat /etc/hosts、hostname -f与 DNS,否则 vpxd 会一直起不来 - 检查服务状态:
service-control --status --all,全部启动:service-control --start --all
访问入口
https://<ESXi_IP>/ui # Host Client,管理单台 ESXi
https://<vCenter_IP>/ui # vSphere Client,管理整个集群
https://<vCenter_IP>:5480 # VAMI,管理 VCSA 自身(备份/网络/时间)
时钟偏差
有时候仿真出来的几台 ESXi 与 vCenter 时钟有偏差,导致 vpxa 心跳超时、HA 异常、证书校验失败,需要统一时间。
ESXi 上操作:
#1. 停掉 NTP/PTP 自动同步(防止与手动设置打架)
/etc/init.d/ntpd stop
/etc/init.d/ptpd stop # 7.0 及以上可能启用 PTP
#2. 手动统一时间(在每台主机上执行,时间保持一致)
esxcli system time set -y 2024 -M 1 -d 1 -H 12 -m 0 -s 0
esxcli hardware clock set -y 2024 -M 1 -d 1 -H 12 -m 0 -s 0 # 同步写入硬件时钟
#3. 逐台确认时间一致
esxcli system time get
esxcli hardware clock get
#4. 恢复时间源并重启管理代理
esxcli system ntp set -s <NTP服务器IP> --enabled=true # 写入 /etc/ntp.conf
/etc/init.d/hostd restart
/etc/init.d/vpxa restart
VCSA 上操作(进入其 Shell):
shell # appliancesh 下输入 shell 进入 bash
timedatectl # 查看时区与同步状态
timedatectl set-time "2024-01-01 12:00:00"
VCSA 的 NTP 服务器在 VAMI(https://<vCenter_IP>:5480)的 Time 页面配置,ESXi 配置文件为 /etc/ntp.conf;vSphere 7.0+ 支持 PTP 精确授时,配置在 /etc/ptp.conf(esxcli system ptp get 查看)。
系统取证
基本系统信息
主机版本号
vmware -v # ESXi 版本与 Build 号(最重要)
vmware -l # 完整产品名
esxcli system version get # 版本、Build、内核
uname -a # VMkernel 版本
VCSA 版本:
cat /etc/vmware/appliance-manifest.xml # VCSA 版本与 Build
主机硬件与名称
esxcli hardware platform get # 厂商、型号、序列号
esxcli system hostname get # 主机名与 FQDN
hostname
cat /etc/hosts # 集群各节点 IP/主机名映射常记录在此
主配置汇总
cat /etc/vmware/esx.conf # ESXi 全部系统设置(网络、存储、服务、锁屏模式等)
时间服务器地址
cat /etc/ntp.conf # server 行即时间源
esxcli system ntp get # NTP 服务器与运行状态
esxcli system ptp get # PTP 状态(7.0+)
timedatectl # VCSA 上的时区与时间同步状态
集群信息
集群层面的信息以 vCenter 为准(HA/DRS 配置、资源池、主机清单都在 vpxd 数据库中),vCenter 不可用时在 ESXi 上收集残留证据。
在线收集(vCenter 可登录)
vSphere Client 界面直接查看集群清单,或在 ESXi 上用 vim-cmd:
vim-cmd hostsvc/hostsummary # 本机在 vCenter 中的管理状态、所属集群线索
vim-cmd vmsvc/getallvms # 本机全部虚拟机
HA(高可用)取证
HA 在每台 ESXi 上由 fdm 代理实现:
cat /etc/opt/vmware/fdm/fdm.cfg # HA 代理配置(集群 ID、master 地址等)
cat /var/log/fdm.log # 集群成员变动、故障切换记录
vSAN 集群
esxcli vsan cluster get # vSAN 集群 UUID、节点数、本机角色
esxcli vsan network list # vSAN 流量走的 vmk 接口
esxcli vsan storage list # vSAN 磁盘组与磁盘
vCenter 侧配置
cat /etc/vmware-vpx/vpxd.cfg # vCenter 主配置(数据库连接、端口等)
ls /storage/db/vmware-vpostgres/ # 内嵌 vPostgres 数据目录(清单、集群、权限全在库里)
虚拟机取证
VM 列表与配置
vim-cmd vmsvc/getallvms # VMID、名称、vmx 路径(所在 datastore)
vim-cmd vmsvc/power.getstate <vmid>
vim-cmd vmsvc/get.config <vmid> # 完整配置(CPU/内存/磁盘/网卡/MAC)
cat /etc/vmware/hostd/vmInventory.xml # hostd 登记的虚拟机清单
每台虚拟机的文件都在 /vmfs/volumes/<datastore>/<VM名>/ 下,关键文件:
<VM名>.vmx—— 虚拟机硬件配置(磁盘挂载、网卡 MAC、固件 BIOS/EFI)<盘名>.vmdk—— 磁盘描述文件(文本,含大小、几何、CID 链)<盘名>-flat.vmdk—— 实际数据盘<VM名>.vmsd—— 快照清单vmware.log、vmware-*.log.gz—— 虚拟机运行日志(开机/快照/vMotion/Tools 事件).nvram—— EFI 变量(开了安全启动/BitLocker 的 Windows 必须一并带走)
仿真后重新注册虚拟机
仿真环境中 VM 未出现在清单里时,直接注册 vmx 即可恢复:
vim-cmd solo/registervm /vmfs/volumes/<datastore>/<VM名>/<VM名>.vmx
导出虚拟机
有时候需要导出 ESXi 内部的虚拟机进行进一步操作(重置密码、静态取证扫描等),这时候就需要导出虚拟机。
前置:保证镜像一致性
直接拷贝运行中 VM 的磁盘会得到不一致(损坏)的文件系统,先停机:
vim-cmd vmsvc/power.shutdown <vmid> # 优雅关机(需 VMware Tools,推荐)
vim-cmd vmsvc/power.off <vmid> # 强制断电
vim-cmd vmsvc/power.suspend <vmid> # 挂起(保留内存状态 .vmss)
不能停机时可先打快照锁定磁盘(vim-cmd vmsvc/snapshot.create <vmid> <名称>),但注意打快照后写入转入新的 delta 盘,基盘才是取证目标。
方法一:ovftool 导出 OVF/OVA(推荐)
VMware 官方导出工具,产物自带配置清单,适合跨平台仿真还原:
# 在取证机上执行(VM 须关机,需 ESXi root 凭据)
ovftool vi://root:<密码>@<ESXi_IP>/<VM名> /导出目录/
# 打包成单文件 OVA
ovftool vi://root:<密码>@<ESXi_IP>/<VM名> /导出目录/<VM名>.ova
导出过程中 ovftool 会自动合并快照链,产物是扁平化的完整磁盘 + .ovf(XML 硬件描述)+ .mf(SHA 校验清单)。
方法二:直接拷贝 VMDK 文件
从 datastore 直接拷贝(SCP/rsync,或开 SSH 后从取证机拉取):
scp -r root@<ESXi_IP>:/vmfs/volumes/<datastore>/<VM名>/ /导出目录/<VM名>/
注意:VMDK 快照链必须整条带走。打了快照后磁盘变为:
<盘名>.vmdk(基盘描述)+<盘名>-flat.vmdk(基盘数据)<盘名>-000001.vmdk(快照 1 描述)+<盘名>-000001-delta.vmdk/-000001-sesparse.vmdk(快照 1 增量数据)<盘名>-000002.vmdk+ …(快照 2,依此类推)
用描述文件里的 parentFileNameHint 和 CID/parentCID 字段确认链的完整性与顺序;只拷 flat.vmdk 会丢失快照之后的全部数据。当前活动盘是最末端的 -00000N.vmdk,cat <VM名>.vmsd 可看到快照树。
方法三:vmkfstools 克隆合并
在 ESXi 上直接把整条快照链合并导出为一个扁平 VMDK:
vmkfstools -i "/vmfs/volumes/<ds>/<VM名>/<盘名>.vmdk" "/vmfs/volumes/<ds>/export/<盘名>-clone.vmdk"
# -d thin 可转薄置备减小体积
格式转换
取证工具和仿真软件对格式要求不同,在取证机上用 qemu-img 转换:
qemu-img info <盘名>.vmdk # 确认格式与快照链(backing file)
qemu-img convert -f vmdk -O raw <盘名>.vmdk <VM名>.raw # 合并快照链转 raw(FTK/挂载通用)
qemu-img convert -f vmdk -O qcow2 <盘名>.vmdk <VM名>.qcow2 # 转 qcow2(导入 KVM/PVE)
ESXi 的 VMDK 是 VMFS 变体,qemu-img 对 -flat.vmdk 及 VMFS 快照链支持良好;转换前确保整条链文件齐全,否则报 Could not open backing file。
带走配置与校验
# 硬件配置(MAC、磁盘顺序、EFI)对仿真还原很重要,连同 vmx 一起归档
# .nvram(EFI 变量)与 .vmsn/.vmss(快照内存/挂起状态)按需带走
# 完整性校验(取证流程必须)
sha256sum <盘名>-flat.vmdk | tee <VM名>.sha256
导出后的常见操作
# 挂载分析(Linux 镜像)
modprobe nbd max_part=8
qemu-nbd --connect=/dev/nbd0 <VM名>.raw
mount /dev/nbd0p1 /mnt
# libguestfs 工具集(自动识别分区/系统)
guestmount -a <VM名>.raw -i --ro /mnt
virt-cat -a <VM名>.raw /etc/shadow
# Windows 镜像重置密码(挂载后操作 SAM 蜂巢)
chntpw -i /mnt/Windows/System32/config/SAM
快照
vim-cmd vmsvc/snapshot.get <vmid> # 快照树(名称、时间、描述、父子关系)
cat /vmfs/volumes/<ds>/<VM名>/<VM名>.vmsd # 快照清单文件
快照除增量盘外还包含 .vmsn(当时内存与设备状态),.vmsn 可用于内存取证分析。删除/合并快照:vim-cmd vmsvc/snapshot.removeall <vmid>(取证前不要执行,会合并掉增量盘证据)。
虚拟机日志
cat /vmfs/volumes/<ds>/<VM名>/vmware.log # 当前日志:开关机、快照、Tools、vMotion 事件
zcat /vmfs/volumes/<ds>/<VM名>/vmware-*.log.gz # 轮转历史日志
存储取证
Datastore 列表
esxcli storage filesystem list # 全部 datastore:类型(VMFS/NFS)、挂载点、容量
df -h # /vmfs/volumes/ 下的挂载情况
esxcli storage vmfs extent list # VMFS 卷对应的物理设备分区
ls -l /vmfs/volumes/ # 名称与 UUID 的符号链接对应关系
- 本地 VMFS datastore:
/vmfs/volumes/<名称>/→/vmfs/volumes/<UUID>/ - NFS/iSCSI datastore:同样挂载在
/vmfs/volumes/下,esxcli storage nfs list、esxcli storage iscsi adapter list查看远端来源 - vSAN datastore:对象式存储,文件不可直接拷贝,需通过导出接口取数(vCenter 在线时用 Client 下载;ESXi 上用 ovftool/vmkfstools)
磁盘设备
esxcli storage core device list # 全部物理盘/LUN:型号、容量、路径状态
esxcli storage core path list # 多路径信息
partedUtil getptbl /vmfs/devices/disks/<设备名> # 分区表
用户与权限取证
ESXi 本地用户
esxcli system account list # 本地账户列表与描述
cat /etc/passwd # 账户
cat /etc/shadow # 密码哈希(可交给 hashcat,模式 7400 sha256crypt)
ESXi 默认只有 root;加入 vCenter 后常见 vpxuser(vCenter 管理主机的内部账户,密码为随机串)、dcui(DCUI 专用)。发现额外的自建账户需重点排查。
权限与锁定模式
cat /etc/vmware/esx.conf | grep -i lockdown # 锁屏模式(normal/strict 时仅 vpxuser 可管理)
vim-cmd hostsvc/hostsummary | grep -i -A2 lockdown
vCenter 用户
- SSO 域用户:
administrator@vsphere.local(默认管理域 vsphere.local,实际域名看安装配置) - VCSA 系统账户:
/etc/passwd、/etc/shadow(Photon OS,root 即 VAMI 登录账户) - 角色与权限分配存于 vpxd 数据库(
/storage/db/vmware-vpostgres/),vCenter 在线时在 Client 的「系统管理 → 访问控制」中导出
日志取证
ESXi 日志(/var/log/)
| 文件 | 内容 |
|---|---|
hostd.log | Host Client/vim-cmd 的全部管理操作(重点:谁在何时操作了哪台 VM) |
vpxa.log | vCenter 下发到本机的指令记录(还原 vCenter 侧操作) |
vmkernel.log | 内核事件:设备、存储、网络、VM 启停底层记录 |
shell.log | ESXi Shell/SSH 执行过的全部命令(入侵排查核心) |
auth.log | SSH/PAM 登录认证记录(爆破与异常登录) |
syslog.log | 综合系统日志 |
fdm.log | HA 集群成员与故障切换 |
esxupdate.log | 补丁安装记录 |
注意:未配置 scratch 时 /var/log/ 在内存中,重启即失;持久化日志在 /scratch/log/。esxcli system syslog config get 可确认日志去向(含远程 syslog 服务器地址——有的话日志副本在远端)。
VCSA 日志(/var/log/vmware/)
| 文件 | 内容 |
|---|---|
vpxd/vpxd.log | vCenter 核心日志:登录、任务、事件、权限变更(最重要) |
envoy/envoy.log | 反向代理访问记录 |
vmon/vmon.log | 服务启停记录 |
applmgmt/applmgmt.log | VAMI 后端操作 |
登录与操作审计还可在 vSphere Client 的「监控 → 任务与事件」中直接检索。
一键收集支持包
应急响应时用官方打包工具一次收全,避免遗漏:
# ESXi(生成到指定 datastore)
vm-support -w /vmfs/volumes/<datastore>/
# VCSA(在 VCSA shell 中执行,生成后自动给下载链接)
vc-support -l
支持包内包含全部日志、esxconf 快照、网络/存储状态 dump,可直接离线分析。
ESXi 配置备份(带走整机配置)
vim-cmd hostsvc/firmware/sync_config # 将内存中的配置刷入持久存储
vim-cmd hostsvc/firmware/backup_config # 生成 configBundle.tgz 并给出下载 URL
配置包内含 /etc/vmware/ 全部配置,适合离线重建与比对。