- tzhtdx2026-10-106259
作者:tzhtdx(应急响应工程师)
适用:安全研究员 / IR 工程师 / 虚拟化安全运维
ESXi 版本:6.7.0 (15160138) / 7.0.3 (18644231) / 8.0.3 (24677879) 三版本实机验证
关键词:ESXi 勒索 / 运行时取证 /vsish/ExecInstalledOnly/lsof/ 版本差异摘要
- 三起 ESXi 勒索事件攻击链高度一致:Horizon 漏洞 → 域横向 → vpxuser SSH → 投递加密器 → 破坏虚拟化存储
- ESXi 无 Linux 式
/proc,传统进程取证方法全部失效- 通过
lsof -p <cartel>可获取已删除二进制的内存映射路径与大小(VMkernel 级取证)-
ExecInstalledOnly在 8.x 上默认拦投递 ELF(Operation not permitted),在 6.7/7.0.3 上默认放行- 构建了五层监控守护,在三个版本上端到端验证通过(含加密行为检测与进程内存取证)
- 附完整版本兼容性矩阵、防御自查清单与 IOC 列表
1. 背景
2025 年以来,针对 VMware ESXi 的勒索软件攻击持续升级。ESXiArgs、Cheerscrypt、Black Basta 等组织均以 ESXi 为主要目标。近期我们处置的三起事件(制造/科技/汽车行业)呈现高度一致的攻击链——攻击者通过未修复的 VMware Horizon 漏洞获取内部网络初始访问,随后利用被盗的
vpxuser凭据通过SSH 批量登录 ESXi,投递 ELF 加密器对虚拟化存储进行加密。与 Linux 服务器不同,ESXi 的取证面临独特挑战:```
┌───────────────────────────┬─────────────────────────────────────────────┐
│ Linux Server │ ESXi (VMkernel) │
├───────────────────────────┼─────────────────────────────────────────────┤
│ /proc/<pid>/exe │ [X] no /proc (directory is empty) │
│ /proc/<pid>/maps │ [X] none │
│ /proc/<pid>/mem │ [X] none │
│ ptrace(PTRACE_ATTACH) │ [X] disabled at kernel level │
│ gcore <pid> │ [X] command not available │
│ lsof │ [!] present, but format/paths differ │
│ strace │ [!] present, but unusable (ptrace disabled) │
│ busybox │ [OK] /usr/lib/vmware/busybox/bin/ │
└───────────────────────────┴─────────────────────────────────────────────┘
```ESXi 的 VMkernel 是闭源微内核,不是 Linux。 上述差异意味着传统 Linux IR 方法论在 ESXi 上全部失效,需要重新构建取证方法论。2. 攻击链取证分析
2.1 完整攻击链```
Phase 0: 初始访问
利用未修复的 VMware Horizon 漏洞获取内部网络访问
(Horizon 连接服务器 / UAG / Workspace ONE,未更新至最新版本)
│
Phase 1: 域内横向
vdiadmin → WinRM/PowerShell → 3,716 条 4648 事件 → 1,184 个目标
PowerShell + C# 注入禁用 ETW (ntdll!EtwEventWrite)
落地 kvcore.sys (BYOVD, 江民驱动) → kill AV/EDR
│
Phase 2: 清痕
Security 1102 + System 104 → 双清日志
│
Phase 3: ESXi 批量登录
vpxuser 凭据 → SSH → 多台 ESXi
部分案件:govmomi/0.47.0 经 hostd API 启动 SSH
│
Phase 4: 载荷投递与执行
scp -t /var/log/ → e_esxi(ELF) + exec.sh(sh)
chmod 777 → rm e_esxi(自删) → nohup exec.sh &
esxcli ... ExecInstalledOnly → 0 (8.x 前置)
│
Phase 5: 加密 + 勒索
遍历 .vmdk/.vmx/.nvram/.vswp/.vmsn → 加密 → 改随机后缀
落勒索信 → vSAN 对象删除 → VM 批量关机
```2.2 载荷技术分析(静态逆向摘要)以
e_esxi样本为例(ELF 64-bit LSB,静态链接,~78KB):特征 |
分析结果 |加密方案 |
X25519 ECDH + SHA-512 KDF + 自定义 S-box 流密码 |Nonce/Counter |
固定为 0(潜在弱点:密钥流可能重复) |部分加密 |
前 384MB 始终加密;≥768MB 时另加密中段 384MB |文件尾 |
追加 32 字节临时公钥(供攻击者解密) |目录遍历 |
opendir/readdir,按扩展名过滤(13 种虚拟化文件类型) |自毁 |
执行后立即删除自身二进制 |C2 |
Tor 网络聊天 + prnt.sc 截图外传 |无第三方解密途径——除非攻击者私钥泄露或被执法查获。
2.3 攻击者对 ESXi 版本的选择逻辑
三案中攻击者统一执行:```
esxcli system settings advanced set -o /User/execInstalledOnly -i 0
```但该命令的实际效果因版本而异(实测确认):ESXi 版本 |
命令结果 |
原因 |
攻击影响 |6.7 |
“选项不存在” |ExecInstalledOnly为 VMKernel 设置 |
无影响,默认已允许执行 |7.0.3 |
“选项不存在” |
同上 |
无影响 |8.0.3 |
rc=0,成功关闭 |
高级设置/User/ExecInstalledOnly|
关闭后投递的 ELF 才能执行 |结论:8.x 上
ExecInstalledOnly默认=1,是阻止投递 ELF 执行的关键防线。攻击者必须先关闭它——而这一操作可通过
shell.log检测。3. ESXi 运行时取证:能力与限制
3.1 进程信息获取
ESXi 无 Linux 式
/proc,进程信息获取路径完全不同:Linux 方法 |
ESXi 等价 |
说明 |/proc/<pid>/cmdline|ps -c第 4 列 |
完整命令行 |/proc/<pid>/exe|lsof -p <cartel>MMAP 条目 |
文件删除后仍显示路径/大小 |/proc/<pid>/maps|lsof -p <cartel>或vsish -e ls .../mem/mmaps/|
内存映射区域 |/proc/<pid>/fd/|vsish -e ls .../fd/fds/|
打开文件列表 |gcore <pid>|
^-^ 无 |
无法直接 gcore |kill -ABRT→ core |
^-^ 需通过 vsish 开启(详见 §4) |
可行但有条件 |3.2 lsof 取证——文件删除后仍可见
ESXi 自带的
lsof读取 vmkernel 内部数据,即使可执行文件已被rm,仍能看到 MMAP 映射的路径与大小:```
$ lsof -p <cartel_id>
Cartel | World name | Type | fd | Description
--------+------------+------+----+-------------
2105626 | sleep | MMAP | -1 | /var/log/sleep (prot:R-/len:604124)
2105626 | sleep | MMAP | -1 | /var/log/sleep (prot:-W/len:8844)
```> 取证价值:确认可疑进程执行了哪个文件(即使文件已删除),以及该文件的映射大小(可推断原始二进制大小)。
局限:无法从 MMAP 条目中恢复文件内容字节。3.3 vsish 内核调试接口
vsish(VMkernel System Information Shell)是 VMware 内核调试工具,暴露了 VMkernel 内部状态。关键路径:```
/userworld/cartel/<id>/
├── cmdline → 进程命令行
├── fd/fds/<fd>/ → 文件描述符详情(路径/类型/标志/偏移)
├── mem/mmaps/ → 内存映射区域列表
├── signal/handlers/ → 信号处理函数
├── signal/injectsignal → 向进程注入信号
├── stats/ → syscall/IO/socket 统计
├── thread/ → 线程列表
└── debug/
├── coreDumpEnabled → core dump 开关(默认 0)
├── dumpOnKernelPanic → panic 时 dump
└── livecore → live core dump 触发器
```> ^-^ 负责任披露声明:本文仅讨论 vsish 的取证分析用途。其内核状态修改能力(如
signal/injectsignal、killswitches)
涉及 VMkernel 安全边界,不在本文讨论范围内。4. 五层监控防御体系设计
4.1 设计原则```
传统检测 = 规则匹配("这个进程名/路径像不像坏人")→ 可被绕过
我们的检测 = 行为/内容异常("这个文件/进程在做什么异常的事")→ 更难绕过
```4.2 五层架构层 |
检测内容 |
数据源 |
告警前缀 |L1 进程 |
ps -c命令行匹配(含解释器/落地区/已知 IoC) |ps -c|SUSP_PROC||
lsof取 MMAP 映射与打开文件 |lsof -p <cartel>|ENC_TARGET|L2 命令 |
shell.log增量匹配(投递/赋权/关防护/已知 IoC) |shell.log|SHELLLOG||
命中后立即扫盘抓文件(反应式抓取) |
— |REACT_CAPTURE|L3 落盘 |
投放物/勒索信文件匹配 + 哈希存证 |find目录轮询 |FILE_DROP|L3b 行为 |
.vmdk/.vmx数量做差(加密风暴) |find /vmfs/volumes|ENC_SPIKE|L4 加密 |
VM 文件明文标记消失(.vmx 纯文本变密文) |
文件内容检查 |ENC_SUSPECT_TXT||
VM 文件熵异常(>200 distinct bytes/4KB) |od+awk|ENC_SUSPECT_DESC||
VM 文件被加未知后缀(≥6 位) |find文件名匹配 |ENC_RENAMED|主动响应 |
高置信进程取证后 kill(默认关闭) |kill -9|KILLED|4.3 L4 加密角度检测详解
这是与规则检测的本质区别:不关心"谁在做",只关心"VM 文件是否被加密"。
明文标记消失(方案 A)
.vmx文件是纯文本(config.version/displayName/virtualHW.version)。勒索软件从 offset 0 开始覆盖(样本行为),覆盖后明文标记消失。```
grep -qaE 'config.version|displayName|virtualHW' "$vmx_file" || alert
```熵异常检测(方案 B,覆盖"保留文件头"变种)即使勒索软件保留文件头只加密数据段,前 4KB 的不同字节值个数也会从 <120 飙升到 >240。```
distinct=$(od -An -tu1 -N4096 -v "$file" | \
awk '{for(i=1;i<=NF;i++)a[$i]=1} END{print length(a)}')
[ "$distinct" -ge 200 ] && alert
```> 为什么这比规则匹配更强:无论加密器叫什么名字、用什么语言写、从哪个偏移开始加密,只要将纯文本变为密文就会被检测。这是与算法无关的行为检测。
改名检测(方案 C)```
find /vmfs/volumes -type f \
\( -name '.vmdk.??????' -o -name '.vmx.??????' \) \
| grep -v '\.lck$' | while read -r f; do alert; done
```4.4 告警级别级别 |
告警 |
说明 |P0 |
ENC_SUSPECT_*/ENC_RENAMED|
VM 文件正在被加密 |P0 |
SUSP_PROC/ENC_TARGET|
可疑进程运行中 |P0 |
ExecInstalledOnly被置 0 |
防护被关闭 |P0 |
vpxuserSSH 登录 |
非正常账号登录 |P1 |
FILE_DROP/REACT_CAPTURE|
投放物落盘(已存证) |P1 |
SHELLLOG|
可疑命令 |5. 三版本实测评估
5.1 测试环境
主机 |
ESXi 版本 |
Build |
架构 |esxi6.7 |
6.7.0 |
15160138 |
双网卡(vmk0=192.168.100.x, vmk1=10.21.21.x) |esxi7 |
7.0.3 |
18644231 |
双网卡 |esxi8 |
8.0.3 |
24677879 |
单网卡 |5.2 版本差异矩阵(关键差异)
差异项 |
6.7 |
7.0.3 |
8.0.3 |/proc|
^-^ 空 |
^-^ 空 |
^-^ 空 |execInstalledOnly位置 |
VMKernel |
VMKernel |
高级设置(默认=1) |ExecInstalledOnly对投递 ELF |
允许执行 |
允许执行 |
拦截(Operation not permitted) |审计命名空间 |
auditrecords|auditrecords|auditrecords|审计
local set|
可用 |
静默失败 |
可用 |审计
livecore|
未验证 |
静默失败 |
可用 |kill -ABRT→ core dump |
|
|
|vmkdump_extract可用 |
有 |
有 |
有 |viewAudit/auditLogReader|
auditLogReader |
viewAudit |
viewAudit |tr命令 |
|
|
|shell.log|
有 |
初装可能无 |
有 |python|
3.5 |
3.8 |
3.11 |lsof|
|
|
|VMFS noexec |
|
|
|local.sh尾部exit 0|
是 |
是 |
是 |5.3 端到端检测验证(良性 demo 载荷)
在每台 ESXi 上投递良性 demo 载荷(
busybox假扮e_esxi+exec.sh投递脚本),验证 guard 的检测覆盖率:
检测层 |
esxi6.7 |
esxi7 |
esxi8 |L1
SUSP_PROC(exec.sh 进程) |
|
|
|L1
SUSP_PROC(e_esxi 进程) |
|
|
|L1
ENC_TARGET(打开 .vmdk) |
|
|
|L2
SHELLLOG(可疑命令) |
|
|
|L3
FILE_DROP(载荷落盘存证) |
|
|
|证据 ELF core(vmkdump_extract) |
^-^ 16.8MB |
^-^ 16.8MB |
^-^ 9.2MB |三台 100% 检出,无漏报。
6. 讨论
6.1 已知限制
限制 |
说明 |
缓解措施 |无法实时读进程内存 |
ESXi 无/proc,ptrace 禁用 |
轮询间隔最小化 + 文件在盘时立即抓取 |轮询盲区 |
进程存活 <INTERVAL则可能漏检 |
降频有 CPU 代价,需平衡 |加密算法无关性不完美 |
极慢速、保留结构的变体可能滞后 |
L4 熵/标记检测已覆盖大多数场景 |7.0.3
livecore静默失败 |
VMware 内部行为 |
用kill -ABRT替代 |6.2 攻击者可能的绕过
绕过手段 |
我们的对策 |Python 脚本替代 ELF(绕
ExecInstalledOnly) |
L1 仍能检测python + /tmp/组合 |自定义加密不覆盖文件头 |
L4 熵检测覆盖 |减慢加密速度(低频、小批量) |
增加INTERVAL灵敏度 + 收集端阈值告警 |使用
ExecInstalledOnly=0后再执行 |
L2 命令层 P0 告警此操作 |禁用 syslog 外发 |
心跳看护:主机静默即告警 |6.3 未来方向
- 进程基线差分:首次采集正常进程集合 → 之后新进程即告警(与名称/路径无关)
-
pktcap-uw网络层检测:捕获加密器与 C2 的通信- VM-Internal 检测:在 VM 内部部署 agent(可检测加密 I/O 到 vmdk 的写入模式)
- vsish 路径自动化:利用
vsish -e脚本化实现更深层内核状态检查7. 结论
本文基于三起真实 ESXi 勒索事件和三个 ESXi 版本的实机验证,提出了一个五层运行时监控防御体系,核心贡献包括:
- 系统性梳理了 ESXi 与 Linux 在进程取证方面的差异(无
/proc、ptrace 禁用、VMFS noexec),并找到了等价替代方案(
ps -c+lsof+vsish)- 首次公开了
lsof -p <cartel>的取证应用——文件删除后仍可获取可执行文件的路径与大小(Linux 上需依赖
/proc/<pid>/exe)- 构建了五层检测架构,从规则匹配到行为/内容异常检测,在三个 ESXi 版本上
实现了 100% 的良性 demo 检出率
- 产出了完整的版本兼容性矩阵,为跨版本部署提供了实证基础
所有工具以 shell 脚本实现,零外部依赖,可在三台 ESXi 版本上直接部署使用。
附录 A:防御自查清单```
===== 在 ESXi Shell (root) 执行 =====
── 入口 ──
grep -q enabled /etc/ssh/sshd_config && echo "⚠ SSH 开着"
esxcli system settings advanced list -o /User/ExecInstalledOnly 2>/dev/null
esxcli system settings kernel list -o execInstalledOnly 2>/dev/null── 可疑进程 ──
ps -c | grep -Ei 'e_esxi|exec\.sh|/var/log/|/tmp/'
── 可疑命令 ──
grep -Ei 'scp -t|nohup|chmod 777|ExecInstalledOnly|e_esxi' /var/log/shell.log
── 异常登录 ──
grep 'vpxuser' /var/log/auth.log
── VM 文件异常 ──
find /vmfs/volumes -name '.vmdk.' -o -name '.vmx.' 2>/dev/null | head
── 日志外发 ──
esxcli system syslog config get | grep -i 'Remote Host'
```附录 B:IOC 清单类型 |
IoC |
备注 |文件 |
e_esxi,exec.sh,enc_wip*|
三案通用载荷命名 |文件 |
*.Q1ZVE0rRT,*.vLwoQ0baL,.__NoNoNoYYY|
加密后缀 |文件 |
How To Restore Your Files.txt,!!!!!_INSTRUCTION_!!!!!.txt|
勒索信 |命令 |
esxcli ... ExecInstalledOnly ... -i 0|
关闭执行限制 |命令 |
scp -t /var/log/|
投递路径 |进程 |
cmdline 含/var/log/e_esxi -u|
运行中的加密器 |网络 |
govmomi/0.47.0(User-Agent) |
入口工具 |本文基于三起真实事件取证 + 三个 ESXi 版本实机验证。
所有检测工具以 shell 脚本实现,零外部依赖。
主楼 - sakuraL昨天6261
esxi 好贵,有点用不起正版了,找不到新补丁的话,得换别的了
- 柏川昨天6262
2023年上家公司中的就是这个esxi勒索病毒 公司直接通过初始备份重建系统,没有付赎金