浅谈 VMWare vSphere 系列产品 DFIR

Patrick Young
10 min readMay 21, 2023

--

Version: v1.3.0-r20230129 (@kmahyyg)

Change History:

  • v1.0.0-r20220408: Creation
  • v1.0.1-r20221121: Update about vSphere Host Profile, Add description about Ransomware targeted ESXi.
  • v1.1.0-r20221222: Add vCenter-related DFIR, Add a typical intrusion example of vSphere. Add contents for support bundle.
  • v1.2.0-r20221226: Add Linked Events and connections between ESXi Host and vCSA.
  • v1.3.0-r20230129: Add DFIR4vSphere-go, remove unconfirmed logging tag.

前置知识

  • ESXi 是 vSphere Hypervisor
  • vCenter 是 vSphere Hypervisor 的集中管理系统
  • vCenter 和 ESXi 均可以且默认使用 HTTP RestAPI 通信,通信格式为 XMLRPC

关于 vSphere 勒索

勒索病毒常用方式为通过安全漏洞/人工攻击/密码爆破/AD域认证等方式获得 vCenter 管理员密码后,下发 vSphere Host Profile 对下方所有受管 ESXi Host 修改 root 密码或投放 SSH authorized_keys ,然后通过 vCenter 中对应 ESXi Host 服务器的服务管理功能,启动 ESXi Host 下的 SSHd 服务,打开 SSH 服务。而后通过虚拟机快照功能和挂载额外的虚拟磁盘来提取内存中的操作系统密码,进而通过 VMRC 等手段登陆 VM 后提取系统中的敏感数据、进行进一步的后渗透操作,最后通过修改的密码 / SSH密钥使用 scp 命令投放勒索加密器,完成勒索。

两个典型案例

通过域认证操作 vCenter 的案例:

Incident Timeline 1
Incident Timeline 1

创建 Host Profile 并上传 SSH key、重置 DCUI 用户密码并挂载新磁盘进行数据提取的案例:

Incident Timeline 2-1
Incident Timeline 2–1
Incident Timeline 2-2
Incident Timeline 2–2

以上图片来自 Leonard Savina 在 SANS DFIR Summit 的分享: https://www.youtube.com/watch?v=2EXtHr0NDPk

核心手段包括但不限于:

  • 使用域管身份登陆 vCenter 后下发 Host Profile 开启 SSH 并对Root 用户 添加 SSH /etc/ssh/keys-root/authorized_keys
  • 通过vCenter重置各ESXi DCUI账户密码后登陆 ESXi
  • 登陆 vCenter 后通过快照功能获得 Live VM RAM 之后使用 Credential Stealer 获取 VM 密码,而后创建新的 VMDK 挂载到虚拟机上通过 VMRC远程控制台登陆并拷贝敏感数据后导出

ESXi 的鉴权与日志

测试用 ESXi 版本:8.0.0 Build 20513097

测试用 vCSA 版本:8.0.0 Build 20519528

均为初稿发稿时最新版本。

ESXi 的用户账户与日志目录

开启 SSH 在 Host Dashboard 中直接 Service — Enable SSH Shell 即可。

用户账户与日志情况:

  • 关键文件路径:/etc/ssh , /etc/shadow , /etc/passwd , /var/run/log
Critical files on ESXi host
Critical files on ESXi host

配置目录 /etc :常规的 /etc/init.d, /etc/rc.local, /etc/rc.local.d, /etc/inittab作为自启动项。

ESXi Host /etc folder
ESXi Host /etc folder

ESXi built-in account:

root: master administrator

dcui: direct console user interface, provide lock-down mode configuration

ESXi attach to vCenter: create “vpxuser” account, allow comm between ESXi (vpxa) to vCenter(vpxd)

ESXi joins active directory domain: default “ESX Admins” ldap group has privileged access, changes made to this, could use ADTimeLine to check.

ESXi Support Bundle

Web 操作步骤参见 下方 “在线提取”。

路径:/cgi-bin/vm-support.cgi ,需要再次登陆,命令行生成方式为 vm-support

格式为 .tgz ,空载 ESXi 生成用时约 2.5 min,时间可能较长,请尽量避免在不稳定的网络环境下操作。解压后约 400 M。

收集用 manifest 存储在 /etc/vmware/vm-support 目录下的 mfx 文件中。

MFX manifest collector definition, e.g. Host Profile
MFX manifest collector definition, e.g. Host Profile

其中内部数据 config-store 类多为 SQLite 3 数据库:

Host Config Store, File Magic: SQLITE3
Host Config Store, File Magic: SQLITE3

对应的 CLI 命令执行结果以 1MiB 大小为分割,自动分片,需要手动编写脚本拼接。

CLI Execution Output, Fragment 1 Example
CLI Execution Output, Fragment 1 Example

/altbootbank/bootbank 是关于 boot 和 rescue 分区的基本概况。

CLI 命令的执行情况可查看压缩文件根目录下 action.log

防火墙配置:/etc/vmware/firewall

内外Web通信使用 rhttpproxy 反代到对应路径,配置文件在 /etc/vmware/rhttpproxy

对应虚拟机的日志存储在 /vmfs/volumes/<VMFS UUID>/<VM NAME>下。

服务启用状态:/etc/chkconfig.db

本地设备配置、已安装的软件包等命令输出在 /json 目录下。

特别注意安装的 VIB 软件包,可被用于恶意软件持久化:/json/localcli_software-vib-get.json/json/localcli_software-vib-list.json。需根据对应 Host 的 VIB 接受程度来确定,默认为 Partner 级别,但是安装时可通过 --force 参数选择无视。

Crontab 配置文件:/var/spool/cron/crontabs

系统日志:‼️/var/log/var/run/log,两个不是同一个东西‼️ 日志相关的参见下方"日志提取 Checklist"。

Skyline Health Diagnostic Appliance — 性能分析工具

Support Bundle 官方分析工具: VMWare Skyline Health Diagnostic Appliance, shd-admin,密码自定义,网站可下载 OVA。

Skyline DSA - Login
Skyline DSA — Login
Skyline DSA - Monitoring Dashboard
Skyline DSA — Monitoring Dashboard

上传生成的 Support Bundle。

Skyline DSA - Upload Support Bundle
Skyline DSA — Upload Support Bundle

搞定:

Skyline DSA - Log Bundle Analyzing Progress
Skyline DSA — Log Bundle Analyzing Progress

仅检测了少量的硬件配置缺陷,没有发现安全相关内容:

Skyline DSA - Analyze Report
Skyline DSA — Analyze Report

vCenter VCSA 的鉴权与日志

Generally, Linux-based vCenter deployment is running on Photon Linux.

vCSA 开启 SSH 与日志

开启 SSH:

在 Administration — Deployment — System Configuration — 对应 vCenter — 展开,选择登陆 Appliance Management,端口 5480。

vCenter - Administration - System Configuration
vCenter — Administration — System Configuration

Root 用户登陆,使用安装时配置的密码:

vCSA Appliance Management
vCSA Appliance Management

点击 Access:

vCSA - AM - Access
vCSA — AM — Access

由于设置了最大尝试认证次数,如当前用户下有 SSH Key,请使用-i/dev/null 禁用已知的 SSH Key。

vCSA - SSH Shell
vCSA — SSH Shell

对应操作系统基础信息如下,属于 systemd-based 发行版,仍需自行关注相关自启动位置:

vCSA - /etc /var/log
vCSA — /etc /var/log

vCSA 的用户账户

用户账户信息:

vCSA - /etc/passwd
vCSA — /etc/passwd
vCSA - /etc/passwd 2
vCSA — /etc/passwd 2

关于用户密码文件,其余用户均为锁定/禁用状态:

vCSA - /etc/shadow
vCSA — /etc/shadow

导出 Support Bundle 的步骤参见下方“在线提取”。

题外:vCenter 其实更像一个缩小的域控,以微服务形式通过 rhttpproxy, envoy, tomcat 等中间件,结合 STS、JWT、证书认证 等认证方式,以 LDAP 作为底层存储,上层开启 SSO,服务账户通过 ServicePrincipal 完成鉴权和 RBAC 最终闭环整个VMWare体系产品和服务的身份验证与鉴权逻辑。每一个 vCSA 上需要对外暴露的服务均通过 Unix Socket / TCP Socket 等方式暴露到本机后,由 rhttpproxy 反代到对应位置,前端使用 iptables 基于端口控制网络流量。

vCSA Support Bundle

生成后体积约为 90M (纯VCSA,空载,未接入 ESXi Host,页面提示如有接入会包含接入的所有 ESXi Host 的 Support Bundle)。目录结构如下,和 ESXi Host 一样,包含了各类命令的执行结果和系统重要文件。和 ESXi Support Bundle 相同,根目录下 action.log 记录了生成过程中相关操作日志。基于 Photon Linux 定制的 vCSA 依然需要关注 /etc/init.d , /etc/systemd 等常规位置。

vCSA support bundle - README
vCSA support bundle — README

目录结构如下:

vCSA support bundle - Directories
vCSA support bundle — Directories

sso-config.txt: 记录了可用的 SSO 域名,其中 root@localos 域可登陆,但默认没有vCenter资产管理权限。

Log4j 配置文件: log4j*.properties

Web 访问日志: /opt/vmware/var/log/lighttpd

Postgres 数据库密码,转发数据库连接需要修改 sshd_config,同一密码适用于 pgsql 超级用户 postgres

vCenter - PGSQL Password
vCenter — PGSQL Password

API calls registered on vCenter, which logs are VI Events.

数据库中的 VI Event: VCDB 数据库下vpx_event_* 表下,似乎是按天分表的。

vCSA - VI Event - vpxevent
vCSA — VI Event — vpxevent

对应的告警在 vpx_alarm表下。

vCSA - VI Event - vpxalarm
vCSA — VI Event — vpxalarm

其余 Linux 常规日志和 vCenter 日志均在 /var/log 下,剩余的一些内容均属于技术支持相关内容,这里不再赘述。关于细致的各类日志文件,请参考 “提取日志 Checklist”。

日志提取

离线文件提取

注意:需要确认系统时区,默认时区为 UTC 时间(也推荐在生产使用 UTC 时间)。

提取步骤:

- fdisk -l 查看本地磁盘

- 打印磁盘布局 parted /dev/sdX print,可使用设备名辅助判断本地磁盘位置。

- 如需查看 vmfs 中的虚拟机,安装 vmfs-tools vmfs6-tools ,系统自带依赖:libuuid1 libfuse2 (Ubuntu 20.04)

- 安装后挂载 vmfs-fuse /dev/sdXy /mnt/mountpoint1

- 卸载:fusermount -u /mnt/mountpoint1

- 提取ESXi日志:FAT 分区中 log 目录下。使用 mount 循环挂载即可,如为 vmfs 会提示为无效的 fs 类型,fs 类型提示为 VMFS_volume_member

- 挂载VMDK: guestmount -a xyz.vmdk -m /dev/sdXy --ro /mnt/mount-vmdk (需要安装:libguestfs-tools 及其依赖)

尝试进入 ESXi Console Shell

老版 ESXi Shell 控制台命令行进入方式:

- 按 Alt-F1 ,输入 unsupported (注意:无回显)

- 输入 root 密码开启。

- 开启后请记得关闭。

新版 ESXi Shell 控制台命令行进入方式:

- 进入控制台主界面,按下 F2,输入root密码

- 选择 TroubleShooting Options,选择 Enable ESXi Shell ,接下来按 Alt-F1 进入 Shell 即可。

- 开启后使用完毕后请记得关闭。

在线提取

登陆 Web 页面:生成 Support Bundle 已经够用。

ESXi:

ESXi Host - Generate support bundle
ESXi Host — Generate support bundle

VCSA:

  • 导出对象日志
vCenter - Object - Export System Logs
vCenter — Object — Export System Logs
  • 生成 vCenter Support Bundle
vCenter - Administration
vCenter — Administration
vCenter - Administration - Deployment
vCenter — Administration — Deployment
vCenter - Export Support Bundle
vCenter — Export Support Bundle

点击下一步后请注意观察地址栏,如有拦截的弹出窗口请注意放行,放行窗口即为下载链接。

登陆后台 SSH Shell 创建:

  • ESXi: vm-support
  • VCSA: vc-support

提取日志 Checklist

ESXi Host

需要关心的日志:

- 【重要】/var/run/log/auth.log: 系统认证日志

- /var/run/log/esxupdate.log: 价值不大,存在部分 vCenter 下发指令的记录,ESXi patch and update logs。

- /var/run/log/fdm.log:Fault Domain Manager (FDM),自动故障转移日志,有助于查找加密时间线

- 【重要】/var/run/log/hostd.log :ESXi管理日志,记录了几乎所有ESXi行为。

hostd is a host agent responsible for managing most of the operations on an ESXi host and registering VMs, visible LUNs, and VMFS volumes. hostd is responsible for starting and stopping VMs and similar major tasks. VMware hostd is used for communication between ESXi and vmkernel.

hostd.log - Event Type: Disable ESXi shell
hostd.log — Event Type: Disable ESXi shell
hostd.log - Event: Enable SSH access
hostd.log — Event: Enable SSH access
hostd.log - Event: Add firewall rule for SSH
hostd.log — Event: Add firewall rule for SSH

- /var/run/log/rhttpproxy.log:代理访问其他的 ESXi host 包括了代理客户端的建立和访问的 URL 路径。

- 【重要】/var/run/log/shell.log :包含了SSH和Direct Console Shell 的执行记录和日志,对应的 /.ash_history 可供参考。

- /var/run/log/syslog.log:存在域登陆相关的日志和系统VMDK失效日志,常规系统日志,即原本的 /var/log/messages, including: service initialization, scheduled tasks and DCUI use.

- 【重要】/var/run/log/vobd.log:VMkernel observation events. VOBD is a daemon that VMware and third-party applications use for monitoring and troubleshooting. 包含了Direct Console Shell 启动和防火墙变更、网络连接变更等内核事件日志。可通过事件ID检查和过滤,属于 VIEvent 的一部分,具体事件 ID 可查看参考文献中的 Event Mapping。

  • /var/run/log/vpxa.log: vCenter Agent 工作日志,vpxa 组件用于和 vCenter vpxd 通信。
  • /var/run/log/hostprofiletrace.log:Host Profile 执行日志。

上述列举的大部分日志均可使用 Splunk Addon for VMWare ESXi logs 进行统一管理。

其他的一些日志,在此仅作列举和备忘:

  • /var/run/log/vmk*.log: Activities related to VM and ESXi, including warnings, uptime, availability.
  • /var/run/log/kmx*.log: vSphere Trust Authority Key Provider and Client service
  • /var/run/log/esxapiadapter.log: Activities related to the vSphere Trust Authority API forwarder.
  • /var/run/log/esxtokend.log: Activities related to vSphere Trust Authority ESX Token service.
  • /var/run/log/loadESX.log: Restarting an ESXi Host through Quick Boot.
  • /var/run/log/attestd.log: vSphere Authority Attestation Service.
  • /var/run/log/clomd.log: Cluster level object manager (CLOM) logs. These logs are part of the VMware vSAN™ feature.
  • /var/run/log/osfsd.log: Object storage file system (OSFS) logs. These logs are part of the vSAN feature.
  • /var/run/log/sdrsinjector.log: VMware vSphere Storage DRS™ injector log. Profiles the capabilities of the data stores for vSphere Storage DRS.
  • /var/run/log/vprobe.log: Output of VMware vProbes™, which provides a facility for transparently instrumenting a powered-on guest operating system, its currently running processes, and VMware virtualization software.
  • /var/run/log/cmmdsTimeMachine.log: Cluster Monitoring, Membership, and Directory Service
  • /var/log/tallylog: Deny log in after X failed log in attempts
  • /var/run/log/vsan*.log: vSAN data protection logs, management service, system managed services.
  • /var/run/log/vvold.log: vSAN virtual volume daemon logs
  • /var/log/configRP.log : Resource pool changes

vCenter Server Appliance (excl. ESXi-related)

  • 【重要】/var/log/audit/sso-events: SSO login audit log.
  • 【重要】/var/log/audit/sshinfo.log : auth.log 记录系统认证事件。
  • 【重要】/root/.bash_history :Shell命令日志
  • /var/log/btmp: 登陆失败,lastb
  • /var/log/wtmp: 登陆情况,last
  • /var/run/utmp: 当前登陆情况,w
  • /var/log/cron: cron 执行记录
  • /var/log/lastlog: last login list
  • /commands/journalctl*.txt: 系统日志中包含 VI Event
vCSA - journalctl
vCSA — journalctl
  • /var/log/vmware/procstate*: 每分钟一次的 process list
vCSA - /var/log/vmware/procstate
vCSA — /var/log/vmware/procstate
  • /var/log/vmware/applmgmt-audit/applmgmt-audit.log : 用户请求对应 vCenter 微服务的鉴权情况日志
  • /var/log/vmware/eam: ESXi Agent Management, 无意义。
  • /var/log/vmware/vlcm/vlcm.log: vSphere LifeCycle Manager,主要负责管理 vSphere 产品的生命周期,包括 vSphere Config Profile (Host Profile的升级替代)。【没有测试环境,待进一步根据实际遇到的事件完善】
  • /var/log/vmware/vmdir and /var/log/vmware/vmdird/vmdird-syslog.log: VMWare vCenter Directory Service (LDAP) Topology, CRUD log, debugging log, including topology_info.json, vmafdvmdirclient.log
  • /var/log/vmware/vsan-health: vSAN 健康监测日志。推测在勒索加密的场景可能有相关日志记录。【没有测试环境,待进一步根据实际遇到的事件完善】
  • /var/log/vmware/vpxd-svcs/authz-event.log: vCenter VPXD LDAP authentication log
  • /var/log/vmware/vpxd-svcs/vpxd-svcs.log: vCenter VPXD identity authentication and SSO service log
  • /var/log/vmware/vpxd/vpxd.log: VPXD daemon log, including related vSphere core behaviors and events, but too much noise, recommend to use VI events only. You could extract events from this log manually, but not necessary.
  • /var/log/vmware/vsphere-ui/apigw.log: vSphere Client Access, API Gateway Authentication and Access log.
  • /var/log/vmware/vpxd/authz-data.json: vSphere Authentication Users
  • /var/log/vmware/vpxd/telemetry: Telemetry data in vpxd, including part of user activities time cost and activity type.

其他:

  • /var/log/vmware/wcp: Workload Control Plane Log
  • /var/log/vmware/vtsdb: Database log for vStats Service, /run/vtsdb.s.PGSQL.5433 SSH Forward, postgres user, no data inside.
  • /var/log/vmware/vstats: vStats Service for Metric
  • /var/log/vmware/vpostgres: vCSA 内部 PGSQL 数据库日志
  • /var/log/vmware/vsphere-ui/logs/access: vSphere Client WebUI access log
  • /var/log/vmware/vsm: vService Manager Log

看起来有用,但是实际没啥卵用:

  • /var/log/vmware/vpxd/vpxd-profiler.log: Count of operations and also including session creation, however, no timestamp.

vSphere Host Profile

常规 Web 启停 SSH 服务:

vCSA - Start/Stop ESXi SSH Service
vCSA — Start/Stop ESXi SSH Service

创建:vSphere Client (in VCSA) — Policies and Profiles — Host Profiles — Extract Profiles From Host

Create Host Profile from Reference Host in VCSA
Create Host Profile from Reference Host in VCSA

编辑、导出:双击 Host Profile

Edit, Apply, Export Host Profile
Edit, Apply, Export Host Profile

导出时会提示安全原因不包含管理员密码。

日志:

Export HostProfile (Internal Task Queue Log)
Export HostProfile (Internal Task Queue Log)

下载后 Profile,文件为 vpf 后缀、未格式化的 XML 文件:

Host Profile VPF File Example
Host Profile VPF File Example

各类日志记录均可调整:

Configure Host Profile - Logger
Configure Host Profile — Logger

控制调整安全设置:

Host Profile - Change Security Settings - 01
Host Profile — Change Security Settings — 01
Host Profile - Change Security Settings - 02
Host Profile — Change Security Settings — 02
Host Profile - Change Security Settings - 03
Host Profile — Change Security Settings — 03
Host Profile - Change Security Settings - 04
Host Profile — Change Security Settings — 04

接下来应用密码修改,然后再次生成 Support Bundle 提取日志。

首先选择 Attach Host:

Host Profile - Apply - 01
Host Profile — Apply — 01

提前将对应 Host 置于 Maintenance Mode,勾选对应 Host 之后依次点击 1、2、3、4完成应用,应用后重启、解除 Maintenance Mode(Maintenance Mode 下不可以有正在运行的虚拟机,所以我只能新建一个 ESXi Host 做测试):

Host Profile - Apply - 02
Host Profile — Apply — 02

执行过程中可以在 WKS 侧看到 ESXi Host 有大量 vpxuser 的执行任务记录,但部分 Event 没有正确显示:

Host Profile - Apply - Event Log
Host Profile — Apply — Event Log

执行完成重启后务必对对应主机再次运行一次 Compliance Check,没有服务对应,但是其他内容都已应用,无需处理即可:

Host Profile - Apply - AfterRemediationCheck
Host Profile — Apply — AfterRemediationCheck

但是似乎 SSH Public Key 不支持 ED25519 格式:

Host Profile - Apply - SSH Public Key Not Support ED25519
Host Profile — Apply — SSH Public Key Not Support ED25519

接下来新增 1G 硬盘一块,然后启停一下 Alpine 02,模拟勒索加密和提取数据。

After-Apply Logging

导出 DataCenter 日志:

Exported Support Bundle using export System Log in vCSA
Exported Support Bundle using export System Log in vCSA

Web 界面事件列表如下:

Event log during usage of Host Profile
Event log during usage of Host Profile

DFIR4vSphere — Go

Check https://github.com/kmahyyg/DFIR4vSphere-Go. 上述日志的自动化提取,交互式操作与下载 Support Bundle 均有集成。对常见密码丢失问题给出了重置指引。在应急过程中推荐重点查询 VI Events,从 Support Bundle 中提取上文中标记了“重要”的日志文件,常规配置和系统安装的软件包信息(潜在的恶意程序驻留)可通过程序 basic_info 指令保存 CSV 供进一步查询。

VI Events

Host Profile Apply:

Apply Host Profile
Apply Host Profile

Add disk to reconfigure VM for extraction data:

New Disk attached to extract data
New Disk attached to extract data

Security Hardening 安全加固

Credit 致谢 & Reference 参考文献

Credit goes to Leonard Savina, thanks for his excellent work: https://www.youtube.com/watch?v=2EXtHr0NDPk and also all the works listed below.

--

--

No responses yet