mcpField
V
VMware Harden

VMware Harden

本地服务
github.com/zw008安全45 天前更新

关于 VMware Harden

VMware Harden 是面向 VMware 环境的合规扫描与基线检查 MCP 服务,适合安全和运维团队。它提供多种合规基线、VMSA 漏洞核查及漂移检测,并且只读访问基础设施。

主要功能

  1. 01覆盖 CIS、vSphere SCG、PCI-DSS 等基线
  2. 02检查 ESXi 和 vCenter 的 VMSA 漏洞
  3. 03检测配置漂移并生成报告
  4. 04展示检查覆盖范围和未评估项
  5. 05提供 LLM 修复建议

适用场景

  1. 01核查 vSphere 环境是否符合选定基线
  2. 02按离线目录检查已知 VMware 安全公告
  3. 03比较观测结果以发现配置漂移

MCP 相关

提供 8 个只读 MCP 工具,用于扫描与检查 VMware 环境;工具不会修改受管基础设施。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"zw008-vmware-harden": {
"command": "uvx",
"args": [
"vmware-harden"
]
}
}
}
启动命令uvx vmware-harden

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypivmware-harden1.8.7

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

vmware-harden

免责声明:由社区维护的开源项目。与 VMware, Inc. 或 Broadcom Inc. 无关联,也未获得其认可或赞助。“VMware”、“vSphere”、“ESXi”和“NSX”是 Broadcom 的商标。源代码依据 MIT 许可证公开供审查,地址为 github.com/vmware-skills/VMware-Harden。

English | 中文

面向 AI 的 VMware 合规与基线实施工具。属于 vmware-* 技能系列的同系列项目。

  • 对 vSphere 只读:全部 8 个 MCP 工具均带有 [READ] 标记,不会更改受管理的 VMware 基础设施;scan_target 仅写入本地 Twin 数据库(用于缓存其自身观测结果)。请参阅只读设计。

GA 系列成员(自 v1.5.18 起)

可用于生产环境的合规平台,内置 9 个基线(CIS ESXi 8.0 + 9.0、vSphere SCG v8 + v9、与 vSphere 9 STIG 对齐、等保 2.0 三级、PCI-DSS 4.0、EU NIS2、BSI IT-Grundschutz),包含 99 条规则、针对 ESXi 和 vCenter 构建版本的 VMSA 已知漏洞检查、多 vCenter Twin、偏移检测、大模型修复顾问、包含 8 个经审计工具的 MCP 服务、Web 控制面板,以及 vmware-harden doctor 环境诊断工具。

快速入门

# The collectors extra is what makes `scan` work: harden reads inventory
# through vmware-aiops / vmware-storage / vmware-nsx-security, and `uv tool
# install` gives each tool its own environment — installing them separately
# puts them where harden cannot import them from.
uv tool install "vmware-harden[collectors]"

# Reporting on an existing twin DB needs no collectors:
#   uv tool install vmware-harden

# List built-in baselines
vmware-harden baseline list

# Run a scan
vmware-harden scan --target <vcenter-name> --baseline cis-vmware-esxi-8.0-subset

# Or use 等保 2.0 三级 (国内合规独家)
vmware-harden scan --target <vc> --baseline dengbao-2.0-level3-vmware

# View results
vmware-harden report
vmware-harden drift

# Generate remediation suggestions
export ANTHROPIC_API_KEY=...  # optional; falls back to mock without
vmware-harden advise --all-critical

# Web dashboard
vmware-harden web --port 8080  # → http://127.0.0.1:8080
解读结果:违规项本身不能作为判定依据

规则只能判断实际采集到的配置,而采集可能以两种互不相关的方式失败。若没有采集器能够生成某条规则所需的属性,该规则就不会执行。即使规则确实运行了,对于某台特定主机也可能一无所获,因为返回的值缺失或为 N/A 哨兵值——例如主机无法访问、账户权限不足,或 ESXi 构建版本不支持该设置。这两种情况都不会被报告为通过:

$ vmware-harden report
No violations among the checks that could be made.

16 of 20 rules could not be evaluated — no collector provides the data they
check, so their result is unknown, not compliant. 6 of 8 per-node checks could
not be made across 2 node(s): the rules ran, but the values they read were
missing on those nodes, so those nodes are unknown rather than compliant.
Not evaluated:
  cis-esxi-2.1.1   no collector writes host.ntp_enabled
  ...
Not judged on these nodes (data missing):
  cis-esxi-2.2.1   esx-02    esxi_build
  ...

--format json 会返回 {"violations": [...], "coverage": {...}},MCP 工具也会返回相同的 coverage 区块,因此 Agent 不能仅凭 violations: 0 就断定“合规”。在 v1.9.0 之前,未采集属性的规则会匹配到零行,并被静默计为通过;在 v1.10.0 之前,按节点区分的情况也存在同样问题。请参阅 RELEASE_NOTES.md。

这两个列表需要分别处理:第一种情况需要等待采集器,第二种情况则需要确保节点可访问,并确认扫描账户具备相应权限。

离线/隔离网络安装(从源代码安装)

本项目采用现代 PEP 517 构建系统(hatchling),因此有意不提供 setup.py——这是预期设计,并非文件缺失。如果你克隆源代码后遇到 ERROR: File "setup.py" or "setup.cfg" not found ... editable mode currently requires a setuptools-based build,说明你的 pip 版本低于 21.3,无法通过非 setuptools 后端进行可编辑(-e)安装。可编辑模式只是开发便利功能,并非运行该工具所必需——可选择以下任一方式:

# From the source tree — a normal (non-editable) install builds a wheel:
pip install .              # NOT  pip install -e .

# ...or upgrade pip first, and editable works too:
pip install --upgrade pip && pip install -e .

对于完全隔离网络的主机,请在联网机器上构建 wheel 并复制过去——目标主机无需联网:

# On a connected machine, collect this package + its dependencies as wheels:
pip wheel . -w dist        # → dist/*.whl   (or: uv build, for just this package)

# Copy dist/ to the air-gapped host, then install offline:
pip install --no-index --find-links dist vmware-harden

只读设计

vmware-harden 对 vSphere 和 NSX 只读——全部 8 个 MCP 工具均带有 [READ] 标记,不会更改受管理的 VMware 基础设施。scan_target 仅写入本地 Twin 数据库(~/.vmware-harden/twin.duckdb), 用于缓存其自身观测结果,而非受管理的基础设施。此技能不会应用修复操作;修复工作交由 vmware-pilot 处理,后者为写操作提供审批门控和审计跟踪。

内置基线

基线规则适用于来源
cis-vmware-esxi-8.0-subset20hostCIS Benchmark v1.0
vsphere-scg-v8-subset15host, vmVMware vcf-security-and-compliance-guidelines
dengbao-2.0-level3-vmware20host, vm, datastore, dfw_ruleGB/T 22239-2019 三级
pci-dss-4.0-vmware10host, dfw_rulePCI-DSS v4.0
eu-nis2-vmware12host, dfw_ruleEU NIS2 Directive(第 21/23 条,附件 I)
bsi-itgs-basisabsicherung-vmware10hostBSI IT-Grundschutz(OPS.1.1.4 + SYS.1.1)
cis-vmware-esxi-9.0-subset20host通过 extends: 继承自 cis-vmware-esxi-8.0-subset
vsphere-scg-v9-subset15host, vm通过 extends: 继承自 vsphere-scg-v8-subset
vmsa-advisories3(每条已编入目录的公告一条)host, vcenter离线 VMSA 目录 — 参见已知漏洞
vsphere-stig-v9-subset ⚠️ 实验性12host与 vSphere 9 STIG 对齐的主机高级设置(DoD/DISA STIG 内容)— 已在 ESXi 8.0.3 上验证采集器;尚未在 9.x 上运行

baseline list 会返回 10 个 ID:上述 7 个包含规则的 YAML 基线(共 99 条规则)、两个 v9 别名(本身不包含规则,会解析为其 v8 父级的规则),以及 vmsa-advisories(由公告目录生成,而非从文件读取)。

已知漏洞(VMSA)

vmsa-advisories 会根据随软件包提供的离线 VMware 安全公告目录(vmware_harden/advisories/catalog.yaml,并在目录日期对照其来源进行核查),评估每台 ESXi 主机和 vCenter 自身的版本与构建号。每条公告对应一条规则;每条规则的文本都会引用其作为证据所依据的等保 2.0 三级控制项(安全计算环境·入侵防范:发现已知漏洞,并在测试后修补)。

vmware-harden scan --target prod-vc --baseline vmsa-advisories
vmware-harden report                    # each affected component: its fix, and whether the CVE is in CISA KEV
vmware-harden report --format csv > vmsa.csv
判定含义
affected存在违规。证据会指出修复该问题的发行版。
fixed同一版本线,且版本达到或高于修复版本。
unknown按节点列出原因:无法读取构建号、公告未列出的版本线或已超出支持期限的版本线、来源之间存在分歧的分支,或目录尚未收录的产品。绝不表示通过。

结果干净,表示截至目录日期没有已知的未修复公告,而不是“没有漏洞”:之后发布的公告不会收录在目录中。构建号只在同一 major.minor 版本线内比较(7.0 U3 的构建号可能在数值上大于 8.0 GA 的构建号)。

目录的构建方式。 Broadcom 的公告页面设有机器人验证,无法通过脚本读取;Broadcom 也没有发布 CSAF 源。每条记录根据 NVD CVE API(CVE、CVSS、易受攻击的版本)、CISA KEV 源(在野外遭利用)和 Broadcom 构建号 KB 文章(修复版本)汇编,并通过引用该公告的独立来源确认每个修复版本。每项修复都会与 builds.yaml 中的构建号 KB 快照进行机械核验。首个目录(2026-10-19)收录了三条列入 KEV 的公告:VMSA-2025-0004(ESXi)、VMSA-2024-0019 和 VMSA-2026-0006(vCenter;其 ESX 部分尚未收录,结果为 unknown)。

可选刷新。 vmware-harden advisories update 会下载 CISA KEV 源(使用 --nvd 时还会下载 NVD 评分)至 ~/.vmware-harden/advisories-cache.json,目录加载器会将其叠加到目录中:只会新增 KEV 标记,只会补充缺失的 CVSS,绝不会从中获取修复构建号。它还会列出 KEV 中尚无目录内公告涵盖的 ESXi/vCenter CVE。KEV 获取失败时会以状态码 1 退出,并保留先前的缓存;无法读取的 NVD 记录会予以报告,但不会阻止 KEV 刷新。运行中的 MCP 服务会在下一次调用时加载新缓存。报告会显示上次检查 KEV 的时间。vmware-harden advisories show 会打印目录日期和上次刷新时间。

VCF 9.0 / 9.1 兼容性

现有基线(cis-vmware-esxi-8.0-subset、vsphere-scg-v8、dengbao-2.0-level3-vmware、pci-dss-4.0-vmware)可以成功扫描 VCF 9.0 / 9.1 集群——大多数规则针对的是在 8.x → 9.x 之间保持稳定的主机高级设置。cis-vmware-esxi-9.0-subset 和 vsphere-scg-v9-subset 目前以其 v8 父基线的 extends: 别名形式提供——规则相同,但使用 v9 名称的 ID 来执行扫描和报告。Broadcom 发布 v9 指南后,将向其中添加专用于 9.x 的规则。

vsphere-stig-v9-subset 是包含规则、与 STIG 对齐的基线:包含 12 项主机高级设置控制(账户锁定、密码策略、DCUI 访问、Shell/DCUI 超时、MOB、来宾 BPDU、远程 syslog),映射到官方开源 vSphere STIG 内容(MITRE InSpec / Cinc Auditor)。状态:实验性。 其检查会读取 ESXi 主机高级设置,这些设置由主机收集器通过 config.option PropertyCollector 流程获取。该流程已于 2026-08-13 在端到端测试中验证,测试对象为一台正在运行的独立 ESXi 8.0.3(build 24280767):12 个属性均有返回值,且值的格式符合规则预期(account_lock_failures=5、dcui_access='root'、password_quality_control='retry=3 min=disabled,disabled,disabled,7,7'、mob_enabled=False、syslog_remote_host=''),扫描发现了 3 项真实违规。仍未验证的内容,也是状态保持实验性的原因:ESXi 9.x(此基线实际面向的版本)以及任何由 vCenter 管理的多主机清单。请将 9.x 上的结果视为非权威结果。v1.9.0 的未确定机制本身不会处理获取失败:只有在没有收集器声明某个属性时(这是对词汇表的静态检查),规则才会被拒绝;而这些 STIG 属性已被声明,因此对应规则会运行。如果真实的 PropertyCollector 流程在实际硬件上返回空结果,该属性就会缺失,规则仍会匹配到零行。v1.10.0 会捕获这种情况——此类主机会被记录为单节点覆盖缺口(coverage.undetermined_node_checks),而不是判定为通过,因此未验证的收集器会显示为未评判的主机,而非生成一份干净的报告。仍未验证的是该流程是否返回了正确的值,而任何覆盖机制都无法告知这一点。基线的 status 字段会通过 list_baselines 和 describe_stig_content_sync 呈现,因此扫描会自行声明这一限制。这是一次内容同步,而非 API 封装——VCF Operations 9.1 Automated Configuration Compliance (ACC) / Security Posture Management (SPM) 由 UI 和计划任务驱动,不提供公开的合规性 REST API。如需持续的全机群强制执行和自动修复,请使用 VCF Operations SPM/ACC(UI);vmware-harden 是一个可通过 API 脚本控制、使用 DuckDB 持久化、支持跨目标的即时扫描器。请参阅 references/stig-content-sync.md,并使用 vmware-harden stig controls 检查目录。

Broadcom 官方参考资料

自定义基线

vmware-harden baseline validate ./my-strict.yaml
vmware-harden baseline import ./my-strict.yaml --name my-strict-cis
vmware-harden scan --target <vc> --baseline my-strict-cis

YAML 支持通过 extends: 继承内置基线。请参阅 skills/vmware-harden/references/cli-reference.md。

MCP 服务

vmware-harden mcp  # stdio MCP server (legacy alias: vmware-harden-mcp)

使用 examples/mcp-configs/*.json 中的任一配置文件配置 MCP 客户端。提供 8 个只读工具:list_baselines、get_baseline_rules、list_stig_controls、describe_stig_content_sync、list_violations、get_remediation、list_drift_events、scan_target。

架构

  • Estate Digital Twin — 位于 ~/.vmware-harden/twin.duckdb 的 DuckDB 单文件。通过所有节点 ID 的目标前缀支持多目标安全操作。
  • Collectors — 延迟导入同级 vmware-* 技能(无需进程启动开销)。所有扫描均为只读;写入操作延后至 vmware-pilot。
  • Baseline schema — Pydantic v2,严格模式(extra="forbid"),支持 extends: 继承和用户目录覆盖。
  • Drift — 纯差异函数,支持可选持久化;每次扫描后自动运行。
  • Advisor — 由 LLM 驱动的 Suggestion 生成;使用带提示词缓存的 Anthropic provider;在测试环境或无 API 密钥的环境中回退到模拟实现。
  • Audit — 每个 MCP 工具都由 vmware-policy 系列的 @vmware_tool 封装。
  • Web — FastAPI + Jinja2 + Tailwind/HTMX/ECharts CDN。

实验室回归

export VMWARE_HARDEN_LAB_TARGET=<your-vc>
pytest tests/eval/regression -v -m lab

系列

  • vmware-aiops — 主机清单 + 运维(由 harden 的 HostCollector 使用)
  • vmware-monitor — 只读对应项
  • vmware-storage — 数据存储清单
  • vmware-nsx-security — DFW 清单
  • vmware-pilot — 执行修复(涉及写入;不在 harden 范围内)
  • vmware-policy — @vmware_tool 审计装饰器

验收标准(v1.5.18 GA)

  • 221 项测试通过
  • Bandit:所有严重级别均为 0 个问题
  • 全部 8 个 MCP 工具均通过审计
  • SKILL.md ≤ 3000 字,符合系列约定
  • SECURITY.md 包含 6 个要素 + Broadcom 免责声明
  • 9 个内置基线(7 个含规则集合中的 99 条规则 + 2 个 v9 别名)
  • 提供用于环境诊断的 vmware-harden doctor
  • vmware-* 系列的 GA 成员(版本与 1.5.28 对齐)

参考资料

  • 系列 CLAUDE.md:单体仓库根目录下的 CLAUDE.md

远程访问(HTTPS)和限制工具

默认情况下,vmware-harden mcp 通过 stdio 与一个本地客户端通信,并提供所有工具。以下两个选项可以改变这一行为 (vmware-policy ≥ 1.21.0)。

通过 HTTPS 提供服务,让其他机器上的客户端也能连接。每个调用方都需要一个 bearer token:

vmware-audit token create alice          # prints the token once; give it to alice
vmware-audit token list                  # names only
vmware-audit token revoke alice          # refused from its next request, no restart
vmware-harden mcp --transport https --host 0.0.0.0 --port 8443 \
    --cert /etc/vmware-mcp/server.pem --key /etc/vmware-mcp/server-key.pem \
    --public-name mcp.example.com

连接客户端(此处以 Claude Code 为例;任何支持 streamable HTTP 和自定义标头的 MCP 客户端均可):

claude mcp add --transport http vmware-harden https://mcp.example.com:8443/mcp \
    --header "Authorization: Bearer $VMWARE_MCP_TOKEN"
{
  "mcpServers": {
    "vmware-harden": {
      "type": "http",
      "url": "https://mcp.example.com:8443/mcp",
      "headers": { "Authorization": "Bearer ${VMWARE_MCP_TOKEN}" }
    }
  }
}
  • 如果没有令牌,服务将无法启动;它会拒绝 --public-name 之外的 Host/Origin 值,并在绑定端口前检查未经身份验证的请求是否会收到 401。请使用客户端信任的证书,且证书适用于这些名称。
  • 如果在同一台机器上使用 TLS 终止反向代理,请使用 --transport http --host 127.0.0.1 --public-name mcp.example.com,并透传 Authorization 标头。
  • 如果负载均衡器或网关位于另一台机器上,请保留 --transport https(自签名证书也可以),在 --public-name 中列出负载均衡器发送的 Host 主机名,并让它转发 Authorization。其健康探测可以使用 GET /healthz,该请求不需要令牌,且只返回 {"status": "ok"}(vmware-policy ≥ 1.23.0)。
  • 每个请求都发送 traceparent 或 X-Request-ID,以便将其记录在审计行中;随后使用 vmware-audit log --correlation-id ID 即可找到一个平台请求所涉及的调用。
  • 审计日志会将每个调用方记录为 token:<name>。指定不同目标的调用会并行运行;未指定目标的调用则逐个运行,因此多人共用一台服务器时,请指定目标。
  • 所有能够访问此端点的人都会使用此服务器的账户执行操作。 令牌用于识别调用方;它们不会授予任何平台权限。请为每个权限级别运行一个端点。
  • 多人或多种角色共用一个端点: 运行一次 vmware-audit roles enable,然后为每个令牌指定一个角色(例如 vmware-audit token create NAME --role reader,或在 roles.yaml 中指定角色及其工具和目标;vmware-policy ≥ 1.24.0)。角色会限制令牌在此端点上可以调用的工具;其权限不会超过账户本身的权限。对于限制目标的角色,scan_target 的目标会根据 vmware-aiops 的配置进行检查;数据存储和 DFW 收集器会在 vmware-storage 和 vmware-nsx-security 的配置中查找同名目标,因此这三个配置中的名称必须指向同一个系统。请参阅 vmware-policy 的 README 中的“网络调用方的角色”。

**限制工具:**此服务的所有工具均为只读,因此 --expose read 在这里不会改变任何内容;该选项是为具备写入能力的技能提供的。最小权限取决于服务器使用的账户。

详情:skills/vmware-harden/references/setup-guide.md(“通过 HTTPS 提供 MCP 服务”“限制提供的工具”)。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。